DIY装机联盟-电脑故障排除|装机指南|硬件配置|电脑知识

DIY装机联盟-电脑故障排除|装机指南|硬件配置|电脑知识

http://www.jinanshengke.com

菜单导航

从浅入深学习PHP文件包含

作者: 庄吉 发布时间: 2021年03月27日 02:23:33

从浅入深学习PHP文件包含

在刚接触这方面的时候就先了解过PHP文件包含,但是通过做题还是觉得之前学的不是很扎实,这次将之前不理解的有疑问的还有学到的一并总结起来。

文件包含

服务器在执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这样会节省开发时间

漏洞产生原因

通过引入文件时,用户可控,没有严格的检验,或是被绕过,操作一些敏感文件,导致文件泄露和恶意代码注入

例如:

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

$_GET['filename']没有经过严格的过滤,直接带入了include的函数,便可以修改$_GET['filename']的值,执行非预期的操作。

在PHP中,通常是以下四个包含函数:

include() include_once() require() require_once()

include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。

从浅入深学习PHP文件包含

include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。

从浅入深学习PHP文件包含

两种文件包含

当包含文件在服务器本地上,就形成本地文件包含,当包含的文件在第三方服务器是,就形成可远程文件包含。

本地文件包含

0x00:无任何限制

测试代码如下:

<?php if(isset($_GET['file'])){ $file = $_GET['file']; include($file); }else{ highlight_file(__FILE__); } ?>

从浅入深学习PHP文件包含

由于没有任何限制所以可以通过目录遍历漏洞来获取到系统中的其他内容,因为考察文件包含经常是结合任意文件读取漏洞的,所以就总结一些文件常见读取路径

/etc/apache2/* #Apache配置文件,可以获知Web目录、服务端口等信息 /etc/nginx/* #Nginx配置文件,可以获知Web目录、服务端口等信息 /etc/crontab #定时任务文件 /etc/environment #环境变量配置文件之一。环境变量可能存在大量目录信息的泄露,甚至可能出现secret key泄露的情况 /etc/hostname #主机名 /etc/hosts #主机名查询静态表,包含指定域名解析IP的成对信息。通过这个文件,可以探测网卡信息和内网IP/域名 /etc/issue #系统版本信息 /etc/mysql/* #MYSQL配置文件 /etc/php/* #PHP配置文件 /proc 目录 #/proc目录通常存储着进程动态运行的各种信息,本质上是一种虚拟目录,如果查看非当前进程的信息,pid是可以进行暴力破解的,如果要查看当前进程,只需/proc/self代替/proc/[pid]即可 /proc/[pid]/cmdline #cmdline可读出比较敏感的信息 # ssh日志,攻击方法: ssh `<?php phpinfo(); ?>`@192.168.1.1 /var/log/auth.log # apache日志 /var/log/apache2/[access.log|error.log]

上面的示例代码是没有任何限制的,如果有限制的本地文件包含要怎么绕过那?

0x01:限制包含文件的后缀名

例如如下代码,增加了杂糅代码,对文件读取产生影响,但还是可以绕过

<?php if(isset($_GET['file'])){ $file = $_GET['file']; include($file . ".Sn0w"); }else{ highlight_file(__FILE__); } ?>

第一种方法:%00截断

前提:PHP<5.3.4
magic_quotes_gpc = Off

http://127.0.0.1/LFI/?file=flag.txt%00

第二种方法:长度截断

前提:PHP版本<=5.2.?
操作系统对于目录字符串存在长度限制
Windows下目录最大长度为256字节,超出的部分会被丢弃掉
Linux下目录最大长度为4096字节,超出的部分会被丢弃掉

如:windows操作系统,.超过256个字节即可

本文地址:http://www.jinanshengke.com/wlzs/63772.html

请遵守互联网相关规定,不要发布广告和违法内容

上一篇:高级MSSQL注入技巧

下一篇:HGAME 2021 week3