首页
社区
课程
招聘
[原创]看雪.京东 2018CTF 第三题 PWN_wow
发表于: 2018-6-20 23:21 4661

[原创]看雪.京东 2018CTF 第三题 PWN_wow

2018-6-20 23:21
4661

在函数test()里面使用sys_ptrace系统调用进行反调试。

只需要在welcome()函数中patch掉test()函数的调用即可清除反调试。

在0x400838处,使用sys_mprotect(0x400000, 0x1000, 7)将一段代码段内存修改为可读、可写、可执行。在0x400854处使用sys_read(0, szCh, 6)读6个字符,保存到szCh。在L1_64处的循环,使用读入第一个字符对0x40087F处的内存进行异或。

读入的字符是什么,这个不太好判断,试了几个字符后,发现0x00400886处有三个e,就用e试了一下,正好出现了合理的汇编代码。

看出第一个字符后,后面的五个字符就好判断了。可以发现一个规律,每段内存被异或后,其第一条指令为lea rax, [rax+rcx],从而第一个字节为0x48。利用这个规律,可以找出后面的五个字符。最后这六个字符为evXnaK。六个字符正确后,程序会输出wow!\n

在0x400A48处读入0x1a个字符到rsp处,然后使用读入的字符作为printf的第一个参数,此处有格式化字符串漏洞。利用这个漏洞可以泄露出栈地址、libc的基地址、canary。使用的格式化字符串为'%1$p %13$p %8$s\x00' + p64(0x601028),其中0x601028为got表中setbuf函数的地址。

0x400A70处的sys_readrsp-20h读入0x200个字节,用于覆盖main函数的返回地址,劫持执行流程。

覆盖用到的返回地址由one_gadget获取。


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

最后于 2018-6-20 23:46 被iweizime编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 3959
活跃值: (764)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
学习了~
2018-6-22 15:42
0
雪    币: 783
活跃值: (1121)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
3
是真的牛逼.
2018-6-22 21:55
0
雪    币: 29243
活跃值: (7764)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
4
看来ptrace之后, 使用one_gadget之前得先调用sigprocmask啊
最后于 2018-6-22 22:55 被风间仁编辑 ,原因:
2018-6-22 22:53
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2018-6-22 22:58
0
雪    币: 794
活跃值: (986)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
厉害了哦!
2018-6-23 00:36
0
雪    币: 136
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
大牛,膜拜
2018-6-24 11:15
0
游客
登录 | 注册 方可回帖
返回
//