预备知识
任意文件上传漏洞简介
由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意PHP脚本。
客户端检测一般在源文件里有专门检测文件上传的javascript代码,最常见的就是检测扩展名是否合法。
这种检测很容易被绕过,但本质还是在客户端检测,不能相信客户端的检测,因为这是可控的,真正有效的检测要放在服务端。因为这种检测可以通过代理绕过。
解析攻击
主要是各web应用程序解析漏洞,直接解析或配合解析。
举例:Apache解析漏洞Test.php.XXX。
建议在单独配置的环境下进行测试,集成环境也行,不过可能会受影响,我测试的在集成环境下解析不了单独环境下就可以,可能是我配置问题。
Nginx 解析漏洞
任意文件名/任意文件名.php | 任意文件名%00.php。
比如原本文件名是test.jpg,可以添加为test.jpg/x.php。
IIS解析漏洞
2003+IIS 6.0
此外还有服务端文件内容检测、文件扩展名检测和路径检测等
实验目的
通过该实验能够理解文件上传的原理并利用文件上传漏洞进行渗透。
实验环境
服务器:win2003+DVWA,IP地址:10.1.1.174
测试者:win7,IP地址随机
实验步骤
实验步骤一:low等级
low等级对用户上传的文件不做防护,直接上传即可。
关键代码:
实验步骤二:medium等级
medium设定了一个过滤规则,规则如下:
if (($upload_type == "image/jpeg")&&($upload_size<1000)){
if (!move_upload_file($_FILES['upload']['tmp_name'],$target_path)){
echo '<pre>';
echo 'your image was not upload.';
echo '</pre>';
}else{
eho '<pre>';
echo $target_path.'succefully uploaded!';
echo '</pre>';
}
else{
echo '<pre>your image was not uploaded.</pre>';
}
}
我们新建一个txt文件更改后缀为.jpg然后上传,同时抓包:修改Content-Disposition后面文件后缀为php,然后转发即可。
可以看到文件上传成功。
文件上传成功,关闭代理之后可以查看文件:
http://10.1.1.174/hackable/uploads/test.php
嗯,一看就是刚刚在桌面上揪的一个密码字典。
分析与思考
1)总结文件上传的防护和绕过方法。
见正文。
2)对比几种绕过方法有什么相同有什么不同?
略。
课后习题