xctf-filemanager(二次注入)

xctf-filemanager(二次注入)
最新回答
冷宫゛失宠妃

2026-02-18 05:50:25

xctf-filemanager(二次注入)解题步骤:

本题主要考察二次注入漏洞的利用,通过修改文件名,将空的扩展名注入进去,实现去除扩展名的目标,从而成功获得webshell文件,最后使用蚁剑连接,获得flag。

一、前期准备与目录扫描

  1. 难度评估:

    官方难度系数:7

    实际难度评估(根据解题过程):5

  2. 目录扫描:

    使用目录扫描工具对目标网站进行扫描。

    发现备份文件/

    www.tar.gz
    ,这可能包含网站的部分源码或配置信息,为后续分析提供线索。

二、代码审计与漏洞分析

  1. 文件上传流程:

    文件上传要求:文件的扩展名必须在允许的列表中(gif, jpg, png, zip, txt)。

    SQL查询数据库,检查文件名和文件扩展名是否存在,若存在则上传失败。

    SQL更新数据库,记录上传的文件信息。

  2. 关键函数:

    basename():返回路径中的文件名,包括扩展名。

    pathinfo():返回一个包含文件路径信息的数组,包括dirname(目录路径)、basename(文件名,包括扩展名)、extension(文件的扩展名)、filename(文件名,不包括扩展名)。

  3. 文件修改流程:

    SQL查询数据库,检查文件名是否存在,若不存在则修改失败。

    SQL更新数据库,提取newname的文件名去覆盖oldname。

    文件重命名,扩展名不变,只更改文件名。

  4. 漏洞发现:

    在文件上传时,通过构造特殊文件名(如',extension='),可以绕过扩展名检查,将恶意文件名存入数据库。

    在文件修改时,由于数据库中的文件名存在转义字符,当再次查询时转义字符被去除,导致可以成功删除扩展名,实现二次注入。

三、漏洞利用与获得flag

  1. 上传恶意文件:

    构造文件名',extension='.jpg,并上传一句话木马(如<?php eval($_POST["x"]); ?>)作为文件内容。

    由于文件名中的特殊构造,该文件会被成功上传,并存储在数据库中,但文件名中的扩展名部分被绕过。

  2. 修改文件名:

    将之前上传的恶意文件名(如',extension=')修改为1.jpg。

    由于二次注入漏洞,数据库中的文件名在查询时被去除转义字符,导致扩展名被成功删除。

  3. 上传webshell:

    再次上传一个名为1.jpg的文件,内容为一句话木马。

    由于之前已经成功删除了扩展名限制,这次上传的文件会被当作PHP文件处理。

  4. 重命名文件:

    将1.jpg重命名为1.php。

    此时,由于文件名已经变为1.php,且文件内容为PHP代码(一句话木马),因此该文件已成为一个可执行的webshell。

  5. 使用蚁剑连接webshell:

    下载并安装蚁剑(一款常用的webshell管理工具)。

    使用蚁剑连接到目标网站的webshell(即1.php)。

    通过蚁剑可以浏览网站文件、执行命令等操作。

  6. 找到flag:

    在蚁剑中浏览网站文件,找到包含flag的文件或目录。

    读取flag内容,获得最终答案:flag{bdda3c944a9e484eae50123afeeff56b}。

关键图片展示:

(以下图片展示了部分关键步骤和结果,由于markdown格式限制,图片以链接形式插入,但确保在markdown环境中能够正确预览显示)

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