53 代码审计-TP5框架及无框架变量覆盖反序列化

目录

    • 演示案例:
      • Metinfo-无框架-变量覆盖-自动审计或搜索
      • phpmyadmin-无框架-反序列化-自动审计或搜索
      • Thinkphp5-有框架-搭建使用入口访问调试SQL等

演示案例:

Metinfo-无框架-变量覆盖-自动审计或搜索

变量覆盖会直接覆盖原始变量,来形成新的变量值
在这里插入图片描述
搜索关键字或者自动审计,自动审计能帮助我们对程序快捷的进行漏洞分析,这些是简单报告,具体有没有漏洞是有待查询的,他是建立一下代码中可能存在的安全问题,forty也是可以做这个事情的
在这里插入图片描述
我们可以通过自动审计发现有些变量覆盖的东西,通过文件名可以判断出这个文件是网站程序开发里面的配置性文件,而且是在Include目录,在代码挖掘审计的过程中,像文件目录和文件名,你是要有一定的理解支持的,admin后台目录,Install安装目录,include配置性文件目录
在这里插入图片描述
一般优先看配置性文件,因为程序在运行过程中,他一般会包含配置性文件,如果不包含配置性文件很多功能就操作不了,我们优先看那个文件是比较关键的,我们不可能每个都看到,一般是看配置性文件多一些,配置性文件在程序中扮演的角色会更多一些,基本上很多文件都会包含配置性文件,就好比我们的数据库配置文件一样,如果不包含数据库配置文件,就无法去和数据库配置文件里面数据的连接进行操作,你包含他,你才能进入数据库的查询,因为你要执行sql命令的话,首先你要建立连接,再就是操作数据库,数据库配置文件是单纯的配置好数据库的信息,然后建立连接,你不包含数据库配置文件,你在代码中你还要先连接数据库,这样很麻烦,所以一般的话,这种配置性文件,很多文件在操作的时候,都会包含,因为包含之后就意味着执行了这些文件,里面的代码相当于共同享有

foreach函数,数组的遍历,遍历里面的_COOKIE、_POST、_GET,然后给request,这个就是php里面传参的写法,典型的传输方式
从这串代码理解的话是把值给了value,然后value给到$$_key
get、post、cookie,接收数据进行变量覆盖
在这里插入图片描述
在这里插入图片描述
这串代码在common. inc. php这里,这时候谁包含common. inc. php,那就表示谁享有这里面的代码,我们通过全局搜索查一下
在这里插入图片描述
我们打开首页文件,他包含common. inc. php文件
在这里插入图片描述
这个是我自己在下面写的代码
在这里插入图片描述
首页形式显示页面html的结果
在这里插入图片描述
在这里插入图片描述
我们先把原有变量index进行输出,变量index是数组,执行是引用index.html进行显示的
在这里插入图片描述
在这里插入图片描述
在.php里面把变量申明一下,然后在.html把值输出
在这里插入图片描述
在这里插入图片描述
执行一下
在这里插入图片描述
在这里插入图片描述

变量参数会直接覆盖原始变量的值,就是原有test等于xiaodi,我通过地址上输入test=122222,就会把原有xiaodi值进行覆盖掉,所以你的值就会变成我定义好的值,其实这个操作表示你原有的变量值我能进行更改,这就是变量覆盖
接收变量名=参数名,然后实现覆盖,接收get post cookie传递方式,你的参数名是什么,他的变量值就是什么
在这里插入图片描述
我们访问这串地址的时候,由于是以get方式发送的,get方式取这个值的时候,由于是两个$符,相当于request接收的是$test
在这里插入图片描述
在这里插入图片描述
变量覆盖可以配合文件包含,进行攻击,他能覆盖变量,如果说一个参数进行文件包含的时候,文件包含里面有变量,可能这个变量默认等于1的,我能实现把这个变量进行覆盖,让他等于另一个值,就可以实现包含任意文件实现攻击,由于我们知道文件包含漏洞,是可以包含文件,包含一句话后门,所以它是直接跟网站权限挂钩的一种漏洞攻击,我们选择文件包含因为它最直接,利用变量覆盖可以配合其它漏洞,但是其它漏洞不一定直接跟网站权限挂钩,所以我们采用最直接、最暴力的文件包含漏洞,比如说他以前是include包含1.php,这个1.php是他指定的值或变量,你把他的变量覆盖掉

