squarectf 回顾+复现

一、Be The Admin

1.回顾

这题最开始点进去发现后缀有?id=1第一反应是sql注入,尝试一下手工注入发现报错,其中的报错信息

看到是java环境,就去搜索了相关的赛题,然后巨多巨麻烦,囫囵吞枣的试了半天也没成,但是一看这题只有75分,并且还写的是十分基础的题,给我整不会了,最后也没做出来。之后开了题解才发现原来这么简单。

2.复现

漏洞复现很简单,就是先抓包发现他设置了一个cookie,用base64解码发现是

CTF Participant

所以就把CTF Participant改成admin编码一下发过去就成了…

还有一个坑是需要把等号删去,不然还是成不了,奇怪…

出现flag

二、Just Go Around

芜湖,第一个自己完成的xxe+ssrf,解出来的一刻好激动

这个由于当时卡在了75分的题上面,感觉75分的我都做不出来,这个250的当时看了一眼是xxe就直接没看,现在准备看一下题解看看怎么做,结果打开题解发现说了又好像没说,如说。

让chatgpt翻译一下

翻译完了感觉确实是没说,看题解之前已经可以用xxe了,最主要的后面的部分没有,没办法只能自己试了,但是至少给了思路是es的后端。

先正常思路找到post,然后随便输入一下并且上传,抓包,发现是把上传的数据转成xml进行上传,如下

所以我们就可以简单改造一下就可以实现xxe注入其中SYSTEM后面的部分就可以注入我们自己的代码实现功能。

xxe不止有读取文件,还能访问内网,而访问内网就是这题的关键步骤,而这两种方式的利用方法如下:

  • 读取文件,利用file协议,具体用法为 file://你要读取的文件目录

例如,想读取根目录下面的/flag文件,本题情况下就可以使用如下代码

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ANY [<!ENTITY foo SYSTEM "file:///flag">]>
<post author="CTF" id="0" title="122">
<message>&foo;</message>
</post>

这样就可以读取/flag文件,但是本题不适用

  • 访问内网,就是用http协议,如下,就是本题所利用的方式
1
2
3
4
5
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE ANY [<!ENTITY foo SYSTEM "http://172.21.0.2:9200">]>
<post author="CTF" id="0" title="122">
<message>&foo;</message>
</post>

回到题目,我主要是参考了这篇博客,给了我很大启发并解出题目,如果没有这篇博客我是肯定解不出来的。

XXE漏洞攻击——几道CTF题_xxe ctf-CSDN博客

其中的xxe+ssrf部分。

继续解题,先访问一下/etc/passwd文件,如下,发现没有有用信息

然后我就是先访问了/根目录,如下

发现了justgoaround的题目文件,然后就是挨个访问,过程过于漫长并且无聊就不放了,终于,打开了一个似乎很有用的文件,如下

发现给出了访问es数据库的端口(后面证明这是es的默认端口),但也是一个进步,然后继续找,看一下上面的博客,访问一下/etc/hosts,发现了一个ip地址,疑似内网,直接进去

如果直接进上面的ip地址是错误的,然后只能试了,发现把3改成2有回显!如下

这就说明已经找到了es的地址,所以就直接搜索一下所有文档,flag就出了

flag{tHISiSapRIVATEpOSTdONTlOOK}

注:具体的搜索命令我是用的ChatGPT给出的,效果很不错,所以看样子之后的比赛ChatGPT和Google一样重要了。