TSCTF-J2022 WP
互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。
——《白帽子讲Web安全》
官方WP
Reverse
零基础真的零基础,就这么稀里糊涂地做了几道题。
baby_xor
下载文件拖入IDA看一眼主函数,鉴定为纯纯的异或。(数组具体数据不放了)
程序的本质是我们输入的字符串s中的每个字符与其下标进行按位异或运算,再与0x46进行按位异或运算,与data中对应的元素比较。
异或可逆,data[i] = i ^ s[i] ^ 0x46
等价于 s[i] = data[i] ^ i ^ 0x46
破解程序如下:
1 | data = [0 for i in range(41)] |
运行得Flag:
byte_code
查看文件内容如下:
1 | 1 0 LOAD_CONST 0 (114) |
pyc字节码。
pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的。
去网上搜了一个小时的pyc反编译工具,无果,最后通过一些博客的帮助~手撸撸出来了~。
具体过程不细嗦,谁做谁知道,给出反编译后的py程序如下(不足之处欢迎指出):
1 | import dis |
运行得Flag:
ez_maze
拖入IDA,shift+F12查字符串,观察到Flag编码信息和不明长字符串:
结合maze题的信息,复制长字符串至记事本,~数字符个数~拖入家中常备的统计字符个数的脚本,得字符个数为5551=91x61,分隔字符后迷宫如下(ps.必须使用等宽字体,这里使用了幼圆):
没看到起点和终点啊。于是回去读IDA,无果,利用hint“如果不能反混淆就大胆猜测这个题在干什么吧”,我大胆猜了一把:从左上走到右下。
结合之前IDA里看到的"WASD"可知迷宫移动使用WASD键。
结合之前IDA里看到的"Wrong Path, Maybe it’s not the best solution."可知需要寻找最短路径。
最短路径算法不会,同寝的ACM👴不肯帮我,遂大胆猜了另一把。得路径如下:
DSDWDDSDWDDDSASSSSDDSSDSSDWDWAWWWWASAAWDWDWDDSDSDDWWDDSASSSDDDWAWWWDWDDSSDSSDSDSDSSAAAAAWWASASASDSDWDDSDDDWDDSASDSSDWDWWDSSSSSSSAWAAWAAAAASAAASASDDDDWDWDSSSDDWWDSSSDSASSAAWAWWAASSDSDSSDSDDSDDSASDD
MD532位大写加密一下包上大括号抱着试一试的心态上交,居然对了。
猜想之前进行了抽象的操作,现在看来真是痛定思痛痛何如哉,这样的抽象文化对🐭🐭这个新手来说还是为时尚早了。
Crypto
半个月前刚在网安导论课上学了RSA就来实践力!
T0ni’s_RSA
下载文件IDLE打开
1 | assert len(flag)==48 |
可知长度为48的Flag被等分成了四部分,每一部分使用了不同的RSA算法加密。
具体如下(省略具体数据):
Flag1
1 | print("=====================================flag1") |
常规的RSA加密,知道p、q可以求phi = (p-1)(q-1)
,得到私钥d = gmpy2.invert(e, phi)
,进而求得m = pow(c,d,n)
,即Flag1。
代码如下:
1 | import gmpy2 |
Flag2
1 | print("=====================================flag2") |
n不太大,可以尝试因式分解,分解得p = 10044079891992334031
q = 11695298459661145481
。
余下做法同Flag1,得Flag2 = b'ii_is_the_mo'
Flag3
1 | print("=====================================flag3") |
不会,面向搜索引擎编程,得到信息如下:
摘录代码如下(部分测试代码略去):
1 | import gmpy2 |
费马分解什么的完全不懂捏,就这样作为脚本小子搞到了Flag3(笑)。
写完WP学一下罢。
Flag4
1 | print("=====================================flag4") |
参考资料得知可以通过低指数爆破得出明文。
代码如下:
1 | import gmpy2 |
Flag
综上,Flag为TSCTF-J{T0niii_is_the_most_handsome_boy_in_BUPT}
如题面所述,不愧是至理名言(V我50
Nonograms
数织
TSC出来基本就是TSCTF-J{}了,需要考虑的是中间五个全角的玩意。
旗字出来第一想法旗开得胜,然后去做了第五个,一眼鉴定为感叹号。
于是开始输Flag:
TSCTF-J{旗开得胜!}(全角感叹号)不对
TSCTF-J{旗开得胜!}(半角感叹号)不对
TSCTF-J{旗开得胜! }(半角感叹号+半角空格)不对
Dinner是我了。老老实实回去做。最后一个字做到一半发现另有玄只因,重新输Flag TSCTF-J{旗开得勝!} 过了。
锟斤拷烫烫烫
文件内容如下:
1 | 烫烫烫锟斤拷/烫烫烫锟斤拷锟斤拷锟斤拷/烫烫烫锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷烫烫烫/烫烫烫烫烫烫锟斤拷锟斤拷/烫烫烫锟斤拷锟斤拷/锟斤拷锟斤拷烫烫烫锟斤拷/烫烫烫烫烫烫/锟斤拷烫烫烫烫烫烫烫烫烫/烫烫烫锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷锟斤拷烫烫烫/烫烫烫烫烫烫锟斤拷烫烫烫/锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷/锟斤拷烫烫烫锟斤拷锟斤拷/锟斤拷锟斤拷烫烫烫锟斤拷/烫烫烫锟斤拷/锟斤拷烫烫烫烫烫烫烫烫烫/锟斤拷锟斤拷烫烫烫/锟斤拷烫烫烫烫烫烫/锟斤拷锟斤拷锟斤拷锟斤拷烫烫烫/烫烫烫烫烫烫锟斤拷锟斤拷/锟斤拷锟斤拷锟斤拷烫烫烫烫烫烫/烫烫烫烫烫烫锟斤拷锟斤拷/烫烫烫烫烫烫/锟斤拷锟斤拷锟斤拷烫烫烫/锟斤拷烫烫烫烫烫烫/烫烫烫烫烫烫锟斤拷/烫烫烫锟斤拷烫烫烫/锟斤拷锟斤拷锟斤拷锟斤拷烫烫烫/锟斤拷烫烫烫锟斤拷锟斤拷/锟斤拷锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷/烫烫烫锟斤拷烫烫烫烫烫烫/烫烫烫锟斤拷锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷锟斤拷锟斤拷烫烫烫/烫烫烫锟斤拷锟斤拷锟斤拷烫烫烫 |
第一想法是转码问题,但是单纯的转码不会单纯出现这么整齐的“锟斤拷烫烫烫”,可能掺杂部分破碎的“锟届瀿锟斤拷雮傡锟”等,遂另辟蹊径。
结合hint“永不消逝的电波”,通过观察猜想是摩斯电码,多次尝试后得烫烫烫 = -
锟斤拷 = .
于是编码如下:
1 | -. -... -..- -..- -.- --.. -.. ..-. -- .--- -..- -..- --.- ..... .-.. ..-. -. .--- ..- .-- ....- --.. ...-- --.. -- ...- .-- --. -.- ....- .-.. ...- -. -.-- -...- -...- -...- -...- -...- -...- |
这个手工编码的过程着实让我体验了一把电报员的感觉。
解码如下:
nbxxkzdfmjxxq5lfnjuw4z3zmvwgk4lvny======
观察后面的六个等号猜测是Base32,字母转大写后放入赛博厨房爆炒后得到houdeboxuejingyeleqvn
,包上大括号后提交。
Mathematics
脚本小子提供链接:点我!
摘录代码如下:
1 | import gmpy2 |
得p、q,后续步骤略。
Misc&Abstract
北邮人之声
拿了个简单题目的抽象一血。
拖入Au反向一下进行英语幺零贰肆级听力测试,通过单词首字母得Flag = TSCTF-J{WELCOMETOBUPT}
Just_Play
忍不了,一拳地把打球爆!妈的,忍不了,一把拳地球打爆!妈的,忍不了,一拳地把球打爆!妈的,忍不了,一拳把球地打爆!妈的不忍了,一拳地把球打爆!妈的,忍不了,一把拳地球打爆!妈的,忍不了,一拳把球地打爆!妈的,忍不了,一拳地把球打爆!妈的,忍不了,一拳把球地打爆!妈的,忍不了,一-拳把球地打爆!妈的,忍不了,一把拳地球打爆!妈的,忍不了,一把拳地球打爆!妈的,忍不了,一把拳地球打爆!妈的,忍不了,一拳地把球打爆!妈的,忍不了,一拳把球地打爆!妈的,忍不了,一拳把球地打爆!妈的,忍不了,一拳把球地打爆!妈的,忍不了,一把拳地球打爆!杀 杀杀! !好可怕杀杀杀杀杀杀勾上拳!下勾拳!左勾拳!右勾拳!扫堂腿!回旋踢!这是蜘吃蛛耳屎,这是龙卷风毁摧停车场!这羚是羊蹬,这是山羊跳!乌鸦坐~飞机!老走鼠迷宫!大象踢腿!愤怒章的鱼!巨砍斧大树!彻疯底狂!彻底疯狂!彻底疯狂!彻底疯狂!彻底疯狂!彻底疯狂!彻疯底狂!彻底疯狂!彻疯底狂!(怒吼)(变成猴子)(飞进原始森林)(荡树藤)(创飞路过吃香蕉的猴子)(怒吼)(变成猴子)(飞进原始森林)(荡树藤)(创飞路过吃香蕉的猴子)(怒吼)(变成猴子)(飞进原始森林)(荡树藤)
还有个鼠鼠的听力不放了。
EasterEgg
Abstract_culture_revenge
抽象得无法呼吸。
莫(莫言写了《蛙》)愁(丑牛)前(K代表千)路(录制按钮)无(五点)知(知识)己(鸡尾酒)
天(八卦乾代表天)下(下弦月)谁(水瓶座)人(不知道)不(占卜)识(矢)君(菌)
写在最后
未知攻,焉能防。
通过这次TSCTF-J真的学到很多,结识了各路大牛,领略了赛博理塘的抽象文化,也认识到了自己的不足(尤其是web和pwn一道都做不出)
最终成绩Reverse*3+Crypto*4+Misc*3+Abstract*4=2440分,排名13位。