2024 强网杯 password game | Writeup

proxy那题是队友写的我就不记录了,不知道他后面会不会更新:https://blog.hayneschen.top/ 主要想记录password game这题 不听php课的每个人都会受到应有的惩罚 前面的游戏过程很简单,直接从拿到源码开始看 function filter($password){ $filter_arr = array("admin","2024qwb"); $filter = '/'.implode("|",$filter_arr).'/i'; return preg_replace($filter,"nonono",$password); } class guest{ public $username; public $value; public function __tostring(){ if($this->username=="guest"){ $value(); } return $this->username; } public function __call($key,$value){ if($this->username==md5($GLOBALS["flag"])){ echo $GLOBALS["flag"]; } } } class root{ public $username; public $value; public function __get($key){ if(strpos($this->username, "admin") == 0 && $this->value == "2024qwb"){ $this->value = $GLOBALS["flag"]; echo md5("hello:".$this->value); } } } class user{ public $username; public $password; public function __invoke(){ $this->username=md5($GLOBALS["flag"]); return $this->password->guess(); } public function __destruct(){ if(strpos($this->username, "admin") == 0 ){ echo "hello".$this->username; } } } $user=unserialize(filter($_POST['password'])); if(strpos($user->username, "admin") == 0 && $user->password == "2024qwb"){ echo "hello!"; } 比赛的时候乍一看感觉挺懵的,和传统的反序化掉用都不太一样,这里先不管反序化时的filter,先来看一下类 ...

November 5, 2024 · 1 min · Red

2024 TKKCTF Beginner | WriteUp

学CTF要做到不会的**多搜**,碰到不会的或者没见过的名词和工具,都能在网路上找到详细的解释和教程,不会一个搜一个。多去尝试自己解决遇到的问题,所有的答案都藏在你曾经也许看都不想看的代码、报错和技术文章里,加油 Misc 你好,CTF! flag就在pdf末尾,不解释 阿娜达瓦~ 使用gif逐帧播放可以发现二维码 扫描后即可得到flag 这是什么? 在cyberchef中先解base32再解base64即可 佛说:只能四天🙏 根据提示搜索与佛论禅在线解密工具 但发现无法解密,需要输入一个密码,回到题目描述注意到这一串内容 输入即可解开 引导题 尝试复制后发现需要密码 本题解法不唯一,这里介绍两种。 方法一:搜索在线解锁工具 解锁后即可直接复制被遮盖的内容。放到cyberchef里梭哈base64即可 方法二:如果你是macOS用户,右键搜索即可,不要点拷贝 一样放到base64解码即可 小泽 下载图片后使用010editor或者文本编辑器均可,拉到最下面就能发现flag Up and Down 将文件下载下来后,可以找到在线工具将文件二进制进行反转,下面我演示linux命令的方式进行反转 一行命令即可,本意就是反转文件二进制数据。将输出的图片打开后即可得到flag RFID 比赛原题,直接放网上的wp https://blog.mo60.cn/index.php/archives/2023-fjss.html 乱乱的字符 统计每个字符出现的频率,可以拼出个大概flag。但可以发现有两个字符出现的频率都是7次,也就是A和i。此时回到题目提示 猜测是AsCii这个单词,而且这样排序的话正好两个i的出现频率加起来就是7次,符合条件,因此flag就是 xujc{Ukn0w_AsCii~} void null() {}、Chiikawa https://x.xn–q9jyb4c/p/ctf-record-w0w/ sharkshark 安装wireshark即可打开pcapng格式的流量包,ctrl+f4可以调出搜索框,选择分组字节流+字符串多次 搜索xujc,可以在一堆假flag中找到flag24.txt为trueFlag 好痛 010打开后再中间发现mp3的模板结束了,可以发现后面是zip文件头 手工分离出来,分离时再尾部还可以发现一个key (原本作者是让做题人根据歌名来猜key,被骂了改附件了qwq) 解压压缩包后那首歌是使用MP3Stego来解码因为歌名奇怪,作者建议先改成1.mp3,然后 在cmd使用 Decode -X -P love 1.mp3 就能得到flag ...

October 23, 2024 · 7 min · Red

红包题第四期WP-答案竟在派蒙中

