文件上传漏洞
  Qd0Bxrb8H1Yu 2023年11月02日 28 0


多数的站点都存在文件上传功能,若未对用户上传的文件进行严格的过滤,则攻击者可能向后台数据库上传病毒、木马后门程序等恶意文件。如恶意用户上传一个可以执行的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::文件上传漏洞_phpDATA”会把::文件上传漏洞_上传_02DATA"之前的文件
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中对比,查看图片哪个数据块没有被改变。将木马代码放在没有改变的一块中,在不损坏图片的前提下,即可绕过上传

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  7o0lrI1v52Tn   2023年12月10日   31   0   0 phpCTFweb