> 백엔드 개발 > PHP 튜토리얼 > 论PHP常见漏洞第二弹:常见的包含漏洞

论PHP常见漏洞第二弹:常见的包含漏洞

WBOY
풀어 주다: 2016-06-23 09:09:34
원래의
1020명이 탐색했습니다.

包含一般也就分为LFI、RFI,即local file inclusion和remote file inclusion

LFI

对于LFI的话,因为很多都限制了包含的后缀结尾必须为.php, Include ($a.'.php') 例如这种的。

所以我们想包含我们的图片马儿的话,那么就需要截断后面的这.php

  1. 00截断。需要gpc off && php

  2. 长文件名截断。反正这个我很少成功。

  3. 转换字符集造成的截断。这个对包含的话基本用不上。

还有一些cms限制包含的后缀必须为.php,例如下面一段简单的代码

$include_file=$_GET[include_file];if ( isset( $include_file ) && strtolower( substr( $include_file, -4 ) ) == ".php" )        {                    require( $include_file );        }
로그인 후 복사

对传递过来的截取了后面4个字符,然后判断是不是“.php”,如果是“.php”才进行包含。这里可以用zip(或者phar)协议嘛(当然这个也是找laterain学的,哈哈)。

首先新建一个1.php,里面随便写个phpinfo吧,

然后压缩成.zip,接着把zip的名字改成 yu.jpg。

然后把这个.jpg上传上去 然后包含:

对于一些LFI找不到上传图片的地方的话,也有很多牛发过了一些不能上传图片LFI的技巧,各种包含日志、环境变量啥的,这里我就也不多说了。

RFI

下面再来说RFI。

如果能RFI的话,那么就是最方便的了。包含远程文件,或者又是 php://input data 啥的,各种伪协议。

但是也都知道RFI最大的限制条件就是需要 allow_url_include on 且“变量前未定义路径”或者“常量”。

而 Allow_url_include 默认都是off,那么无论是 allow_url_include on 还是“变量前无路径”或者“常量”,那都是RFI的硬伤。

这里介绍一种在allow_url_include off的情况下也能rfi的技巧,但是成功率也并不太高。

首先在php.ini里看一下 allow_url_include :

; Whether to allow include/require to open URLs (like http:// or ftp://) as files.allow_url_include = Off
로그인 후 복사

翻译过来就是,允许包含url,例如 http:// 、 ftp:// 之类的协议。当off的时候肯定就是不允许去包含这样的协议。

这里我们先来测试一下:

<?phpinclude($_GET[yu]); 
로그인 후 복사

首先 allow_url_include && allow_url_fopen 都为on的时候

成功RFI。

然后 allow_url_include 为 on,allow_url_fopen 为off

直接包含远程文件失败。这时候我们用一下伪协议试试。

再次成功rfi。

当allow_url_include && allow_url_fopen 为off的时候。

伪协议失败。

而包含文件的方式:

URL file-access is disabled in the server configuration ,说明也不允许包含。

然而,肯定还有不少人记得很久以前的那个星外无可执行目录的时候,利用远程调用cmd继续提权。

那个利用的是共享文件,然后在星外主机上来执行。

那么这里我们也试试:

包含共享文件成功!这里只本地测试了,没具体测试远程。但是由于445的原因 可能基本都失败。

转载自: http://drops.wooyun.org/papers/4544 ,在原文基础上有简单整理修改。

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