zoukankan      html  css  js  c++  java
  • upload-labs

     upload-labs是一个和sqli-labs类似的靶场平台,只不过是一个专门学习文件上传的。整理的很好,虽然并不能将服务器解析漏洞考虑进去,但毕竟一个靶场不可能多个web容器吧,关键是思路很重要,github地址:https://github.com/c0ny1/upload-labs

    感觉这个思路图做的很好,测试的时候大体流程可以按照这个来,同时将服务器特性以及中间件的解析漏洞考虑进去就差不多了。

    开始做题,同时看下后台的实现代码对代码审计也很有帮助的。

    第一关是一个前端校验,第二关是服务器端对content-type的一个判断,由于个人习惯,我一般都是在本地写一个一句话木马后文件名改为jpg之类的,直接上传(这个时候content-type是图片格式),抓包将文件名后最改为.php脚本后缀,所有能通过绕过这两关。

    第三关是服务器端对文件后缀的黑名单校验(后面的关卡中不特殊说明默认都是服务器端校验)。先看下代码:

     

    采用的黑名单,php的话有时候(配置的原因)php、php3、php4、php5、phtml、pht这些后缀也是可以被解析的,其他语音也有类似的情况,需要尝试:

    由于我这里使用的是phpstudy+windows,所以复现不了(由于配置原因是解析不了php3等等这些后缀的)。

    第四关:上传php文件显示不合法,然后上传了个aaa后缀的可以,说明还是使用的黑名单。看下源码可以发现基本上将所有非法的脚本后缀就禁用了

     

    但是没有禁用.htaccess,可以通过上传.htaccess文件然后将该文件夹下的所有例如.jgp的文件都按照脚本语言解析,详细信息可以问度娘,上传如下内容的.htaccess文件

    意思是将该文件夹下的one.jpg文件按照php格式去解析,然后再上传一个文件名是one.jpg内容是一句话木马的文件,然后访问,可以执行代码。

    第五关:将.htaccess后缀也禁止了,但是相比第四关,没有将文件后缀置换成小写,所有可以通过大小写绕过

     第六关:依然是黑名单,但这次程序没有对文件后缀去空(其实如果程序没有对文件进行重命名的话,可以借one.php .jpg绕过白名单的)

    上传一个php文件,抓包将文件名后缀加上空格,如下图

    可以发现windows下保持文件时会自动将空格去除

     第七关和第六关类似,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过,所以

    这里访问的时候是可以不要.的,存在windows下的时候也是没有.的

    第八关;老实说第八关这个绕过方式我之前是不知道的,就是在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。

     可以看到在服务器中保存的文件还是以php结尾的,访问该文件即可。具体原理参考这篇文章(https://xz.aliyun.com/t/2539)

    第九关:这关算是一个逻辑漏洞吧

    程序先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用类似one.php. .(两个点号之间有一个空格)绕过,如果重名名了文件的话应该会用$file_ext来进行拼凑文件,这样保存在服务器中的文件将没有后缀(去除了.空格)

    第十关:

    看代码可以发现程序将所有脚本后缀名都替换为空了,但是可以利用.phphpp这样,去除中间的php后再一次组成了.php。

    第十一关:白名单校验

    这关考验的是一个00截断的漏洞,当有php环境中有两个截断条件: 1.php版本小于5.3.4 详情关注CVE-2006-7243 2.php的magic_quotes_gpc为OFF状态

    给请求中会自动将%00进行url解码,在后台进行拼凑的时候会自动阶段后面的字符串

     

    于是存在服务器中的文件是这样的

    第十二关:也是00截断,只不过由于文件路径这个参数是通过post请求发送的,需要抓包后再hex中修改

    第十三、十四关、十五关、十六关:

    都是利用copy one.jpg /b + one.php /a one.jpg 制作图片马后上传,再结合文件包含漏洞使用,没什么好说的。

    十三关是对比文件的前两个字节

    十四关是用了getimagesize函数来对文件类型做判断

    十五关是用的exif_imagetype函数

    十六关是用的二次渲染

    第十七关:

    可以看到并没有对文件名的后缀做任何校验,但是上传后会改名并马上删除该文件,需要用到并发漏洞(网上都喜欢叫条件竞争)。可以正常上传php文件,抓包后放入intruder模块中选择发送多次,然后在浏览器中访问就好了,在就算程序会对文件名改名也没关系的,直接访问原文件名就好了(one.php)

    第十八关:

    也是考验竞争条件的问题,由于程序对文件后缀做了白名单校验,所以只能是上传图片木马然后用文件包含。

    第十九关:

    利用CVE-2015-2348这个漏洞也是00截断的问题,由于也是需要在低版本的php中就不演示了

    ------------------------------------------------------------------2019.2.27  补充 -------------------------------------------------------------

    php中的%00截断    PHP<5.3.29,且GPC关闭  两个条件缺一不可

    但当%00截断不能用时,也可以使用zip协议  参考文章https://www.cnblogs.com/milantgh/p/5293628.html   我有时间再补上实例吧

    最后我再自己补上各中间件的解析漏洞吧

    iis5.x   iis6.0

    1. 如果能创建文件夹的话,创建xx.asp文件夹,那么该文件夹下的所有文件都会按asp格式去解析,在该文件夹下上传evil.jpg  访问www.xxx.com/xx.asp/evil.jpg  执行代码

    2. 直接上传evil.asp;.jpg文件绕过黑白名单校验,访问www.xxx.com/evil.asp;.jpg时iis会按照asp文件去解析

    IIS 5.x/6.0在从文件路径中读取文件后缀时,遇到一个“.”后,便进入了一种截断状态,在该状态下遇到特殊符号——“/”和“;”,都会进行截断,只保留特殊符号前的部分,即:“.asp”,从而认为文件后缀为“.asp”。

    IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞:

    在默认Fast-CGI开启状况下,黑阔上传一个名字为evil.jpg,内容为     <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>    的文件,

    然后访问evil.jpg/.php,在这个目录下就会生成一句话木马 shell.php

    要验证是否有漏洞很简单,只需访问分别访问robots.txt和robots.txt/1.php就可以了,前者返回正常后者返回不正常说明有漏洞。

    Nginx <8.03 空字节代码执行漏洞      影响版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
    Nginx在图片中嵌入PHP代码然后通过访问   evil.jpg%00.php      来执行其中的代码

    Apache解析漏洞  :

    Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.   比如 evil.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php.

    如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个evil.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀

    ------------------------再补上一种特殊情况--------------

    双文件并发上传

    另附一篇不错的文章 https://www.cnblogs.com/shellr00t/p/6426945.html

  • 相关阅读:
    Mac 虚拟机VMware Fusion显示内部错误的解决方法
    Linux系统中的引导过程与服务控制
    linux系统中如何删除lvm分区
    Linux命令下: LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)
    解决:rm: 无法删除"tomcat": 设备或资源忙
    LVM操作过程
    Linux命令下进行硬盘挂载、分区、删除分区,格式化,卸载方法
    finger 命令查询用户名、主目录、停滞时间、登录时间
    【MySQL】MySQL5.7传统复制切换为GTID复制
    深入理解MySQL系列之锁
  • 原文地址:https://www.cnblogs.com/jinqi520/p/9977256.html
Copyright © 2011-2022 走看看