Misc-答案竟在派蒙中 解题过程: FLAG1: 根据题目提示把派蒙拉开,全选后可以看到有白色字符被选中 更改颜色后是一串以等号结尾的编码 解码得到flag FLAG2: 文档的内容可以确定没有挖掘的内容了,接下来对文件本身进行分析 可以用010editor工具进行分析结构 由于docx文件的本质其实是zip压缩文件,但504B0506(zip文件的结束标志)之后依然有数据可以判断文件后方被写入的隐写文件(出题人当时傻逼了忘了是怎么藏的来着,记成是放里面了) kali的binwalk指令也可以得到一样的结果 可以在010中手动分离文件,也可以用foremost分离 (注意这种压缩包套娃的题binwalk -e有几率出现分不出来的情况所以这里用foremost) 分离后的压缩包解压得到小恐龙一只 这里可以用cat指令查看文件(同理010editor或者记事本打开也可以看到信息) 另一个以等号结尾的编码,根据特征判断是base32编码 解码后得到类flag格式的玩意 由于格式相近推测是凯撒移位加密 枚举后得到flag 尾注: 关于base家族的特征和其它编码推荐一篇文章 https://cloud.tencent.com/developer/article/1748394 https://www.bilibili.com/video/BV1GJ411x7h7

September 22, 2024 · 1 min · Red

CISCN 2019华北Day1 web1

一道很适合新手入门完整网站项目漏洞挖掘的题目,网上wp多半只讲了利用链和exp,我会从网站逻辑开始分析并写得尽量详细易懂,同样适合新手入门 复现靶场为nssctf,https://www.nssctf.cn/problem/2 搜题号应该也能搜到 文件获取 拿到页面后是个登录框,先注册一个账号登进去看看 进来后是个文件管理的界面 随便传个文件 这里就会涉及到一个任意文件读取的思路。一般一些制作并不是那么精良的网站都会直接使用文件名匹配的方式去读取文件内容从而达到下载的效果,所以我们点击下载的时候抓个包试一下看能不能通过修改文件名从而把原代码下载下来 成功读取。照着这个方法把几个已知页面的代码都读一遍 网站代码逻辑 因为代码比较多,所以这里我这里先介绍一下网站的主要实现逻辑 我的习惯是从主界面也就是index.php开始看调用,在index.php中可以发现下面这段 进入到class.php,查看一下Filelist类 class FileList { private $files; private $results; private $funcs; public function __construct($path) { $this->files = array(); $this->results = array(); $this->funcs = array(); $filenames = scandir($path); $key = array_search(".", $filenames); unset($filenames[$key]); $key = array_search("..", $filenames); unset($filenames[$key]); foreach ($filenames as $filename) { $file = new File(); $file->open($path . $filename); array_push($this->files, $file); $this->results[$file->name()] = array(); } } public function __call($func, $args) { array_push($this->funcs, $func); foreach ($this->files as $file) { $this->results[$file->name()][$func] = $file->$func(); } } public function __destruct() { $table = '<div id="container" class="container"><div class="table-responsive"><table id="table" class="table table-bordered table-hover sm-font">'; $table .= '<thead><tr>'; foreach ($this->funcs as $func) { $table .= '<th scope="col" class="text-center">' . htmlentities($func) . '</th>'; } $table .= '<th scope="col" class="text-center">Opt</th>'; $table .= '</thead><tbody>'; foreach ($this->results as $filename => $result) { $table .= '<tr>'; foreach ($result as $func => $value) { $table .= '<td class="text-center">' . htmlentities($value) . '</td>'; } $table .= '<td class="text-center" filename="' . htmlentities($filename) . '"><a href="#" class="download">下载</a> / <a href="#" class="delete">删除</a></td>'; $table .= '</tr>'; } echo $table; } } 从构造函数开始,会发现这里传入了一个path形参 ...

June 28, 2024 · 2 min · Red

SECCON Beginners CTF 2024

打seccon的第一年,为了队友的日本旅行梦,跟他们爆了! WEB ssrforlfi 主要代码如下 import os import re import subprocess from flask import Flask, request app = Flask(__name__) @app.route("/") def ssrforlfi(): url = request.args.get("url") if not url: return "Welcome to Website Viewer.<br><code>?url=http://example.com/</code>" # Allow only a-z, ", (, ), ., /, :, ;, <, >, @, | if not re.match('^[a-z"()./:;<>@|]*$', url): return "Invalid URL ;(" # SSRF & LFI protection if url.startswith("http://") or url.startswith("https://"): if "localhost" in url: return "Detected SSRF ;(" elif url.startswith("file://"): path = url[7:] if os.path.exists(path) or ".." in path: return "Detected LFI ;(" else: # Block other schemes return "Invalid Scheme ;(" try: # RCE ? proc = subprocess.run( f"curl '{url}'", capture_output=True, shell=True, text=True, timeout=1, ) except subprocess.TimeoutExpired: return "Timeout ;(" if proc.returncode != 0: return "Error ;(" return proc.stdout if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=4989) 其实一开始看到这即过滤localhost又过滤file://的思路很容易被带着跑,就想着要怎么通过域名打ssrf。但是如果仔细看就会发现就算我现在有办法访问到127.0.0.1或者localhost也无济于事,根本不知道下一步要干嘛 ...

June 16, 2024 · 2 min · Red