文件包含

文件包含的成因:在代码中存在的包含函数且参数可以由用户传入时对文件检测不严谨导致漏洞产生

文件包含的危害:

高危,敏感文件泄露,写后门,代码信息泄露

文件包含分类

当allow-URL-open为on的时候,可以进行远程文件包含直接引入外部的URL链接造成危害
为off时就是本地文件包含,只能包含被攻击服务器本地的文件

文件包含发现

漏洞扫描工具
参数值:例如filename=1.php之类的

文件包含利用

1.本地包含敏感文件:可以利用恶意的代码访问对方服务器将恶意代码存储到对方服务器的日志文件中,包含日志文件执行恶意代码

2.伪协议

php:file:///+文件路径

php://filter #读取源码

php://filter/read=convert.base64-encode/resource=include.php这里的read=不写也是可以的

实例

read=后面跟的是过滤器而且filter伪协议后面可以加多个解释器用|连接,例:php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php

解释器

3.php://input 加POST传输代码

这个伪协议是要在allow_url_fopen=off,allow_url_include=On的时候可以执行

这个伪协议访问的时候需要将上传的文件的绝对路径找到,然后访问里面的子文件

4.phar:// 与zip协议类似但可以使用相对路径

zip和phar压缩的文件一定要压缩成zip后缀(不要问我为什么)

5.data://伪协议

必须在两个条件都On的情况下才能执行,这个是将include的文件流重定向到用户可以控制的输入流中

伪协议总结

3.文件上传配合文件包含,可以上传图片马之类的文件然后包含我们上传的恶意文件

4.包含日志文件

通过访问过程将恶意代码放到对方服务器的日志文件中,然后通过文件包含去包含日志文件,执行我们的恶意代码

文件包含绕过

%00截断:在魔术引号关闭且PHP版本低于5.3.4的时候可以使用%00截断后端固定后缀拼接

长度截断:使用.达到一定长度是可以将固定后缀截断

利用URL拼接:在URL后面加上?#截断后缀
目录遍历:通过../返回上级目录包含文件

防护

allow_url_include和allow_url_fopen最小权限化最好全部关掉
设置open_basedir(open_basedir 将php所能打开的文件限制在指定的目录树中)
白名单限制包含文件,或者严格过滤 . / \这几个符号

变量初始化