通过竞态条件上传Web Shell(简易方法)
方法特点
本攻击使用普通Burp Intruder而非Turbo Intruder执行,特别适合不熟悉Turbo Intruder操作的用户,能更简单理解攻击原理。
什么是竞态条件?
需要具备操作系统基础知识才能理解竞态条件。建议观看下方视频了解该漏洞的具体表现:
[竞态条件漏洞讲解视频]
漏洞分析
查看提示中的PHP代码可见漏洞所在:
<?php
$target_dir = "avatars/";
$target_file = $target_dir . $_FILES["avatar"]["name"];// 临时移动文件
move_uploaded_file($_FILES["avatar"]["tmp_name"], $target_file);if (checkViruses($target_file) && checkFileType($target_file)) {echo "The file ". htmlspecialchars( $target_file). " has been uploaded.";
} else {unlink($target_file);echo "Sorry, there was an error uploading your file.";http_response_code(403);
}// 病毒检查函数
function checkViruses($fileName) { ... }// 文件类型检查函数
function checkFileType($fileName) {$imageFileType = strtolower(pathinfo($fileName,PATHINFO_EXTENSION));if($imageFileType != "jpg" && $imageFileType != "png") {echo "Sorry, only JPG & PNG files are allowed\n";return false;} else {return true;}
}
?>
关键点:文件在类型和病毒检查前会被临时移动到目录中,这意味着文件在上传后到被检查前存在短暂时间窗口可供执行。
攻击步骤
第一步:创建读取秘密文件的PHP Web Shell
<?php echo file_get_contents('/home/carlos/secret'); ?>
// 文件名:shell.php
第二步:拦截文件上传POST请求并发送到Intruder
- 操作:拦截文件上传POST请求
第三步:拦截对"shell.php"的GET请求
- 假设已完成本主题先前实验,已知文件在服务器上的存储位置
第四步:配置两个请求的参数
- 攻击类型:Sniper
- 载荷类型:Null Payloads(直接发送原始请求无需修改)
- 载荷设置:无限持续
- 载荷编码:取消勾选"URL-encode these characters"
第五步:同时启动两个请求
在GET请求攻击中点击任意请求查看响应标签,即可获取秘密文件内容。提交后完成实验!
实验完成!
通过竞态条件漏洞成功利用Web Shell获取敏感信息。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码