51 代码审计-PHP框架MVC类上传断点调试挖掘

目录

    • 知识点1:
    • 知识点2:
    • 知识点3:
    • 演示案例:
      • PHPStorm+xdebu断点调试演示
      • Beescms无框架后台任意文件上传
      • Finecms基于前台MVC任意文件上传
      • CItphp基于前台TP5框架任意文件上传
    • 涉及资源:

知识点1:

#关键字搜索: (函数,关键字,全局变量等)
文件上传,$_FILES,move_uploaded_file等
通过函数类带入操作文件类的上传函数,搜索寻找特定地方进行文件上传
程序员为了代码的阅读性,他可能会对代码进行注释,表示这串代码是做什么作用的,你如果搜索文件上传关键字的话,可能会搜到程序员在开发源代码的时候,写到的相关注释的关键字,从而找到文件上传的代码段,来分析这个地方的漏洞
$_FILES是php里面的全局变量,这些都是可以获取到的
通过搜索FILES关键字,也能得到一些进行文件操作的代码段,分析代码的安全性
在这里插入图片描述

#应用功能抓包:(任何可能存在上传的应用功能点)
前台会员中心,后台新闻添加等可能存在上传的地方

你去猜测源码那个地方会存在文件上传,一般是前台会员中心、个人头像、后台新闻添加等可能存在上传的地方,所以这些地方属于应用功能,你只需要找到这些地方,对这些地方进行上传抓包,分析代码的指向文件,他的一些参数,然后再找到对应的地方

知识点2:

MVC开发框架类:https://www.cnblogs.com/wsybky/p/8638876.html

知识点3:

Thinkphp框架: https://sites.thinkphp.cn/1556331

演示案例:

PHPStorm+xdebu断点调试演示

我们把php的代码段打开
在这里插入图片描述
点击一下,把开关开起来,phpstorm + xdebug是用来代码分析,后期代码审计必须要掌握的东西
在这里插入图片描述
找个文件打开
在这里插入图片描述
点击调式
在这里插入图片描述
发现窗户出现选项,这边是调式的信息和控制端的一些东西
在这里插入图片描述
自动打开登录界面
在这里插入图片描述
我需要登录后台进行操作

在这里插入图片描述
点击上传,后面要有调式的参数XDEBUG_SESSION_START=10695,代码在这里一直暂停
在这里插入图片描述
这些是调式的功能键盘
在这里插入图片描述
我们点击下一步会一直向下执行,这个页面在加载的时候,会运行这些代码,我这边直接跳了,会不断地加载新的文件
在这里插入图片描述
这里还验证数据库账号密码这些东西,进入到mysql里面来

这个文件地址,我们在打开的时候,需要我们登录,登录的时候,账号密码在数据库里面,所以它加载这些文件,其实就是匹配数据库配置文件,从数据库文件去连接数据库,然后进行登录的判断,一般登录完之后,才会进行文件上传
在这里插入图片描述
在这里插入图片描述
这就是打开界面,他的所有代码执行的每一步,浏览器访问地址的时候,他执行的每一步都在这里,这是来到登录这里来了,执行登录这个操作,等我访问完,页面就出现,觉得慢,可以跳出
在这里插入图片描述
我们输入账号密码
在这里插入图片描述
登录的一刹那,就会监听到登录的状态
在这里插入图片描述
登录的时候,又开始登录的验证,我们直接跳出,因为登录不是我们验证的方向,我们要验证文件上传,所以我要抓文件上传的代码段
在这里插入图片描述
就登录到这里来了
在这里插入图片描述
这个时候,我们要点文件上传
让他跳出去
在这里插入图片描述
在这里插入图片描述
点上传图像,我们要让他跳出去,把页面正常显示,然后我在抓包
在这里插入图片描述
这里就是文件上传的地方

在这里插入图片描述
只要把图像给找到,这些图片信息慢慢就会显示

在这里插入图片描述
然后我们再点图片上传,代码还没有截获到,因为数据包还没有产生,这个时候我们上传文件,这个地方就截到了,这个地方就是我们核心数据包

