• 【渗透课程】第七篇-上传漏洞之绕过上传漏洞


    前一篇我们已经讲过了上传漏洞的解析漏洞,在某些时候,知道网站存在哪个解析漏洞,那么我们就可以更好的利用上传漏洞

    这个知识点在我们前面就有粗略说过了(http://www.yuntest.org/index.php/archives/765.html), http拦截也是上传漏洞的其中之一, 下面我们来对绕过上传漏洞进行更深的了解。

    正文

    管理员防止文件上传漏洞时可以分为两种,一种是客户端检测,一种是服务端检测:

    客户端检测:使用JavaScript检测,在文件上传之前,就对文件进行验证

    服务器端检测:服务端脚本一般会检测文件的MIME类型(这里大家先点过去了解一下mime类型)检测文件扩展名是否合法,甚至有些程序检测文件中是否嵌入恶意代码

    图片一句话:

    把一句话木马插入在图片文件中,而且并不损坏图片文件,这一方法可以躲过少许的防火墙检测。再利用解析漏洞得到webshell

    推荐一款专业的制作软件:LEdjpgcom

    一、客户端检测绕过方法:

    FireBug插件:将用于检验文件扩展名的onsubmit事件删除。

    中间人攻击:使用Burp Suite,首先把木马扩展名改为一张正常图片(图片木马的简介上一篇说过了,大家可以百度加以了解)的扩展名,比如JPG扩展名,,在上传时使用Burp Suite拦截上传数据,再将其中的扩展名JPG修改为PHP,就可以绕过客户端验证。也有可能还需要相应地修改Content-Length(Http知识点,看不明白跑回去看:http://www.yuntest.org/index.php/archives/686.html)

    任何客户端验证都是不安全的,客户端验证是防止用户输入错误,减少服务器开销,而服务器端验证才可以真正防御攻击者。

    注:从第一篇一直看到这里的,不理解的去面壁

    二、服务器端检测

    白名单与黑名单验证

    黑名单过滤方法:定义不允许上传的文件扩展名

    黑名单的绕过方法:

    1.攻击者可以从黑名单中找到Web开发人员忽略的扩展名,如:cer

    2.对文件的后缀名进行大小写转换,比如黑名单中有php,可以将文件的后缀改为pHp,仅限windows平台

    3.在windows系统下,如果文件名以“.”或者空格作为结尾,系统会自动删除“.”与空格,利用此特性也可以绕过黑名单验证。(asp.或asp_)

    白名单过滤方法:定义允许上传的文件扩展名

    白名单的绕过方法:结合Web容器的解析漏洞

    MIME验证

    php中通过$_FILE['file']['type']来检验

    绕过方法:可以在Burp Suite中更改Content-Type的内容为image/jpeg

    目录验证

    在文件上传时,程序通常允许用户将文件放到指定的目录中,如果指定的目录存在,就将文件写入目录中,不存在的话则先建立目录,然后写入。

    比如:在前端的HTML代码中,有一个隐藏标签<input type="hidden" name="Extension" value="up"/>

    服务器端有如下代码

    if(!is_dir($Extension)){ //如果文件夹不存在,就建立文件夹

    mkdir($Extension);

    }

    攻击者可以利用工具将表单中value的值由“up”改为“pentest.asp”,并上传一句话图片木马文件。

    程序在接收到文件后,对目录判断,如果服务器不存在pentest.asp目录,将会建立此目录,然后再将图片一句话密码文件写入pentest.asp目录,如果Web容器为IIS 6.0,那么网页木马会被解析。

    截断上传攻击

    在ASP程序中最常见,也就是%00将后面的字符都截断了,比如上传文件名为1.asp%00xxser.jpg。

    实际操作过程中,利用Burp Suite的Repeater中的HEX选项卡可以进行这样的操作。

    截断上传漏洞不仅出现在ASP程序上,在PHP、JSP程序中也存在这样的问题。

    0x00不是针对所有基于白名单的后缀名检查都能绕过,代码的实现过程中必须存在截断上传漏洞。

    转载请注明出处:云态中国


  • 相关阅读:
    同步、异步 与 阻塞、非阻塞
    【转】综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
    Kafka总结笔记
    SpringBoot笔记
    过滤器(Filter)和拦截器(Interceptor)的执行顺序和区别
    Java Lambda表达式
    腾讯云博客同步声明(非技术文)
    SpringBoot学习笔记(十七:异步调用)
    设计模式—— 十七:装饰器模式
    Java初级开发0608面试
  • 原文地址:https://www.cnblogs.com/cnhacker/p/6984687.html
Copyright © 2020-2023  润新知