赛题原题及工具资料下载地址扫描网页底部二维码领取:
解题代码可从CSDN直接复制粘贴即可,CSDN解题代码网址为:https://blog.csdn.net/fdsfsfsdfsdfsdfsdfds/article/details/152087585
今年是第三届蓝桥杯网络安全CTF竞赛,相比于前两届,今年没有了理论题。这三年题目难度呈逐年上升趋势,以后大概率会越来越难。
第一题:情报收集:黑客密室逃脱(Web类题目50分)
1.1 题目描述:
靶机题目:黑客密室逃脱
题目内容:欢迎闯入黑客密室,你被困在了顶级黑客精心设计的数字牢笼中,每一道关卡都暗藏致命陷阱!唯一的逃脱之路,是破解散落在服务器各处的加密线索,找到最终的“数字钥匙”。
访问靶机后如下图所示:


点击【立即查看日志】:


给出一串加密字符串,这就是密文,解密之后就是flag,点击【前往秘密区域】:


提示我们去访问/file?name=xxx,让我们猜测文件名。我们通过课程教授的方法获取到文件名是app.py,然后通过文件包含获取源代码:


程序使用simple_encrypt()函数对敏感信息进行加密,当用户访问/logs页面时返回加密后的敏感信息。
1.2 解题步骤:
当用户访问/hidden.txt页面时返回密钥key,我们手动访问一下获得秘钥:


我们有了加密算法、密钥和密文,可以编写解密函数获取明文:
1.3 exp代码:


第二题:数据分析:ezEvtx(Misc杂项类题目50分)
2.1 题目描述:


题目内容:
EVTX文件是Windows操作系统生成的事件日志文件,用于记录系统、应用程序和安全事件。(本题需要选手找出攻击者访问成功的一个敏感文件,提交格式为flag{文件名},其中文件名不包含文件路径,且包含文件后缀)
2.2 解题步骤:
第一步,用上课教的软件elex.exe打开题目附件。


第二步,分析题目,题目说攻击者访问成功的一个敏感文件,我们需要找到这个文件名。课堂上我们讲过,事件ID4663:文件系统操作(详细文件访问),事件ID4656:请求访问对象(通常是文件),那么我们先根据4663进行筛选。


找到了文件名,答案就是flag{confidential.docx}


第三题:数据分析:flowzip(Misc杂项类题目50分)
3.1 题目描述:


题目内容:
There are many zip files.
3.2 解题步骤:
直接一步解,查找flag。


第四题:密码破解:Enigma(Crypto密码学类题目50分)
4.1 题目描述:
题目内容:
Enigma是20世纪早期由德国工程师Arthur Scherbius设计的一款便携式机械加密设备,旨在为需要高安全性通信的场景提供加密保护。其核心原理基于可旋转的机械转子、反射器和接线板的组合,通过复杂的电路转换实现对明文的加密与解密。(本题需要选手还原成原文字母,提交格式为flag{原文字母},其中原文字母为全英文大写,且去掉空格。)


4.2 解题步骤:
这道题目比我上课时候讲的恩尼格码加密简单多了,我上课的题目要编程写脚本,这道题目直接用赛博厨师直接一步解,就可以拿到flag。打开Cyberchef,选择Enigma加密算法。放入密文,发现直接出现了明文,怀疑可能是对称加密。flag{HELLOCTFERTHISISAMESSAGEFORYOU}


第五题:密码破解:ECBTrain(Crypto密码学类题目278分)
5.1 题目描述:
题目内容:
AES的ECB模式存在很明显的缺陷。你能否尝试以admin身份完成本题挑战?
5.2 解题步骤:
靶机题目,加密算法为AES的ECB模式。利用了 AES-ECB 加密模式的分块独立加密特性。ECB 模式下,相同的明文块始终加密为相同的密文块,且各块加密互不影响。
靶场题目的意思是:netcat连接后,先注册,发现注册后返回auth(base64编码),再登陆的时候需要输入auth。
解题思路:第一步,第一次注册аааааааааааааааааdmin,这个账号由16个字符a和5个字符admin组成,所以加密是16个字符a为第一个独立块,admin为第二个独立块。第二步,第一次注册返回的是AES加密后的base64编码,我们获取AES密文的最后16字节就是admin加密后的密文auth。第三步,最后用这个密文的base64编码输入2登录即可获得flag。


