文件上传漏洞

文件上传漏洞

现在的很多网站都会提供文件上传功能,比如头像,照片,表格等等,所以WEB程序就会存在文件上漏洞,可以上传木马,病毒,恶意脚本或者留一个WEBshell。

为什么存在文件上传漏洞

上传文件时,如果服务端代码没有对客户端上传的文件进行验证和过滤,就容易造成可以 上传任意文件的情况,包括上传脚本文件(asp,aspx,php,jsp等格式的文件)。非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为Webshell,也可将WebShell脚本称为一种网页后门,WebShell脚本具有非常强大的功能,查看服务器目录,服务器中的文件,执行命令等。

JS检测绕过攻击

JS检测绕过上传漏洞常见于用户选择文件上传,比如我们在上传照片时,就会经常被限制格式后缀jpg什么的,如果不是这些格式就会被弹窗警告,这时候的上传数据包并没有发送到服务端,只是在客户端浏览器使用JavaScript对数据包进行检测。一般我们会利用文件上传漏洞上传一句话木马,然后用菜刀连接获取 webshell。

1.前端过滤脚本#前端脚本检测,只允许上传 .jpg格式的文件
<script type="text/javascript">
    function selectFile(fnUpload) {
        var filename = fnUpload.value;
        var mime = filename.toLowerCase().substr(filename.lastIndexOf("."));
        if(mime!=".jpg")
        {
            alert("请选择jpg格式的照片上传");
            fnUpload.outerHTML=fnUpload.outerHTML;
        }
    }
</script>

 2.后端脚本检测文件扩展名,数据提交到后端,后端的函数对上传文件的后缀名进行检测,比如黑名单检测不允许上传 .php 、.asp 后缀格式的文件;白名单检测只允许上传 .jpg 格式的文件

#后端php检测
$info=pathinfo($_FILES["file"]["name"]);
    $ext=$info['extension'];// 得到文件扩展名
    if (strtolower($ext) == "php") {   #黑名单检测,不允许上传php格式的文件
            exit("不允许的后缀名");
          }       

这时候有几种方法可以绕过客户端的前端JS检测

  • 使用浏览器比如firefox,google的插件,删除检测文件后缀的JS代码,然后上传文件即可绕过。
  • 首先把需要上传文件的后缀改成允许上传的,如jpg,png等,绕过JS检测,在抓包,把后缀名改成可执行的后缀即可上传成功。

对上传文件发送的HTTP请求方法通过POST进行传参,在上传文件的数据包中会有一个filename=xx,在经过JS检测之后依靠burp进行抓包然后改包,将文件后缀名再改回PHP即可。

然而对于后端黑白名单的检测就很麻烦

对于第二种后端过滤,如果是后端黑名单过滤的话,我们可以想尽任何办法绕过黑名单进行上传。比如如果目标服务器是windows系统的话,我们可以利用windows系统的解析漏洞,用burpsuite抓包,将文件名后缀改为 .php. 或者 .php ,因为在windows系统内是不允许文件以 . 或者空格结尾的。所以在绕过上传之后windows系统会自动去掉 点和空格。所以,该文件最终还是会被解析成 .php 。或者还可以将php三个字母变换大小写,因为在windows系统里面是不区分大小写的。如果是白名单检测的话,我们可以采用00截断绕过。00截断利用的是php的一个漏洞。在 php<5.3.4 版本中,存储文件时处理文件名的函数认为0x00是终止符。于是在存储文件的时候,当函数读到 0x00(%00) 时,会认为文件已经结束。
例如:我们上传 1.php%00.jpg 时,首先后缀名是合法的jpg格式,可以绕过前端的检测。上传到后端后,后端判断文件名后缀的函数会认为其是一个.jpg格式的文件,可以躲过白名单检测。但是在保存文件时,保存文件时处理文件名的函数在遇到%00字符认为这是终止符,于是丢弃后面的 .jpg,于是我们上传的 1.php%00.jpg 文件最终会被写入 1.php 文件中并存储在服务端。这是理想的情况下,现在的网站安全防护可能不允许存在这样的情况了,而且我没有找到相应的靶机就没有实战效果.....

靶场在这:http://ctf5.shiyanbar.com/web/upload/

上传HTML文件

有的网站只会顾忌到病毒,webshell,木马,阻止了asp,php,aspx等,所以有些攻击者就利用HTML上传给网站留下一个存储型的XSS漏洞(后面还会写关于XSS)

文件上传的防御措施

1.客户端检测,使用 js 对上传图片检测,包括文件大小、文件扩展名、文件类型等
2.服务端检测,对文件大小、文件路径、文件扩展名、文件类型、文件内容检测、对文件重命名等
3.服务器端上传目录设置不可执行权限
4.检查网站有没有文件解析漏洞和文件包含漏洞
5.将文件上传到单独的文件服务器,并且单独设置文件服务器的域名
 


 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值