##这是一个简单的wp,我将介绍我下载之后的处理过程。
下载完之后在kali上用file函数看一下文件类型:
也可以用python的magic库进行查看(这是我借鉴别人的思路):
知道是XZ comressed data之后,需要进行解压,直接在windows下把文件名后缀加上.zip就可以进行解压。
这里我出了一点小问题,我是现在win解压之后再拖到kali下面,再解压一次才得到的源码
然后运行它得到:
二话不说,扔到ida进行分析:
首先先看一下这个代码:
这个是一个关键跳转,如果输入获取失败,haystack是一串数字,指定位置换成_dab,实际就是最后输出的bad字符串,601290保存的数值被替换成字母。
我们往前还有一段比较长的if语句,先不看它(我看不懂主要),然后前面有一个操作:
这里面A8~AB是一个数组,后面初始v4=0,然后haystack每一个byte都和6012A8进行异或运算。==这里有一个不理解的地方就是这个循环,为什么是一个&运算符?==我是看其他文章才知道这是一个循环8位操作。
**C 库函数 char getenv(const char name) 搜索 name 所指向的环境字符串,并返回相关的值给字符串
动态调试可以知道v3的值0xB11924E1,然后我们可以得到CTF的环境变量为:0x4ff2da0a,
ctf = 0xFEEBFEEB^0xB11924E1
print(hex(ctf))
>>0x4ff2da0a
这里面有一个问题是,为什么ASIS和CTF 的值都是0x4ff2da0a??
然后直接利用shell中的expert设置环境变量:
export ASIS="$(printf "\x0a\xda\xf2\x4f")"
export CTF="$(printf "\x0a\xda\xf2\x4f")"
然后获得flag
https://adworld.xctf.org.cn/media/task/attachments/e058394bb53e46a7a4a0f98f035c9416