我的编程空间,编程开发者的网络收藏夹
学习永远不晚

iwebsec 文件包含篇 (已完结)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

iwebsec 文件包含篇 (已完结)

01- 本地文件包含

感觉没有什么说的,因为这个靶场没有很好的展示效果。有限制的本地文件包含漏洞是指代码中为包含文件指定了特定的前缀或者.php、.html等扩展名,攻击者需要绕过前缀或者扩展名过滤,才能利用文件包含漏洞读取操作系统中的文件,获取敏感信息。

可以看到这个关卡是没有进行任何过滤的

在这里插入图片描述

那么我们就可以直接读取重要的系统文件了。

在这里插入图片描述
注意,这里大家可能会对…/的数量产生疑问。这里我解释一下,只要你的…/的数量>你使用最少…/从当前目录回到根目录/的数量即可。也就是说你这里使用1000,10000个…/最终回到的就是根目录

在这里插入图片描述

可以看到…/的数量只要足够多就可以。

02- 本地文件包含绕过

在这里插入图片描述

可以看到这个使用指定后缀。那么使用%00截断即可

在这里插入图片描述

ok,这个也讲完了。

03- session本地文件包含

当可以获取Session文件的路径并且Session文件的内容可控时,就可以通过包含Session文件进行攻击。直接看源码

在这里插入图片描述

可以看到满足Session文件的内容可控。

所以我们就要差获取Session文件的路径。有两种方法

1)通过phpinfo的信息获取Session的存储位置,这里可以利用第一关获取

在这里插入图片描述

可以看到路径为/var/lib/php/session

2)通过猜测默认的Session存储位置尝试。

通常在Linux中session默认存储在/var/lib/php/session目录下。

我们先访问http://192.168.6.153/fi//03.php?iwebsec=,然后利用第一关访问Session文件,因为这一关没有文件包含可以利用。

在这里插入图片描述

大家可以在访问的时候F12查看信息获取SeeionID的值。

然后访问http://192.168.6.153/fi/01.php?filename=/var/lib/php/session/sess_ilbuddbmsbmg5aod59s07cctv7

在这里插入图片描述

然后访问靶机中的session目录验证一下

在这里插入图片描述

注意,这里不是在根目录,大家可以使用sudo find / -name session查看

日志文件包含

服务器中的中间件、SSH等服务都会有记录日志的功能。如果开启了记录日志的功能,用户访问的日志就会存储到不同服务的相关文件中。如果日志文件的位置是默认位置,就可以通过访问日志将恶意带代码写入日志文件中,然后通过文件包含漏洞日志中的恶意代码,获取权限。

这里使用第一关来做这个日志文件包含的实验。

首先我们修改User-Agent的内容,将恶意代码存储到日志文件中,这里我使用hackbar自带的修改功能,或者可以使用bp进行修改

在这里插入图片描述

接下来,看最终的结果

在这里插入图片描述

可以看到顺利执行,接下来读取/etc/passwd文件内容

在这里插入图片描述

可以看到顺利读取。

04- 远程文件包含

远程文件包含是指包含的文件并不是本地服务器的,而是通过URL的形式包含的其他服务器上面的文件,从而使目标主机执行恶意代码。

漏洞利用条件:allow_url_fopen = on 和 allow_url_include = on

在这里插入图片描述

可以看到没有任何过滤,直接远程包含即可

在这里插入图片描述

这里大家filename里面的ip地址直接在cmd下ipconfig查看把192的都试一下,如果你知道自己是哪一块网卡也行。对了,这个要开启apache,要不然没用。

在这里插入图片描述

在这里插入图片描述

大家注意看一下这两张图片中php的版本,为什么会版本不同呢?

这里给大家解释一下,第一张图片版本为5.4.45的原因是因为文件为shell.php在文件包含前这个php文件就会允许生成的phpinfo,然后靶机会将结果显示出来,大家可以看一下自己启动apach服务器php的版本

在这里插入图片描述

