Hello, world! Welcome to the official Scarlet CTF Rules Trivia! The game is simple, read the rules, and answer correctly. Each question is TRUE or FALSE! (I.E: the statement is either correct, or not) Put your answer either as: T (for true) F (for false)
Don't attack this application, that's not the goal of this challenge. You'll get the flag when you answer all questions correctly.
== (1/10) You are NOT allowed to compromise/pentest our CTF platform (rCTF, scoreboard, etc.) == T for TRUE, F for FALSE> T == (2/10) Flag sharing (sharing flags to someone not on your team) is NOT allowed == T for TRUE, F for FALSE> T == (3/10) If you have a question regarding the CTF, you ping the admins or DM them == T for TRUE, F for FALSE> F == (4/10) Asking for help from other people (not on your team) for challenges is allowed if you're stuck == T for TRUE, F for FALSE> F == (5/10) You are allowed to use automated scanners/fuzzing/bruteforcing whenever you wish with NO restrictions == T for TRUE, F for FALSE> F == (6/10) Your teams can be of unlimited size == T for TRUE, F for FALSE> T == (7/10) You are allowed to do ACTIVE attacking during OSINT (i.e: contacting potential targets), not just passive, when you feel it is necessary == T for TRUE, F for FALSE> F == (8/10) PASSIVE OSINT techniques are allowed on general RUSEC infrastructure only when EXPLICITLY given specific permission to by a challenge == T for TRUE, F for FALSE> T == (9/10) ACTIVE techniques (i.e: pentesting) are allowed on general RUSEC infrastructure at any time == T for TRUE, F for FALSE> F == (10/10) Official writeups will be posted at the end of the competition == T for TRUE, F for FALSE> T
Congratulations! * You are NOT allowed to compromise/pentest our CTF platform (rCTF, scoreboard, etc.): T * Flag sharing (sharing flags to someone not on your team) is NOT allowed: T * If you have a question regarding the CTF, you ping the admins or DM them: F Reason: You make a ticket * Asking for help from other people (not on your team) for challenges is allowed if you're stuck: F Reason: You are not allowed to ask external people for help on challenges * You are allowed to use automated scanners/fuzzing/bruteforcing whenever you wish with NO restrictions: F Reason: You are only allowed to do so when a challenge specifically requires it * Your teams can be of unlimited size: T * You are allowed to do ACTIVE attacking during OSINT (i.e: contacting potential targets), not just passive, when you feel it is necessary: F Reason: OSINT is strictly passive * PASSIVE OSINT techniques are allowed on general RUSEC infrastructure only when EXPLICITLY given specific permission to by a challenge: T * ACTIVE techniques (i.e: pentesting) are allowed on general RUSEC infrastructure at any time: F Reason: Active pentesting is NEVER ever allowed on RUSEC infrastructure * Official writeups will be posted at the end of the competition: T
RUSEC{you_read_the_rules}
FLAG
1
RUSEC{you_read_the_rules}
Forensics
Dark Tracers
Challenge
Would you look at that!? We have a fake murder-for-hire case on our desk. Lovely. Anyway, ASAC Bobr wants you to trace through the transaction to identify the most likely hash that indicates the payment made from the perp to the scammer for the agreed upon amount.
Here is what we believe is the transaction made from a Bitcoin ATM to one of the addresses associated with the perpetrator’s wallet:
Can you trace through the transactions and find the end of the peel chain? Upload the transaction with the last traceable transaction in the peel chain that we can attribute as the actor from our scam cluster! These types of peels can take a while and we want to know what service was used. We believe one of the receiving addresses will be a deposit address controlled by a cryptocurrency exchange, so upload the date of the transaction in the format MM/DD/YYYY as well as the name of the exchange that is associated with one or more of the receiving addresses in the final transaction on the peel chain.
FLAG FORMAT: RUSEC{hash:date:exchange}
For example, if you think the transaction hash is 49100341fe8d99bd1ed7cec22edf0ec63d6920a01627e34249b2dfb3c464bca0, the date is January 2nd, 2026, and one of the receiving parties is a deposit address belonging to Kraken, upload it in the format:
deffetch_json(url): for _ inrange(3): try: req = urllib.request.Request(url, headers=HEADERS) with urllib.request.urlopen(req, timeout=15) as response: return json.loads(response.read().decode()) except: time.sleep(1) returnNone
deffind_spending_tx(address, txid, vout_index): """Trace the next hop by looking for the input spending this specific UTXO.""" txs = fetch_json(f"{API_BASE}/address/{address}/txs") ifnot txs: returnNone for tx in txs: for vin in tx.get("vin", []): if vin.get("txid") == txid and vin.get("vout") == vout_index: return tx.get("txid") returnNone
defprint_hop(step, txid, date, outputs_info, next_tx): """Print each hop in a tree structure""" print(f"\n{Fore.BLUE}{Style.BRIGHT}[Hop #{step:02d}]{Style.RESET_ALL}{Fore.GREEN}{Style.BRIGHT}{date}") print(f" ╰─ Transaction: {Fore.WHITE}{Style.BRIGHT}{txid}")
for i, out inenumerate(outputs_info): is_last = i == len(outputs_info) - 1 branch = "├──"ifnot is_last else"└──"
destinations = [p["address"] for p in peel_history] if destinations: most_common_addr = Counter(destinations).most_common(1)[0][0]
last_tx_to_target = None for p inreversed(peel_history): if p["address"] == most_common_addr: last_tx_to_target = p break
total_peeled = sum(p["value"] for p in peel_history if p["address"] == most_common_addr)
print(f"[*] Analysis of Peel Pattern:") print(f" - Primary Target Address: {most_common_addr}") print(f" - Total Funds Peeled: {total_peeled:.4f} BTC") print(f" - Frequency: {destinations.count(most_common_addr)} times in this chain")
print(f"\n[*] The last traceable transaction related to this crypto peeling chain is:") print(f" {Fore.GREEN}{Style.BRIGHT}TXID: {last_tx_to_target['txid']}") print(f" {Fore.GREEN}{Style.BRIGHT}Date: {last_tx_to_target['date']}")
Earlier on in the year I used a custom PPA for a long-discontinued library I needed in my experimental program. I ended up not using it, but soon forgot about it later on. However, this morning, I went to check back in on my server and discovered a strange SSH public key in my root SSH user.
I have a packet capture from yesterday detailing everything happening on the network. Could you maybe take a look at it?
UlVTRUN7a24wY2tfa24wY2tfeW91X2g0dmVfYV9wNGNrNGdlX2luX3RoM19tNDFsfQo= 经过 base64 解码得到的就是 flag
FLAG
1
RUSEC{kn0ck_kn0ck_you_h4ve_a_p4ck4ge_in_th3_m41l}
:(
Challenge
As I look back at my RUSEC memories, I remembered the time that I met my mentor! Seems like he accidently kept sending my machine a payload that made my screen go blue…
Solution
先把拿到的 evtx 日志转换为 xml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
import Evtx.Evtx as evtx
input = "Challenge.evtx" output = "Challenge.xml"
withopen(output, 'w', encoding='utf-8') as f_out: f_out.write('<?xml version="1.0" encoding="utf-8"?>\n') f_out.write('<Events>\n')
with evtx.Evtx(input) as log: count = 0 for record in log.records(): f_out.write(record.xml() + '\n') count += 1
然后把输出的内容丢给 AI 一把梭了
分析题目线索:
题目描述提到了“blue screen”(蓝屏)和“payload”(攻击载荷)。
提供的文件是 XML 格式的 Windows 事件日志。
在 Windows 日志中,蓝屏死机(BSOD)通常会生成 BugCheck 事件(Event ID 1001)。随后的重启过程会记录系统未正常关闭的事件(Event ID 41 和 6008)。
定位关键日志条目:
在 XML 文件末尾,可以发现密集出现的以下三类事件,且它们包含 <Binary> 字段(存储了 Base64 编码的数据):
Event ID 1001 (BugCheck): 共 10 条记录。
Event ID 41 (Kernel-Power): 共 10 条记录。
Event ID 6008 (EventLog): 共 10 条记录。
题目暗示 flag 隐藏在这些导致蓝屏的“payload”数据中。
提取并解码数据:
这些 <Binary> 字段中的数据是 Base64 编码的。
经过测试发现,这些数据采用了双重 Base64 编码。
我们需要对这三组事件中的每一条进行双重解码,寻找有意义的字符串。
第一组:Event ID 1001 (BugCheck)
检查第 9 条记录(EventRecordID 45640):
XML Binary: VWxWVFJVTjdNM1JsY201aGJGOWliSFV6WHc9PQ==