多数的站点都存在文件上传功能,若未对用户上传的文件进行严格的过滤,则攻击者可能向后台数据库上传病毒、木马后门程序等恶意文件。如恶意用户上传一个可以执行的WebShell程序,则可以通过该程序获取系统后台Shell执行方法从而进一步获取整个系统的操作权限。
原理
文件上传漏洞主要是因为Web应用在设计和开发文件上传功能时,没有对用户上传的文件进行充分的检测及防御,导致恶意的可执行文件上传至Web服务器并造成损害
防护
(1)对上传文件扩展名进行严格过滤,设置白名单机制只允许特定扩展名文件上传,严格过滤扩展名为“.php、.asp、.bat”等可执行文件上传
(2)限制目录权限,对于文件上传目录设置可读、可写、不可执行权限,禁止用户上传的文件在后台执行。
(3)隐藏文件上传目录,用户上传文件的目标目录对用户隐藏。
绕过方式
前端js绕过
上传1.php文件时,前端阻止上传弹窗,说明存在前端验证文件。
修改前端js代码,利用f12可修改
把1.php改为1.jpg,再利用bp抓包,修改回1.php也可上传
黑白名单绕过
如果可以上传phtml 、php3 、php4 、php5 、Php 、php (空格) php、pphphp
如果上传成功,测试是否能够解析,不能解析则此方法不行。
针对文件类型绕过
程序对文件的类型content-type进行了判断
绕过:
1、上传1.php文件,进行bp抓包,
2、有的情况不仅仅判断content-type,还判断了内容,文件头
判断文件头:上传1.php抓包在文件内容增加GIF89a
判断文件内容:上传图片马1.jpg,再修改回1.php
常见文件头
路径截断绕过与普通截断绕过
上传图片马(可以在图片马头加GIF89a),发现有保存路径
成功的条件:php版本小于5.3.4
php的magic_quotes_gpc=off
可能为路径截断绕过
1、Get:在上传路劲处…/upload/1.php%00
2、Post:对…/upload/1.php后进行16进制hex修改为00
3、还有一种非路径截断,上传图片马(视情况加GIF89a)
抓包修改为:1.php;jpg或者1.php%00.jpg或者1.php/00.jpg
win系统解析漏洞绕过
1、上传1.php(或者图片马),抓包改为1.php.
2、上传1.php(或者图片马),抓包改为1.php::DATA”会把::DATA"之前的文件
3、上传1.php(或者图片马),抓包改为1.php:1.jpg
4、上传1.php(或者图片马),抓包改为1.php::$DATA…….
中间件解析漏洞绕过(apache)
利用了apache从右向左解析漏洞
1、上传图片马,bp抓包为1.php.xxxx.abc
2、上传.htaccess文件(内容:SetHandler application/x-httpd-php
)(如果允许上传),再上传图片马
Ps:如果能上传.htacess文件,但不能解析,可以试试下面
内容改为:
<FilesMatch “filename”>
SetHandler application/x-httpd-php
Filename 为你想要上传的文件后缀名。如jpg
然后再上传1.jpg图片马即可
中间件解析漏洞绕过(iis6.0 6.5 版本)
1、上传图片马,抓包修改为1.asp;.jpg或者%00 /00也可以(截断)
2、 上传图片马抓包,修改后缀为.asa、.cer和.cdx等,当然不检测内容和类型是直接上传也可以
3、上传图片马,抓包发现有保存图片的路径,如…/upload/image
4、修改路径为…/upload/image/1.asp
(然后就会存在…/upload/image/1.asp/目录,在这个目录下任何文件当作asp文件解析) iis7.0也存在这漏洞
中间件解析漏洞(nginx)
上传图片马,拿到图片马的路径,访问的时候加上/.php 就可作为php文件解析
如/upload/image/1.jpg/.php
条件竞争漏洞
文件上传进行验证的短暂时间内,服务器对传入的文件进行了临时保存,在这短暂时间内php是可以解析的,如果解析的速度够快
绕过:
上传1.php文件,利用bp抓包,设置多线程,不断发包。
浏览器访问连接我们上传的1.php文件。
不断刷新,会在某瞬间,执行1.php成功。
//连接脚本
import requests
url = "http://127.0.0.1/upload-labs/upload/shell.php.7z"
while True:
html = requests.get(url)
if html.status_code == 200:
print("OK")
break
else:
print("NO")
二次渲染
上传图片加载后,会对图片进行二次渲养,改变大部分图片源码,绕过为:对照上传后的图片与原图片放在winhex中对比,查看图片哪个数据块没有被改变。将木马代码放在没有改变的一块中,在不损坏图片的前提下,即可绕过上传
标签:文件,漏洞,绕过,php,上传,抓包,图片 From: https://blog.51cto.com/u_16255631/7940637