代码审计-3 文件包含漏洞

news2024/12/25 9:32:36

文章目录

  • 代码审计-文件包含漏洞
  • 文件包含漏洞种类
    • 当检测到目标存在文件包含漏洞时可以怎么利用
    • 文件包含中php可使用的协议
  • PHPCMS V9.6.3后台文件包含漏洞
    • 后台路由分析
    • 漏洞寻找

代码审计-文件包含漏洞

在这里插入图片描述
在这里插入图片描述

文件包含漏洞种类

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

当检测到目标存在文件包含漏洞时可以怎么利用

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

文件包含中php可使用的协议

在这里插入图片描述在这里插入图片描述

PHPCMS V9.6.3后台文件包含漏洞

后台路由分析

访问后台登录页面
在这里插入图片描述
从url可猜测出来大致的路由 m为模块,c为控制器,a为方法,pc_hash为参数
使用admin模块中的index控制器中的login方法在这里插入图片描述

漏洞寻找

当我们拿到源码后,可通过seay对文件包含的关键函数进行大致的正则搜索

在这里插入图片描述
此处为此CMS包含漏洞产生的php文件

在这里插入图片描述打开文件查看,此处对$filepath这个变量内容进行了包含
在这里插入图片描述通过分析$filepath的由来我们可以知道,$filepath变量存放的是一个文件的路径
并且在下面还通过file_put_contens函数来将$str中的内容写入到了这个文件中
然后进行include包含此文件

因为会把$str变量中的内容写到这个文件中,所以如果我们能控制$str变量中的内容就能把恶意代码写到此文件中,最后include还会来包含这个文件
在这里插入图片描述
接下来关注点就在$str变量上了,让我们看一下$str变量是怎么来的
通过代码可以看到,$str变量是由$template变量经过两个函数处理后得到的

在这里插入图片描述
继续跟踪下$template变量的由来

如果 isset($_POST['template']) && trim($_POST['template'])为真就将POST传入的参数名为template的值赋给变量$template,如果为假就赋值为空

isset():检测变量是否为NULL
trim():去除字符串两的空格

在这里插入图片描述

可以看到此处只是接收了POST方式传递的值赋给了$template

让我们看一下上面的两个函数new_stripslashestemplate_parse$template做了什么操作才赋值给的$str

new_stropslashes函数

此函数中调用了stripslashes函数来去除反斜杠
如果传入的参数是字符串就直接将addslashes()函数添加反斜杠去除并返回
如果传入的是数组就循环递归将数组中的字符串中的反斜杠去除并返回
在这里插入图片描述
template_parse函数

此函数主要对模板{}中的内容进行替换,也不会影响恶意代码的写入
在这里插入图片描述

经过分析,这两个函数都没有对我们需要写入的恶意代码造成威胁
现在我们则需要知道怎样才能将恶意代码写入到$template变量中

此处可以看到
&data['type']==1时直接返回错误提示
&data['type']==2时才会向下执行,将我们POST[‘template’]传入的值赋给$template,再将$template的值赋给$str,再将$str的内容写入到$filepath变量所存放的路径对应的php文件中,并包含

在这里插入图片描述
跟踪一下&data['type']==2的由来
发现$data中的数据是根据$id这个变量通过get_one()来查询数据库得到的,get_one()的参数是一个数组,键为'id',值为我们传入的$id

也就是说GET['id']传进来的值赋给$id,然后执行get_one()函数get_one()的参数为一个数组,键为字符串'id',值为变量$id

在这里插入图片描述
继续跟踪get_one()函数查看
此函数执行的是一个sql语句的查询操作
因为我们想让$data['type']的值等于2,就需要寻找添加的操作也就是找此处的$data['type']是从哪里添加的
在这里插入图片描述
此函数为添加的函数
此处对数据库进行添加操作的sql语句中的参数都是可以用户传入的
只要根据上面的内容对参数url进行构造让type的值传入为2就可以了

在这里插入图片描述
url进行构造

index.php路由到modules目录m选择block模块c选择block_admin控制器a选择add方法posGET方式提交的参数

dosubmit=1&name=test&type=2POST方式提交的必要参数

dosubmit=1因为ifPOST传递的dosubmit的值做了判断,如果不存在就不会向下执行
POST方式传递的nametype都是下面必要的参数,存在时才会进行赋值给对应的$name$type变量

