简单了解文件包含漏洞
- 原因:
- 内容包含
(就是在开发的时候, 如果用到重复的代码, 只要引用那段代码就可以了 - 函数包含
就是将被多次重复使用的方法函数单独存起来, 用到的时候引用就可以了
分类:
1.
本地包含(Loacl File Inclusion , 即 LFI) , 目录遍历, 任意访问文件漏洞
可以通过固定文件名, 通过接口动态包含, 包含恶意代码或图片, 包含敏感文件等
远程包含(Remote File Inclusion) RFI
区分XXE , SSRF , RFI
- XXE(XML外部实体注入)
原因: 使用XML传输数据并且允许解析外部实体.
后果: 导致访问敏感文件, 探测端口,执行系统命令等 - SSRF(服务端请求伪造)
原因:
使用了 curl_exec()之类的函数
后果:
导致端口扫描,攻击内网主机, 绕过防火墙, 获取敏感信息, 访问大文件造成内存溢出, 操作Redis等问题. - RFI(远程文件包含)
原因:
使用了include
后果:
导致任意文件访问, 包含shell的代码.
相关函数(php)
可到php官网上查看具体作用
- include
- include_once
- require
- require_once
- fopen
- readfile
- highlight_file
- show_source
- file_get_content
- file
php中的伪协议
https://www.php.net/manual/zh/wrappers.php 一共12个, 当然其中的功能模块必须在源代码中开启才能使用, 不然无法使用的.
演示
此处使用CTFHub
学习 ----->技能树里面的Web-------> RCE可自行练习. 可以借助插件hackbar获取信息.
文件包含漏洞的挖掘
- url中的关键字:
page, file, file_name , include
例如:
?file=content
- url中出现文件名
^^^.php , ^^^.html
例如:
?home=random.html
?page=random.asp
挖掘流程:
发现漏洞--->上传shell(读取敏感文件)--->执行恶意代码
可利用的工具
https://github.com/D35m0nd142/LFISuite
**小技巧: 如果要在url中指定路径的时候, 可以集合kali中的wfuzz, 用的时候因为不知道几级所以可以多打几个../../../../../../ 多了没关系,不影响的.
文件包含漏洞的修复
- php配置
将两个函数关掉就可以了.
- 禁用动态配置
- 过滤协议,目录字符
- 设置文件白名单
就像靶场中源代码中的那样, 设置白名单,黑名单.