可以看到我的版本是5.4.45的。

然后第二张图片的php版本就是靶机的php版本了。因为上传的是txt文档,虽然自己的服务器不会运行,但是被目标靶机包含后就会执行了。

这里给大家看一下在自己主机上访问shell.txt和shell.php的结果

在这里插入图片描述

这也是文件包含具体步骤。好了,远程文件包含也解释清楚了

05- 远程文件包含绕过

这和04一样没什么说的,说一下绕过方法

1)'?'绕过

2)‘#’ 绕过 %23

3)空格绕过 %20

这里大家自己去搞吧。

06- php://filter伪协议

php://filter是元封装器,设计用于数据流打开时的筛选过滤应用,对本地磁盘文件进行读取。

以下两种用法相同

1) ?filename=php://filter/convert.base64-encode/resource=xxx.php2) ?filename=php://filter/read=convert.base64-encode/resource=xxx.php

利用php://filter读取本地磁盘文件 时,PHP配置文件不需要开启allow_url_fopen 和 allow_url_include.

php://filter参数

名称描述
resource=<要过滤的数据流>该参数是必需的。指定要过滤的数据流
read=<读链的筛选器列表>该参数可选。可以设定一个或多个筛选器名称,以管道符(|)分分隔
write=<写链的筛选器列表>该参数可选。可以设定一个或多个筛选器名称,以管道符(
<;两个链的筛选器列表>未read=或write=作前缀的筛选器列表会视情况应用于读或写链

在这里插入图片描述

可以看到利用?filename=php://filter/convert.base64-encode/resource=/etc/passwd,就可以读出passwd的内容

07- php://input伪协议

php://input可以访问请求的原始数据的只读流,即可以直接读取POST上没有经过解析的数据,但是使用 enctype = "multipart/form-data"的时候 php://input 是无效的。也就是POST里面的数据会被执行,从而导致非常严重的危害。

需要目标主机开启allow_url_include

在这里插入图片描述

大家可以看到这里面直接就是有 php://input,我们直接POST传数据就可以了。搞的我还以为我搞错了,原理后台就直接已经添加了这个。

在这里插入图片描述

可以看到php://input 可以获取POST传入的数据。这个没什么好玩的,下面用 第六关 演示php://input 虽然第六关是使用filter,但是都一样。

在这里插入图片描述

大家可以看到,传入的POST数据顺利执行了。

那么大家会好奇,为什么第七关显示的是数据,而第六关直接运行了呢?

不知道大家有没有注意到一个使用了file_get_contents一个使用的是include。

这里给大家看一个好玩的。

在这里插入图片描述

不知道大家发现了什么没有,POST 和 GET 的结果竟然是一样的。为什么呢?

其实这两者是没有什么区别的,源码中获取filename是使用GET 方式获取的,所以说,无论你使用GET还是POST请求最终filename获取的都是一样的内容 php://input 。

在这里插入图片描述

到这里我们就可以想到,如果使用POST方式获取filename这种方法是不是就不行了呢? 对的,如果后台使用POST方式获取filename的话,php://input就不可以使用了。 OK,这一关到这也就结束了。

08-php://input伪协议利用

07已经讲解了。这里就不重复讲了。

09- file://伪协议利用

file:// 伪协议可以访问本地文件系统,读取文件的内容。

利用file:// 时,PHP配置文件不需要开启allow_url_fopen 和 allow_url_include.

?filename=file:///etc/passwd 

这个也没有什么可以讲的。下一个

10-data://伪协议利用

从PHP 5.2.0 起,数据流封装器开始有效,主要用于数据流的读取,如果传入的数据是PHP代码,就会执行任意代码。

使用方法

data://text/plain;base64,xxxxx(Base64 编码后的数据)

利用data://时,PHP配置文件需要开启allow_url_include 和 allow_url_fopen。

?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

在这里插入图片描述

大家这里要注意以下。

   ==>  进行base64编码 PD9waHAgcGhwaW5mbygpOz8+此时出现特殊符号 + ,我们要将 + 进行一次url编码 变为 %2b ,否则不会正常执行。

Base64 空格,加号问题 - hongdada - 博客园 (cnblogs.com)

phar://伪协议

phar:// 是用来进行解压的伪协议,phar://参数中的文件不管是什么扩展名,都会被当作压缩包。

需要开启allow_url_include,利用版本应高于php5.3.0

用法:

?file=phar://压缩包/内部文件

这里先给大家简单演示一下。后面配合文件上传和phar来一起搞

在这里插入图片描述

大家可以看到我a.php文件内容为

error_reporting(0);$filename = $_GET['filename'];include($filename);highlight_file(__FILE__);?>

shell.zip文件中就只含有shell.php文件。注:这里使用phar一定要用zip压缩,rar等其他不可以。

这里可以将shell.zip改为shell.jpg

在这里插入图片描述

同样可以达到目的。

下面的实验大家可以看一下

接下来我就来做文件上传+文件包含配合phar的简单实验。首先一点是要有文件包含的点,否则没用。

给大家先看一下做实验的源码

<html><meta http-equiv="Content-Type" content="text/html;  charset=utf8" /><body>  <form action="" method="post" enctype="multipart/form-data" name="upload" onsubmit="">    <input type="hidden" name="MAX_FILE_SIZE" value="204800" />    请选择要上传的文件:<input type="file" name="upfile" />    <input type="submit" name="submit" value="上传" />  </form></body></html><?phperror_reporting(0);$uploaddir = 'uploads/';if (isset($_POST['submit'])) {  if (file_exists($uploaddir)) {    if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploaddir . '/' . $_FILES['upfile']['name'])) {      echo '文件上传成功,保存于:' . $uploaddir . $_FILES['upfile']['name'] . "\n";    }  } else {    exit($uploaddir . '文件夹不存在,请手工创建!');  }  //print_r($_FILES);}$filename = $_GET['filename'];include($filename);// highlight_file(__FILE__);?>