在这里插入图片描述
执行执行,开始进行文件上传的操作了
在这里插入图片描述
所以,我们可以通过断点调式,可以不用看懂代码,你就能知道他整个执行流程,经历了那些函数、代码,我们就能知道过滤代码在那里
在这里插入图片描述
上传的时候会加载其它页面,这个就是断点调式
在这里插入图片描述
大个比方,现在1.php在操作,那我们进行抓包,抓到的就是1.php的数据,然后1.php里面可能会引用到2.php的文件里面的函数、自定义函数,但是抓包抓不到2.php,因为他是里面在1运行,不是产生在浏览器,但是我们通过断点调式,可以抓到2.php的数据的,他自动会帮你代码一步步的执行完,从那里引用直接跳到那个文件

打开的所有文件都是我在进行登录上传操作,他加载的所有文件

阅读代码,一步步调用各种文样的代码,断点调式会更细致,没看到的,都帮你加载,抓包只能抓到单一的

这个技术主要是在代码分析,特别像java里面经常用到,因为java代码很多东西,大家可能看不懂,这个时候你用断点调式就能具体分析到指向的文件

代码多的话,我们要一个个追踪,这是很漫长的

Beescms无框架后台任意文件上传

搭建Beescms
在这里插入图片描述
把Beescms源码载进去
在这里插入图片描述
全局搜索上传,结果太多了,我们不好筛选
在这里插入图片描述
我们搜索$_FILES,看那个都行
在这里插入图片描述
我们随便打开一个看
在这里插入图片描述
我们登录到后台先看一下对应文件
在这里插入图片描述
他这个漏洞属于后台的文件上传操作
在这里插入图片描述
找一下文件的触发地址
在这里插入图片描述
抓取数据包,我们找到up、uppic、file_info这三个参数
在这里插入图片描述
我们跟踪代码段,搜索uppic
如果uppic有值,就提交up值
is_uploaded_file定位函数没有定位到,说明是自带函数
在这里插入图片描述
判断函数是否有提交,不是验证
在这里插入图片描述
up_file自定义函数,进行了相关的验证,我们主要是绕过扩展名这里
在这里插入图片描述
pathinfo() 函数
在这里插入图片描述

在这里插入图片描述
不管我怎么加,他最终取的值就是最后一个点的值
在这里插入图片描述
在这里插入图片描述
type的定义类型
在这里插入图片描述
pathinfo把他分割出来,然后取里面的后缀名,然后判断后缀名跟数组有没有对应上,没有对应上就不让放权

我们可以尝试用%00截断
即使上传了也没有用,因为他保存的文件名还是以.svf,所以这个地方搞不了,没有漏洞
在这里插入图片描述
这里有文件上传,我们在这里抓包
在这里插入图片描述
在这里插入图片描述
搜索变量找到对应的地方就完事了,这些都是接收,没什么好讲的
在这里插入图片描述

我们看过滤,主要是看函数,is_uploaded_file判断文件是否存在,然后进行上传
在这里插入图片描述
我们追踪up_img,发现是大小、图片格式的判断
在这里插入图片描述
在这里插入图片描述
这些数据就是我们看到数据包的mime类型,就是看传入的第一个变量的type值和校验的type是否对应,对应就上传成功
这就是典型的没有判断文件后缀,判断的是mime类型
在这里插入图片描述
在这里插入图片描述
判断之后,进行文件上传,文件上传之后,都没有进行过滤,他这里的判断是非常单一的判断
在这里插入图片描述
尝试了一下,发现图片能够上传
在这里插入图片描述

我们改成php文件上传,文件上传漏洞就来了
在这里插入图片描述
文件上传检测不要检测mime,最重要的检测是检测后缀名,因为mime检测是可以伪造的,以一个图片类型的mime去上传脚本文件

Finecms基于前台MVC任意文件上传

把源码打开,通过他的会员中心发现他有文件上传,从而去判断有没有文件上传的一个过程
在这里插入图片描述
我们找功能点,抓到文件上传的包,这个源码就是建立在mvc的框架

在这里插入图片描述
这是mvc的执行流程,浏览器先到控制器,把它编译出来,如果有涉及到数据库,数据库还会把值给它,给它之后,它还会返回给控制器,控制器给视图,视图再给浏览器,这是现在源码的主流架构
在这里插入图片描述
前端js、css、html文件就是属于view,就是我们看到的界面美观;控制器用来接收数据,model把数据进行处理
在这里插入图片描述
很清晰了然,我们直接从目录架构把这个代码找到
在这里插入图片描述
框架一般是mvc的框架,mvc是他的统称,框架是别人写好的mvc架构直接套用
我们找到Index文件,找到他打开一看,这里没有看到s参数的接收和处理,所以这种就是典型的mvc代码结构
在这里插入图片描述
在这里插入图片描述
我们要看入口文件一般在FCPATH、WEBPATH这里
在这里插入图片描述
包含文件在执行主程序
在这里插入图片描述
在这里插入图片描述
这是他核心的一些代码,system/本身自带的代码,dayrui/二次开发自带的代码,所以我们看主要目录dayrui/
在这里插入图片描述
我们看路由规则,s一般对应目录,c对应文件,m对应里面的方法
在这里插入图片描述
我们找dayrui/目录,一般代码在控制器里面,我们找控制器目录,按照参数的值一个个的找下去,这个地方就是处理文件上传地方的代码
在这里插入图片描述
全局搜索upload去找这个结果是非常多的,这也是一种方法,但是比较麻烦,最好的方法是了解这个架构

在这里插入图片描述
这是属于逻辑上的安全问题,他在没有验证之前file_put_contents就已经上传,后面就没有了,我们只需要上传就可以了
在这里插入图片描述
这地方只要不是权限和磁盘的问题,一般就上传成功了
在这里插入图片描述
我们提交测试一下
在这里插入图片描述
$new_file表示完整路径,我们把new_file输出一下,就看他完整路径在那里,我们就能判断是否上传成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们改一下文件的后缀名,上传成功
在这里插入图片描述
在这里插入图片描述

CItphp基于前台TP5框架任意文件上传

TP5是mvc框架,mvc只是一个框架代码架构,而这个tp是建立在架构上面的一个名字,mvc就好比我们的操作系统,tp是操作系统里面的一个分类,win7或者win2008,MVC是一个开发思想,主流的开发技术

TP是在这个思想上出来的成品,比如你要进行文件上传,正常来讲,我们从文件接收到文件处理,但是你采用tp去开发的话,他的文件上传全部写好了,上传模块调用一下就可以了,并且thinkphp里面内置了检测机制,你只要按照他规定的写法去写,调用他的东西就完了,那些功能他全部帮你写好了,全部封装到框架里面去了
由于他采用的是框架开发,那就表示核心代码在框架里面,不是他自己的代码里面,与其说审计代码,不如说是审计框架的漏洞,框架的漏洞发现一般是比较牛逼,之前报过thinkphp RCE漏洞,使用thinkphp的网站都会受到影响
在这里插入图片描述
我们简要的看一下thinkphp的官方手册,这是国内比较知名的,国外还有其它框架,大部分在市面上是5.0的版本
在这里插入图片描述
看一下5.0的开发手册
在这里插入图片描述
入口文件public/index.php
在这里插入图片描述
index.php打开,app是自身源码的核心代码
在这里插入图片描述
由于我要挖漏洞,我们要对源码进行抓包测试,所以我们直接找会员中心,这里有文件上传
在这里插入图片描述
访问地址请求是要根据他的版本,url的访问模式决定
在这里插入图片描述
在app目录里面找在这里插入图片描述

与其说我们分析代码,不如说我们分析thinkphp的安全性
如果你使用thinkphp,你按照他规定写法去写的话,没有自定义去写东西的话,那么一般会引用thinkphp官方的安全问题,等于和宝塔一样,你用宝塔搭建的网站,就会受到宝塔的保护,他有自身的安全体系,这个thinkphp也是这个意思

如果你使用thinkphp,但是不按他的规定来那就会以自己代码的验证模式去验证,那这个就可以绕过,不是说thinkphp就安全,thinkphp自身的代码是安全的,很少暴露,一旦暴露,危害特别大,但是有可能是代码程序员在开发的时候,不按照他的规定写法去写,也会造成安全问题所以一般针对thinkphp源码网站方向是两个,第一个是看他的写法规不规矩,针对thinkphp自身的代码进行分析,看有没有安全漏洞,但第二个这一点是很难实现的,因为一般这种漏洞不会有,一两年才会爆出一个,一旦这个漏洞报出来,危害是特别大的

他在上传前有个问题,如果info只有的话,就到getSaveName()了
在这里插入图片描述

但是getSaveName()没有调用任何东西,就是光秃秃的保存文件的操作
在这里插入图片描述
这是一个逻辑上的问题,他在保存文件的时候,并没有进行验证,他的验证代码在move这个地方
在这里插入图片描述
但是这里没有调用check,就相当于没有代入到这里验证
在这里插入图片描述

