作为计算机设计课程的一项任务,我的团队必须通过溢出缓冲区并使用我们找到的几个小工具来使用面向返回的编程来访问shell。
使用GDB,我们使用以下命令找到字符串“/ bin / sh”的位置:
(GDB) find &system, +9999999, "/bin/sh"
然后使用几个小工具我们可以将它加载到r0中,然后我们就可以跳进去了。
不幸的是,每次我们在访问终端之前遇到段故障。我们在这个上很丢失,可以使用你能给我们的任何帮助。你们中的任何人都知道造成这种情况的常见错误吗?
在我们浏览我们的小工具并进入系统之前,我们的堆栈看起来就像这样:
(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
答案 0 :(得分:0)
不确定你的主程序是什么样的,但看起来我之前有这个。崩溃可能是因为你跳跃/返回拇指子程序,至少Android 5.0的__libc_system()
功能是拇指。如果您的目标是拇指,则从文档ARM Procedure call standard(第17页第5.3节)中,您的返回目标地址必须为+1,因此0xb6ea3f6c <__libc_system>
应为0xb6ea3f6d