在这里插入图片描述
访问该地址

在这里插入图片描述
cms是通过pc_hash的值来判断是否登录,登录后重新访问该地址在url后加上pc_hash的值

在这里插入图片描述POST提交之前构造好的参数,此时页面显示操作成功

在这里插入图片描述
此时跳转到该页面,上面添加操作的sql语句也成功执行

在这里插入图片描述

在这里插入图片描述

此页面对应的函数位置
需要的参数有GET传的id,通过对id进行查询返回结果为数组赋值给$data
此时返回的内容就是我们之前进行添加的,所以$data['type']2,继续向下执行

在这里插入图片描述
这里需要POST参数

在这里插入图片描述
所以我们在页面处通过POST将需要的参数传入
函数上面的POST可以不用传,当没有值时就将空赋值给变量了,并不会阻断程序执行不产生影响
下面的POST['template']就是对应的碎片模块的输入框,点击预览进行提交
在这里插入图片描述
写入恶意代码点击预览后$template变量接收到POST传递的值,再将值赋给$str变量
file_put_content函数将$str中的恶意代码写入到$filepath变量中存放的文件路径对应的文件中
最后include$filepath变量中存放的文件路径对应的文件进行包含,导致恶意代码执行

在这里插入图片描述新建test_shell.php成功
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm run dev和npm run serve

npm run dev和npm run serve目录概述需求:设计思路实现思路分析1.npm install命令2.package.json3.npm run serve参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make …

redis基础4——RDB持久化、AOF持久化全面深入解读

文章目录一、redis持久化机制1.1 持久化的背景1.2 两种持久化概念1.2.1 快照方式(RDB)1.2.2 文件追加方式(AOF)1.3 rdb持久化(Redis Database)1.3.1 快照原理1.3.2 触发机制1.3.2.1 手动触发1.3.2.1.1 save…

最常用的python开发工具

有哪些值得推荐的 Python 开发工具 推荐5个非常适合Python小白的开发工具:1、Python TutorPython Tutor是由Philip Guo开发的一个免费教育工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。 通过…

CentOS8克隆虚拟机修改IP,错误:未知的连接 “ens160“

关于CentOS8该如何克隆与修改IP,并设置成静态IP的方法,可以参考我的另一篇文章,我也是一直这么做的。 CentOS8拷贝虚拟机、修改ip、主机 但是最近我再使用我的这篇文章克隆虚拟机的时候,竟然报错了,本来想删除掉克隆…

2023年天津农学院专升本专业课报名、确认缴费及准考证打印流程

天津农学院2023年高职升本科专业课考试 报名、确认缴费及准考证打印操作流程 一、报名操作流程 1. 阅读报名注意事项 请考生于2022年12月5日9点—12月10日12点登录报名系统 http://gzsb.tjau.edu.cn,请认真阅读报名注意事项。2.报名登录 点击“报名”菜单后进入报名…

LeetCode 374. 猜数字大小

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 374. 猜数字大小,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetCode 374.…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校辅导员工作管理系统82aub

对于即将毕业或者即将做课设的同学而言,由于经验的欠缺,面临的第一个难题就是选题,确定好题目之后便是开题报告,如果选题首先看自己学习那些技术,不同技术适合做不同的产品,比如自己会些简单的Java语言&…

【圣诞文】用python带你体验多重花样圣诞树

前言 大家早好、午好、晚好吖 ❤ ~ 在圣诞要来临的前夕,我们来出一起圣诞特辑吧 (虽说可能有一丢丢早,但是等要来了在准备就来不及了呀~) 圣诞节要素 1、圣诞袜,最早以前是一对红色的大袜子,大小不拘。 …

Spring异步任务async介绍与案例实战

关于spring异步任务 简单地说,用Async注释bean的方法将使其在单独的线程中执行。换句话说,调用者不会等待被调用方法的完成。利用spring提供的注解即可简单轻松的实现异步任务处理。 默认线程池问题 Spring 异步任务默认使用 Spring 内部线程池 Simpl…

网页自动点赞

