可以看到,设置了白名单,要求我们上传图片类的文件:
查看源代码发现是前端js脚本过滤的,因此我们可以抓包修改文件的后缀:
如图:
可以看到上传成功了,然后就可以使用菜刀连接了
打开网站,查看源代码,发现没有用于过滤文件名的函数,因此不是前端过滤,然后上传文件抓包看看
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
我们再尝试使用1,2的方法发现:
这道题应该是设置了黑名单,那么尝试一下大小写绕过或者php3,php4,php5或者两个一起用,例如Php5
经过测试发现大小写绕过不行,但是php5可以:
查看源代码可以看到:
大小写不行但是别名是可以的
采用3的办法试试看,发现不行:
猜测还是黑名单过滤,那么我们尝试上传一个.htaccess文件
.htaccess:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
SetHandler application/x-httpd-php
接下来上传webshell:
可以看到成功了,我们可以从者两道题总结出,只要是黑名单过滤的都可以尝试一下上传 .htaccess文件
但是.htaccess配置文件只在Apache服务器中起作用,因此首先要想办法判断服务器的类型
这道题把.htaccess也过滤了,没有头绪,去网上查查看,发现这里给出了解题的方法:这里
php.ini是php的一个全局配置文件,对整个web服务起作用;而**.user.ini和.htaccess一样是目录的配置文件**,.user.ini就是用户自定义的一个php.ini,通常用这个文件来构造后门和隐藏后门。
auto_prepend_file = //包含在文件头
auto_append_file = //包含在文件尾
不知道为什么这个题我这里包含不成功,可能是我用的xampp的原因,那么来分析一下这种方式需要的条件:
1.php处于fastcgi模式
2.上传目录下要有php文件
优点,相对于.htaccess应用更加广泛
关于.httaccess和.user.ini的详细说明
查看源代码:
这道题相对于前面几道题少了对大小写的过滤,因此可以使用大小写绕过
通过6的成功实现,我们可以知道该服务可能是运行在windows下的,因为在windows是对大小写不敏感的,而linux下如果没有特殊配置的话则不是
查看源代码可以发现过滤了.ini了:
绕过方法:
使用“.php空格”或者“.php.”后缀名,因为windows下不允许这样的后缀出现,会将其空格和.删除掉
而这里只过滤了点,因此可以使用空格来绕过
有毒。。。我上传失败。。。
与7的方法一样只是使用.绕过
查看源代码:
发现没有过滤“::$DATA”,因此使用::$DATA绕过:
php在window的时候如果文件名+":: D A T A " 会 把 : : DATA"会把:: DATA"会把::DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名
因此这个也只能在windows环境下有效
查看源代码:
发现过滤了文件名前后的空格和文件名后的点,但是上传文件路径使用的file_name,而file_name只去除了一次文件的空格和点,因此我们可以通过“1.php. .”来绕过。
函数处理过程:
trim–>1.php…
deldot–>1.php.
windows–>1.php
查看源代码:
将黑名单的内容替换成了空,因此考虑双写绕过:
成功:
这道题采用了白名单过滤:
尝试%00截断绕过:
因为这里使用get的方式接受路径的,因此要将1.php%00写在那里。
这道题的限制在于php版本要小于5.3,并且关闭了magic_quotes_gpc,而且好像要依赖于php_exif,而我这里的环境不具备这样的条件
相对于12,将get方式改为了post方式,而post方式不会自动解析%00,那么更改hex:
该题要我们上传三种图片马:
在windows下使用该命令即可生成图片马
上传:(其他的类似)
经过include.php?file=upload/1820200420205126.png包含后可以看到文件被解析了,因此成功了
这个跟14一样,只是说多检测了image文件类型
这个也可以使用14的办法,但是因为要开启php_exif,而我的环境不行。。。
这道题上传的代码被二次渲染了,因此我们首先上传一张图片马,然后再下载下来查看其中不变的地方,然后插入我们的代码
。。。。。没做出来
这道题采用了白名单,有条件竞争漏洞:
使用burp:
首先将我们访问上传的文件的包放入intruder模块(这个时候还没有上传)
然后点击start attack,去大量的访问这个地方(先跑个1到两秒)
然后使用重放模块,发送我们要上传的包:
当看到intruder模块出现200的代码时候就表示上传成功了,就可以停止了
这个题直接上传图片马,然后文件包含漏洞就可以了
查看源代码:这个题又是黑名单,并且没有去空格和.
因此直接在保存名称哪里修改为1.php.或者1.php
看过滤规则没有过滤,.user.ini,感觉也可通过这个绕过
查看源代码:
发现首先检查了MIME,然后使用了白名单检查,因此可以使用图片马来绕过,这里还有一种方法,使用数组来绕过:
分析流程:
因此我们可以向数组的0传入我们想要的文件名,然后数组的2传入jpg,这样的话count=2,然后count-1也就是数组的1是空的,那么拼接出来就是1.php.这样我们也就成功绕过了
上传:
成功: