首页
社区
课程
招聘
[原创]Tinypad Seccon CTF 2016(House Of Einherjar)
发表于: 2018-4-18 17:19 6591

[原创]Tinypad Seccon CTF 2016(House Of Einherjar)

2018-4-18 17:19
6591

随着对how2heap的学习, 难度也是越来越大, 改革进入了深水区.

1.菜单

2. Add memo

3. Delete memo

4. Edit memo

5. Exit

1. checksec

    结论: Full RELRO代表我们不能复写got表.NX代表我们不能使用shellcode, Canary found代表我们不能使用栈溢出.说实话, 现在的CTF全国性质大赛使用栈溢出的题已经比较少了, 大部分都是PWN技能的高级应用.

2. 内存泄露

    通过观察发现, 程序定了一个tinypad的数组, 数组存放在0x6020140.Delete memo时程序只是将size置为0,将s对应的堆地址释放, 并没有将s本身置为NULL, 而程序就是通过判断s是否为空来进行显示对应的数组内容, 于是存在内存泄露.

result01

3.缓冲区

result02

    通过上图分析, 程序会将0x602040作为一个编辑的缓冲去, 输入Y之后才会将输入内容复制到s对应的堆块中去.

4.一个假设

    假如我们能够分配一个地址在0x602040附近, 那么我们就能通过分配足够的内存, 编辑tinypad数组的内容, 修改s指向的堆块, 实现任意地址读写.

1. Off By One

Off By One经常和Hous Of Attack之类的技巧组合在一起.

2. House Of Einherjar

该堆利用技术可以强制使得malloc返回一个几乎任意地址的chunk.其主要在于滥用free中的后巷合并操作.

    结论: 二者配合使用, 可以发挥无穷威力.

栗子

对应的利用程序

result03

result04

    结论: 通过修改对应的size, 我们几乎可以实现任意地址读写. 这个利用脚本将unsorted bin中的fd, bk指向我们fake chunk所在地址.

1.Off By One

result05

2. 逻辑漏洞

result06

结论: 可以显示释放后的地址的内容, 泄露堆地址.

1. 泄露
原理: 利用unsorted bin中的空闲块是双链表的特性.

result07

2.House Of Einherjar

result07

3.攻击

    将main函数的返回值地址修改为one_gadget地址. 由于程序是现将sizes先存放入数组,后读取内容, 我们可以控制index1指向的地址.

其他思路也是可以修改top chunk,来做到这一点的, 无奈水平有限, 以后再分析


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-4-18 17:23 被baolongshou编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//