-
-
[原创]CTF2019_Q1_拯救单身狗
-
发表于: 2019-3-25 13:17 7338
-
一血,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)
[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!
赞赏
看原图
赞赏
雪币:
留言: