4.文件包含漏洞

定义: 程序员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无须再次编写,这种调用文件的过程称为包含。

1.本地文件包含(LFI)

1.读取敏感信息

  • 查看boot文件信息:=../../boot.ini
  • 查看其他敏感信息:


    4.文件包含漏洞_第1张图片
    敏感信息.jpg

2.日志获取webshell

Apache日志:访问日志access.log,错误日志:error.log

  • 确认有本地包含漏洞后,查看日志=..\..\..\Program%20Files\phpStudy\Apache\logs\access.log
  • 通过burpsuite修改上传小马:GET /
  • 菜刀连接日志url,拿到shell

3.配合文件上传

  • 确认有本地文件包含漏洞,上传木马文件:');?>
  • 用菜刀连接

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申请: ');?>
  • 使用菜刀连接:http://www.any.com/FI/shell.php

3.命令执行

  • burpsuite 抓包改php://input,
  • 添加用户:
  • 提权为管理员:

4.file封装协议

读取文件:file://c:/boot.ini


PHP提供了四个文件包含函数:include(),include_once(),require,require_once()


5.防护方案

  • 严格判断包含中的参数是否外部可控
  • 路径限制:限制被包含的文件只能在某一文件夹内,一定要禁止目录跳转字符如"../"
  • 包含文件验证:验证被包含文件是否是白名单的一员
  • 尽量不要用动态包含,可以在需要包含的页面固定写好如'include("head.php");'

你可能感兴趣的:(4.文件包含漏洞)