首页
社区
课程
招聘
[原创]网鼎杯第一场预选 babyheap
发表于: 2018-8-21 00:16 18225

[原创]网鼎杯第一场预选 babyheap

2018-8-21 00:16
18225

参加第一场,侥幸做出两道pwn和签到就进了前50。。貌似自己是前五十做题数量最少的。。时间不够就做出两道babyheap及GUESS。分数全靠babyheap来的。。


程序除了没开启pie其他保护都已开启。


很全面的菜单题。有create,edit,show,free功能。

create功能,能创建10个大小为0x30的堆块。并能进行写入。无漏洞点。

edit功能。每次edit会使dword_6020B0值+1.当dword_6020B0值为3时,不能进行edit。作用是限制只能进行三次edit。无漏洞点。

show功能,输出堆块内容。用于信息泄露

free功能。free功能存在明显的UAF漏洞,悬挂指针未请空。free功能无限制,可以任意次数的free。

程序存在UAF漏洞,难题在于如何通过10次0x30大小的堆块创建及三次的edit完成内存的写入及信息的泄露。
这里先考虑如何完成内存写的问题。malloc的大小被固定,于是fastbin attack不可行。
再考虑unlink。程序未开启PIE,且存在edit功能,若我们能实现unlink,就可以写入保存堆块的地址,实现任意地址写。
但是fast chunk不存在unlink,我们需要free两个small chunk。这里我们可以通过在堆块的特定部分写入0x31实现fastbin attack写入下一个堆块头。使三个0x30chunk组成一个0x91的chunk,free掉。就可以实现unlink。unlink后还要突破edit次数为3的限制。下一部分仔细说。这里总结思路。
首先通过fastbin泄露堆的地址。通过堆的地址及UAF漏洞实现fastbin attack,修改特定堆块的size为0x91。
最终实现0x91 fd bk。。。。。。0x90 0x90
free下面的堆块实现unlink,此时就可以向保存堆块的数组写入。
因为在上面构造过程会使用掉edit的次数。所以我们需要突破edit的限制。即修改dword_6020B0值不为3.
之后就可以向free_hook写入system。free掉bin/sh。完成利用。

a=malloc(0x20)
b=malloc(0x20)
c=malloc(0x20)//防止和top chunk合并
free(b)
free(a)//先free a会导致最低位为0x0.输出不出来
show(b)//泄露出heap的地址。

a=create(0x20,p64(0x31)3)
b=create(0x20)
c=create(0x20)
free(b)
edit(b,&a+0x10)
d=create(0x20)
e=create(0x20)
就可以覆盖c的堆块头。这里消耗两次edit制造两次fastbin attack。
构造过程如下
create(1,p64(0x31)3+chr(0x31))
create(2,’/bin/sh’)
create(3,’’)
create(4,p64(0x31)*3)
create(5,’’)
create(6,’’)
create(7,’’)
先创造7个堆块


free 3和2进行堆地址泄露



通过两次edit和两次create实现如图构造。已使用10次create及2次edit


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-1-28 14:35 被admin编辑 ,原因:
上传的附件:
收藏
免费 3
支持
分享
最新回复 (24)
雪    币: 226
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
师傅tql
2018-8-21 09:45
0
雪    币: 5
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
2018-8-21 09:50
0
雪    币: 3567
活跃值: (467)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4
2018-8-21 09:58
0
雪    币: 97
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
writeup都看不懂系列
2018-8-21 10:38
0
雪    币: 4811
活跃值: (886)
能力值: ( LV13,RANK:319 )
在线值:
发帖
回帖
粉丝
6
牛逼 
2018-8-21 10:48
0
雪    币: 315
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
大神,发一下guess的呗
2018-8-21 12:49
0
雪    币: 4
活跃值: (170)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
求大神所有的wp...pwn一道题多少分值啊
2018-8-21 14:08
0
雪    币: 3671
活跃值: (651)
能力值: ( LV15,RANK:379 )
在线值:
发帖
回帖
粉丝
9
Vuler 求大神所有的wp...pwn一道题多少分值啊
这道400.
2018-8-21 14:46
0
雪    币: 543
活跃值: (370)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
10
很详细 感谢大佬分享
2018-8-21 16:13
0
雪    币: 245
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
有个疑问,dele(2)以后,chunk2的/bin/sh就变成了0了,最后再次free(2),相当于system(2),但是参数已经变成零了啊,为什么能拿到shell ?
2018-8-21 21:58
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
12
sixty的梦想 这道400.
这个比赛老实做题不如py flag
2018-8-21 22:35
0
雪    币: 3671
活跃值: (651)
能力值: ( LV15,RANK:379 )
在线值:
发帖
回帖
粉丝
13
peekl 有个疑问,dele(2)以后,chunk2的/bin/sh就变成了0了,最后再次free(2),相当于system(2),但是参数已经变成零了啊,为什么能拿到shell ?
才发现。可以free5,6,7.。。这个比赛可能执行了system就给flag了。
2018-8-21 23:30
0
雪    币: 3671
活跃值: (651)
能力值: ( LV15,RANK:379 )
在线值:
发帖
回帖
粉丝
14
holing 这个比赛老实做题不如py flag
惊现holing大佬
2018-8-21 23:30
0
雪    币: 3671
活跃值: (651)
能力值: ( LV15,RANK:379 )
在线值:
发帖
回帖
粉丝
15
筠溪 大神,发一下guess的呗[em_3]
guess就三次泄露。ssp leak。查一下就会了
2018-8-21 23:31
0
雪    币: 245
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
sixty的梦想 才发现。可以free5,6,7.。。这个比赛可能执行了system就给flag了。
没听明白
2018-8-22 08:30
0
雪    币: 3402
活跃值: (1473)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
17
为啥图碎了这么多
2018-8-24 22:45
0
雪    币: 14793
活跃值: (17939)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
18
楼主看过beijing那道题么??逆向题,源码copy出来了,但是就是解不出结果。。。不知楼主可否帮个忙(私聊
2018-8-25 12:32
0
雪    币: 268
活跃值: (415)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
楼主后面有些步骤看不大懂,但我发现一个更简洁的方法,不需要突破edit的限制,只需要三次edit就能获得shell
2018-9-4 21:06
0
雪    币: 36
活跃值: (23)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
23
师傅,fastbin attack不可行是不是开了full relro啊,感觉跟堆大小固定没啥关系
2018-10-18 09:24
0
雪    币: 3671
活跃值: (651)
能力值: ( LV15,RANK:379 )
在线值:
发帖
回帖
粉丝
24
和full relro有关。但是如果大小不固定可以去直接改mallochook
2018-10-18 22:41
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
请问,为啥覆盖大小的时候是p32
2020-3-27 20:04
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册