Upload-Labs

文章目录

    • 1.level1
    • 2.level2
    • 3.level3
    • 4.level4
    • 5.level5
    • 6.level6
    • 7.level7
    • 8.level8
    • 9.level9
    • 10.level10
    • 11.level11
    • 12.level12
    • 13.level13
    • 14.level14
    • 15.level15
    • 16.level16
    • 17.level17
    • 18.level18
    • 19.level19
    • 20.level20
    • 21.level21

1.level1

可以看到,设置了白名单,要求我们上传图片类的文件:
Upload-Labs_第1张图片
查看源代码发现是前端js脚本过滤的,因此我们可以抓包修改文件的后缀:
Upload-Labs_第2张图片
如图:
Upload-Labs_第3张图片
可以看到上传成功了,然后就可以使用菜刀连接了
Upload-Labs_第4张图片

2.level2

打开网站,查看源代码,发现没有用于过滤文件名的函数,因此不是前端过滤,然后上传文件抓包看看
Upload-Labs_第5张图片
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

level2是基于MIME检查的,而我们上传的文件是jpg,因此MIME类型就为image/jpg,就只需要修改1.jpg的后缀为php就可以上传了,跟level1的方法一样

常见的MIME类型:
text/plain
text/html
image/jpeg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

3.level3

我们再尝试使用1,2的方法发现:
Upload-Labs_第6张图片
这道题应该是设置了黑名单,那么尝试一下大小写绕过或者php3,php4,php5或者两个一起用,例如Php5

经过测试发现大小写绕过不行,但是php5可以:
Upload-Labs_第7张图片
查看源代码可以看到:
Upload-Labs_第8张图片
大小写不行但是别名是可以的

4.level4

采用3的办法试试看,发现不行:
Upload-Labs_第9张图片
猜测还是黑名单过滤,那么我们尝试上传一个.htaccess文件

.htaccess:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。


SetHandler application/x-httpd-php

Upload-Labs_第10张图片
可以看到上传成功了

接下来上传webshell:
在这里插入图片描述
可以看到成功了,我们可以从者两道题总结出,只要是黑名单过滤的都可以尝试一下上传 .htaccess文件

但是.htaccess配置文件只在Apache服务器中起作用,因此首先要想办法判断服务器的类型

5.level5

这道题把.htaccess也过滤了,没有头绪,去网上查查看,发现这里给出了解题的方法:这里

php.ini是php的一个全局配置文件,对整个web服务起作用;而**.user.ini和.htaccess一样是目录的配置文件**,.user.ini就是用户自定义的一个php.ini,通常用这个文件来构造后门和隐藏后门。

auto_prepend_file =          //包含在文件头
auto_append_file =           //包含在文件尾

Upload-Labs_第11张图片
不知道为什么这个题我这里包含不成功,可能是我用的xampp的原因,那么来分析一下这种方式需要的条件:
1.php处于fastcgi模式
2.上传目录下要有php文件

优点,相对于.htaccess应用更加广泛
关于.httaccess和.user.ini的详细说明

6.level6

查看源代码:
Upload-Labs_第12张图片
这道题相对于前面几道题少了对大小写的过滤,因此可以使用大小写绕过
Upload-Labs_第13张图片

7.level7

通过6的成功实现,我们可以知道该服务可能是运行在windows下的,因为在windows是对大小写不敏感的,而linux下如果没有特殊配置的话则不是
查看源代码可以发现过滤了.ini了:
Upload-Labs_第14张图片
绕过方法:
使用“.php空格”或者“.php.”后缀名,因为windows下不允许这样的后缀出现,会将其空格和.删除掉
在这里插入图片描述
而这里只过滤了点,因此可以使用空格来绕过

有毒。。。我上传失败。。。

8.level8

与7的方法一样只是使用.绕过

9.level9

查看源代码:
Upload-Labs_第15张图片
发现没有过滤“::$DATA”,因此使用::$DATA绕过:

php在window的时候如果文件名+":: D A T A " 会 把 : : DATA"会把:: DATA"::DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名

因此这个也只能在windows环境下有效

10.level10

查看源代码:
Upload-Labs_第16张图片
发现过滤了文件名前后的空格和文件名后的点,但是上传文件路径使用的file_name,而file_name只去除了一次文件的空格和点,因此我们可以通过“1.php. .”来绕过。

函数处理过程:
trim–>1.php…
deldot–>1.php.
windows–>1.php
Upload-Labs_第17张图片
在这里插入图片描述

11.level11

查看源代码:
Upload-Labs_第18张图片
将黑名单的内容替换成了空,因此考虑双写绕过:
Upload-Labs_第19张图片
成功:
Upload-Labs_第20张图片

12.level12

这道题采用了白名单过滤:
Upload-Labs_第21张图片
尝试%00截断绕过:
Upload-Labs_第22张图片
因为这里使用get的方式接受路径的,因此要将1.php%00写在那里。
这道题的限制在于php版本要小于5.3,并且关闭了magic_quotes_gpc,而且好像要依赖于php_exif,而我这里的环境不具备这样的条件

13.level13

相对于12,将get方式改为了post方式,而post方式不会自动解析%00,那么更改hex:
Upload-Labs_第23张图片

14.level14

该题要我们上传三种图片马:
在这里插入图片描述
在windows下使用该命令即可生成图片马
在这里插入图片描述
上传:(其他的类似)
Upload-Labs_第24张图片


经过include.php?file=upload/1820200420205126.png包含后可以看到文件被解析了,因此成功了

15.level15

这个跟14一样,只是说多检测了image文件类型

16.level16

这个也可以使用14的办法,但是因为要开启php_exif,而我的环境不行。。。

17.level17

这道题上传的代码被二次渲染了,因此我们首先上传一张图片马,然后再下载下来查看其中不变的地方,然后插入我们的代码
Upload-Labs_第25张图片
。。。。。没做出来

18.level18

这道题采用了白名单,有条件竞争漏洞:
使用burp:
首先将我们访问上传的文件的包放入intruder模块(这个时候还没有上传)
Upload-Labs_第26张图片
然后点击start attack,去大量的访问这个地方(先跑个1到两秒)
Upload-Labs_第27张图片
然后使用重放模块,发送我们要上传的包:
Upload-Labs_第28张图片
当看到intruder模块出现200的代码时候就表示上传成功了,就可以停止了

Upload-Labs_第29张图片
可以看到上传成功了

19.level19

这个题直接上传图片马,然后文件包含漏洞就可以了

20.level20

查看源代码:这个题又是黑名单,并且没有去空格和.
Upload-Labs_第30张图片
因此直接在保存名称哪里修改为1.php.或者1.php
Upload-Labs_第31张图片
在这里插入图片描述
看过滤规则没有过滤,.user.ini,感觉也可通过这个绕过

21.level21

查看源代码:
Upload-Labs_第32张图片
发现首先检查了MIME,然后使用了白名单检查,因此可以使用图片马来绕过,这里还有一种方法,使用数组来绕过:
分析流程:
Upload-Labs_第33张图片
因此我们可以向数组的0传入我们想要的文件名,然后数组的2传入jpg,这样的话count=2,然后count-1也就是数组的1是空的,那么拼接出来就是1.php.这样我们也就成功绕过了
Upload-Labs_第34张图片
上传:
Upload-Labs_第35张图片
成功:
在这里插入图片描述

你可能感兴趣的:(Upload-Labs)