漏洞原理
文件包含函数
本地文件包含漏洞
仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
远程文件包含漏洞
能够通过url地址对远程的文件进行包含
敏感文件路径
PHP伪协议
PHP带有很多内置URL风格的封装协议
?file=php://filter/read=convert.base64-encode/resource=index.php
php://filter/ 是一种访问本地文件的协议——读取文件源码,/read=convert.base64-encode/ 表示读取的方式是 base64 编码后,resource=index.php 表示目标文件
如果不进行编码,index.php会直接执行,见不到文件内容。
php://input 任意代码执行
post请求体中的内容会被当做php代码执行
data://text/plain 任意代码执行
协议格式: data://资源类型;编码方式,编码后的数据
zip:// 用来读取压缩包中的文件
将webshell.txt压缩成zip,再将后缀名改为合法格式上传至服务器,再通过zip伪协议访问压缩包里的文件,从而链接木马
file:// 读取本地文件
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen
防御方式
关闭危险设置
白名单过滤
设置相应的白名单
过滤敏感字符
../ php http 等
开启魔术引号开关
magic_quotes_gpc=on,会把%00转义成NULL.
———伪协议参考1