我上传图片的时候上传成功
在这里插入图片描述
上传php文件失败
在这里插入图片描述
数据没有拦截到,很明显的本地验证
在这里插入图片描述
我们可以先用合格的文件类型上传,然后抓包,修改文件末尾为.php,成功上传
在这里插入图片描述
在这里插入图片描述
他自己的代码写的有问题,逻辑上有问题,官方自带的验证他没有调用;如果他用的话,我们就去分析他官方的验证有没有问题,但是一般来说基本上很难分析到,一旦你分析到的话,网上就已经有人爆出了这个漏洞,除非是隐藏特别比较深的,你分析到了,一般thinkphp框架类的,就是看他的写法规不规范,他有没有利用官方推荐的写法去写

mvc是开发的思想,他不是一个东西,php里面的yii框架,java里面有spring框架,st2框架,他们都是基于思想搞出来的成品,这成品里有别人写好的

搜索$_FILES->后台中心->上传图像->跟踪代码->逻辑判断
业务功能分析->会员中心->上传图像->跟踪代码->逻辑判断
搜索文件上传->会员中心->上传图像->跟踪代码->逻辑判断

涉及资源:

https://sites.thinkphp.cn/1556331
https://www.cnblogs.com/wsybky/p/8638876.htm
https://blog.csdn.net/yinhangbbbbb/article/details/79247331
https://pan.baidu.com/s/1miETaZcez30imUEA5n2EWw 提: xiao

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新

为提高用户体验,增强平台功能,旭帆科技的Easy系列平台也在不断优化更新中。在最新的EasyCVR(V.3.4)中,其最显著的区别即为首页UI的调整。 其亮点是在【配置中心】-【基础配置】-【展示信息】中,首页UI可分…

短视频账号矩阵系统源码/saas独立源头技术开发

一、批量剪辑(采用php语言,数学建模) 短视频合成批量剪辑的算法主要有以下几种: 1. 帧间插值算法:通过对多个视频的帧进行插帧处理,从而合成一段平滑的短视频。 2. 特征提取算法:提取多个视频中…

Spring容器启动过程中的自定义操作插口汇总

目录标题 PostConstruct注解EventListener方式InitializingBean的afterPropertiesSet方法实现ApplicationRunner接口重写run方法实现AplicationContextAware接口重写setApplicationContext实现ServletContextListener接口contextInitialized方法实现ServletContextAware接口set…

MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗?MacDroid Pro for Mac 是您的最佳选择!这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面,让您能够直接在Mac上…

WordPress插件大全-免费的WordPress插件汇总

随着互联网的不断发展,网站建设变得日益普及。对于大多数人而言,WordPress是一个熟悉且易于使用的网站建设平台。然而,有时候我们可能会觉得WordPress的功能还不够满足我们的需求,这时候,插件就成了解决问题的得力工具…

数据库管理-第122期 配置Halo数据库(202301204)

数据库管理-第122期 配置Halo数据库(202301204) 在120期完成了HaloDB的安装,那么紧接着就需要对数据库进行具体配置。 1 数据库配置 这里首先说一下我这里数据库的给的硬件配置:2个CPU,16GB内存 1 配置数据库访问控…

记录一下Mac配置SpringBoot开发环境

由于很多项目喜欢使用传统的 Java 8 进行开发,而且 Java 8 的稳定性也是经过长久考验的,我们接下来就尝试一下,在一台新的 Mac 中配置 Java 环境,并且开始创建 SpringBoot 项目。 首先,去 Oracle 官网下载 java8 JDK …

通过时间交织技术扩展ADC采样速率的简要原理

前言 数据采集是将自然界中存在的模拟信号通过模数转换器(ADC)转换成数字信号,再对该数字信号进行相应的接收和处理。数据采集系统作为数据采集的手段,在移动通信、图向采集、无线电等领域有重要作用。随着电子信息技术的飞速发展…

感冒 发烧 咳嗽记录

感冒 风寒: 清鼻涕 热感冒: 细菌记录, 脓鼻涕. 咳嗽 先是清痰咳嗽, 后是浓痰,细菌感染, 白细胞噬菌体, 所以要补充蛋白质,维生素. 胸骨上窝 , 天突穴 ,后面上支气管的位置, 往下会变成左右两支,连接到肺部 普通咳嗽: 用哈气拍打背部的方式. 把痰去除. 吃点 盐酸氨溴索片 增加支…

