23国赛WP
签到题
输错代码后,会看到官方提示:
python3打印文件内容:
1 print(open('/etc/passwd').read())
可以猜测是需要通过输入代码打开什么文件,索性尝试/flag
,输入print(open('/flag').read())
结果如下:
获得flag{Od2e2ea0-0896-4ee6-a925-09acee3db3a9}}
国粹
题干:
可以看到最后两张图长度相同,对齐后有一定的规律
第一行相同牌面对应第二行的牌面没有重复的
第一行相同的牌面,第二行对应的牌面按照一定的顺序排列:
一万 到 九万
一饼 到 九饼
一条 到 九条
东南西北风
中发白
春夏秋冬
梅兰竹菊
同时题干图片中第一行第一个为空白第二行以一个为一万,可以联想到坐标轴,
于是尝试将(a,k)
对应的各个点描出:
可以隐约发现flag{}
,对图片进行翻转操作后:
最后获得flag{202305012359}
Modbus
题目为一个流量包,根据题干提示(还有高人指点),筛选modbus
协议的流量包:
注意最后的Word Count
,将前14个流量包对应的十六进制提取出来拼接获得
MMYWMX3GNEYWOXZRGAYDA===
,再通过Base32解码获得c1f_fi1g_1000
.
于是flag{c1f_fi1g_1000}
(本题一直摸鱼,全靠队友:joy:)
Babyre
打开附件babyre.xml
可以看到https://snap.berkeley.edu
访问将文件导入:
查看关键元素(lock)代码:
尝试运行(注意在设置中开启JavaScript拓展),发现需要输入一串字符,阅读关键部分代码。
可以看到键入输进去的字符按照Unicode编码相邻异或后得到test
对比了test
和secret
的字符是否相同。
所以先修改程序使其输出secret
:
获得如下一串数字:
102 10 13 6 28 74 3 1 3 7 85 0 4 75 20 92 92 8 28 25 81 83 7 28 76 88 9 0 29 73 0 86 4 87 87 82 84 85 4 85 87 30
根据异或特性,编写逆向程序:
1 | l=[102,10,13,6,28,74,3,1,3,7,85,0,4,75,20,92,92,8,28,25,81,83,7,28,76,88,9,0,29,73,0,86,4,87,87,82,84,85,4,85,87,30] |
输出结果:
flag{12307bbf-9e91-4e61-a900-dd26a6d0ea4c}
Funcanary
用ida查看代码,发现这是一个利用fork实现无限循环的函数,
同时发现一个后门函数·
每次会调用shuru函数
查看shuru函数
发现了一个溢出点
查看保护措施
保护全开
查看栈结构
思路明确了,想办法绕开金丝雀值,修改返回地址到后门函数上
而结合无限循环的特性,我可以写一个脚本来逐位爆破canary值,而结合题目的保护设施,后门函数的地址也会变,所以我再写一个爆破脚本,通过最多500次尝试找出正确的后门
Exp:
1 |
|