文件包含&文件下载

文件包含&文件下载

文件包含

1、文件包含的作用:将文件以脚本的格式执行(根据当前网站脚本类型)

2、各种语言造成文件包含漏洞的简要写法

#PHP:
<?php Include('test.php')?>
#ASP:
<!--#include file="1.asp" -->
#ASPX:
<!--#include file="top.aspx" -->
#JSP:
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp"/>
<%@ include file="head.jsp"%>

PHP

include():
  找不到被包含文件,报错,但会继续运行脚本;
include_once():
  与include()类似,区别在于,当重复调用同一文件时,程序只调用一次;
require():
  找不到被包含文件,报错,并且停止运行脚本;
require_once():
  与require类似,区别在于,当重复调用同一文件时,程序只调用一次;include_once()和require_once()这两个函数只包含一次,适用于在脚本执行期想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
对文件进行操作的其他函数,如f_open(),f_read()

1、include()等函数通过动态变量的方式引入需要包含的文件;
2、用户能够控制这个动态变量;
注:一般来说服务端通过GETPOST两种请求方式来传递需要包含的文件的话就是用户可控的。

无限制包含漏洞

本地文件包含
包含服务器本身存在的恶意文件
a.txt

<?php phpinfo();?>

b.php

<?php
$filename=$_GET['filename'];
include ( $filename);
//http://127.0.0.1:8080/include.php?filename=index.txt
/*
$filename=$_GET['filename'];
include ( $filename ." .html" );
*/
?>

payload:localhost/b.php?filename=a.txt //返回phpinfo页面

远程文件包含

包含其他网站上的恶意文件
远程文件包含利用条件:

在php.ini

文件包含.png

  • allow_url_fopen=on
  • allow_url_include=on

防护:

%00截断(php<5.3.4)

说明:
    PHP内核是由C语言实现的,因此使用了C语言中的一些字符串处理函数。在连接字符串时,0字节(x00)将作为字符串的结束符。所以在这个地方,攻击者只要在最后加入一个0字节,就能截断file变量之后的字符串。
防御:
    禁用0字节

超长字符截断

利用:
    利用操作系统对目录最大长度的限制,可以不需要0字节而达到截断的目的。
    我们知道目录字符串,在window下256字节、linux下4096字节时会达到最大值,最大值长度之后的字符将被丢弃。
    而利用"./"的方式即可构造出超长目录字符串
防御:
    限制用户输入字符长度

任意目录遍历

利用:
    使用"../../../"这样的方式来返回到上层目录中,这种方式又被称为"目录遍历(Path Traversal)"。常见的目录遍历漏洞,还可以通过不同的编码方式来绕过一些服务器端的防御逻辑(WAF)
防御:
    目录遍历漏洞是一种跨越目录读取文件的方法,但当PHP配置了open_basedir时,将很好地保护服务器,使得这种攻击无效。
    open_basedir的作用是限制在某个特定目录下PHP能打开的文件(有点像chroot的感觉)

问号截断

利用:
    http://localhost/FIleInclude/index.php?path=http://localhost/test/solution.php?
防御:
    关闭远程文件包含的配置选项allow_url_include = Off

文件下载

常见:

#文件名,参数值,目录符号
read.xxx?filename=
down.xxx?filename=
readfile.xxx?file=
downfile.xxx?file=
../ ..\ .\ ./等
%00 ? %23 %20 .等
&readpath=、&filepath=、&path=、&inputfile=、&url=、&data=、&readfile=、&menu=、META-INF= 、
WEB-INF

1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件读取漏洞
3.提示文件下载,则是文件下载漏洞

pikachu

http://pikachu:8008/vul/unsafedownload/download/kb.png

很经典的文件下载

下载数据库配置文件(敏感文件)

⚫ 扫描工具爬行或扫描地址

⚫ 下载好的文件代码中去分析路径(可见文件)和包含文件获取

http://pikachu:8008/vul/unsafedownload/execdownload.php?filename=../../../inc/function.php
文件下载.png

该文章的评论已关闭