首页
社区
课程
招聘
[原创]CTF2019_Q1_拯救单身狗
发表于: 2019-3-25 13:17 7510

[原创]CTF2019_Q1_拯救单身狗

2019-3-25 13:17
7510

一血,happy
Analyze
比较显然的两个点:

两个edit函数只判断指针是否存在,没有判断输入的int范围:
(为了符合理解,我把one和two rename交换了一下)

edit_singledog()不存在\x00截断,导致很容易leak

注意到标准错误stderr在两个数组上方,可以通过leak IO_FILE的 _IO_read_ptr来leak libc
因为two的结构体:struct{str *partner name; str own name;}
而后只需要在one中构造一个singledog的name为p64(malloc_hook_addr)
在 edit_luckydog() 时就可以利用数组溢出,在edit partner name时即会改写malloc_hook
将其改为one_gadget_addr,在再次create一次便可get shell
还有一点,这里libc版本未知,我是通过首先远程leak出一个 _IO_read_ptr ,而后改变本地libc版本,找到相同末位偏移的libc版本(2.27)


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

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回