PWN学习笔记

时光总嘲笑我的痴心妄想 提交于 2020-03-10 23:46:26

久违的更一篇博客总结一点比较基础的PWN题的套路(用户态linux pwn),过一段时间可能会更windows pwn和kernel pwn,这次先总结套路,过一段时间可能会加上具体的例子解析。

 

ptmalloc利用:分两部分来总结,第一步利用堆漏洞利用,第二部分getshell

 

对漏洞利用:

  fastbins attack,fast bins特性:是一个单项链表,只有fd指针,最后一个chunk的fd指向null。并且在free掉之后,并不会修改下一块相邻的chunk的pre_size位,即不会发生free时合并。但当申请一块small bins大小或large bins大小,在unsorted bins查找之前,会遍历fast bins进行合并,并将合并后的chunk放入unsortedbins

 

  unlink :smallbins 过检查fd->bk=victim bk->fd=victim   large bins增加对fd_nextsize和bk_nextsize的检查。unsorted bins 则不存在检查

绕过方式有两种:一 如果存在一个全局变量,是题目进行存储malloc指针的数组,这时如果将fd改为 address-0x18 bk改为 address-0x10即可绕过检查。下一步触发unlink,将全局变量改为address -0x18,下一步进行编辑即可将全局数组的malloc指针改为任意你想要的地址。

举两种利用方式:无限写入HITCON CTF 2014 stkof。这样可以通过溢出直接修改下一个chunk的prevsize位和sizeinuse位,然后free掉下一个chunk触发unlink。

        没有堆溢出漏洞,但是有double free。此题目利用是先申请一块fast bins,之后将其释放。这个时候fastbins是不会修改后面的inuse 位和prevsize。此时如果再申请块大内存,触发fastbins合并,这时候会将其取下放入unsorted bins,可以实现对后一块内存的inuse 位进行修改,这个时候触发double free漏洞,将其再放入fast bins,这样再次申请相同大小的chunk会从fast bins上unlink就不会触发对下一个chunk的inuse位的修改,这样free掉下一块chunk,即可实现unlink。

  方法二:伪造chunk。如果有很多个可控的chunk 可以通过伪造chunk举例:lcttf2017 2ez4u   此题为large bins attack ,由于此题目的限制,会将申请出来的chunk 0x0~0x18所有的数据填充,因此如果要泄露libc地址的话只能通过large bins的bk_nextsize。但是fd_nextsize和bk_nextsize并不会指向main_arena。small bins会。于是通过使用伪造large bins申请。步骤:首先在堆上某一个位置放入要伪造的堆块的地址,来过从large bins unlink的时候的对fd和bk的检查。然后将已经释放到large bins的chunk的bk_nextsize指针修改成要伪造的chunk。之后将伪造chunk的fd_nextsize指针修改成可控的已经释放到large bins的chunk的地址,这样victim->fd_nextsize->bk_nextsize=victim。之后再伪造一块chunk,将此chunk的fd_nextsize改成伪造的chunk地址。这样可以通过unlink 时的检查,malloc伪造的chunk,实现对程序的控制。

 

 

第二部分:

  1.改写got表

  got表和plt表的区别:got表直接存储函数的地址,plt表指向一段代码,第一次调用时会执行动态加载,加载got表地址。第二次直接跳转got表执行。

  利用方式:直接将got表写成system去执行。比较常用的是改写itol()

  将free的got表改写成puts,再将某一块地址改写成got表的地址:一般是全局变量的值,这样调用free函数的时候就可以泄露libc的地址

 

  2.改写malloc_hook

  可以通过在malloc_hook附近申请一块chunk,或者是直接修改malloc_hook。比如2018babyheap,首先利用fast binsattack,将fd改写成0x41,之后申请进行unlink,将main_arena上对应的位置改成size,这样就会在main_arena上制造合适的chunk size,就可以申请chunk在main arena上,之后就可以改写top_chunk为malloc_hook,之后就可以改写malloc hook

 

IO_FILE

之前记录在one note上,直接复制上了

 

过两天再总结一下ret_to_dl_resolve 以及比较经典的 house系列


 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!