我们先上传zip文件展示一下效果。

在这里插入图片描述

可以看到上传成功,并且路径也知道。

接下来使用phar就好了。

在这里插入图片描述

可以看到顺利执行了。

接下来我将shell.zip改为shell.jpg

在这里插入图片描述

大家可以把Content-Type修改一下,不修改也没有问题,因为源码没有任何过滤。

在这里插入图片描述

可以看到同样顺利执行了。好了,phar就讲到这里了。

zip://伪协议

zip://伪协议和 phar://伪协议在原理上类似,但用法不一样。

用法如下:

zip://[压缩文件绝对路径]#[压缩文件内的子文件名]

注意:#在浏览器中要转换为为%23

在这里插入图片描述

可以看到成功执行。好了文件包含到此结束。

来源地址:https://blog.csdn.net/qq_60829702/article/details/129868872

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

iwebsec 文件包含篇 (已完结)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

VC++开发中完美解决头文件相互包含问题的方法解析

本文中,为了叙述方便,把class AClass;语句成为类AClass的声明,把class AClass开始的对AClass的类成员变量、成员函数原型等的说明称为类的定义,而把在CPP中的部分称为类的定义
2022-11-15

Android APK文件结构 完整打包编译的流程 APK安装过程 详解

Android apk文件结构 打包编译的流程Android官网 配置构建 流程Configure your buildThe build processAPK文件结构assetsreslibMETA-INFAndroidManifest.
2022-06-06

SQLServer 错误 16591 已达到多个逻辑文件路径限制。 语句包含 %ld 逻辑文件路径,允许的最大限制为 %d。 故障 处理 修复 支持远程

详细信息 Attribute 值 产品名称 SQL Server 事件 ID 16591 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 ...
SQLServer 错误 16591 已达到多个逻辑文件路径限制。 语句包含 %ld 逻辑文件路径,允许的最大限制为 %d。 故障 处理 修复 支持远程
2023-11-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录