怎么让百度快速收录,百度SEO收录工具

百度收录对于一个网站的重要性不言而喻。拥有良好的百度收录意味着网站能够更好地被搜索引擎收录,为用户提供更精准的搜索结果。而怎样实现百度快速收录成为了许多网站管理员关注的焦点。 百度收录的重要性 百度是国内最大的搜索引擎之一,拥有数以亿计的…

蓝桥杯真题:四平方和-Java版

import java.io.*;/*先找后两个数for(int i 0; 2 * i * i < n;i)for(int j i; i * i j * j < n;j ) 再找前两个数 for(int i 0;4 * i * i < n; i )for(int j i;2 * (j * j i * i) < n;j )//这样就可以让后两个数尽量大,前两个数尽量小 这样就可以确定后…

题目:小明的彩灯(蓝桥OJ 1276)

题目描述&#xff1a; 解题思路&#xff1a; 一段连续区间加减&#xff0c;采用差分。最终每个元素结果与0比较大小&#xff0c;比0小即负数输出0。 题解&#xff1a; #include<bits/stdc.h> using namespace std;using ll long long; const int N 1e5 10; ll a[N],…

TrustZone之虚拟地址空间

在本系列中的内存管理指南介绍了多个虚拟地址空间或translation regimes的概念。例如&#xff0c;有一个用于EL0/1的translation regime&#xff0c;还有一个用于EL2的独立translation regime&#xff0c;如下所示&#xff1a; 还有专门的翻译方案用于安全状态和非安全状态。例…

Django HMAC 请求签名校验与 Vue.js 实现安全通信

概要 在 Web 应用的开发过程中&#xff0c;确保数据传输的安全性和完整性是一个不容忽视的问题。使用 HMAC&#xff08;Hash-based Message Authentication Code&#xff09;算法对请求内容进行签名校验&#xff0c;是一种常见且有效的安全策略。本文将详细介绍如何在 Django …

Netty网络编程

入门案例 1、服务器端代码 public class HelloServer {public static void main(String[] args) {// 1、启动器&#xff0c;负责装配netty组件&#xff0c;启动服务器new ServerBootstrap()// 2、创建 NioEventLoopGroup&#xff0c;可以简单理解为 线程池 Selector.group(n…

EasyRecovery14破解版 v14.0.0.4 官方免费版(含激活码)

软件介绍 EasyRecovery14高级版是一款功能强大的数据恢复软件&#xff0c;软件对比家庭版本它的使用更加广泛&#xff0c;在恢复数据方面软件可以做到最完整的损失恢复&#xff0c;无论是文档、音乐、软件都可以一键恢复&#xff0c;同时软件还可以对文件的名字、后缀进行修改…

ROS2 galactic生成的bag包里的MarkerArray在humble下播放不正常

近期发现ROS2 galactic下生成的bag包在humble下回放时使用rviz可视化&#xff0c;bag里的点云可以正常看到&#xff0c;但是使用Marker和MarkerArray画的box却死活看不到&#xff0c;感觉很纳闷&#xff0c;看网上有人报告说foxy下生成的bag包在galactic下播放会报SQL错误&…

项目经理是干出来的,不是教出来的

大家好&#xff0c;我是老原。 有不少新手项目经理&#xff0c;在通过了PMP认证考试&#xff0c;拿到PMP证书后&#xff0c;对之前无序的项目管理状态感觉有了一丝通透的感觉&#xff0c;对接受新项目更是信心满满。 然后就有不少没有项目管理经验&#xff0c;且刚刚考取PMP证…

Redis Hash数据类型

Redis Hash数据类型 几乎所有的主流编程语言都提供了哈希(hash)类型&#xff0c;它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中&#xff0c;哈希类型是指值本身又是一个键值对结构&#xff0c;形如key “key”&#xff0c;value {ffield1, value1 }, … {fieldN…

JDK 历史版本下载以及指定版本应用

参考&#xff1a; 官网下载JAVA的JDK11版本&#xff08;下载、安装、配置环境变量&#xff09;_java11下载-CSDN博客 Gradle&#xff1a;执行命令时指定 JDK 版本 - 微酷网 下载 打开官网地址 Java Downloads | Oracle 当前版本在这里&#xff0c;但是我们要下载历史版本 选…