首页
社区
课程
招聘
[原创]CTF2019 Q1 第六题write up
发表于: 2019-3-18 00:03 3398

[原创]CTF2019 Q1 第六题write up

2019-3-18 00:03
3398

系统 : Windows xp
程序 : Repwn
要求 : 输入口令 (两次)
使用工具 : ida / peid / ctf在线工具-进制转换 / 在线DES加密解密

首先将程序拖入peid中查看下,程序提示:
MingWin32 - Dev C++ v4.x (h) *

使用插件进行算法识别,单击右下角=>=>插件=>Krypto ANALyzer,提示发现算法常数:

看来涉及到了对称加密算法des。这里,直接用ida载入程序,然后按下Shift + F12,发现关键字符串:
.rdata:0040737C 00000021 C Key_Is_Wrong,Please_Input_Again!
双击定位具体地址:

双击数据交叉参考定位到关键代码,按下F5查看伪c代码:

由此函数可知程序列出了一个方程组,我们假设408020处字节数据为e1,408024处字节数据e2,依次类推,则:

最终,解得:

可知flag首部字符为20101001

在关键流程中,有这样一个函数:

由此可知,Flag中部为X1Y0uN3tG00d

在主流程中我们可以发现:

在执行过函数sub_4012F0后,还执行了一个sub_401460之后,直接返回了result,之后也没什么特殊动作:

而函数sub_401460的流程十分之简单:

我们有理由相信,作者要开始点题了(RePwn)。此处,程序确认用户输入长度为24个字节后,开始将其拷贝入Dest指针指向的内存内,我们双击Dest查看函数栈视图:

我们输入的字符串长度为24个字节,从Dest起始处要覆盖掉函数返回地址也正好需要24(0x10+8)个字节。也就是说,作者在这里,强制引发了一个栈溢出漏洞

那么,我们的程序执行流程接下来应该跳向哪里呢?

我的方案是,直接在system这个关键的函数上右击=>Jump to xref

双击查看第三个函数,发现没有被ida识别为函数,我们在函数首部:

在0x00401BF0处直接右击=>Create Function就能使用F5看伪c代码:

那么暂定需要跳转的地址为401BF0,所以flag尾部的四个字符是HaCk

根据以上的信息,第一个Flag为20101001X1Y0uN3tG00dHaCk,直接运行程序输入试试:

第二个谜题和我们之前用peid侦测出的des算法,程序结构非常相似:

在算法开始运作前有初始化密钥的操作:

注意,程序开始将我们的字符串转换为了binary数组:

最后却将密文换成了int数组:

最后将其和硬编码数据对比:

程序用密钥XiyouNet加密了我们输入的八个字节的数据,将密文buffer转换成了int类型的数据。

那么将硬编码数据提取出来,将其再转换成buffer类型,就得到了真正的密文,然后用用密钥XiyouNet解密就可以得到第二个Flag了。

按照以上逻辑,我们提取原始硬编码数据另存为y_txt.txt_o,编写如下python代码:

运行得到如下数据:

将数据拷贝至在线DES加密解密网站,填入密码和密文,解密得到的明文是Wel1C0me。(作者的拼写。。。emmMm。。。)


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

最后于 2019-3-18 09:37 被胡八一编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//