upload-labs 环境搭建及闯关总结
靶场环境搭建
环境准备
- phpstudy-2018
- 32位vc9和11运行库
- upload-labs-master靶场
解压后,直接双击安装。安装后打开,有系统的弹框说缺少vc9和11的运行库(win7版本),需要单独安装,准备好相应的安装包文件
安装完成之后,就可以直接使用phpstudy环境
开启数据库和mysql,然后浏览器访问本地ip或者127.0.0.1,出现hello world 说明web服务已经准备完成
然后下载好相应的压缩包,将文件解压缩到**\PHPTutorial\WWW**目录下面,修改文件目录名称(个人习惯)
点开就可以看到相应靶场环境的文件
已经可以正常的访问到相关的关卡,但是还需要创建一个在upload-labs站根目录下拆功创建upload文件夹,用来存储我们上传的文件
靶场环境就已经全部准备完毕,准备动手闯关
闯关思路总结
Pass-01前端 js 检测
解题思路:(绕开前端 js 检测)
- F12 直接修改 js 允许文件的上传类
- 将 webshell 文件后缀名改为允许上传的后缀,然后用 burpsuite 拦截后修改 文件后缀名
- 浏览器 F12 禁用 JavaScript 脚本
点击F12,在右上角找到并点击齿轮⚙图标。
在Preferences中,禁用JavaScript
这时候,上传文件就不会对文件类型限制。
这里上传一个php一句话木马
回到靶场根站点下面,在upload中可以看见上传的文件。
抓包修改很简单,先将webshell.php修改为webshell.jpg,然后上传webshell.jpg,抓包再修改为webshell.php,这样也可以上传成功。
Pass-02 Content-type 检测
解析方法:
- 将 webshell 文件的后缀名改为图片类型 ,再利用 burpsuite 抓包 修改文件后缀绕过
- 直接上传 webshell 文件 ,利用 burpsuite 修改 Content-type :为 image/gif
Pass-03 .htaccess 文件解析规则绕过
上传图片马再上传.htaccess 文件
.htaccess
代码1.0
<FilesMatch "webshell-m.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
代码2.0
<FilesMatch "whale.png">
SetHandler application/x-httpd-php
AddHandler php5-script .png
</FilesMatch>
制作图片木马,(在kali环境中)准备好图片,和相应的php木马。
windows 中通过文件名后缀来识别文件类型,但是 linux 中文件名后缀并不根据文件后缀来直接识别文件类型,一般是通过文件头来进行识别。在linux中,即使修改了文见后缀,还是根据内容进行判定。
使用 mimetype 命令查看文件类型
└─# mimetype whale.php
└─# mimetype whale.jpg
所以我们通过将 php 代码合并到图片中来进行隐藏。
└─# cat whale.php >> whale.jpg
└─# vim whale.jpg
按大写的 G 直接跳转到文件末尾,代码成功的到了图片中。
将下载好的图片保存到本地,就可以直接使用。
Pass-04 文件重写绕过
首先当前关卡黑名单绕过,可使用Pass-03 的方式进行绕过。下面尝试使用文件重写绕过。
利用 PHP 和 Windows 环境的叠加特性,以下符号在正则匹配时的相等性:
双引号" = 点号.
大于符号> = 问号?
小于符号< = 星号*
首先写入空文件,上传whale.php 文件burpsuite 修改文件名:whale.php:.jpg 此时写入空文件 whale.php
查看站点upload目录
然后再次上传whale.php,burpsuite抓包修改位:whale.< (此时需要注意,站点根目录下除了whale.php文件外,不能有其他whale.开头的文件,很可能写入不成功,经过我多次验证。)
再次查看站点upload目录,成功写入。
Pass-05 大小写绕过
- 可以利用 没有进行大小写 进行绕过 ,将 1.php 改为 1.phP 上传
(在 Linux 没有特殊配置的情况下,这种情况只有 win 可以,因为 win 会忽略大小写) - 可以用 pass-04 的 PHP 和 Windows 环境的叠加特性进行绕过。
1)burpsuite修改webshell.php文件后缀为webshell.phP。(全修改为大写也可以)
查看文件已经成功上传。
2)利用叠加特性,让文件后缀名变成xx.php:.jpg
然后再次重传文件,burpsuite修改为whale.<
文件成功上传
注意,如果已经上传了whale.phP,继续尝试第二种方法,尽量不要同名,因为上传会失败。就是已经存在了whale.phP 。就不要再上传修改文件 whale.php:.jpg,换个文件名就可以。
上传的文件后缀为.phP,使用蚁剑连接的时候是不要严格区分大小写的。
Pass-06 空格绕过
对比第五关检测了大小写绕过,另外删除了一个过滤函数,trim()函数,移除字符串两侧多余的空白
字符或其他预定义字符。
webshell.php 空格空格空格空格空格空格空格空格空格空格空格空格空格空格空格,一个或者多个都可以。
burpsuite抓包修改
查看文件成功上传
Pass-07 Windows 特性自动去除文件名最后的.
对比第六关增加了 trim()函数过滤空白字符。解题思路:
黑名单检测,文件名最后添加…进行绕过,Windows 会自动去掉后缀名最后的…
一个…就可以了加多少都一样。
burpsuite修改文件后缀
查看文件成功上传
Pass-08 Windows 备用数据流绕过
这道题利用的是 Windows 下 NTFS 文件系统的一个特性, NTFS 文件系统的存储数据流的一个属性 DATA 时,就是请求 webshell.php 本身的数据,如果 webshell.php 还包含了其他的数据流,比如 webshell.php:nc.exe,请求 webshell:nc.exe::
D
A
T
A
,
则
是
请
求
w
e
b
s
h
e
l
l
.
p
h
p
中
的
流
数
据
n
c
.
e
x
e
的
流
数
据
内
容
。
操
作
方
法
已
经
被
微
软
修
复
,
但
是
:
:
DATA,则是请求 webshell.php 中的流数据nc.exe 的流数据内容。 操作方法已经被微软修复,但是::
DATA,则是请求webshell.php中的流数据nc.exe的流数据内容。操作方法已经被微软修复,但是::DATA 仍可用来绕过黑名单检测。
burpsuite修改数据文件,filename=“webshell.php::$DATA”
查看文件文件成功上传
Pass-09 嵌套绕过
前面的都过滤了(去掉首尾空格 ,还有文件名末尾的点 . )。所以判断代码执行逻辑,去掉.之后去掉空格然后还剩下个.就可以绕过。
使用…空格…绕过即可。
burpsuite修改文件 ,filename=“webshell.php. .”
查看文件成功上传
Pass-10 双写绕过
双写绕过
burpsuite 修改数据 filename=“webshell.pphphp”,过滤的顺序是从. 后面从左往右开始。
查看文件成功上传