-
-
[原创]Roarctf 2019 easy_pwn
-
发表于: 2020-6-27 20:53 8436
-
一个笔记系统,先添加然后才能编辑,在编辑的时候,如果输入的 size 比之前创建的时候大 10 的话,就会造成 off by one
先放一下 exp
希望把 chunk 放到 unsorted bin 中,然后通过 fd 指针来拿到 unsorted bin 的地址,从来获得 libc 的地址,但程序使用的是 colloc,他会把申请的内存块给清空,所以不能通过申请一个在 unsorted bin 范围内的 chunk,free 之后申请过来泄露地址,可以通过先申请几个,然后通过第 0 个的 off by one 把第 1 个的 size 给改掉,让他包含上第 2 个,然后把第一个 free 的时候,会把第 1 和 第 2 个一起放到 unsorted bin 中,然后申请回来第 1 个,这时候第二个的 fd 指针就指向了 unsorted bin 的地址
首先申请一些堆块
然后对第 0 个进行编辑 write(0, 0x58 + 0xa, 'a'* 0x58 + '\xe1') 通过 off by one 把第 1 个的 size 给改成 0xe1
这时候 free 掉第 1 个,会放到 unsorted bin 中,然后他的 fd、bk 会指向 unsorted bin 的地址
这时候我们去把第 1 个申请回来,因为是 colloc 所以会置 0,但是我们可以用第 2 个来获得 unsorted bin 的地址
这个地址是 unsorted bin 链表的头部,跟 main_arena 的偏移固定 0x58,同时 main_arena 跟 libc 的偏移可以通过工具计算出来 2d6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6T1j5i4y4Z5i4K6u0V1j5#2)9J5c8X3#2S2K9h3&6Q4y4h3k6S2M7X3g2F1j5g2)9#2k6X3!0X3k6Y4y4W2N6l9`.`.
然后再去申请 unsorted bin 中剩下的那块,这算第 5 个(第 2 个也指向他)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- 对某款智能手表的分析与攻击 14911
- [原创][车联网安全]使用STM32开发板实战汽车UDS诊断 17761
- [分享]binwalk路径穿越导致RCE(CVE-2022-4510) 10534
- [原创]Hack-A-Sat 2020预选赛 beckley 14071
- [原创]一个BLE智能手环的分析 32924