5.3 exp代码:
flag值:
flag{69916f0f-eb6d-436e-ad27-0eb62dcbe740}
第六题:密码破解:easy_AES(Crypto密码学类题目286分)
6.1 题目描述:
题目内容:
题目采用的是传统的AES加密,但是其中的key似乎可以通过爆破得到,你能找到其中的问题,解密出敏感数据吗?
题目代码如下:
6.2 exp代码:
关键点在于key1是由key0进行置换后得到的,尝试编写脚本爆破置换表后进行解密。
from Crypto.Cipher import AES import random, os defpad(msg): return msg + bytes([16 - len(msg) % 16for _ inrange(16 - len(msg) % 16)])defpermutation(key): tables = [hex(_)[2:] for _ inrange(16)] random.shuffle(tables) newkey = "".join(tables[int(key[_], 16)] for _ inrange(len(key))) return newkeydefgen(): key0 = os.urandom(16).hex() key1 = permutation(key0) return key0, key1defencrypt(key0, key1, msg): aes0 = AES.new(key0, AES.MODE_CBC, key1) aes1 = AES.new(key1, AES.MODE_CBC, key0) return aes1.decrypt(aes0.encrypt(msg)) defdecrypt(key0, key1, msg): aes0 = AES.new(key0, AES.MODE_CBC, key1) aes1 = AES.new(key1, AES.MODE_CBC, key0) return aes0.decrypt(aes1.encrypt(msg)) '''# 生成密钥对key0, key1 = gen()a0, a1 = int(key0, 16), int(key1, 16) # 将密钥转为整数gift = a0 & a1 # 计算key0和key1的按位与,作为泄露信息cipher = encrypt(bytes.fromhex(key0), bytes.fromhex(key1), pad(flag)) # 加密填充后的flagprint(f"gift = {gift}")print(f"key1 = {key1}")print(f"cipher = {cipher}")'''gift = 64698960125130294692475067384121553664key1 = int('74aeb356c6eb74f364cd316497c0f714', 16)cipher = b'6\xbf\x9b\xb1\x93\x14\x82\x9a\xa4\xc2\xaf\xd0L\xad\xbb5\x0e|>\x8c|\xf0^dl~X\xc7R\xcaZ\xab\x16\xbe r\xf6Pl\xe0\x93\xfc)\x0e\x93\x8e\xd3\xd6'gift = hex(gift)[2:]key1 = hex(key1)[2:]key0 = [[-1]] * 16print(gift)print(key1)print(key0)for i inrange(32): key_new = [] for j inrange(16): ifint(key1[i], 16) & j == int(gift[i], 16): key_new.append(hex(j)[2:]) key0[int(key1[i], 16)] = key_newfor i inrange(len(key0)): if key0[i][0] == -1: key0[i] = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']print(key0)key0a = []defgogogo(used, i): global key0, key0a for j in key0[i]: if j notin used: if i != 15: used2 = used + [j] gogogo(used2, i + 1) else: key0a.append(used + [j])gogogo([], 0)ret_all = b''for i in key0a: newkey = "".join(i[int(key1[_], 16)] for _ inrange(len(key1))) a0, a1 = int(newkey, 16), int(key1, 16) if a0 & a1 == 64698960125130294692475067384121553664: ret = decrypt(bytes.fromhex(newkey), bytes.fromhex(key1), cipher) ret_all += retwithopen('result.txt', 'wb') as f: f.write(ret_all)

生成result.txt,用winhex打开查找flag,flag{886769b5-2301-4c37-bb73-4480b4eab682}


