目录
无验证
这里上传的文件没有限制,直接上传一句话木马
显示出相对路径
接下来写post请求查看flag的文件
可以看到flag_197015395.php,cat即可,在源代码里面就有flag
前端验证
上传php文件,前端校验不允许上传php文件
看到题目提示了js前端验证,前端靠JavaScript来进行验证,所以只要禁用JavaScript的功能就可以了
可以看到上传成功,接下来和无验证一样的操作就可以了
.htaccess
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
先上传.htaccess文件,上传成功后,它会将我们上传的jpg文件解析成php文件
接着上传图片马 a.jpg
可以看到上传成功,接下来和无验证一样的操作就可以了
MIME绕过
MIME类型校验就是我们在上传文件到服务端的时候,服务端会对客户端也就是我们上传的文件的Content-Type类型进行检测,如果是白名单所允许的,则可以正常上传,否则上传失败。
这里就需要用BP抓包将Content-Type修改为 image/jpg, 然后发送数据包
可以看到上传成功,接下来和无验证一样的操作就可以了
00截断
基础知识:
php是基础c语言实现的,C语言中认为0x00是结束符号,文件上传之所以可以00截断,是因为白名单判断的时候是判断后缀,在进行路径拼接的时候用的其他值,然后在进行move_uploaded_file的时候,这个函数读取到hex值为00的字符,认为读取结束,出现00截断
利用条件:
php版本小于5.3.4
magic_quotes_gpc为off(默认为0n)
首先我们上传一个php文件,进行抓包
修改filename="a.php%00.jpg"
/?road=/var/www/html/upload/a.php%00.jpg
在road后添加上a.php%00.jpg road就会使后面部分失去效果,上传后的路径即被固定
forward可以看到上传成功,接下来和无验证一样的操作就可以了
因为我们修改了road,所以路径就是/upload/a.php
双写后缀
看下源码,这里使用了str_ireplace函数将我们的后缀替换成了空,但是只替换一次,所以双写绕过即可
上传一个php小马,修改filename="a.pphphp"
上传成功,我们看到文件后缀为php,然后用蚁剑连接找到flag
文件头检查
直接先传马,抓包
这里把Content-type改为 image/jpg
再在文件内容首部添加GIF89a表示是一个GIF89a图形文件
forward可以看到上传成功
然后用蚁剑连接找到flag