LFI漏洞成因及利用

转载
自己实验了一波。

一.漏洞原因

主要是php文件里include, require, include_once, require-once 函数不恰当使用引起的。

LFI.php:
LFI.php
"; include($_GET["include"]); echo "2"."
"; require $_GET["require"]; echo "3"."
"; include_once $_GET["include1"]; echo "4"."
"; require_once $_GET["require1"]; echo "5"."
"; ?>
func1.php
";
?>

还有func2.php类似于func1.php。
访问http://127.0.0.1/LFI.php?include=func1.php
返回结果如下:

LFI漏洞成因及利用_第1张图片
Snipaste_2017-08-15_21-48-29.png

发现require之后的代码确实没有执行。
访问 http://127.0.0.1/LFI.php?include=func1.php&require=func2.php&include1=func1.php&require1=func2.php
返回结果如下:
LFI漏洞成因及利用_第2张图片
Snipaste_2017-08-15_21-53-09.png

可以发现 require执行了, 但是include_once 和require_once 由于前面已经包含了php文件, 就没有再执行该部分代码。

二.漏洞利用

看多少记多少吧, 都是骚操作。

1.使用php://filter 协议和base64编码去访问本地文件得到源码

访问http://127.0.0.1/LFI.php?include=php://filter/read=convert.base64-encode/resource=func1.php
结果如下:

LFI漏洞成因及利用_第3张图片
Snipaste_2017-08-15_22-21-00.png

可以发现返回了func1.php 的base64 编码, 在通过将base64 字符串解码, 就可以得到源码。

2. 使用zip:// 协议去访问压缩文件中的文件

这就意味着可以直接绕过后缀名。
比如访问'http://127.0.0.1/LFI.php?include=zip://func1.jpg#func1.php',其中fun1.jpg 是改了后缀的压缩文件。

3.使用phar://协议去读取服务器端的phar文件, 执行 phar 文件中的php 脚本或者其他。这需要事先本地创建一个phar文件再上传到目标站点。

创建phar 文件代码, 其中phar 文件里只包含一个 createwebshell.php 文件。

addFile('createwebshell.php', 'cws.php');
?>

phar文件就相当于 java 里的jar 文件, 只不过phar 文件不可以用压缩文档打开, 可以用编辑器打开, 会发现phar 文件拥有特别的格式。
通过访问http://127.0.0.1/LFI.php?include=phar://webshell.phar/cws.php 可以执行cws脚本, 其中webshell.phar 的后缀可以随意更改以便绕过后缀检查。

你可能感兴趣的:(LFI漏洞成因及利用)