解题思路
拿到文件上传的题目,应该思考三点:
1)文件上传漏洞
2)文件解析漏洞
3)语言特性(比如prel语言的ARGV文件句柄)
- 一般来说文件上传漏洞大多数是
1.后缀名(php,php3,php4,php5,phtml.pht)
2.文件头内容 3.content-type的绕过 4.前端js检验
- 文件解析漏洞大多都是针对服务器的(1,2主要还是看配置文件)
1.Apache: 多后缀漏洞 .htaccess的利用 .user.ini的利用
2.Nginx: PHP CGI解析漏洞 空字节代码执行漏洞 .user.ini的利用
3.IIS5.x-6.x: 文件解析 目录解析漏洞 .user.ini的利用
- 语言特性主要还是看情况,百度多收集吧
正常解题过程
我们拿极客大挑战的一道题来说
这是一道很标准的文件上传的题目
我们上传一句话木马
<?php eval(POST[‘shell’]);?>
这种情况就要加文件头幻数并抓包查看content-type的值是否为image/jpeg
修改为如下:
这种情况就是PHP后缀名的检测了,如上所述,尝试phtml可以绕过
又被检测出来了 解码也行意思就是就是不允许有 “<?” 出现,那就修改为
终于成功上传
访问文件(自己一个个浏览目录啥的吧,直接最后一步读文件)
这题就这样结束了
这里有别的想法,会不会有服务器的解析漏洞呢
另外的思考
我们看看服务器解析漏洞,那我们就要知道他是什么服务器(随便修改URL就可以)
可以看到这是个Apache的服务器试想用他的解析漏洞来实现
先尝试多后缀漏洞
刚刚不是不允许我们用php作为后缀名,我们利用这个漏洞传上去试试
也是成功上传,我们访问一下文件
很明显不成功。为什么,记住我之前说的,配置配置配置
所以应该被防御了
利用.htaccess(配置配置配置)
而要想.htaccess文件生效有两个条件
尝试上传
上传成功。然后再上传123.jpg
上传成功。但是访问还是那个样子
不成功说明压根不满足解析.htaccess的条件
.user.ini
这个条件需要包含.user.ini的文件夹下有正常能被解析的php文件
可惜没有,别想了