调用common.inc.php,由于common.inc.php接收数据的时候,存在变量覆盖,所以我们能覆盖变量file,实现变量file的值由我们控制,包含任意文件,由于文件包含漏洞不需要指向文件后缀。一个图片带有后门,就能包含图片里面的后门,实现攻击
在这里插入图片描述
我们搜索带有文件包含的函数
在这里插入图片描述
这里面的包含文件没有变量指定,所以我们不能更改包含的对应东西,我们要找到既有包含函数,另外这个函数包含的文件带有可控变量在里面,我们再去覆盖原始变量值,来实现包含
在这里插入图片描述
这个地方符合文件包含产生条件
在这里插入图片描述
在这里插入图片描述
1.php包含2.php,然后2.php包含3.php,那么1.php就会包含3.php,因为我们知道包含会相辅相成的
index.php包含module.php,module.php包含common.inc.php,所以index.php包含common.inc.php
在这里插入图片描述
文件包含漏洞是跟变量覆盖搭配使用的
我们要看一下module是怎么接收到的,原有变量是多少,我们追踪一下,打开module.php文件
如果fmodule不等于7,就按照数据来,由于代码包含module文件,就按照module正常运行,我们让fmodule等于7,就跳到二次循环
在这里插入图片描述
我们现在访问地址,把原始的fmodule值进行更改,我们要让他不等于1,跳到module.php文件循环,我们让fmodule等于7,进行循环,然后1.txt是about里面的内容
在这里插入图片描述
在这里插入图片描述
只要有一个文件上传到网站目录,就能实现getwebshell,包含文件会把任意代码当中php代码执行,不需要格式,只要里面有php代码,就能执行出php代码效果

变量覆盖可以配合sql注入,这个id值假设设置好,或者这个id值有过滤,我们把id给覆盖掉,id可控,把id覆盖成$id='1 union select ',一拼接,就是变量覆盖导致的sql注入,只要说sql语句有变量,都可以利用变量覆盖搭配使用,来实现攻击
在这里插入图片描述
看个例子,dedecms 变量覆盖sql注入
在这里插入图片描述
变量覆盖就是覆盖原始变量,具体我们要搭配一些漏洞使用,文件包含、sql注入都可以

phpmyadmin-无框架-反序列化-自动审计或搜索

phpmyadmin数据库管理的web接口,他不是一套网站程序,他是用来管理数据库的第三方接口,很多网站都会套用他,像我们使用的宝塔、phpstudy,phpmyadmin属于插件类的

反序列化漏洞产生是有关键字

#反序列化
自动审计或搜索关键字找到文件及代码段
_wakeup() //使用unserialize时触发
_sleep() //使用serialize时触发
destruct() //对象被销毁时触发
_ca11()    //在对象上下文中调用不可访问的方法时触发
_callStatic() //在静态上下文中调用不可访问的方法时触发
_get()      //用于从不可访问的属性读取数据
_set()    //用于将数据写入不可访问的属性
_isset () //在不可访问的属性上调用isset ()或empty()触发
_unset () //在不可访问的属性上使用unset ()时触发
_toString() //把类当作字符串使用时触发
_invoke() //当脚本尝试将对象调用为函数时触发

在这里插入图片描述
由于这里使用unserialize参数,会触发wakeup()对象里的魔术方法
在这里插入图片描述
创建PMA_Config()对象,我们查一下这个对象
在这里插入图片描述
这里是它申明的原始地方,class,以上只有关键字,所以我们看这里
在这里插入图片描述
申明对象会涉及到魔术方法,由于他这里采用unserialize函数,会默认调用PMA_Config()对象里面的wakeup()魔术方法
在这里插入图片描述
filemtime文件时间,getSource接收文件名,load载入源码,s变量接收的就是get值
在这里插入图片描述
getSource的作用取source,对象里面默认为空,我们在调用source时可以传参
在这里插入图片描述