第七题:逆向分析:ShadowPhases(Reverse逆向类题目50分)
7.1 题目描述:
题目内容:
在调查一起跨国数据泄露事件时,你的团队在暗网论坛发现一组被称作'三影密匣'的加密缓存文件。据匿名线报,这些文件采用上世纪某情报机构开发的“三重影位算法”,关键数据被分割为三个相位,每个相位使用不同的影位密钥混淆。威胁分析显示,若不能在48小时内还原原始信息,某关键基础设施的访问密钥将被永久销毁。逆向工程师的日志残页显示:'相位间存在密钥共鸣,但需警惕内存中的镜像陷阱..
7.2 解题步骤:
第一步,查壳,无壳64位


第二步,IDA64位打开,拖入IDA分析,发现会将我们的input与enc进行比较。这类题目课堂上讲过多种解法,最快的就是动调。


动调至断点处,获得flag,flag{0fa830e7-b699-4513-8e01-51f35b0f3293}


第八题:逆向分析:BashBreaker(Reverse逆向类题目120分)
8.1 题目描述:


题目内容:
赛博考古学界流传着一个传说——人工智能先驱艾琳·巴什博士在自杀前,将毕生研究的核心算法封存在了他的量子实验室中。这个实验室遵循古老的巴什博弈协议,唯有通过15枚光子硬币的智慧试炼,才能唤醒沉睡的实验室AI。
8.2 解题步骤:
第一步,查壳,无壳64位


第二步,IDA64位打开,拖入IDA分析,找到main函数后发现有一个key解密函数:


第三步,nop掉if语句,直接运行full_decrypt()函数获得key:


第四步,找到变异的rc4函数(rc4_init和rc4_next函数多一个异或0x37,),以及密文:






8.3 exp代码:
from Crypto.Cipher import ARC4import binasciidefrc4(key: bytes, data: bytes) -> bytes: S = list(range(256)) j = 0for i inrange(256): j = (j + S[i] + (key[i % len(key)] ^ 0x37)) % 256 S[i], S[j] = S[j], S[i] i = j = 0 result = [] for byte in data: i = (i + 1) % 256 j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] k = S[(S[i] + S[j]) % 256] k = ((16 * k) | (k >> 4)) & 0xff result.append((byte ^ k)&0xff) returnbytes(result)if __name__ == "__main__": key = b"EC3700DFCD4F364EC54B19C5E7E26DEF6A25087C4FCDF4F8507A40A9019E3B48BD70129D0141A5B8F089F280F4BE6CCD" enc = [0xBB, 0xCA, 0x12, 0x14, 0xD0, 0xF1, 0x99, 0xA7, 0x91, 0x48, 0xC3, 0x28, 0x73, 0xAD, 0xB7, 0x75, 0x8C, 0x89, 0xCD, 0xDD, 0x2D, 0x50, 0x5D, 0x7F, 0x95, 0xB1, 0xA4, 0x9D, 0x09, 0x43, 0xE1, 0xD2, 0xE9, 0x66, 0xEA, 0x18, 0x98, 0xC6, 0xCC, 0x02, 0x39, 0x18] plaintext = bytes(enc) ciphertext = rc4(key, plaintext) print("加密结果(Hex):", bytes(ciphertext))



第九题:漏洞挖掘分析:星际XML解析器(web类题目)
9.1 题目描述:
你已进入星际数据的世界,输入XML数据,启动解析程序,探索未知的数据奥秘!


9.2 解题步骤:
老师培训班讲过的原题XML攻击,直接拿老师上课的payload即可。
9.3 exp代码:
当服务器解析这段XML时:
遇到&xxe;引用时,尝试加载定义的外部实体
通过file://协议,解析器会读取服务器上的/flag文件
flag文件内容会被包含在XML响应中返回
<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [<!ELEMENT fooANY ><!ENTITY xxeSYSTEM"file:///flag" >]><creds><user>&xxe;</user></creds>



恭喜培训班学员在第十六届蓝桥杯网络安全竞赛中取得佳绩。培训班总共有10人获得省一等奖、16人获得省二等奖、15人获得省三等奖。



