本地文件包含简单练习

测试本地文件包含

分别在windows使用的phpStudy, 在kali上使用的是apache, 漏洞环境使用的是dvwa。

直接读取

这个是最简单的,不说什么。直接上图

lfi1
lfi2

截断

另外一些可以利用的场景即是利用空字符 ,多个.或者./字符绕过。

如果源代码如下:

1
2
$file = $_GET['page'];
include($file.'php');
  1. 可以用空字符来截断%00如下图:
    nullbyte1
    但是空字符是有限制的。即版本不能高于5.3.4。 这时为了测试,将版本改了5.2.7

  2. 可以利用 多个.来进行截断。这里只测试了WINDOWS。 LINUX的需要的更长一些。
    如下图:
    nullbyte2

  3. 也可以利用./来进行截断,同样是在windows下测试。
    nullbyte3

  4. 据说也可以利用/.来进行截断,但是在测试里并没有实现。
    nullbyte4
    nullbyte5
    nullbyte6

php://filter

php://filter类似于一种在打开流时的过滤元包装器。即可以读也可以写。
其应用为: php://filter/read/resource= php://filter/write/resource=, 或者直接php://filter/resource= 也可以加上过滤器php过滤器 这个也常用于CTF的比赛中。

php://filter/convert.base64-encode/resource=的使用下图:
php_filter
php://filter/read使用如下:
php_filter_read

zip:// | phar://

是两个处理压缩包的伪协议。
其中 zip:// 将压缩后的文件打开时用#, phar://用 /

使用这种文件读取方法,首先要先上传一个zip的压缩包。这里我们直接将内容为<?php echo "your wrapper successed"?>的文件压缩完放至 /dvwa/hackable/uploads/路径下, 因为我试着直接上传之后再不能打开,原因还未找到。

同样,这两个伪协议在CTF中也很常用。 HCTF中有一个题也是用的这个小把戏。 可以参看博客里最后一题..(做的比较LOW,求不喷..)
hctf writeup

利用方法如下:

phar1

php://input

php://input is a read-only stream that allows you to read raw data from the request body。 php://input是一个允许在请求体中读取数据的只读流。

利用方式如下:

php_input

本地可包含 /proc/self/environ,log

可参考这篇文章exploit-db shell via LFI - proc/self/environ method, 同时关于log日志的包含大家应该比较熟悉了。这里就放一块来说了。

后边的测试包括SMTP都是在METASPLOITABLE上测试的, 本来想到做环境,后来想到既然有现成的,为什么不用呢??
测试步骤:

  1. 首先要测试是否有LFI漏洞。
  2. 测试是否可包含environ, 或者日志文件, 可猜测的路径有/proc/self/environ, /var/log/apache2/access.log, /var/log/apache2/error.log等, 也可以用这一个burpsuite插件来做.
  3. 尝试在这几个文件中注入php代码。 因为我们知道,include函数可以将含php代码的非PHP的文件解析为php文件。如下:
    include non php file

可以在HTTP的USER-AGENT头注入代码,也可以用CURL来注入。
inject php code from ua

同样可以利用日志文件来进行包含。 当然如果文件太大,可能解析会比较慢。这里我将日志文件的权限设置为了777,否则没有权限读。

lfi_log

通过SMTP来利用

如果目标直接或者通过网络来发送邮件,并在系统上存储www-data 或者apache的邮件,那么可以尝试将php代码通过邮件发送给目标。 如果没有MX记录,但是SMTP对外开放,那么可以用TELNET并向SMTP发送包含PHP代码的邮件来进行利用。 还要就是要有/var/spool/mail/的读取权限。

首先扫描一下SMTP用户:

smtp_user

利用如下图:

首先先如右边所示,利用TELNET将邮件发给WWW-DATA,然后再文件包含/var/spool/mail/www-data
php

利用上传时候的临时文件获得反向SHELL

php在上传时会产生一个临时文件,而这个临时文件会在HTTP会话结束之后删掉。可以用move_upload_file函数来将临时文件移动到另外的位置。如果在这个会话结束之前,将临时文件包含就可以执行反向的shell等命令。 详细如见:PHP_LFI_rfc1867_temporary_files

这个没有将代码写完,先做一个记录。 可见案例链家旗下自如某站一个有意思的文件包含到简单内网渗透(本地文件包含getshell技巧)

links

php wrappers

设置环境

这里有一部分是在WINDOWS下使用的,另外一部分是在linux下。
在windows下的是用的phpStudy, 可以自行设置,linux是使用的kali

git clone form github

1
2
cd /var/www/html/
git clone https://github.com/s4n7h0/xvwa.git

change php7 to php5

1
2
3
4
5
6
apt-get install php5 php-pear php-mysql
//this fit for apache
//from php7 to php5
a2dismod php7.0
a2enmod php5.6
service apache2 restart

change config.php

1
2
3
4
5
$XVWA_WEBROOT = '';
$host = "localhost";
$dbname = 'xvwa';
$user = 'root';
$pass = '';
文章目录
  1. 1. 测试本地文件包含
    1. 1.1. 直接读取
    2. 1.2. 截断
    3. 1.3. php://filter
    4. 1.4. zip:// | phar://
    5. 1.5. php://input
    6. 1.6. 本地可包含 /proc/self/environ,log
    7. 1.7. 通过SMTP来利用
    8. 1.8. 利用上传时候的临时文件获得反向SHELL
  2. 2. links
  3. 3. 设置环境
    1. 3.1. git clone form github
    2. 3.2. change php7 to php5
    3. 3.3. change config.php
|