看一下Load函数,eval会把里面的东西当做代码执行
在这里插入图片描述
file_get_contents进行文件的读取,读取操作由getSource指定
在这里插入图片描述
找到_wakeup()代码段,代码段调用函数中存在eval等函数操作,可调式load
构造getSource()利用Payload,实现file_get_contents函数配合eval执行
Payload: action=test&configuration=0:10:“PMA_Config”;1:{s:6:“source”,s:11:“d:/test.txt”;}
输出s变量,调用getSource函数
在这里插入图片描述
调用unserialize参数给的是configuration,我们执行一下
在这里插入图片描述

Thinkphp5-有框架-搭建使用入口访问调试SQL等

入口文件,调试模式,访问路由,访问对应,内置安全等
测试访问不同方法名,不同文件不同方法名
测试常规写法SQL注入,TP5规定写法SQL注入

现在在市面上tp5开发框架是最多的,不同版本,他的知识点是一样的,只是每个版本跟新之后,有些写法有些小区别,框架是都一样的

这是他默认框架打开的页面
在这里插入图片描述
application默认存在的目录
在这里插入图片描述
入口文件可以默认也可以自定义,他指向的是application,就是说入口文件是application目录
在这里插入图片描述
这个代码段是首页显示代码
在这里插入图片描述
在这里插入图片描述
我们访问后台代码函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们要挖掘tp5网站漏洞,访问网站对应文件,查看代码,是必须要掌握的
调用xiaodi方法,并且给i传值,就是说要控制x的传参值
在这里插入图片描述
这个也可以
在这里插入图片描述
在这里插入图片描述
这个是我们自己写的清晰明了的数据库查询语句,我们用监控语句看一下
在这里插入图片描述
在这里插入图片描述
这个语句被执行了
在这里插入图片描述一般thinkphp有它自身的规矩写法,就是官方的写法
下面这串代码就是典型的thinkphp写法
在这里插入图片描述
db是数据库名,where条件语句,select调用select查询
在这里插入图片描述
我们执行
在这里插入图片描述
执行完之后,抓sql语句,抓不到,他是没有被监控到的,这就跟我们前边讲到的预编译查询有点类似
在这里插入图片描述
更改配置文件,把这两个开关更改为true,打开调式模式
在这里插入图片描述
在这里插入图片描述
我们在访问网站会发现,浏览器右下角会出现图标,从这里就会监控到sql语句,所以我们不用插件去监控了
在这里插入图片描述
直接从这里监控,可以看到这里会返回当前访问信息,对应加载那些文件,还可以看看流程,这个调式模式类似断点调式,可以看到他的错误信息和执行的SQL语句
在这里插入图片描述
可以看到我们访问地址的时候,执行的sql语句,我们输入的注入测试语句,没有执行,压根就没有作用
在这里插入图片描述
thinkphp推荐你写这个写法,他是有自带的过滤,就是他的内置安全

如果一个采用thinkphp开发的网站,他按照thinkphp官方的写法去写,我们挖的是thinkphp自身的漏洞,因为他的写法是按照thinkphp的,所以你针对的就是thinkphp

这种框架类开发的网站,按照推荐写法去写的话,如果你挖掘程序漏洞就是挖掘对应框架漏洞,有人引入框架并不代表任何代码都是按照框架写的,程序员在开发框架源码的时候,他有些地方,他是按照自己写法写的,那这个就不是thinkphp的问题了,那就是按照常规代码来分析,如果是按照thinkphp写法写,那就要针对thinkphp自身的过滤来研究了,这个就比较困难,那就是找thinkphp自己框架漏洞

一些前期的知识点是必不可少的,我们要知道怎么去访问代码段或者去调用他

采用thinkphp框架写法,我们应该采用两种方法去分析去挖掘里面的漏洞,看他的写法,如果写法自身是thinkphp的写法,那么我们就要查询这个版本的thinkphp框架有没有漏洞

