日志包含漏洞

日志包含漏洞属于是本地文件包含,同样服务器没有很好的过滤,或者是服务器配置不当导致用户进入了内网,本来常规用户是访问不了这些文件的,但由于发起访问请求的人是服务器本身,也就导致用户任意文件读取。

原理

首先需要开启服务器记录日志功能

在不同的系统,存放日志文件地方和文件名不同
apache一般是/var/log/apache/access.log

nginx的log在/var/log/nginx/access.log和/var/log/nginx/error.log

由于访问URL时访问URL时,服务器会对其编码,所以得通过抓包的形式尝试注入

漏洞复现


echo 'file inlcude test';
if(isset($_GET['gu'])){
	include($_GET['gu']);
}
?>

从代码可以看出对get获取的参数没有任何的过滤就直接include了,这就导致了外来人员利用GET传参,从而访问日志文件

实际运用

先通过/etc/passwd判断是否存在ssrf漏洞
因为不管是什么系统,都会在etc目录下存放passwd文件

?url=/etc/passwd

如果成功访问说明是可以访问内网文件, 那么就可以通过这种方式访问日志文件了

在这里插入图片描述

先访问日志文件,发现是nginx服务器,并且看到存储的是客户端的User-Agent信息
在这里插入图片描述接着只要在User-Agent处注入就好了

日志包含漏洞_第1张图片
成功地达到了注入地效果

日志包含漏洞_第2张图片

在ctf中要想找flag的话把phpinfo()换成一句话木马就好了

防护

对于本地文件包含来说,没有什么好的措施,就尽量不使用动态包含文件,或者添加一个白名单

也可以使用Open_basedir的方式防止目录遍历,在php.ini设置open_basedir=“指定目录”

你可能感兴趣的:(每周学习,nginx,服务器,apache)