1.php文件上传+文件包含漏洞利用过程
##先说一句:php是世界上最好的语言!!
正文:
因为在一般情况下,文件包含漏洞和文件上传是联合在一起使用威力更大,所以在这里一起讲。
文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
include:使用include函数引用外部文件的时候,只有代码执行到include时,调用的外部文件才会被引用并且读取,当引用错误时,系统只会给个警告,而php文件是会继续执行的。
require:在php文件被执行之前,php解析器会用被引用的文件内容替换require语句,然后与require以外其他的句子组成一个新的php文件执行程序。
include_once:使用该函数时,会在导入文件前先检查该文件是否在其他部分被引用过,如果有,则不会重复引用该文件(因为在同一个程序中导入同一个文件,php是不允许相同名称的函数被重复声明的)。
require_once:require_once与require的功能基本相同,不同的是在应用require_once时,在应用require_once时会检查在引用的文件中是不是已经在其他程序中被引用过,如果有,则不会再引用该文件。(使用此函数在同一页面中引用了两个相同的文件,那么输出时,只有第一个文件被执行,第二个文件则不会被执行)。
文件包含(本地文件包含和远程文件包含):
1.本地文件包含:顾名思义就是调用本地的脚本进行文件包含,通过相对路径的方式找到文件并且读取一些敏感信息和数据。
我们可以尝试先往服务器上面放两个文件
include.php
<?php
$file = $_GET['file'];
if($file){
include $file;
}
>
include.txt
<?php
phpinfo();
?>
我们可以直接通过相对路径去访问文件:
此时
如果我们这时访问另一个文件aa.jpg(此图片写上一句话马),然后我们先利用dvwa靶场进行上传后,再用文件包含读取或者用蚁剑直接连接一句话马:
aa.jpg里面被写入了一句话木马,这个时候我们用蚁剑连接,要注意蚁剑不会识别jpg文件,所以我们先获取cookie后再操作.
然后进入到后台去了,这就是我所理解的本地文件包含配合文件上传了(文件上传这里省略)
2.远程文件包含:就是只能运用url地址是写入脚本来完成文件包含,难度要大一些。
需要php内置函数:allow_url_fopen = on ,allow_url_incude = on
通过远程包含文件读取一些重要的文件。
提到远程文件包含就不得不提一下php伪协议了,因为是php自己定义的协议,所以叫做伪协议,具体可以自己去网上看看:
<?php
file:// 访问本地文件系统
http:// 访问http(s)网址
ftp:// 访问ftp(s)网址
php:// 访问各个输入输出流网址
zip:// 访问压缩文件
data:// 访问数据
ssh2:// source shell 2
expect:// 处理交互式的流
glob:// 查找匹配的文件路径模式
phar:// php归档文件
ogg:// 音频流
?>
防护措施:
建议设置白名单
关闭一些重要的函数