XCTF国际联赛*CTF2023
WEB
jwt2struts
信息收集
此时根据页面回显You are now logged in as user. Try to become admin.和题目标题jwt此时我们可以猜测存在jwt攻击;此时我们先抓个包
此时果然发现了这个cookie我们将其放进jwt.io进行查看
将sub中的user改成admin在放进bp进行发包看看回显;此时得到一个JWT_key.php此时我们登入后台看看
此时获得源码
代码审计
1 |
|
此时我们注意到
1 | if ($_COOKIE["digest"] === md5($salt.$username.$password)) |
这个是不是很熟悉,是之前遇到过的hash长度攻击
hash长度攻击
此时我们看一下我们的已知条件;有Signature有data有length;此时我们直接hashpump一把梭
此时我们将\x全部替换成%
payload1
1 | root%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%b0%00%00%00%00%00%00%00hey |
此时就可以获得secret_key=sk-he00lctf3r
struts2的漏洞利用
此时我们访问/admiiiiiiiiiiin后台得到一个登入框;此时我们观察题目名称猜测与struts2的nday漏洞有关;这个时候就可以直接掏出我在打护网时收
集的漏洞检测工具进行查看;经过检测发现确实存在该漏洞
此时尝试命令执行并且来查看flag;这个flag真的不好找啊,它居然藏在了环境变量里头
flag{7r0m_jwt_t0_struts2}
ps
今天在b站看到了另外一解法,利用的是已经知道salt的长度和md5($salt.”adminroot”)=e6ccbf12de9d33ec27a5bcfb6a3293df进行一个salt的爆破从而得到salt然后在进一步的进行password的伪造使得if ($_COOKIE["digest"] === md5($salt.$username.$password))
salt的爆破
1 | import hashlib |
此时该段代码利用的是salt的长度和md5($salt."adminroot")=e6ccbf12de9d33ec27a5bcfb6a3293df
这个条件,借助字典来爆破得到salt的值
Cookie的伪造
1 | import hashlib |
接下来就是利用($_COOKIE["digest"] === md5($salt.$username.$password))
这个条件进行Cookie的伪造,此时因为password不等于root;所
以此时我令它等于hey;然后利用脚本伪造出cookie==md5($salt.$username.$password))
此时提交之后也是可以获得The secret_key is sk-he00lctf3r
MISC
snippingTools
Alice在参加某个CTF比赛,她成功的解出了一道题,拿到了flag。她很开心,迫不及待地想要向Bob分享她的喜悦。于是按下了快捷键Shift+Win+S使用了Windows 11的截图工具,截取了整个屏幕,并且保存为文件1.png。然后,考虑到比赛规则中规定flag需要保密,她使用了截图工具中的“裁剪”功能,将flag裁剪掉了一部分,然后将裁剪结果覆盖了原文件1.png并保存。最终,她将1.png发给了Bob。Bob马上就知道了她的整个flag,你知道是如何做到的吗?
此时我们根据题意收集到题目是要求我们恢复被windows截图工具截取之后原来的照片,此时我们通过谷歌搜素查到了这个是一个漏洞
并且此时给出了我们漏洞编号为CVE-2023-28303;这个时候我们进入github查看是否存在可以利用的脚本
拿到该利用工具之后我们直接一把梭就行了
flag{cve-2023-28303-windows-snipping-tools-is-not-secure-4E9019139D9A}
old language
AN ancient old language
拿到之后我们直接上谷歌识图看看
此时果然有,这是一种dovahkiin.字体;我们直接找对照表进行对照翻译即可
flag{GIKRVZY}