DASCTF July X CBCTF 4th re wp
@TOC
这两个题在当时都没有做出来
shellcode
一看到附件是很多文件的题我就头大,包括上次那个省赛四叶草的内核题,无从下手,这次,我由于对web知识缺乏,没有一眼看出来part1是一个服务器,导致很多时间浪费在这上面,再加上这还是个go的服务器…..碰巧那天ida7.6的服务器还坏了
第一个难关:识别part1是一个golang的服务器
主要的代码还是在part3上,当时我也逆了这个,没有想到他把检测flag的逻辑放在了返回函数上,,我这也太粗心了吧,啥函数都看了,既然没有注意到这个艹
原封不动的rc4,key也给了,密文也给了…
1 | #include <inttypes.h> |
replace
lua语言 我第二次接触,不过这种类型的题是第一次接触,很有价值
参考链接
b站有详细的讲解(28分钟开始)
https://www.bilibili.com/video/BV1Zh411q7cX
lua 语言的解释
https://blog.csdn.net/initphp/article/details/82703846
lua语言源码
http://www.lua.org/
解题步骤
还原lua语言
1查找字符串发现不能交叉引用,继续查找lua的字符串
2根据字符串查找可以找到lua语言的版本(5.3)
\x1BLuaS 是lua语言文件头的特征(S的ascii是53代表5.3版本)
在此进行交叉引用 找到lua的起始位置
3用idapython dump下来
1 | start=0x46aa90 |
4用luadec还原出lua语言
1 | luadec.exe -f 0 dump.lua |
分析lua语言
通过大致的分析,可以看出此加密算法为rc4,密钥和密文均已知,在rc4的前面还有两个函数
这两个函数是通过上面的enclib加载的,只需在ida里搜索enclib 就可以找到这两个函数
一个是sub_4290d0 另一个是sub_4291100
分析即可得出这是一个base64换表操作
最后一个问题,就是这个题目为什么是叫replace,这个已经暗示我们其中可能有hook或者一些简单的替换操作
在rc4的密钥“RC4KEY”上下断点,就会发现密钥变成了good