https://www.cnblogs.com/GTL-JU/p/16831597.html
日志包含漏洞
日志包含漏洞属于是本地文件包含,同样服务器没有很好的过滤,或者是服务器配置不当导致用户进入了内网,本来常规用户是访问不了这些文件的,但由于发起访问请求的人是服务器本身,也就导致用户任意文件读取。例如:某php文件存在本地文件包含漏洞,但无法上传文件,利用包含漏洞包含Apache(看服务器是Apache还是nginx)日志文件也可以获取WebShell。
当然,需要先开启服务器记录日志功能
当我们请求该服务器页面时,Apache就会在日志文件内记录下我们的操作,并写到access.log文件中。就像这样。
通过访问日志,我们可以得到一些关键信息,如IP地址,错误信息以及客户端的每次请求及服务器响应的相关信息等。
不同的系统存放日志文件地方和文件名会不同,所以访问的路径也会不同
apache一般是/var/log/apache/access.log
nginx的log在/var/log/nginx/access.log(访问日志)和/var/log/nginx/error.log(错误日志)
在访问URL时,服务器会将它编码,所以我们一般通过抓包注入
例题:
[HNCTF 2022 WEEK2]easy_include
最开始我打开环境后,看到它过滤的一些信息之后,就在那儿各种做,各种传参,一点用没有,还是没做出来,后来在网络请求头这儿看见了nginx/1.18.0这个东西,去搜了WP才会做的
第一步,URL:?file=/etc/passwd 判断是否存在日志包含漏洞,访问成功,说明存在这个漏洞
根据提示我们知道是nginx服务器,url:?file=/var/log/nginx/access.log 我们访问日志文件,可以看见回显的都是User-Agent里的信息,那我们抓包,在User-Agent里注入就行了
抓包后,在User-Agent里输入:<?php system('ls');?>(这儿不知道为什么,每条命令都是发送了两次以上才发送成功)
没有看到信息,接着查看根目录:<?php system('ls /');?>
看到了flag,直接读取它:<?php system('cat /*******')?> 就行了
这儿不知道为什么,每次发送都是发送了两次以上才得到回显,不知道因为什么。
看了很多WP好像还有一种方法,就是在User-Agent里传入一句话木马(例:
<?php @eval($_POST['123']);?>),然后又用POST传参123=system("ls");进行命令执行,因为一直发送不上去,可能是环境问题,还有我感觉这种方法多麻烦了一步,我就没有用这种方法去再写一遍。
笔记
看了很多师傅们的WP,发现他们做日志包含漏洞时,都要传入一句话木马文件,然后再POST传参进行命令执行,但是这一题还没有遇到,可能是因为它的日志里显示了UA的信息,所以可以直接再UA里进行命令执行吧。再多做做题!!!