如果他自身是用自定义的写法,那就是常规的漏洞挖掘,只是说他建立的是thinkphp,所以我访问和查看文件,找到对应文件,这个有点相关的区别而已,其它的都是一样的
这个网站就是典型的thinkphp开发网站
在这里插入图片描述
我们打开程序源码,这个目录跟我们thinkphp目录基本一样
在这里插入图片描述
在这里插入图片描述
一般index.php这里默认可加可不加的
在这里插入图片描述
在这里插入图片描述
先看入口文件,找到他的index.php文件
在这里插入图片描述
在这里插入图片描述
对应着去找文件
在这里插入图片描述
在这里插入图片描述
有时候你编码没有搞对,不是你修改的问题,他直接访问就有问题
用phpstorm打开,这是mvc结构
在这里插入图片描述
修改页面的每一关,就是修改这个地方
在这里插入图片描述
修改功能就是修改控制器这里,所以这就是mvc整体项目、文件和这些东西的一些分布
在这里插入图片描述
如果我要挖掘漏洞就载入程序进行全局搜索
在这里插入图片描述
sql的自定义写法,我们要去找自定义写法的地方,因为自定义写法,没有受到官方的保护,同样上传也是一样的,所以它的挖掘思路和我们常规的挖掘思路是一模一样的
在这里插入图片描述
如果采用的是官方的,搜索thinkphp官方版本有没有出现漏洞,在说明文件里面看,也可以在配置文件里面调置输出一下
在这里插入图片描述
可以搜索thinkphp历史漏洞

https://github.com/Mochazz/ThinkPHP-Vuln

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring IOC底层实现

第一章 SpringIOC底层实现 IOC:将对象的控制器反转给Spring 1.1 BeanFactory与ApplicationContexet BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,是面向Spring本身的,不是提供给开发人员使用的。****Appli…

APP自动化测试工具大全

一、UI自动化测试工具 1. uiautomator2 openatx开源的ui自动化工具,支持Android和iOS。主要面向的编程语言是Python,API设计简洁易用,在开源社区也是很受欢迎。 安装: pip install --upgrade --pre uiautomator2# Or you can …

IO / day07 作业

1. 使用消息队列完成两个进程之间相互通信 代码 #include <myhead.h>//define a msg struct type struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文大小};//macro msg size #define SIZE (sizeof(struct msgbuf)-sizeof(long))int recv(int mtype_r…

Vue学习计划-Vue2--VueCLi(三)ref属性、mixins混入、插件、scoped样式

1. ref属性 被用来给元素或子组件注册引用信息&#xff08;id的替代者&#xff09;应用在html标签上获取的是真实DOM元素&#xff0c;应用在组件标签上是组件实例对象&#xff08;VC&#xff08;VueComponent&#xff09;&#xff09;使用方式&#xff1a; 打标识<h1 ref&q…

火山引擎边缘计算用硬核助力赛事直播

经过一个多月激烈争夺&#xff0c;2023英雄联盟全球总决赛终于在11月19日落下帷幕。精彩的对决和高热话题使得直播平台观赛人数暴增&#xff0c;给直播平台稳定性和资源储备提出了巨大的考验。

macosx dbeaver执行脚本报错提示:还没有设置连接地址

1.原因 因为你本地没有安装MySql Client所以按照网上其他操作办法你找不到MySql的客户端&#xff0c;因此配置客户端的时候自然就找不到对应的文件. 2.解决办法 参考DBeaver提供的解决办法&#xff1a; https://dbeaver.com/docs/dbeaver/Local-Client-Configuration/#local…

【复杂网络建模】——基于Graph Convolutional Networks (GCN)进行链接预测

目录 一、复杂网络建模 二、图嵌入方法&#xff08;Graph Convolutional Networks (GCN) &#xff09; 1. 图表示&#xff1a; 2. 邻接矩阵&#xff08;Adjacency Matrix&#xff09;&#xff1a; 3. 图卷积层&#xff08;Graph Convolutional Layer&#xff09;&#xff…

docker的资源控制:

docker的资源控制&#xff1a; 对容器的使用宿主机的资源进行限制 cpu 内存 磁盘i/0 docker使用linux自带的功能cgroup control grouos是linux内核系统提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程所使用的物理资源 control grouos是linux内核系统提供的一种可…

【动态规划】03斐波那契数列模型_最小花费爬楼梯_C++(easy1)

题目链接&#xff1a;leetcode使用最小花费爬楼梯 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求达到楼梯顶部的最低花费. 由题可得&#xff1a; cost[i] 是从楼梯第 i 个…

【LeetCode刷题-树】--113.路径总和II

113.路径总和II 方法一&#xff1a;深度优先搜素 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeN…

语音识别功能测试:90%问题,可以通过技术解决

现在市面上的智能电子产品千千万&#xff0c;为了达到人们使用更加方便的目的&#xff0c;很多智能产品都开发了语音识别功能&#xff0c;用来语音唤醒进行交互&#xff1b;另外&#xff0c;各大公司也开发出来了各种智能语音机器人&#xff0c;比如小米公司的“小爱”&#xf…

少儿编程考级:激发孩子逻辑思维能力的关键

在当今信息化时代&#xff0c;少儿编程已经成为孩子们不可或缺的一项技能。而少儿编程考级&#xff0c;则是检验孩子们在这一技能上所取得的成就的重要途径。少儿编程考级不仅能够激发孩子们的逻辑思维能力&#xff0c;还能够提高他们的动手能力和创造力。6547网将详细介绍少儿…

Windows Terminal的半透明效果

打开Windows Terminal的半透明效果 最终实现效果&#xff1a; 系统&#xff1a;win11 23H2 步骤&#xff1a; 1.winx打开终端 2.右键打开设置 3.打开外观->亚克力材料开启 4.默认值->外观->透明度&#xff0c;按喜好选择即可

使用opengl编写shader出现错误,提示无法创建片段shader,且提示:too much data in type constructor

最近在学opengl&#xff0c;在编写片段shader时&#xff0c;编译出现错误如下&#xff1a; 造成这个问题的原因是fragment shader的代码有问题&#xff0c;在创建片段着色器代码的第七行需要传入一些参数&#xff0c;如果传入参数的个数超过了规定值&#xff0c;就会报错。 解…

springboot 极简案例

安装idea File -> New Project 选择依赖 创建controller文件 输入controller类名 输入代码 运行项目 访问 localhost:8080/hello/boot package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.…

使用 VSCode 开发 Golang 代码,并支持 debug断点调试

背景 Go 自2012年发布至今&#xff0c;由于其出色的性能与并发处理能力&#xff0c;已经被各大互联网公司应用到成熟的产品服务上&#xff0c;目前本人从事项目的后端服务已经从Python全部切换到Go。 于是决定跟后端大佬系统的学习一下Golang语言&#xff0c;然后将自己学习过…

day3_qt

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

用户登录权限

文章目录 [TOC](文章目录) 前言一、鉴权二、 Cookie与session1.HTTP无状态2.cookie的重要属性3.cookie 和 session 的生命周期3.1 cookie 生命周期影响因素3.2 session 生命周期影响因素 4.cookie 和 session 的区别5.工作原理3 用户登录Node.js和Express验证session 三、JSON …

亿胜盈科ATR2037 无限射频前端低噪声放大器

亿胜盈科ATR2037 是一款应用于无线通信射频前端&#xff0c;工作频段为 0.7 到 6GHz 的超低噪声放大器。 ATR2037 低噪声放大器采用先进的 GaAs pHEMT 工艺设计和制作&#xff0c;ATR2037 低噪声放大器在整个工作频段内可以获得非常好的射频性能超低噪声系数。 亿胜盈科ATR203…

QML与C++之间自定义对象输出

1.定义暴露的C类 Message.h #ifndef MESSAGE_H #define MESSAGE_H#include "QObject" #include "MessageAuthor.h"class Message : public QObject {Q_OBJECTQ_PROPERTY(MessageAuthor* author READ author )public:explicit Message(QObject *parent nu…