2025第五届长城杯网络安全大赛初赛 Web方向 WP
Web
文曲签学
长按Fn进入调试模式,输入#HELP可以查看帮助

输入#LIST可以查看列表,再输入#READ HINT获得提示

在公众号获得提示

双写../进行目录穿越,读取flag

EZ_upload
打开之后上传一个文件,得到源码

文件移动成功后执行命令 cd /tmp && tar -xvf ' . $filename.'&&pwd,即进入 /tmp/ 目录,解压上传的文件,然后显示当前路径
关键就是这一行代码,将文件按tar格式解压。我们写入木马到tar文件,然后想办法让其解压到/var/www/html即可
打开本地虚拟机,先创建一个符号链接,指向/var/www/html
1 | ln -s /var/www/html su |
然后往/var/www/html写入一句话木马,命名1.php
接着把符号链接su写入su1.tar
1 | tar -cvf su1.tar su |
然后再把木马写入su2.tar
1 | tar -cvf su2.tar su/1.php |

先上传su1.tar,再上传su2.tar,解压后木马就可以写到/var/www/html目录里面
然后访问1.php,没有报404,说明成功写入

蚁剑连接

根目录找到flllllll1111ag

SeRce
打开后看到题目源码
1 |
|
要先满足 serialize(unserialize($exp)) != $exp 才可以用 file_get_contents 读取文件。一开始exp还弄得很长,但其实很简单,输入个1就可以,1 并不是合法的序列化格式,unserialize("1") 返回 false 并且会触发一个警告,但是 PHP 的 serialize(false) 会返回字符串 "b:0;",和输入 "1" 不同,因此条件成立
然后filetoread写入文件路径,例如/etc/passwd,POST发送

后面尝试寻找flag找不到,想起来之前见过一个由file_get_contents到任意命令执行的漏洞,上网搜索一番,找到CVE-2024-2961,大概就是GNU C库glibc中iconv()函数的缓冲区溢出漏洞。漏洞会在将字符串转换为ISO-2022-CN-EXT字符集时,导致输出缓冲区最多溢出4字节,从而引发程序崩溃或覆盖内存
参考文章:从多个比赛引发的CVE-2024-2961漏洞学习思考-先知社区
这里用工具来做,地址:https://github.com/ambionics/cnext-exploits
工具下载到虚拟机后,要根据题目修改cnext-exploit.py代码,具体如下

然后执行命令,因为当前用户为www-data,权限很低,所以把文件写到/tmp目录下,/tmp 通常默认可读写,其他目录需确认权限
先读取根目录文件有什么
1 | python3 cnext-exploit.py https://eci-2ze1g7zvc6cw53q7usqk.cloudeci1.ichunqiu.com:80?exp=1 "ls / > /tmp/1.txt" |

直接读取flag发现无法读取,后面查看readflag发现是个程序,且当前用户具备执行权限,可以运行获取flag
1 | python3 cnext-exploit.py https://eci-2ze1g7zvc6cw53q7usqk.cloudeci1.ichunqiu.com:80?exp=1 "/readflag > /tmp/flag.txt" |

返回题目,修改POST读取/tmp/flag.txt即可

2025第五届长城杯网络安全大赛初赛 Web方向 WP
https://waynejoon.github.io/posts/ctf-2025changcheng-web-wp/