第二届平航杯wp
第二届平航杯wp
检材密码:早起王的爱恋日记❤
好像是复现了好多套题后第一场团体赛,还是有效果的,也是打到了第一面。前面一堆森林狼,后面一堆polar,能打到这个地方感觉已经不错了。师兄不在,师弟不会,同年级还有一支队伍没有报上名。。。
这次我主要打了计算机部分以及exe部分,ai嫌麻烦给队友做了。赛后还知道了一个非预期解,LilRan师傅的妙妙小工具。早有耳闻,就是没想到这么屌。
诚招一个服务器方向的队友,原因队友打了四个小时只做了服务器,网站还没搭起来
计算机部分
1.分析起早王的计算机检材,起早王的计算机插入过usb序列号是什么(格式:1)
F25550031111202
2.分析起早王的计算机检材,起早王的便签里有几条待干(格式:1)
5
3.分析起早王的计算机检材,起早王的计算机默认浏览器是什么(格式:Google)
Microsoft Edge
4.分析起早王的计算机检材,起早王在浏览器里看过什么小说(格式:十日终焉)
道诡异仙
5.分析起早王的计算机检材,起早王计算机最后一次正常关机时间(格式:2020/1/1 01:01:01)
2025-04-10 11:15:29
这题做错了,不该错
6.分析起早王的计算机检材,起早王开始写日记的时间(格式:2020/1/1)
2025/3/3
便签里面说了代办事项有写日记,日记肯定在电脑里面,在下载里面找到了可疑的软件,以及火眼也跑出来了一个diary
后面发现这个rednotebook运行在沙箱里面,不知道这个是什么想法和用处,打开之后稍微翻一下,就能找到第一篇日记
7.分析起早王的计算机检材,SillyTavern中账户起早王的创建时间是什么时候(格式:2020/1/1 01:01:01)
2025/3/10 18:44:56
一开始不知道SillyTavern是什么,发现在C:\Users\起早王
路径下面存在wife文件夹,运行起来发现就是这个东西
发现登录需要密码,以为还得绕密什么的,想起来日记里面有很多内容,于是找到密码
8.分析起早王的计算机检材,SillyTavern中起早王用户下的聊天ai里有几个角色(格式:1)
4
9.分析起早王的计算机检材,SillyTavern中起早王与ai女友聊天所调用的语言模型(带文件后缀)(格式:xxxxx-xxxxxxx.xxxx)
Tifa-DeepsexV2-7b-Cot-0222-Q8.gguf
当时没找到这个,在界面里面找了半天。没想到在日志里面,还藏得那么深
这个日志好像被打开过
10.分析起早王的计算机检材,电脑中ai换脸界面的监听端口(格式:80)
7860
这里就是BitLocker的密码了
找到一个FaceFusion,启动
11.分析起早王的计算机检材,电脑中图片文件有几个被换过脸(格式:1)
3
在output文件夹里面
12.分析起早王的计算机检材,最早被换脸的图片所使用的换脸模型是什么(带文件后缀)(格式:xxxxxxxxxxx.xxxx)
inswapper_128_fp16.onnx
在日志里面,找到最早那张图片的日志,然后我找到了,忘记加后缀了
13.分析起早王的计算机检材,neo4j中数据存放的数据库的名称是什么(格式:abd.ef)
graph.db
也是在E盘里面,起neo4j服务,需要注意得输入neo4j.bat console
。发现需要账户和密码
我看他们都是去xmind里面找的密码,这里用的ai给的思路E:\neo4j-community-3.5.14-windows\neo4j-community-3.5.14\data\dbms
把这个文件夹下面的auth文件删除了,就能绕密了。使用默认账户密码neo4j登录,然后重设账户密码
14.分析起早王的计算机检材,neo4j数据库中总共存放了多少个节点(格式:1)
17088
15.分析起早王的计算机检材,neo4j数据库内白杰的手机号码是什么(格式:12345678901)
13215346813
MATCH (u:person {name: '白杰'})
RETURN u.mobile;
16.分析起早王的计算机检材,分析neo4j数据库内数据,统计在2025年4月7日至13日期间使用非授权设备登录且登录地点超出其注册时登记的两个以上城市的用户数量(格式:1)
44
MATCH (u:User)-[:HAS_LOGIN]->(l:Login)-[:FROM_IP]->(ip:IP)
MATCH (l)-[:USING_DEVICE]->(d:Device)
WHERE l.time < datetime('2025-04-14')AND ip.city <> u.reg_cityAND NOT (u)-[:TRUSTS]->(d)
WITH u,collect(DISTINCT ip.city) AS 异常登录城市列表,collect(DISTINCT d.device_id) AS 未授权设备列表,count(l) AS 异常登录次数
WHERE size(异常登录城市列表) > 2
RETURN u.user_id AS 用户ID,u.real_name AS 姓名,异常登录城市列表,未授权设备列表,异常登录次数
ORDER BY 异常登录次数 DESC;
这个查询是真的不太会写,需要把完整的表结构喂给ai,让ai跑
17.分析起早王的计算机检材,起早王的虚拟货币钱包的助记词的第8个是什么(格式:abandon)
draft
这题没做出来,说是在日记里面有提示,我记得当时比赛细细看了几遍日记,没想到没注意到。。。
助剂词在用户自定义短语里面,我记得之前有个CTF题目也是这样出的,
18.分析起早王的计算机检材,起早王的虚拟货币钱包是什么(格式:0x11111111)
0xd8786a1345cA969C792d9328f8594981066482e9
用助记词重置一下钱包
19.分析起早王的计算机检材,起早王请高手为倩倩发行了虚拟货币,请问倩倩币的最大供应量是多少(格式:100qianqian)
1000000qianqian
在历史记录里面找到这个Etherscan,这个东西好像可以查区块链
我们根据qianqian币的合约地址去查qianqian币的相关信息,
20.分析起早王的计算机检材,起早王总共购买过多少倩倩币(格式:100qianqian)
521qianqian
只有一条购买记录
21.分析起早王的计算机检材,起早王购买倩倩币的交易时间是(单位:UTC)(格式:2020/1/1 01:01:01)
2025/3/24 02:08:36
AI题目(注意:该题目要python 3.10环境,建议3.10.6)
22.分析crack文件,获得flag1(格式:flag1{123456})
flag1{you_are_so_smart}
AI题目好难做啊,首先AI很难搭,需要对应的python环境,还有端口占用问题。根据题目说的AI藏了一个秘密,我们需要问出这个秘密,他说和他玩就告诉我秘密,顺着他走就行了
23.分析crack文件,获得flag2(格式:flag2{123456})
flag2{prompt_is_easy}
看到它已经输出了s1cret,但是没有出现flag,在网页源代码里面找到了flag
24.分析crack文件,获得flag3(格式:flag3{123456})
flag3{no_question_can_kill_you}
不看这个思路还真做不出来
25.分析crack文件,获得flag4(格式:flag4{123456})
flag4{You_have_mastered_the_AI}
好像是说这是一个小模型,然后输出的东西和输入的东西是对应的,所以可以考虑爆破,这里贴了官方给的脚本,当爆破出这个🐍的图案结束
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
from livelossplot import PlotLosses # pip install livelossplot
import gc
import numpy as np
import torch
import torch.nn as nnfrom transformers import AutoModelForCausalLM, AutoTokenizernp.random.seed(20)
torch.manual_seed(20)
torch.cuda.manual_seed_all(20)target = "🐍" # attack string
num_steps = 500
adv_string_init = "!"*200
adv_prefix = adv_string_init
# larger batch_size means more memory (but more likely to succeed)
batch_size = 512
device = 'cuda:0'
topk = 256def get_embedding_matrix(model):return model.transformer.wte.weightdef get_embeddings(model, input_ids):return model.transformer.wte(input_ids)def token_gradients(model, input_ids, input_slice, target_slice, loss_slice):"""Computes gradients of the loss with respect to the coordinates.Parameters----------model : Transformer ModelThe transformer model to be used.input_ids : torch.TensorThe input sequence in the form of token ids.input_slice : sliceThe slice of the input sequence for which gradients need to be computed.target_slice : sliceThe slice of the input sequence to be used as targets.loss_slice : sliceThe slice of the logits to be used for computing the loss.Returns-------torch.TensorThe gradients of each token in the input_slice with respect to the loss."""embed_weights = get_embedding_matrix(model)one_hot = torch.zeros(input_ids[input_slice].shape[0],embed_weights.shape[0],device=model.device,dtype=embed_weights.dtype)one_hot.scatter_(1,input_ids[input_slice].unsqueeze(1),torch.ones(one_hot.shape[0], 1,device=model.device, dtype=embed_weights.dtype))one_hot.requires_grad_()input_embeds = (one_hot @ embed_weights).unsqueeze(0)# now stitch it together with the rest of the embeddingsembeds = get_embeddings(model, input_ids.unsqueeze(0)).detach()full_embeds = torch.cat([input_embeds,embeds[:, input_slice.stop:, :]],dim=1)logits = model(inputs_embeds=full_embeds).logitstargets = input_ids[target_slice]loss = nn.CrossEntropyLoss()(logits[0, loss_slice, :], targets)loss.backward()grad = one_hot.grad.clone()grad = grad / grad.norm(dim=-1, keepdim=True)return graddef sample_control(control_toks, grad, batch_size):control_toks = control_toks.to(grad.device)original_control_toks = control_toks.repeat(batch_size, 1)new_token_pos = torch.arange(0,len(control_toks),len(control_toks) / batch_size,device=grad.device).type(torch.int64)top_indices = (-grad).topk(topk, dim=1).indicesnew_token_val = torch.gather(top_indices[new_token_pos], 1,torch.randint(0, topk, (batch_size, 1),device=grad.device))new_control_toks = original_control_toks.scatter_(1, new_token_pos.unsqueeze(-1), new_token_val)return new_control_toksdef get_filtered_cands(tokenizer, control_cand, filter_cand=True, curr_control=None):cands, count = [], 0for i in range(control_cand.shape[0]):decoded_str = tokenizer.decode(control_cand[i], skip_special_tokens=True)if filter_cand:if decoded_str != curr_control \and len(tokenizer(decoded_str, add_special_tokens=False).input_ids) == len(control_cand[i]):cands.append(decoded_str)else:count += 1else:cands.append(decoded_str)if filter_cand:cands = cands + [cands[-1]] * (len(control_cand) - len(cands))return candsdef get_logits(*, model, tokenizer, input_ids, control_slice, test_controls, return_ids=False, batch_size=512):if isinstance(test_controls[0], str):max_len = control_slice.stop - control_slice.starttest_ids = [torch.tensor(tokenizer(control, add_special_tokens=False).input_ids[:max_len], device=model.device)for control in test_controls]pad_tok = 0while pad_tok in input_ids or any([pad_tok in ids for ids in test_ids]):pad_tok += 1nested_ids = torch.nested.nested_tensor(test_ids)test_ids = torch.nested.to_padded_tensor(nested_ids, pad_tok, (len(test_ids), max_len))else:raise ValueError(f"test_controls must be a list of strings, got {type(test_controls)}")if not (test_ids[0].shape[0] == control_slice.stop - control_slice.start):raise ValueError((f"test_controls must have shape "f"(n, {control_slice.stop - control_slice.start}), "f"got {test_ids.shape}"))locs = torch.arange(control_slice.start, control_slice.stop).repeat(test_ids.shape[0], 1).to(model.device)ids = torch.scatter(input_ids.unsqueeze(0).repeat(test_ids.shape[0], 1).to(model.device),1,locs,test_ids)if pad_tok >= 0:attn_mask = (ids != pad_tok).type(ids.dtype)else:attn_mask = Noneif return_ids:del locs, test_idsgc.collect()return forward(model=model, input_ids=ids, attention_mask=attn_mask, batch_size=batch_size), idselse:del locs, test_idslogits = forward(model=model, input_ids=ids,attention_mask=attn_mask, batch_size=batch_size)del idsgc.collect()return logitsdef forward(*, model, input_ids, attention_mask, batch_size=512):logits = []for i in range(0, input_ids.shape[0], batch_size):batch_input_ids = input_ids[i:i+batch_size]if attention_mask is not None:batch_attention_mask = attention_mask[i:i+batch_size]else:batch_attention_mask = Nonelogits.append(model(input_ids=batch_input_ids,attention_mask=batch_attention_mask).logits)gc.collect()del batch_input_ids, batch_attention_maskreturn torch.cat(logits, dim=0)def target_loss(logits, ids, target_slice):crit = nn.CrossEntropyLoss(reduction='none')loss_slice = slice(target_slice.start-1, target_slice.stop-1)loss = crit(logits[:, loss_slice, :].transpose(1, 2), ids[:, target_slice])return loss.mean(dim=-1)model = AutoModelForCausalLM.from_pretrained('.',torch_dtype=torch.float16,trust_remote_code=True,
).to(device).eval()
tokenizer = AutoTokenizer.from_pretrained(".", use_fast=False)def is_success(prompt):input_ids = tokenizer.encode(prompt, return_tensors="pt")output = model.generate(input_ids.to(device), max_new_tokens=50, num_beams=1, temperature=0)output = output[:, len(input_ids[0]):]output_text = tokenizer.decode(output[0], skip_special_tokens=True)print(output_text)if output_text.lower().find(target.lower()) != -1:return Truereturn Falseplotlosses = PlotLosses()
adv_slice = slice(0, len(tokenizer.encode(adv_string_init, add_special_tokens=False)))
target_slice = slice(adv_slice.stop, adv_slice.stop +len(tokenizer.encode(target, add_special_tokens=False)))
loss_slice = slice(target_slice.start-1, target_slice.stop-1)best_new_adv_prefix = ''for i in range(num_steps):input_ids = tokenizer.encode(adv_prefix+target, add_special_tokens=False, return_tensors='pt').squeeze()input_ids = input_ids.to(device)coordinate_grad = token_gradients(model,input_ids,adv_slice,target_slice,loss_slice)with torch.no_grad():adv_prefix_tokens = input_ids[adv_slice].to(device)new_adv_prefix_toks = sample_control(adv_prefix_tokens,coordinate_grad,batch_size)new_adv_prefix = get_filtered_cands(tokenizer,new_adv_prefix_toks,filter_cand=True,curr_control=adv_prefix)logits, ids = get_logits(model=model,tokenizer=tokenizer,input_ids=input_ids,control_slice=adv_slice,test_controls=new_adv_prefix,return_ids=True,batch_size=batch_size) # decrease this number if you run into OOM.losses = target_loss(logits, ids, target_slice)best_new_adv_prefix_id = losses.argmin()best_new_adv_prefix = new_adv_prefix[best_new_adv_prefix_id]current_loss = losses[best_new_adv_prefix_id]adv_prefix = best_new_adv_prefix# Create a dynamic plot for the loss.plotlosses.update({'Loss': current_loss.detach().cpu().numpy()})plotlosses.send()print(f"Current Prefix:{best_new_adv_prefix}", end='\r')if is_success(best_new_adv_prefix):breakdel coordinate_grad, adv_prefix_tokensgc.collect()torch.cuda.empty_cache()if is_success(best_new_adv_prefix):print("SUCCESS:", best_new_adv_prefix)
AI非预期
这里推荐一波LilRan师傅的妙妙工具GitHub - Lil-House/Pyarmor-Static-Unpack-1shot: ✅ No need to run ✅ Pyarmor 8.0 - latest 9.1.4 ✅ Universal ✅ Statically convert obfuscated scripts to disassembly and (experimentally) source code.
直接解出Pyarmor加密脚本,得到start.py的逻辑,也得到所有的flag的明文了。
手机题目
26.该检材的备份提取时间(UTC)(格式:2020/1/1 01:01:01)
2025-04-15 18:11:18
27.分析倩倩的手机检材,手机内Puzzle_Game拼图程序拼图APK中的Flag1是什么(格式:xxxxxxxxx)
Key_1n_the_P1c
修改一下smail代码,改一下判断逻辑就行了
28.分析手机内Puzzle_Game拼图程序,请问最终拼成功的图片是哪所大学(格式:浙江大学)
浙江中医药大学
这个学校好像就在浙j对面,有点印象,队友识图说是湖南农业大学。。。不想过多探讨这道题了。
29.分析倩倩的手机检材,木马app是怎么被安装的(网址)(格式:http://127.0.0.1:1234/)
http://192.168.180.107:6262/
根据格式,只有这个可能
30.分析倩倩的手机检材,检材内的木马app的hash是什么(格式:大写md5)
23A1527D704210B07B50161CFE79D2E8
31.分析倩倩的手机检材,检材内的木马app的应用名称是什么(格式:Baidu)
Google Service Framework
32.分析倩倩的手机检材,检材内的木马app的使用什么加固(格式:腾讯乐固)
梆梆加固
33.分析倩倩的手机检材,检材内的木马软件所关联到的ip和端口是什么(格式:127.0.0.1:1111)
92.67.33.56:8000
34.该木马app控制手机摄像头拍了几张照片(格式:1)
3
其实也不清楚为什么在服务器的/tmp目录下面找。。。
35.木马APP被使用的摄像头为(格式:Camera)
Front Camera
看上图,选择了takepic 1,1是Front Camera
36.分析倩倩的手机检材,木马APK通过调用什么api实现自身持久化(格式:JobStore)
JobScheduler
根据格式来找
37.分析倩倩的手机检材,根据倩倩的身份证号请问倩倩来自哪里(格式:北京市西城区)
上海市徐汇区
38.此手机检材的IMEI号是多少(格式:1234567890)
865372026366143
exe逆向题目(hint:运行后请多等一会)
39.分析GIFT.exe,该程序的md5是什么(格式:大写md5)
5A20B10792126FFA324B91E506F67223
算一下md5,转大写
40.GIFT.exe的使用的编程语言是什么(格式:C)
PYTHON
用了PyInstaller打包
41.解开得到的LOVE2.exe的编译时间(格式:2025/1/1 01:01:01)
2025/4/8 9:58:40
需要得到LOVE2.exe文件,反编译一下exe文件,找到password,然后输入运行GIFT.exe,记得需要关杀软和保护,做好文件备份或者打好快照,这是木马软件
42.分析GIFT.exe,该病毒所关联到的ip和端口(格式:127.0.0.1:1111)
46.95.185.222:6234
当时直接静态分析LOVE2.exe文件,找到一个ip46.95.185.222,但是端口搞错了,这里的端口不对,我当时写的是222端口,不对啊,他们云沙箱跑出来是6234端口
43.分析GIFT.exe,该病毒修改的壁纸md5(格式:大写md5)
733FC4483C0E7DB1C034BE5246DF5EC0
一开始也是在这个地方找到的壁纸,说是缓存的图片,md5值不一样C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Themes\CachedFiles
所以用资源提取软件获取love2.exe里面自带的png图片
然后计算md5值
44.分析GIFT.exe,为对哪些后缀的文件进行加密:
A.doc
B.xlsx
C.jpg
D.png
E.ppt
静态分析一下就行了,盲猜这里面都是
45.分析GIFT.exe,病毒加密后的文件类型是什么(格式:DOCX文档)
LOVE Encrypted File
46.分析GIFT.exe,壁纸似乎被隐形水印加密过了?请找到其中的Flag3(格式:flag3{xxxxxxxx})
flag3{20241224_Our_First_Meet}
比赛的时候拿的缓存图片搞的隐水印,很模糊,不过还好猜了一下flag3里面的内容
47.分析GIFT.exe,病毒加密文件所使用的方法是什么(格式:Base64)
RSA
exe文件里面有特征,然后同一文件夹下面的图片里面也藏了rsa私钥
48.分析GIFT.exe,请解密test.love得到flag4(格式:flag4{xxxxxxxx})
flag4{104864DF-C420-04BB5F51F267}
已知rsa加密了文档,还给了私钥,所以我们问ai来解密test.love,生成了504b文件头,但是这个不是zip,是pptx文件。
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import paddingprivate_key_pem = """-----BEGIN RSA PRIVATE KEY-----
MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAjMqVpy4zP9cO5m/y
w0wmvdLzpUc4FNnUgpKJ26YimfDtA1cTZanNlxbmM25OTPsg2SaRUZdq7M3oGUel
gmRdFwIDAQABAkBYVtCZympLt0PZIQsAsWppltBbtxkgNCGcIBgx4sc5MT03erss
eyh2TqtQyO4aPYiOUUOWYw9hL4G6GFosXc+JAiEAvegkAhLXptnMlwCuwScK233w
cbBcxKWWPgZckdHkGPsCIQC9ynkuhrI4j2nc2eItr1NoU3Y1sfv0I601iNK1YXMJ
lQIgTYlomkgjMIagl865izdroW5sK578YXXSQATM6uStot0CIQCih1DNaiYXT6FN
sv0BOIKJ9edmRjxIr4C2NqyTDZfRHQIgUUhesxSUmNdc5QzckCAozLdPAlcAy7q+
k5ag7Oxp0r0=
-----END RSA PRIVATE KEY-----"""private_key = serialization.load_pem_private_key(private_key_pem.encode(),password=None,backend=default_backend()
)key_size_bytes = private_key.key_size // 8
print(f"密钥块大小: {key_size_bytes} bytes")with open("test.love", "rb") as f:ciphertext = f.read()decrypted_blocks = []
for i in range(0, len(ciphertext), key_size_bytes):block = ciphertext[i:i+key_size_bytes]try:# 优先尝试OAEP填充decrypted = private_key.decrypt(block,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()),algorithm=hashes.SHA1(),label=None))except:# 回退到PKCS1v15decrypted = private_key.decrypt(block,padding.PKCS1v15())decrypted_blocks.append(decrypted)full_data = b''.join(decrypted_blocks)# 保存原始二进制结果
with open("decrypted.bin", "wb") as f:f.write(full_data)
print("解密完成 → decrypted.bin")# 尝试UTF-8解码(可选)
try:print("文本内容预览:", full_data[:500].decode('utf-8'))
except UnicodeDecodeError:print("检测到二进制数据,请用HEX编辑器查看decrypted.bin")
服务器题目
49.该电脑最早的开机时间是什么(格式:2025/1/1 01:01:01)
2022/2/23 12:23:49
50.服务器操作系统内核版本(格式:1.1.1-123)
3.10.0-1160
51.除系统用户外,总共有多少个用户(格式:1)
3
52.分析起早王的服务器检材,Trojan服务器混淆流量所使用的域名是什么(格式:xxx.xxx)
wyzshop1.com
53.分析起早王的服务器检材,Trojan服务运行的模式为:
A、foward B、nat C、server D、client
同目录下面有个examples文件夹,里面是几种运行方式示例,发现和nat模式是几乎一样的
54.关于 Trojan服务器配置文件中配置的remote_addr 和 remote_port 的作用,正确的是:
A. 代理流量转发到外部互联网服务器
B. 将流量转发到本地的 HTTP 服务(如Nginx)
C. 用于数据库连接
D. 加密流量解密后的目标地址
55.分析网站后台登录密码的加密逻辑,给出密码sbwyz1加密后存在数据库中的值(格式:1a2b3c4d)
f8537858eb0eabada34e7021d19974ea
然后开始重构网站,先改一下网卡配置,到/etc/sysconfig/network-scripts
目录下面找到ifcfg-ens33文件,将ip地址,网关和dns前面的注释都删掉,然后宝塔面板把网站起来,是一个购物网站。
去日志里面找到网站后台登录地址http://www.tpshop.com/index.php/Admin/Admin/login.html
进入后台,然后去找数据库,连接上数据库,发现数据库是空的。想到了在计算机E盘里面找到的sql文件,导入数据库。然后看看网站的配置文件,找一下加密逻辑,我也不太会找,花点时间应该就能找到,然后看这个encrypt函数
这里说明了encrypt函数的逻辑,AUTH_CODE内容连上输入的内容,同样也是搜
注释验证了我们的思路是正确的
56.网站后台显示的服务器GD版本是多少(格式:1.1.1 abc)
2.1.0 compatible
这里使用aura师傅的重构思路,按照前面的步骤,发现网站后台登录不进去,应该是数据库的问题,这里找到数据库的配置文件
不使用数据库的root用户,就能连上数据库了
57.网站后台中2016-04-01 00:00:00到2025-04-01 00:00:00订单列表有多少条记录(格式:1)
1292
58.在网站购物满多少免运费(格式:1)
100000
59.分析网站日志,成功在网站后台上传木马的攻击者IP是多少(格式:1.1.1.1)
222.2.2.2
先找到了一句话木马,然后就能定位到日志的具体地方,然后找到ip
60.攻击者插入的一句话木马文件的sha256值是多少(格式:大写sha256)
870BF66B4314A5567BD92142353189643B07963201076C5FC98150EF34CBC7CF
当时翻配置文件发现有一句话木马就挺疑惑的,就在网站根目录下面
61.攻击者使用工具对内网进行扫描后,rdp扫描结果中的账号密码是什么(格式:abc:def)
administrator:Aa123456@
直接搜关键词,发现可以搜到
62.对于每个用户,计算其注册时间(用户表中的注册时间戳)到首次下单时间(订单表中最早时间戳)的间隔,找出间隔最短的用户id。(格式:1)
180
SELECT u.user_id, MIN(o.create_time) - u.reg_time as time_diff
FROM tp_users u
JOIN tp_delivery_doc o ON u.user_id = o.user_id
GROUP BY u.user_id, u.email, u.reg_time
ORDER BY time_diff ASC
LIMIT 1;
63.统计每月订单数量,找出订单最多的月份(XXXX年XX月)
2017年01月
SELECT EXTRACT(YEAR FROM FROM_UNIXTIME(o.create_time)) as year,EXTRACT(MONTH FROM FROM_UNIXTIME(o.create_time)) as month,COUNT(*) as order_count
FROM tp_delivery_doc o
GROUP BY year, month
ORDER BY order_count DESC
LIMIT 1;
64.找出连续三天内下单的用户并统计总共有多少个(格式:1)
110
SELECT t1.user_id,MIN(FROM_UNIXTIME(t1.add_time)) AS earliest_order_date
FROM tp_order t1
WHERE EXISTS (SELECT 1FROM tp_order t2WHERE t2.user_id = t1.user_idAND FROM_UNIXTIME(t1.add_time) > FROM_UNIXTIME(t2.add_time)AND DATEDIFF(FROM_UNIXTIME(t1.add_time), FROM_UNIXTIME(t2.add_time)) <= 3
)
GROUP BY t1.user_id
ORDER BY
t1.user_id;
流量分析(提示:侦查人员自己使用的蓝牙设备有QC35 II耳机和RAPOO键盘)
流量分析感觉还是有点意思的,有点难,没做过这种流量
65.请问侦查人员是用哪个接口进行抓到蓝牙数据包的(格式:DVI1-2.1)
COM3-3.6
66.起早王有一个用于伪装成倩倩耳机的蓝牙设备,该设备的原始设备名称为什么(格式:XXX_xxx 具体大小写按照原始内容)
Flipper_123all
用这个tshark.exe导出json格式文件,便于分析tshark.exe -r J:\BLE.pcapng -T json > BLE.json
,然后说是用正则表达式过滤
import re
def extract_device_names(file_path):
# 设备名称的集合(自动去重)device_names = set()
# 正则表达式模式,用于匹配设备名称pattern = re.compile(r'"btcommon\.eir_ad\.entry\.device_name":\s*"([^"]+)"')with open(file_path, 'r', encoding='utf-8') as file:for line in file:
# 在每一行中查找所有匹配项matches = pattern.findall(line)for match in matches:
# 将找到的设备名称添加到集合中(自动处理重复)device_names.add(match)
# 输出结果print("提取的设备名称列表:")for name in sorted(device_names): # 按字母顺序排序输出print(name)
# 文件路径
file_path = r"C:\Users\50566\OneDrive\Desktop\BLE.json"
extract_device_names(file_path)
很多东西其实都不太可能,然后可以搜一下这些蓝牙设备
这个flipper,好像当年火的时候有点印象,伪造成苹果耳机,给他们手机无限弹窗。
67.起早王有一个用于伪装成倩倩耳机的蓝牙设备,该设备修改成耳机前后的大写MAC地址分别为多少(格式:32位小写md5(原MAC地址_修改后的MAC地址) ,例如md5(11:22:33:44:55:66_77:88:99:AA:BB:CC)=a29ca3983de0bdd739c97d1ce072a392 )
97d79a5f219e6231f7456d307c8cac68
这里说是QQ_WF_SP8OON是倩倩的蓝牙设备,然后那个flipper是起早王的设备,根据题干的提示,
68.流量包中首次捕获到该伪装设备修改自身名称的UTC+0时间为?(格式:2024/03/07 01:02:03.123)
2025/04/09 02:31:26.710
搜QQ_WF_SP8OON首次出现的时间,这里强调了UTC+0,所以要减去八个小时
69.起早王中途还不断尝试使用自己的手机向倩倩电脑进行广播发包,请你找出起早王手机蓝牙的制造商数据(格式:0x0102030405060708)
0x0701434839313430
说是上面过滤出来了三个设备,还有一个设备没有用上,直接搜就行了。然后说是在这个Manufacturer Specific这个字段数据就是制造商数据
70.起早王的真名是什么(格式:Cai_Xu_Kun 每个首字母均需大写 )
Wang_Zao_Qi
net-a直接跑就行,虽然拼音不太对,但是队友对起早王很眼熟,所以就直接出来了。
71.起早王对倩倩的电脑执行了几条cmd里的命令(格式:1 )
7
手动提取一下cmd命令,看了直播好像是伪造蓝屏的命令
cmdwhoaminet usernet user qianqianwoaini$ abcdefghijkImn /addnet localgroup administrators qianqianwoaini$ /addnet user qianqianwoaini$ /delCGIKLLMMLLJJHHHFECBnet localgroup administrators qianqianwoaini$ /addrundll32 url.dll,FileProtocolHandler https"//fakeupdate.net/win10ue/bsod.html
72.倩倩电脑中影子账户的账户名和密码为什么(格式:32位小写md5(账号名称_密码) ,例如md5(zhangsan_123456)=9dcaac0e4787b213fed42e5d78affc75 )
53af9cd5e53e237020bea0932a1cbdaa
73.起早王对倩倩的电脑执行的最后一条命令是什么(格式:32位小写md5(完整命令),例如md5(echo “qianqianwoaini” > woshiqizaowang.txt)=1bdb83cfbdf29d8c2177cc7a6e75bae2 )
0566c1d6dd49db699d422db31fd1be8f
neta跑的有点点问题,不会流量,直接交给队友