进入网页版QQ空间 ,在开发者模式下创建脚本 var x5,y10;function autoClick(){yy5;var zandocument.getElementsByClassName(item qz_like_btn_v3);for(var i0;i<zan.length;i){if(zan[i].attributes[6].valuelike){zan[i].firstChild.click();}};window.scrollBy(x,y);}win…

LC118原厂直流驱动芯片 SOP-8

直流驱动芯片 LC118 SOP-8 电机驱动电路 马达驱动IC 马达驱动IC LC118的描述&#xff1a; LC118 是为专门为低电压下工作的系统而设计的单通道玩具直流电机驱动集成电路。它具有 H桥驱动器, 采用导通电阻非常小的P-MOS和N-MOS功率晶体管作为开关管&#xff0c;可在瞬间提供大电…

CMake中target_link_libraries的使用

CMake中的target_link_libraries命令用于指定链接给定目标和/或其依赖项时要使用的库或标志。来自链接库目标的使用要求将被传播(propagated)。目标依赖项的使用要求会影响其自身源代码的编译。其格式如下&#xff1a; target_link_libraries(<target> ... <item>…

用Rust写一个链表,非常详细,一遍看懂

前言 在Rust里写一个链表可不是一件容易的事&#xff0c;涉及到很多的知识点&#xff0c;需要熟练掌握之后才能写出一个不错的链表。这篇文章主要介绍了如何写一个Rust链表&#xff0c;并且补充了涉及到的很多的额外知识点&#xff0c;尤其是所有权问题。 首先&#xff0c;你需…

人工智能内容生成元年—AI绘画原理解析

AIGC体验生成一、背景 2022年AIGC&#xff08;AI生成内容&#xff09;焕发出了勃勃生机&#xff0c;大有元年之势&#xff0c;技术与应用迭代都扎堆呈现。在各种新闻媒体处可以看到诸多关于学术前沿研究&#xff0c;以及相应落地的商用案例。可谓出现了现象级的学术-商业共振。…

phpbugs代码审计第三题多重加密答案错误

phpbugs多重加密 这题官方给的答案是错的&#xff0c;网上给的也是错的&#xff0c;麻烦别直接拿给的答案来抄好吗&#xff1f;就想纠正一下别误导别人了 源码如下: <?phpinclude common.php;$requset array_merge($_GET, $_POST, $_SESSION, $_COOKIE);//把一个或多个…

安卓期末大作业——售票APP源码和设计报告

大作业文档 项目名称&#xff1a;售票APP专业&#xff1a;班级&#xff1a;学号&#xff1a;姓名&#xff1a; 目 录 目录 一、项目功能介绍3二、项目运行环境31、开发环境32、运行环境33、是否需要联网3三、项目配置文件及工程结构31、工程配置文件32、工程结构目录4四、项…

【C语言 数据结构】串 - 顺序

文章目录串 - 顺序一、串的表示及实现1.1 串的概念1.2 串的初始化1.3 复制串1.4 串的判空1.5 串的比较1.6 串的长度1.7 清空串1.8 串的拼接1.9 串的截取1.10 插入子串1.11 串的打印二、串的应用2.1 串的模式匹配 - 基本操作2.2 串的模式匹配 - BF2.3 串的模式匹配 - KMPnext数组…

【学习笔记77】ajax的函数封装

一、封装分析 &#xff08;一 &#xff09;封装方案 1、回调函数方式 将来使用的时候, 可能会遇到回调地狱 2、promise方式 效果不会有变化, 而且还能和 async/await 一起使用 &#xff08;二&#xff09;函数的参数 请求方式: method > 默认值 get请求地址: url > 必填…

Android开发——Jetpack Compose的使用

Android开发——Jetpack Compose的使用什么是Jetpack ComposeJetpack Compose带来的变化Jetpack Compose的两种运用方法将Jetpack Compose 添加到现有项目1.gradle 配置2.使用Kotlin-Gradle 插件3. 添加依赖项创建一个新的支持Jetpack Compose的项目1.创建一些简单应用定义可组…

12.3做题

一.车队问题 1.思路: 先把所在位置进行排序,升序排序, 计算出每辆车在不受其余车的影响时&#xff0c;行驶到终点需要的时间 从后往前看 对于相邻的两辆车 S 和 F&#xff0c;F 的起始位置大于 S&#xff0c;如果 S 行驶到终点需要的时间小于等于 F&#xff0c;那么 S 一定…