文件包含漏洞是个基础且典型的漏洞了,本篇介绍几个相对偏门的知识点
常见的文件包含的函数有哪些?
JSP 能否文件包含致代码执行?需要什么条件
ASPx能否文件包含致代码执行?需要什么条件
PHP RFI 需要什么条件?
PHP LFI 包含日志文件,直接使用浏览器请求恶意代码是否可以打到日志文件?
PHP LFI 常见的getshell的方法?
PHP伪协议有哪些?PHP版本有哪些限制?
%00截断,需要什么条件?与操作系统关系?为什么00能截断?
点号截断和./路径截断需要什么条件?与操作系统有什么关系?Linux是否可成功
文件包含有哪些实战场景?
0x01 常见的文件包含的函数有哪些?
PHP:include() 、include_once()、require()、require_once()、fopen()、readfile()
JSP/Servlet:java.io.file()、java.io.filereader()、静动态include
ASP:include file、include virtual
0x02 JSP 能否文件包含致代码执行?需要什么条件
静态包含:<%@ include file="1.jsp"%>
动态包含:<jsp:include page="1.jsp" flush="true">
动态包含demo
<% String name = request.getParameter("name");%>
<jsp:include page="<%=name%>" />
动态包含,仅支持包含web路径下的jsp文件(如果都web路径的jsp了,直接访问就好,包含来RCE的意义不大…)(像绝对路径、非web路径、非jsp,文件包含通通失败)
静态包含不支持变量赋值,包含文本文件即可。
总体来讲,JSP的文件包含略显xx,但可以留后门使用
0x03 ASPx能否文件包含致代码执行?需要什么条件
任意目录任意文件可被包含,可以把内容当做aspx代码执行
但aspx 的包含不支持动态变量赋值,所以类似jsp静态包含,作用小很多
当然也可以留后门使用(dll)
0x04 PHP RFI 需要什么条件?
allow_url_fopen = On(是否允许打开远程文件)
allow_url_include = On(是否允许include/require远程文件)
两项均为On 才可以远程文件包含
默认的allow_url_include 是Off状态
0x05 PHP LFI 包含日志文件,直接使用浏览器请求恶意代码是否可以打到日志文件?
直接浏览器请求的代码到日志,会URL编码,导致PHP不会正常执行;
可以通过burpsuite 辅助
0x06 PHP LFI 常见的getshell的方法?
结合上传点,包含上传的可信文件(图片、附件类)
结合日志,包含已知路径的日志文件
Session内容可控,session.save_path 的路径结合PHPSESSID去包含
伪协议绕过
0x07 PHP伪协议有哪些?PHP版本有哪些限制?
伪协议做绕过:phar://、data:text/plain、php://input、php://filter、zip:// & zlib:// & bzip2://
0x08 %00截断,需要什么条件?与操作系统关系?为什么00能截断?
PHP内核是由C语言实现的,因此使用了c语言中的一些字符串处理函数。在连续字符串时,0字节()将作为字符串的结束符。所以在这个地方,攻击者这要在最后加入一个0字节,就能截断file变量之后的字符串
需要条件:PHP版本小于5.3.4 ;GPC = Off
Windows&linux php5.2 均测试成功,之前在t00ls发了一个帖子以为linux 不能截断成功。此次看来00截断与操作系统关系不大
0x09 点号截断和./路径截断需要什么条件?与操作系统有什么关系?Linux是否可成功
点号截断,经过测试windows平台下PHPstudy PHP 5.2 216个点即可截断成功(整个URI 长度为268),(并不是网上说的256){需要PHP版本限制}
点号截断,测试linux(kali PHP7) 4096个点并未成功。(最大长度8197提示Request-URI Too Long)
./截断,Windows + phpstudy PHP5.2.17测试成功 256 ;php 5.3.27 测试失败,估计类似00截断需要PHP < 5.3.4 ;Linux php 5.2.16 不成功 4096,可能真如网上所说需要php<5.2.8
0x10 文件包含有哪些实战场景?
CTF场景比较多
实战的PHP环境可以综合运用
目前企业应用java居多,PHP偏少,遇到非PHP,可以考虑后门系列
作为能够getshell (web)的典型手段,在特定场景下还是能够发挥很大作用的,虽然他不如注入、上传、RCE类型那么直接,但可以在一些隐蔽的功能组合利用。