2026-02-18 05:50:25
xctf-filemanager(二次注入)解题步骤:
本题主要考察二次注入漏洞的利用,通过修改文件名,将空的扩展名注入进去,实现去除扩展名的目标,从而成功获得webshell文件,最后使用蚁剑连接,获得flag。
一、前期准备与目录扫描
难度评估:
官方难度系数:7
实际难度评估(根据解题过程):5
目录扫描:
使用目录扫描工具对目标网站进行扫描。
发现备份文件/
二、代码审计与漏洞分析
文件上传流程:
文件上传要求:文件的扩展名必须在允许的列表中(gif, jpg, png, zip, txt)。
SQL查询数据库,检查文件名和文件扩展名是否存在,若存在则上传失败。
SQL更新数据库,记录上传的文件信息。
关键函数:
basename():返回路径中的文件名,包括扩展名。
pathinfo():返回一个包含文件路径信息的数组,包括dirname(目录路径)、basename(文件名,包括扩展名)、extension(文件的扩展名)、filename(文件名,不包括扩展名)。
文件修改流程:
SQL查询数据库,检查文件名是否存在,若不存在则修改失败。
SQL更新数据库,提取newname的文件名去覆盖oldname。
文件重命名,扩展名不变,只更改文件名。
漏洞发现:
在文件上传时,通过构造特殊文件名(如',extension='),可以绕过扩展名检查,将恶意文件名存入数据库。
在文件修改时,由于数据库中的文件名存在转义字符,当再次查询时转义字符被去除,导致可以成功删除扩展名,实现二次注入。
三、漏洞利用与获得flag
上传恶意文件:
构造文件名',extension='.jpg,并上传一句话木马(如<?php eval($_POST["x"]); ?>)作为文件内容。
由于文件名中的特殊构造,该文件会被成功上传,并存储在数据库中,但文件名中的扩展名部分被绕过。
修改文件名:
将之前上传的恶意文件名(如',extension=')修改为1.jpg。
由于二次注入漏洞,数据库中的文件名在查询时被去除转义字符,导致扩展名被成功删除。
上传webshell:
再次上传一个名为1.jpg的文件,内容为一句话木马。
由于之前已经成功删除了扩展名限制,这次上传的文件会被当作PHP文件处理。
重命名文件:
将1.jpg重命名为1.php。
此时,由于文件名已经变为1.php,且文件内容为PHP代码(一句话木马),因此该文件已成为一个可执行的webshell。
使用蚁剑连接webshell:
下载并安装蚁剑(一款常用的webshell管理工具)。
使用蚁剑连接到目标网站的webshell(即1.php)。
通过蚁剑可以浏览网站文件、执行命令等操作。
找到flag:
在蚁剑中浏览网站文件,找到包含flag的文件或目录。
读取flag内容,获得最终答案:flag{bdda3c944a9e484eae50123afeeff56b}。
关键图片展示:
(以下图片展示了部分关键步骤和结果,由于markdown格式限制,图片以链接形式插入,但确保在markdown环境中能够正确预览显示)




通过以上步骤,我们成功利用了xctf-filemanager中的二次注入漏洞,获得了webshell,并最终找到了flag。