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

演示案例:

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

在这里插入图片描述

相关推荐

  1. 【rust 第三方库】serde 序列序列框架

    2023-12-12 13:44:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 13:44:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 13:44:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 13:44:03       82 阅读
  4. Python语言-面向对象

    2023-12-12 13:44:03       91 阅读

热门阅读

  1. 《C++新经典设计模式》之第11章 组合模式

    2023-12-12 13:44:03       37 阅读
  2. 7-5 jmu-python-查成绩

    2023-12-12 13:44:03       60 阅读
  3. 单片机外设:扩展功能的关键

    2023-12-12 13:44:03       58 阅读
  4. 虚幻学习笔记12—C++类的实例化

    2023-12-12 13:44:03       58 阅读
  5. tomcat安全加固

    2023-12-12 13:44:03       61 阅读
  6. 汽车标定技术(十二)--A2L文件生成的方法

    2023-12-12 13:44:03       59 阅读
  7. gdb使用

    gdb使用

    2023-12-12 13:44:03      63 阅读
  8. NB-IoT BC260Y Open CPU SDK⑫多任务调度应用

    2023-12-12 13:44:03       51 阅读
  9. C++大型项目经验

    2023-12-12 13:44:03       58 阅读