首页
社区
课程
招聘
[原创]看雪6月 京东 2018CTF 第三题——misc画风一般的pwn
发表于: 2018-6-21 23:33 5116

[原创]看雪6月 京东 2018CTF 第三题——misc画风一般的pwn

2018-6-21 23:33
5116

总之这题很蛋疼。。。做起来很难受,没见过这种题。。可能是我题做得少?

首先进来看到main,输出完之后有这么一个常见混淆。。。

大概就是短call然后pop出当前地址,再+7,加完之后rax刚好是jmp rax的下一条指令,不细说,不知道的可以跟一下(nop掉0x400749处的反调试)

接着会先把代码段设为可写然后读6个字节。。。

所以这个单字节是不知道的,我们要猜。随便输的话解密失败明显出来乱七八糟的指令,跑一会就segfault了,所以不觉得这种乱指令能getshell。

那么怎么知道这个值是多少呢,当然要从0-255跑一遍,然后看哪个是不是乱指令。如何判断?在Pwntool中有个disasm,可以反汇编。然后如果有无法识别的指令会是(bad),所以,就把这些字节先用IDAPython给dump出来,然后解密,然后看谁没有(bad)(最后用的是这种方法),或者说谁的(bad)位置比较在后面(前面先用这个测试的),这基本可以过滤一堆了,最后需要人肉再从这十多个里面找到正确的。

是不是一股crypto和misc的破解xor的味道。。。

具体代码如下

然后这个方法其实不是最好的,最好的是这样的。。。(加上break条件限制)

然后就是慢慢撸,最后发现正确的key是0x65

解密之后发现又是一个类似的东西,只不过他会先把前面的代码xor加密掉(没啥意义,不知道干嘛的)

然后后面不是直接拿输入解密的,是把输入xor上前一个的key作为新的key,一共有好几段这样的代码,随便贴其中一个(都长得一样的好像)

然后解密用的是IDAPython,这个网上有教程,不说了。。

最后一段(解密漏洞代码)好像没有0FBh这个限制了,不知道为啥,好像没区别,不过这个限制有啥用啊。。。不懂。。。希望出题人来解释下。。。

最后解出来6个字节如下

所以这题其实是5分crypto,3分逆向,2分pwn(至少我花的时间差不多是这样,可能是我misc做的不熟)

漏洞其实很简单了。。。

首先"%13$lxAAA%8$sBB\x00" + p64(prog.got["puts"])可以leak出canary和libc,具体这个位置怎么确定的调一下就知道了。。。

然后栈溢出,可以覆盖到返回地址,具体payload如下

p64(canary)*(0x68/8) + p64(pop_rdi_ret) + p64(binsh_addr) + p64(system_addr) + p64(0)

因为懒得确定canary的位置直接padding全放成canary了,然后ROP,/bin/sh是在libc里面就有的字符串,pop rdi是在源程序里面找的,返回地址设成了0,这个倒是无所谓。0x68怎么确定的也是调一下就好了。。

完整exp


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-6-22 09:10 被holing编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
解密的脚本import pwn是在IDA里运行的还是??找了半天都没找到IDA安装pwntools的方法。。。
2018-9-13 21:21
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
3
pureGavin 解密的脚本import pwn是在IDA里运行的还是??找了半天都没找到IDA安装pwntools的方法。。。
分开运行的
2018-9-19 17:42
0
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
holing 分开运行的
这几天一直在研究你的脚本(为啥你的脚本就比别人的短),你说的分开实在Linux下运行还是在Windows下运行(知道是Linux,只是想确认一下),还有就是第一个leak出canary和libc的那段"%13$lxAAA%8$sBB\x00",这是什么东西??(我指的是那段除了AAA和BB以外的乱码)还有就是这东西咋生成的??使用mataspolit么(不知道拼的对不对,就是KALI里面的那个)
2018-9-19 20:47
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
5
pureGavin 这几天一直在研究你的脚本(为啥你的脚本就比别人的短),你说的分开实在Linux下运行还是在Windows下运行(知道是Linux,只是想确认一下),还有就是第一个leak出canary和libc的那段 ...
不知道,没怎么看别人的
idapy是windows,pwntools是linux
那个是格式化字符串漏洞,自己去学一下
自己调试得出,没用msf
2018-9-19 21:09
0
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
6
holing 不知道,没怎么看别人的 idapy是windows,pwntools是linux 那个是格式化字符串漏洞,自己去学一下 自己调试得出,没用msf
多谢
2018-9-19 21:22
0
雪    币: 14517
活跃值: (17538)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
7
请问LZ,格式化字符串漏洞的获取参数(就是文中exp的"%13$lxAAA%8$sBB\x00"这一段)是不是有什么参数的固定位置??重看格式化的时候发现很多参数位置不一样,不只是这道题,其他题的WP中获取参数的位置也有很多不一样,所以困惑
2019-2-25 21:22
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
8
pureGavin 请问LZ,格式化字符串漏洞的获取参数(就是文中exp的"%13$lxAAA%8$sBB\x00"这一段)是不是有什么参数的固定位置??重看格式化的时候发现很多参数位置不一样,不只是 ...
调试
2019-3-8 01:33
0
游客
登录 | 注册 方可回帖
返回
//