|
WEB渗透测试工程师系统班250303期 第30节课作业 1. 实操课程内文件上传靶场案例 Less-12 原码及解析: $is_upload = false;
$msg = null;
//是否接收到submit的提交
if (isset($_POST['submit'])) {
//使⽤file_exists 检查⽂件或⽬录(upload/)是否存在
if (file_exists(UPLOAD_PATH)) {
//数组⿊名单
$deny_ext =
array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","js
w","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htacces
s");
// 获取保存的⽂件名 1.php/.
$file_name = $_POST['save_name'];
// 获取⽂件后缀名 1.txt-->txt 1.php/.--->"php/."
$file_ext = pathinfo($file_name,PATHINFO_EXTENSION);
// 判断⽂件类型是否被禁⽌
if(!in_array($file_ext,$deny_ext)) {
// 如果不是⿊名单的后缀,则获取上传的临时⽂件
$temp_file = $_FILES['upload_file']['tmp_name']; //1.png
// 拼接图⽚的保存路径
$img_path = UPLOAD_PATH . '/' .$file_name; //upload/1.php
// 移动上传的⽂件到指定路径
if (move_uploaded_file($temp_file, $img_path)) {
// 上传成功
$is_upload = true;
}else{
// 上传失败
$msg = '上传出错!';
}
}else{
// 上传⽂件类型被禁⽌
$msg = '禁⽌保存为该类型⽂件!';
}
} else {
// 上传路径不存在
$msg = UPLOAD_PATH . '⽂件夹不存在,请⼿⼯创建!';
}
原理:
因为知道他验证的是save_name
那么save_name的值⼜等于 1.php
那么他路径的拼接应该是
UPLOAD_PATH . '/' .$file_name;
upload / 1.php
使⽤
uplpad / 1.php/. 进⾏绕过
因为他在进⾏验证的时候格式是php/. 那么他原来的过滤是php 正巧是因为我们加了这个/.不在⿊名单中
绕过了他的验证,
move_uploaded_file() 有这么⼀个特性,会忽略掉⽂件末尾的 /. 但是最终⽂件在保存的时候输⼊的
uplpad/1.php/.就强制保存成upload/1.php 此时就变成了php的格式了。:
apache 解析漏洞[CVE-2017-15715] Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。 此漏洞的出现是由于 apache 在修复第一个后缀名解析漏洞时,用正则来匹配后缀。在解析 php 时 xxx.php\x0A 将被按照 php 后缀进行解析,导致绕过一些服务器的安全策略
Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。 那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
解析⽅案案例1-执⾏权限 ⽂件上传后存储⽬录不给执⾏权限 未做防御,可以上传并执行1.php(作用是生成xiao.php这个木马) 做了防御后,无法执行1.php,并生成xiao.php
解析⽅案案例2-解码还原(⾮图⽚⽂件上传) 数据做存储,解析固定(⽂件后缀名⽆关) 1.png--->服务器 1.png--->abcdefg123456 php脚本--》eval(***)---》qbcd1234 固定协议(图⽚格式) 图⽚在上传时,将图⽚转换为编码的字节流数据传输到服务器,服务器通过对应的固定协议进⾏字节流解 码,从⽽还原图⽚。 因为解析格式被固定为了图⽚格式,所以脚本语⾔也会被强制解析为图⽚,没有办法进⾏执⾏ 图片转换为字节流数据 传输脚本⽂件被解析成图⽚,⽆法正常解析
分站存储⽅案-实际案例 存储的⽬标和测试的⽬标不在同⼀台服务器(不在同⼀个路径),并且采⽤分站存储的⽹站,⼀般会限制⽬ 录执⾏权限 分站存储技术: 图⽚编码字节流传输技术:更新头像后会将图⽚转为字节流传输
OSS云存储⽅案 通俗理解就是云⼚商给你指定地区开了⼀个⽹盘,上传的任何⽂件都会放在这个⽹盘内,它只能提供资源的 上传和下载,⽆法解析上传的内容 安全问题 key 泄露:https://www.anquanke.com/post/id/298882
2. 文件上传的防御方式有哪些? 防御/修复⽅案 对于上传的⽂件,验证程序要做严格验证,使⽤服务器端校验,⽽不能仅⽤前端javascript验证。 1.建议严格限制上传⽂件类型和上传⽂件名及后缀。 2.检查⽂件头和⽂件内容,对上传⽂件⽬录的运⾏权限进⾏严格限制。 3.及时排查、删除服务器⽊⻢⽂件。 4.上传⽂件的存储⽬录禁⽤执⾏权限 5.⽂件的后缀⽩名单,注意0x00截断攻击 6.不能有本地⽂件包含漏洞 7.及时修复web上的代码 8.升级web server 9.后端验证:采⽤服务端验证模式 10.后缀验证:基于⽩名单,⿊名单过滤 11.MIME验证:基于上传⾃带类型艰检测 12.内容检测:⽂件头,完整性检测 13.⾃带函数过滤 14.WAF防护软件:宝塔、云盾等
一、笔记标题:WEB渗透系统班-文件上传漏洞(4)+文件上传漏洞(5)
二、文章内容:
1. 课程内容概要
主要知识点1:Less-12 move_uploaded_file() 有这么⼀个特性,会忽略掉⽂件末尾的 /. 但是最终⽂件在保存的时候输⼊的uplpad/1.php/.就强制保存成upload/1.php 此时就变成了php的格式了。 主要知识点2:apache 解析漏洞 换⾏解析、多后缀解析 主要知识点3:防御/修复方案
2.重点知识与细节
概念解析 概念1: 无 概念2: 关键步骤 步骤1:执行权限 步骤2:解码还原 步骤3:分站存储技术和图⽚编码字节流传输技术 相关代码
3.实操练习 和 解析
vul靶场的搭建需要注意docker版本不能太高,vulfocus靶场不太稳定
4.个人总结
本节课最大的收获是:比较全面的学习了文件上传漏洞 仍然存在疑问的地方:云服务器的相关知识 需要课后深入学习的内容:暂无
|