Upload-labs靶场通关
Upload-labs靶场通关
076wpass-01
- 源码
1 | function checkFile() { |
上传
白名单,仅允许上传.jpg|.png|.gif
,但是只有前端校验
上传jpg抓包修改为php
连接webshell
复制图片地址,使用蚁剑连接
pass-02
源码
1 | $is_upload = false; |
会对MIME进行验证,与pass-01一样,上传png抓包修改为php
pass-03
- 源码
1 | $is_upload = false; |
- 上传
黑名单,可以上传php2、php3、php5、phtml、pht(是否解析需要根据配置文件中设置类型来决定)来绕过
pass-04
- 源码
1 | $is_upload = false; |
- 上传
黑名单,几乎所有可以上传的文件类型都被写死,但是可以上传.htaccess
1 | <FilesMatch "shell.jpg"> |
这个文件里面的含义就是将shell.jpg文件解析为php
然后直接上传图片马,就可以解析为php
pass-05
- 源码
1 | $is_upload = false; |
- 上传
禁止了常见后缀名,也包括.htaccess
,反复观察发现没有被限制的后缀名有 .php7 以及 .ini
php.ini 是 php的配置文件,.user.ini 中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。
但是想要引发 .user.ini 解析漏洞需要三个前提条件
- 服务器脚本语言为PHP
- 服务器使用CGI/FastCGI模式
- 上传目录下要有可执行的php文件
提示
上传.user.ini
1 | auto_ prepend_ file=shell.jpg |
再上传图片马,蚁剑连接readme.php文件,图片马就被包含进去以php代码执行
- 第二种方法绕过
抓包修改后缀为shell.php. .
点空格点
蚁剑连接shell.php即可
pass-06
- 源码
1 | $is_upload = false; |
- 上传
黑名单,但是可以使用大小写绕过
pass-07
- 源码
1 | $is_upload = false; |
- 上传
黑名单,但是没有去掉空格,使用空格绕过
pass-08
- 源码
1 | $is_upload = false; |
- 上传
黑名单,去空格并且转换为小写,但是忽略了.
,文件名尾加.绕过
pass-09
- 源码
1 | $is_upload = false; |
- 上传
在上关的基础上去掉了. 使用特殊字符绕过::$DATA
php在window的时候如果文件名+”::DATA之后的数据当成文件流处理,不会检测后缀名,且保持”::$DATA”之前的文件名 他的目的就是不检查后缀名。
pass-10
- 源码
1 | $is_upload = false; |
- 上传
在上一关的基础上,禁止::$DATA,但是deldot()
函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来
使用pass-05的第二种方法,. .
绕过
pass-11
- 源码
1 | $is_upload = false; |
- 上传
删除黑名单中的关键字但是只检测一次,使用双写绕过
上传之后得到文件名shell.php
pass-12
- 源码
1 | $is_upload = false; |
- 上传
白名单,最后的路径是靠拼接,可以使用%00截断
原理:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。
pass-13
- 源码
1 | $is_upload = false; |
- 上传
与上关一样,区别是post提交,post不会对里面的数据自动解码,需要在Hex中修改。
pass-14
- 源码
1 | function getReailFileType($filename){ |
- 上传
会判断强两个字节的来确定上传文件的后缀是否为白名单里的,需要上传图片马配合文件包含漏洞
上传图片马
点击文件包含漏铜
pass-15
- 源码
1 | function isImage($filename){ |
- 上传
在上关的基础上,校验图片的大小,依旧可以和上关一样使用图片马绕过
pass-16
- 源码
1 | function isImage($filename){ |
- 上传
在上关的基础上再检查后缀,依旧使用图片马绕过
pass-17
- 源码
1 | $is_upload = false; |
- 上传
同上,图片马传就完事了
pass-18
- 源码
1 | $is_upload = false; |
- 上传
代码审计,对上传的文件的后缀进行对比,如果不在白名单之内就删除,没有文件包含漏洞,此处利用条件竞争
文件上传,再被校验中间是有一个过程的,如果我们在上传后立即访问,占用文件,文件在被使用状态是不可被删除的
利用burp重复发包,不设置payload
利用脚本去重复访问上传的webshell路径
1 | import requests |
pass-19
- 源码
1 | //index.php |
同上一关,但是在上一关的基础上,对文件名进行修改,需要配合文件包含漏洞或其他漏洞
绕过白名单过滤:利用apache的后缀名识别漏洞 —— 从右往左依次识别后缀,遇到不能识别的后缀名便跳过 ,因此可以文件名改为create.php.7z(.7z这个后缀apache不能识别)
pass-20
- 源码
1 | $is_upload = false; |
- 上传
黑名单,会对文件名重命名,双写,大小写都可以绕过
pass-21
- 源码
1 | $is_upload = false; |
- 上传
检查MIME和白名单,以.
切割为数组,取数组最后一个元素来校验是否在白名单内,再取数组数-1来重命名后缀