文件包含漏洞

php文件包含漏洞,环境为phpstudy

php文件包含分为本地包含和远程包含,导致文件包含的函数有:
include();
include_once();
require();
require_once();
fopen();
readfile();

一、 php本地文件包含漏洞(LFI)(使用include函数)
1、先来看一个简单的页面
新建一个phpinfo.txt:
在这里插入图片描述
再新建一个shell.php:
文件包含漏洞_第1张图片
访问shell.php,显示了phpinfo.txt的内容:
文件包含漏洞_第2张图片
修改phpinfo.txt内容如下:
文件包含漏洞_第3张图片
再次访问shell.php:
文件包含漏洞_第4张图片
修改phpinfo.txt后缀名为py后,再次访问shell.php:

文件包含漏洞_第5张图片
文件包含漏洞_第6张图片
可以看到,通过shell.php访问的phpinfo页面无论后缀名是什么,都以php代码的形式执行的,如果文件不符合php规则,则以源代码形式输出(就像第一步只是输出了123456)。
2、再来看参数可控的
修改shell.php如下:
文件包含漏洞_第7张图片
访问shell.php页面:
文件包含漏洞_第8张图片
现在我们修改filename的参数值:
文件包含漏洞_第9张图片
文件包含漏洞_第10张图片
可以看到能获取到系统其它文件的内容。
把include修改为require是同样的,两者的区别是:
include是当代码执行到它的时候才加载文件,发生错误的时候只是给一个警告,然后继续执行;
require是只要程序一执行就加载文件,发送错误的时候会输出错误信息,并停止执行。
解决方案:
使用open_basedir限制目录访问
1) php.ini中设置:
文件包含漏洞_第11张图片
注意路径两边不要加双引号(php5.2.17),否则会报错
再次访问其他文件,报错了:
文件包含漏洞_第12张图片
2) 还有一种说是在nginx fastcgi.conf中设置的:
在这里插入图片描述
但是无论我加不加引号,都无法成功,阻挡不了访问其他文件,不知道是不是这里的配置没配好。
在这里插入图片描述
3) 在apache中的httpd.conf设置:
① 在Directory中配置如下参数
文件包含漏洞_第13张图片
重启phpstudy后,再次访问其他文件,报错:
文件包含漏洞_第14张图片
② 在VirtualHost中配置参数
文件包含漏洞_第15张图片
注意内一定要加*:80,不然apache启动不起来,设置好后访问如下:
文件包含漏洞_第16张图片
二、 远程包含漏洞(RFI)
新建一个php页面:
文件包含漏洞_第17张图片
再新建一个hello.txt文件:
文件包含漏洞_第18张图片
访问fileshell.php页面:
文件包含漏洞_第19张图片
查看php.ini中的配置:
文件包含漏洞_第20张图片
allow_url_include配置是关闭的,我们把它打开,再次访问,能访问到:
文件包含漏洞_第21张图片
三、 通过包含不同的文件get shell
收集到的有:
1、文件包含的一些getshell姿势:
https://coomrade.github.io/2018/10/26/%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E7%9A%84%E4%B8%80%E4%BA%9Bgetshell%E5%A7%BF%E5%8A%BF/
上面的文章包含了两部分,一部分是利用php://filter/string.strip_tags造成segment fault,原理是利用了向php程序上传文件时会在/tmp目录下生成临时文件。
一部分是利用了session.upload把木马写入服务端session文件。

2、浅析php文件包含及其getshell的姿势:
https://xz.aliyun.com/t/5535
allow_url_include和allow_url_fopen都开启时,可以利用远程url或者php://协议直接getshell。
allow_url_include和allow_url_fopen都关闭时,在window环境下,可以借助UNC路径。
3、RFI绕过URL包含限制getshell
https://paper.seebug.org/923/
这篇也是当allow_url_include和allow_url_fopen都为off时的攻击场景。

还有下面这篇列了getshell的各种姿势
https://www.jianshu.com/p/0cc01ee0d247
4、包含图片木马写shell
5、包含日志getshell
6、使用PHP封装协议GetShell
7、phpinfo包含临时文件GetShell
8、包含环境变量文件GetShell

你可能感兴趣的:(web,web安全)