我遵循https://dhavalkapil.com/blogs/Buffer-Overflow-Exploit/并编写了一个小应用程序,并在我的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 ~
$
我可以在execstack
中找到man ld
选项以及上面匹配的版本。
答案 0 :(得分:0)
看来Windows -z
/ gcc
仅不支持ld
选项(至少我的版本不支持)。我的猜测是,这里的选项实际上仅在Linux上有意义。这使我进入-z execstack
选项(而不是同名的Linux tool),该选项告诉ld
关闭程序上的数据执行保护(DEP)。这是通过ELF可执行文件中的标志完成的。
Windows DEP policy由操作系统处理。您可以像这样在Windows 10上为单个程序管理它:
或者您可以通过CMD使用bcdedit
来全局打开/关闭DEP,但这是一个坏主意。引用该文章:
重要 DEP是一种高效的安全功能,除非您别无选择,否则不应禁用它。