php 的include结构可以用于包含并运行指定文件,不过文件的路径在一些情况下会被截断,比如路径中包含ascii值为0的字符。先上一段演示代码:
<?php $s=$_GET['s']; $path = "demo/$s/"; include($path."style.css"); ?>
这是很普通的一段代码,根据用户输入的$s值,包含demo目录下的$s目录下的style.css文件(O(∩_∩)O,示例代码,别管有什么实际用处)。
看到这段代码,首先就想到 $s可以随意伪造,不过无论我们怎么伪造,似乎都没有多大利用价值,因为
include([demo/upload/1.jpg/style.css")或者是
include("demo/upload/1,jpg?/style.css")等等构造出来的,都不符合include的路径规定,都会抛出异常。
不过事实上,因为include的路径可以被截断,所以有了下面的利用方式:
include("demo/upload/1.jpg".chr(0)."/style.css")
在chr(0)处会发生截断,上面这句就等效于include("upload/1.jpg"),漏洞爆出来了^_^,接下来,就是怎么让$s成为我们希望的值(假设开始的那段演示代码保存在test.php里)
http://www.2cto.com /test.php?s=upload/1.jpg%00
后面的%00就是我们要的,这样路径就会被截断了
文章作者:荆棘鸟 本文地址:http://www.classover.com.cn/?p=3092
查看更多关于php include 路径截断漏洞的利用 - 网站安全 - 自学的详细内容...