我遵循这个Buffer Overflow Exploit tutorial并在我的mingw32.exe
中编写了一个用gcc编译的小应用程序。然而,当我这样做时,我得到了以下错误:
Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ gcc vuln.c -o vuln -fno-stack-protector -m32 -z execstack
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: unrecognized option '-z'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: use the --help option for usage information
collect2.exe: error: ld returned 1 exit status
Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ gcc -c vuln.c -o vuln -fno-stack-protector -m32 -z execstack
Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ ld -z execstack vuln.o -o vuln
C:\msys32\mingw32\bin\ld.exe: unrecognized option '-z'
C:\msys32\mingw32\bin\ld.exe: use the --help option for usage information
Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ ld -v
GNU ld (GNU Binutils) 2.30
Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe -v
GNU ld (GNU Binutils) 2.30
Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$
我可以在man ld
中找到execstack
选项和上面匹配的版本。
1条答案
按热度按时间tpxzln5u1#
Windows版本的
ld
不支持-z
选项。请检查ld --help
。对于Cygwin,它不应该列出在Linux系统上运行相同命令时出现的-z
选项。我相信这是因为这里的选项实际上只在Linux上有意义。-z execstack
选项(不是Linux的tool)告诉Linux版本的ld
关闭可执行文件的数据执行保护(DEP)。这是通过ELF中的标志来完成的。另一方面,Windows DEP policy现在已经内置在操作系统中。下面是一些自己管理的选项:
1.对于Windows 10上的单个程序:
1.在“开始”功能表中寻找“* 调整Windows* 的外观和效能”。(您可以输入“效能”,它就会出现)。这会显示一个新的对话方块。
1.转到第三个选项卡“数据执行保护”。
1.在此处添加/删除例外
1.根据操作系统的DEP设置调用WinAPI的
SetProcessDEPPolicy
。但是,这必须在程序本身中完成。1.使用
bcdedit
via CMD全局打开/关闭DEP,但这是一个坏主意。引用文章:重要DEP是一项非常有效的安全功能,除非别无选择,否则不应禁用。
简而言之,当遵循漏洞利用练习教程时,通常这些都是在Linux机器上完成的。在适当的操作系统上运行它,或者为了额外的安全,在VM上运行它。同样的漏洞利用不能指望以同样的方式在Windows上运行。
有关Windows DEP策略的详细信息:请参阅How to make my program DEP-compatible?