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

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

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

#在普通shell中:


#在GDB中:


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


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 4207
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以用cyclic pattern payload,确定一下eip是被payload里面具体什么地方的内容替换掉的
2018-11-3 02:04
0
雪    币: 2067
活跃值: (1767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
taxueyouhen 可以用cyclic pattern payload,确定一下eip是被payload里面具体什么地方的内容替换掉的
怎么使用
2018-11-3 11:34
0
雪    币: 60
活跃值: (494)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
4
因为gdb里面的环境变数什麽的跟外面运行的时候不一样,导致stack pointer在gdb和外部环境有差
要嘛用gdb attach的方式连过去(需要有个可以卡住的地方让你attach,像是任何需要手动输入的function)
要嘛不要跳到stack上,想办法把shellcode放到一个不会变动的位址(像是bss段上,需要一点更难的技巧)
要嘛用github上别人写好的script,把外部运行的stack address调成跟gdb里面一样(5c0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5k6h3I4D9L8h3q4F1i4K6u0r3k6X3W2^5k6h3&6$3i4K6t1&6
最后于 2018-11-3 12:55 被返無歸一编辑 ,原因:
2018-11-3 12:48
0
雪    币: 81
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
davidangle 怎么使用
这里有教程:06eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4q4I4i4K6g2X3x3K6j5&6z5e0t1I4z5e0S2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0R3H3x3K6t1&6y4U0t1%4
2018-11-3 14:23
0
雪    币: 81
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
taxueyouhen 可以用cyclic pattern payload,确定一下eip是被payload里面具体什么地方的内容替换掉的
多谢大佬,通过cyclic确认了偏移,和之前一样确定offset是516 bytes,但在普通shell下还是一样奔溃,无论用什么payload,查看core dump都是 " 0x0000000200000000 in ?? () "
2018-11-3 14:29
0
游客
登录 | 注册 方可回帖
返回