1. 请写出服务器系统内核版本;(答案格式:1.1.1-11-abcdefe) (1.0分)【6.8.0-48-generic】
软件梭一梭
2. 请写出服务器的ens33网卡的ip地址; (1.0分)【10.172.29.128】
命令梭一梭
3. 请写出mysql数据库密码; (4.0分)【123568】
本来一直在修改原来的配置文件,但是改不好,那就加一个网卡吧
找**JAR
**包
find / -name *.jar
然后直接去找资源文件
4. 后台服务中注册中心的服务端口是多少?(答案格式:纯数字) (2.0分)【7000】
在cloud.jar
包含了注册中心,在application.properties
的配置里包含了服务端口
5. 服务器nginx日志中,哪个ip访问系统最为频繁?(答案格式:6.6.6.6) (6.0分)【56.111.197.176】
先找到日志文件
写个统计脚本
import re
from collections import Counter
# 定义日志文件路径
log_file_path = 'access.log'
# 定义一个用于解析日志文件的正则表达式
log_pattern = r'(d+.d+.d+.d+)'
# 用于存储所有IP的列表
ip_list = []
# 读取日志文件并提取 IP 地址
with open(log_file_path, 'r') as file:
for line in file:
match = re.search(log_pattern, line)
if match:
ip_list.append(match.group(1))
# 使用 Counter 统计各个 IP 地址出现的次数
ip_counter = Counter(ip_list)
# 按照出现次数从高到低排序
sorted_ips = ip_counter.most_common()
# 输出排序后的 IP 地址和出现次数
for ip, count in sorted_ips:
print(f'{ip}: {count}')
输出:
C:Users…………AppDataLocalProgramsPythonPython37环境Scriptspython.exe C:/Users/…………/Desktop/Nginx日志IP统计脚本.py
56.111.197.176: 141
108.61.53.181: 136
168.52.88.71: 135
13.164.183.8: 135
85.172.4.14: 134
79.151.190.48: 134
165.63.25.252: 133
33.42.1.167: 133
14.14.249.49: 132
………………太多了不展示了
33.113.14.46: 71
201.92.129.106: 68
进程已结束,退出代码0
6. 请写出平台管理员密码加密算法;(答案格式:aes) (3.0分)【MD5】
搜素一些关键词:管理员
后台
这一些
7. 假设某管理员密码是123456,请问该管理员的密码在数据库中存储的值是多少?(答案格式:如有字母,全大写) (5.0分)【985eb5b028065701341a478a9215e7b2】
盐值在配置文件里面定义了
赛博厨师 md5(123456+md5key)
8. 已知某人卖出了5.2个ETH/USDT,请问他的二级推荐人可以获得多少个ETH佣金?(答案格式:写出数字即可,保留小数点后5位) (6.0分)【0.00001】
搜索佣金定位源码
然后AI理解代码
定位promoteReward
函数
二级佣金=手续费X0.1%
手续费=交易金额X手续费率
需要找到这个two代表什么
由于源码中是reward,在查找数据库表也要找reward相关的表,方便快速查找
不知道为什么navicat在看表的时候有一些数据为1的表显示数据为0
然后找手续费率
最后就是5.2X0.001X0.001=0.0000052,保留后五位为就是0.00001
9. 请找到受害人“王涵”的手机号; (1.0分)
根据前文找到的数据库用户名和密码,直接连接数据库,扒就行了
10. 请写出嫌疑人的违法交易网站的中文名称;(答案格式:2个汉字) (3.0分)【币严】
找到网站端口是8801
这里记得要先运行admin
文件夹和cloud
文件夹里面的两个restart.sh
,不然就会出现验证码和登录状态码502
./restart.sh
然后修改数据库admin表里面的密码,就用上面题目的123456
这里如果使用本机登陆的话,就什么都不需要修改了
如果是外部登陆的话,需要按照初赛的操作,修改web目录的IP为虚拟机IP
此时还是不行,查看error.log
发现admin
的转发是转发到10.172.29.128:6010
2025/01/14 08:16:47 [error] 25972#25972: *1 connect() failed (111: Unknown error) while connecting to upstream, client: 127.0.0.1, server: coin_exchange, request: "GET /admin/captcha?cid=ADMIN_LOGIN HTTP/1.1", upstream: "http://10.172.29.128:6010/admin/captcha?cid=ADMIN_LOGIN", host: "127.0.0.1:8801", referrer: "http://127.0.0.1:8801/"
2025/01/14 08:16:47 [error] 25972#25972: *1 connect() failed (111: Unknown error) while connecting to upstream, client: 127.0.0.1, server: coin_exchange, request: "POST /admin/system/employee/login HTTP/1.1", upstream: "http://10.172.29.128:6010/admin/system/employee/login", host: "127.0.0.1:8801", referrer: "http://127.0.0.1:8801/"
2025/01/14 08:26:41 [error] 5444
这明显不对,所以我们还需要去nginx.conf修改代理部分的配置文件,使其转发到我们本机的6010端口
然后使用用户名和修改之后的密码登录
11. 请写出数据库中Recharge表的status字段中,0代表的中文含义; (1.0分)【未到账】
这里通过数据表里和网站后台数据对应,发现应该是已到账
给1改成0,显示未到账
12. 平台中所有账户中ETH余额最多的地址是多少?(答案格式:0x123F...) (6.0分)【0x2c8d0ff224e79b296f00714933ef8be09d4d28f2】
有点小蒙,因为数据库里面都是0,而且虚拟币这东西都是靠区块链的,应该不太可能存到数据库里,不然太容易被改了,所以应该先做下一个题目
做完下一个题目
先运行起来start.sh
,然后解锁账户
AI跑一个脚本
// 获取所有账户
let accounts = eth.accounts;
// 检查是否有账户
if (accounts.length === 0) {
console.log("No accounts found.");
} else {
// 初始化一个变量来存储最大余额及其对应账户
let maxBalance = 0;
let highestAccount = "";
// 遍历所有账户,获取余额
accounts.forEach(function(account) {
let balance = web3.fromWei(eth.getBalance(account), "ether"); // 获取账户余额并转换为 ether
console.log("Account: " + account + ", Balance: " + balance + " ETH");
// 如果该账户余额大于当前最大余额,更新最大余额和账户
if (parseFloat(balance) > maxBalance) {
maxBalance = parseFloat(balance);
highestAccount = account;
}
});
// 输出余额最高的账户及其余额
console.log("Account with highest balance: " + highestAccount);
console.log("Balance: " + maxBalance + " ETH");
}
跑出来的结果和他们的不一样,不知道为什么,我做出来的结果就是这样
13. 区块链搭建工具是?(答案格式:abcd) (1.0分)【ethereum】
桌面有一个project,发现运行脚本,看一看
欧克,geth
命令查一查
14. 区块链对外提供的的http端口是? (2.0分)【8545】
先运行起start.sh
然后查看端口,题目问的是对外提供的,那就是下面的8545
15. 服务器网站数据库使用的字符集为?(答案格式:如有字母,请小写) (1.0分)【utf8mb4】
连上数据库直接看
SHOW VARIABLES LIKE 'character_set%';
16. 由于服务器定时清理了交易数据,请找寻整个区块链中最大的交易金额(答案格式:0x123F...) (6.0分)
还是跑脚本吧
var blockNumber = 1996; // 当前最新区块号
var maxAmount = 0;
var maxTx = null;
// 设置查询范围,查询最近2000个区块
for (var i = blockNumber; i >= Math.max(0, blockNumber - 2000); i--) {
var block = eth.getBlock(i, true); // true 表示获取区块中的所有交易
block.transactions.forEach(function(tx) {
var valueInEther = web3.fromWei(tx.value, 'ether'); // 将交易金额转换为以太坊单位
if (valueInEther > maxAmount) {
maxAmount = valueInEther;
maxTx = tx;
}
console.log("交易量: " + valueInEther + " ETH, 交易哈希: " + tx.hash); // 输出交易量和哈希
});
}
console.log("最大交易金额: " + maxAmount + " ETH");
console.log("最大交易的哈希: " + maxTx.hash);
17. 请写出嫌疑人在chrome上使用的钱包名称;(答案格式:如有字母全小写) (2.0分)【metamask】
18. 请写出chrome钱包插件使用的pbkdf2加密算法的轮次;(答案格式:纯数字) (4.0分)【600000】
第一次发现插件也可以检查看前端代码
这个东西跟取密码验证逻辑一样,通过报错找到源码,再分析源码
定位过来
敲一个断点调试一下
找到param是600000
19. Chrome钱包密码的算法中对iv的加密方式是什么?(答案格式:如有字母请小写,如md5) (4.0分)【aes-gcm】
在上题往上的部分是包含对iv的加密方式,在这里打个断点
找到“AES-GCM”
20. 已知服务器中嫌疑人的钱包登录密码为八位纯数字生日1994****,请写出该密码; (6.0分)【19940822】
在data加密的部分下断点,接获数据
根据已知的东西,用AI跑一个脚本
from Crypto.Cipher import AES
import base64
import hashlib
# 输入已知数据
salt = base64.b64decode("fhlH2383hn7sqEKiLN8zSqv/F/v9x0s3xj/1zBI1zkA=")
iv = base64.b64decode("oi49chysOL0hAXfqbviWIA==")
data = base64.b64decode("4OBSCQ3fpgiiQG1CUT2KVKU9Sma1ixgcZ1xBb+XeQXlX9yFbyj6HgpPH4vKktB39FPVD5wlV0fFrKkrB4YvkwS4y0P2y15GrSMvJ7ZPV2FdT+o7/s9ydryf4j/dvWssWhlpIf8+Z/GTWxrd0pEKCumJ0SgM7pNCn+LPufqgAAc8Phk1V2G78YFFn27hoPalU+mfyLirBvbcNCe7PZhUEf02OB9HJxc6NL8VGHZ0mugf8CMCU4CfoMWBjGB358XwYgqVCAYfPeP612BcqH/2qGsf4v5MUynaoWjR3CDxg6z5n/SzvayET9KxzpnP5/YwrI1Kr6KSuX8hfWa4G7Qect7gRcJ5OSP9vjDAE0Oa7+2RoOvSuDhONrit9JD1j3PlF/HLHjCWcAxFPAqQHnaXHUT7+O/UR/nHBBUjwZqXcA3NvY6Up9gEyp7v252JKw/ybv9PYsNVBNNzaOCHM+2vLu4AEdhsJjEmzz1BMnl2a10lX3PIxT6g+eVdHNVOkeESS7Xiufrh1BNEXemU+/Mj8zOzC8X3sC+h7k6V+j8FO5gFFIsGVsehmhjQ0g3hv5OjHLu+8UbJ19HVC6nzyopbHF1EbgVc4bEfnsqxpBQT4xGY27MQLFa2SlcpRpue1NpZWdhV2C8/wTSBmcgnm3PHWgvBiuA==")
# 遍历所有月份(01 到 12)和日期(01 到 31),生成可能的密码
for month in range(1, 13):
for day in range(1, 32):
# 格式化月份和日期,确保为两位数字
month_str = f"{month:02d}"
day_str = f"{day:02d}"
# 生成可能的密码(1994MMDD)
password = f"1994{month_str}{day_str}"
# 计算PBKDF2生成的密钥
key = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 600000, dklen=32)
# 使用AES-GCM解密
cipher = AES.new(key, AES.MODE_GCM, nonce=iv)
try:
# 尝试解密,仅验证密码是否正确
cipher.decrypt_and_verify(data[:-16], data[-16:])
print(f"成功解密,密码为:{password}")
break
except ValueError:
# 如果解密失败,跳过
continue
爆破出来试试
齐活!!!
原文始发于微信公众号(云淡纤尘):【电子取证】2024数证杯决赛团队赛——服务器取证
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论