首页
社区
课程
招聘
[原创]看雪.京东 2018CTF 第六题 PWN-noheap的完全堆溢出解法
发表于: 2018-6-29 16:42 3612

[原创]看雪.京东 2018CTF 第六题 PWN-noheap的完全堆溢出解法

2018-6-29 16:42
3612

发现已经有人发过这个了https://bbs.pediy.com/thread-229326.htm,麻烦斑竹删掉我的。。。抱歉

 

今天吃饭的时候看了下公众号推送的解析,里面出题人说道

全题只能leak一次,然后就会关闭输出。这是为了屏蔽有可能的堆利用方法。

 

觉得有些不对劲,因为输出关闭并不影响堆利用啊,leak完了继续打就是了,只不过没有回显。

 

然后睡午觉时忽然想起还是可以走house of orange的。

 

我比赛时的解法见https://bbs.pediy.com/thread-229138.htm

 

当时我觉得堆和bss同时溢出比较麻烦,很容易覆盖到vmcode,造fake file可能会有麻烦,所以放弃了house of orange。

 

但今天一想感觉偏移0x70的几个成员变量似乎不是很重要,不影响利用。尝试走了一下,发现几个和利用有关的变量仍然可以控制,所以还是可以的。

 

总体思路就是先造leak,然后走size-1的溢出去盲着覆盖Unsorted bin,注意覆盖时在vmcode对应偏移处复制一份原来的16个byte,整体还是常规的house of orange。

 

于是造出来的fake file如下所示。

$13 = {
  file = {
    _flags = 0x0,
    _IO_read_ptr = 0x61,
    _IO_read_end = 0x7ffff7dd1bc8,
    _IO_read_base = 0x7ffff7dd1bc8,
    _IO_write_base = 0x0,
    _IO_write_ptr = 0x1,
    _IO_write_end = 0x0,
    _IO_buf_base = 0x7ffff7b99d57, 
    _IO_buf_end = 0x0,
    _IO_save_base = 0x0,
    _IO_backup_base = 0x0,
    _IO_save_end = 0x0,
    _markers = 0x0,
    _chain = 0x0,
    _fileno = 0x1130301,
    _flags2 = 0x106040f,
    _old_offset = 0x4000161302011409,
    _cur_column = 0x0,
    _vtable_offset = 0x0,
    _shortbuf = {0x0},
    _lock = 0x0,
    _offset = 0x0,
    _codecvt = 0x0,
    _wide_data = 0x0,
    _freeres_list = 0x0,
    _freeres_buf = 0x0,
    __pad5 = 0x0,
    _mode = 0x0,
    _unused2 = {0x0 <repeats 20 times>}
  },
  vtable = 0x7ffff7dd0798
}

可以看到vmcode落在了伪造出的fake file的_fileno _flags2 _old_offset几个成员上,对利用流程没有影响。

 

故此题可以完全无视那个vm,走house of orange的套路完成攻击。

 

感慨自己真是越来越迟钝了,比赛时这么简单的方法都没想到,跑去逆vm干啥……真是越活越倒退了。


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

最后于 2018-6-29 17:19 被diycode编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
2
并不,我感觉这个方法比VM麻烦的多。。。
2018-6-29 20:36
0
雪    币: 4997
活跃值: (3115)
能力值: ( LV15,RANK:550 )
在线值:
发帖
回帖
粉丝
3
holing 并不,我感觉这个方法比VM麻烦的多。。。
我觉得比逆向快啊,泄露完就是模板化操作,编辑器里设好snippet,一个tab就行了吧。
2018-6-29 20:55
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
4
diycode 我觉得比逆向快啊,泄露完就是模板化操作,编辑器里设好snippet,一个tab就行了吧。
VM一个payload就好了吧,这个还要构造unsorted bin
2018-6-30 01:05
0
雪    币: 13713
活跃值: (2851)
能力值: ( LV15,RANK:2663 )
在线值:
发帖
回帖
粉丝
5
这个题弄失败了。本来堆的利用的都考虑了,可能是后来调整改了什么或是考虑不周吧,又想这样,又想那样,功能多了点,洞大了点。
2018-6-30 13:36
0
雪    币: 4997
活跃值: (3115)
能力值: ( LV15,RANK:550 )
在线值:
发帖
回帖
粉丝
6
holing VM一个payload就好了吧,这个还要构造unsorted bin
vm是要手动逆向的,但是Unsorted bin构造是固定的啊…
2018-6-30 14:45
0
游客
登录 | 注册 方可回帖
返回
//