upload-labs
pass-01 JS前端过滤
前端js过滤,修改php文件后缀为jpg,上传过程通过brup修改后缀即可。
pass-02 MIME绕过
只判断content-type1,通过brup修改为图片类型即可。
- image/gif
- image/jpeg
- image/png
image/gif
pass-03 上传特殊可解析后缀
- 查看源码发现,禁止上传
.aspx|.asp|.php|.jsp
文件,但是后缀为php3\php4\php5\phtml\pht等的后缀php解析,抓包修改为以上后缀即可。
(需要网页解析器支持) 从源码来看,上传的文件,会修改文件名,所以需要抓包后的第二个包,该包会显示修改后的路径及文件名。
pass-04 上传.htaccess
- 先上传一个
.htaccess
文件,文件中写SetHandler application/x-httpd-php
。 - 然后上传一个jpg格式的php文件,可以用winhex或者命令行给一个jpg后面添加上php语句。
上传成功后会显示正常图片,在网址栏打开图片,代码执行成功。可以查看phpinfo。
pass-05 后缀大小写绕过
- 过滤所有后缀以及
htaccess
,尝试后缀大小写 上传
phpinfo.PHp
,抓包显示图片路径,打开图片网址,显示phpinfo。pass-06 空格绕过
- 过滤大小写
- 尝试空格绕过
- 上传
phpinfo.php
文件,抓包修改文件名为info.php
,上传成功。 抓包获取图片路径,打开获得phpinfo。
pass-07 点绕过
- Windows特性,会自动忽略文件名最后的点
- 修改文件后缀为
.php.
,上传 - 抓包获得文件路径
打开文件,获得phpinfo
pass-08 ::$DATA绕过
- 只能在php+Windows环境下生效
- 文件后缀后添加
::$DATA
在Windows下,会将::$DATA
后的数据当成文件流处理,不会检测后缀名,且保持::$DATA
之前的文件名。 - 抓包修改
获得图片地址,进入,获得phpinfo
pass-09
. .
(点,空格,点)绕过- 过滤前后空格、末尾的点,所以使用点、空格、点绕过
- 系统会过滤掉最后的点以及空格,但是不会过滤第二个点。
- 上传
phpinfo.php
,抓包修改为phpinfo.php. .
进入图片地址,查看phpinfo
pass-10 双写或者多写
- 过滤所有格式,并且过滤大小写,考虑双写或者多写
- 上传
phpinfo.php
,抓包修改php文件名后缀为pphphp
或者pphphphppphp
等,上传成功 进入图片网址,查看phpinfo
pass-11 %00截断
- 截断条件2
- 原理3
- 上传phpinfo.php,抓包,修改filename为
phpinfo.jpg
,在POST头中修改save_path为../upload/phpinfo.php%00
查看图片地址,删掉地址中多余的部分,获得phpinfo
pass-12 0x00截断
- 上传phpinfo.php,抓包,修改filename为
phpinfo.jpg
,在Content-Disposition中的name=“save_path”为../upload/phpinfo.php+
,然后在Hex中修改+号的Hex,即2b
为00
查看图片地址,删掉地址中多余的部分,获得phpinfo
pass-13 文件头检查
- 给
phpinfo.php
添加文件头,如GIF89a
,然后利用文件包含漏洞访问该gif即可。http://127.0.0.1/include.php?file=upload/8120200729135831.gif
上传图片马,同样利用文件包含漏洞访问该图片即可。
http://127.0.0.1/include.php?file=upload/8120200729135831.jpg
pass-14 突破getimagesize()
getimagesize()这个函数返回一张图像文件的大小并返回图像的尺寸以及文件类型、图像的高度和宽度。
上传图片马,使用文件包含漏洞,访问该图片地址
http://127.0.0.1/include.php?file=upload/5220200729141211.jpeg
,查看到phpinfo。pass-15 绕过exif_imagetype()
exif_imagetype()函数用来读取一个图像的第一个字节并检查其签名。
上传图片马,使用文件包含漏洞,访问该图片地址
http://127.0.0.1/include.php?file=upload/8320200729142355.jpg
,查看到phpinfo。pass-16 二次渲染绕过
- 上传一张gif,然后下载下来,和原gif进行对比,在没有被二次渲染的地方通过WinHex加入php语句
<?php phpinfo() ?>
上传修改过的gif,通过文件包含漏洞访问该gif,查看到phpinfo。
pass-17 条件竞争
- 尝试图片马,成功显示phpinfo
pass-18
- 图片马,成功显示phpinfo
pass-19 ./绕过
- 上传
phpinfo.php
,抓包修改name="save_name"
将其中的参数upload-19.jpg
修改为upload-19.php/.
访问图片地址,查看到phpinfo
pass-20 数组绕过
- 修改
Content-Type: application/octet-stream
为Content-Type: image/jpeg
- 修改
-----------------------------1170497331662411661951140142 Content-Disposition: form-data; name="save_name" upload-20.jpg
为-----------------------------67722368135993815771449811323 Content-Disposition: form-data; name="save_name[0]" upload-20.php/ -----------------------------67722368135993815771449811323 Content-Disposition: form-data; name="save_name[2]" jpg
- 上传成功,进入图片地址,查看phpinfo
《upload-labs文件上传漏洞练习》链接:https://xdym11235.com/archives/21.html
具体版权规定详见侧栏版权说明页面