首页
社区
课程
招聘
[求助]为什么我的Linux栈溢出利用在GDB里能成功,但在普通shell坏境中却只是 "Segmentation fault (core dumped)" ?
2018-11-2 23:17 1555

[求助]为什么我的Linux栈溢出利用在GDB里能成功,但在普通shell坏境中却只是 "Segmentation fault (core dumped)" ?

2018-11-2 23:17
1555
shellcode功能是执行/bin/sh返回一个shell,可以确定EIP已经正确覆盖,并且覆盖上去的就是shellcode的起始地址,但却只能在gdb中利用成功,在普通shell中则是单纯的崩溃。
怀疑是GDB和普通shell的栈或者运行机制不一样?

#在普通shell中:


#在GDB中:


PS:系统为Ubuntu14.4 ,实验前已经关闭ASLR、Stack Cookie,以及设置了栈为可执行状态。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 4207
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
taxueyouhen 2018-11-3 02:04
2
0
可以用cyclic pattern payload,确定一下eip是被payload里面具体什么地方的内容替换掉的
雪    币: 2063
活跃值: (1752)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
陈林00007 2018-11-3 11:34
3
0
taxueyouhen 可以用cyclic pattern payload,确定一下eip是被payload里面具体什么地方的内容替换掉的
怎么使用
雪    币: 60
活跃值: (79)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
返無歸一 2018-11-3 12:48
4
0
因为gdb里面的环境变数什麽的跟外面运行的时候不一样,导致stack pointer在gdb和外部环境有差
要嘛用gdb attach的方式连过去(需要有个可以卡住的地方让你attach,像是任何需要手动输入的function)
要嘛不要跳到stack上,想办法把shellcode放到一个不会变动的位址(像是bss段上,需要一点更难的技巧)
要嘛用github上别人写好的script,把外部运行的stack address调成跟gdb里面一样(https://github.com/hellman/fixenv)
最后于 2018-11-3 12:55 被返無歸一编辑 ,原因:
雪    币: 81
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Greebees 2018-11-3 14:23
5
0
davidangle 怎么使用
这里有教程:https://blog.csdn.net/qq_36992198/article/details/80329627
雪    币: 81
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Greebees 2018-11-3 14:29
6
0
taxueyouhen 可以用cyclic pattern payload,确定一下eip是被payload里面具体什么地方的内容替换掉的
多谢大佬,通过cyclic确认了偏移,和之前一样确定offset是516 bytes,但在普通shell下还是一样奔溃,无论用什么payload,查看core dump都是 " 0x0000000200000000 in ?? () "
游客
登录 | 注册 方可回帖
返回