文章目录
- 华科第一届网络安全挑战赛wp
- web
- secure_shell
- pyssrf
- misc
- 一闪一闪亮晶晶
华科第一届网络安全挑战赛wp
web
secure_shell
考点:exec()无回显
先测试一下能不能执行 cmd=1;sleep 4
发现反应了4秒,能执行
然后直接 cat /f* > 1.txt
最后访问/1.txt路径就行
pyssrf
考点:ssrf漏洞
打开有个提示 /get?site=
直接file读取flag
/get?site=file:///flag
misc
一闪一闪亮晶晶
考点:凯撒与base64结合,starry语言
根据提示,“凯撒大帝想学习一下Starry语言,你能帮帮他么吗”,一定跟凯撒密码和starry语言有关。
下载文件,是一串重复度非常高的字符串
JDBhJDBsJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhLxprJDBhJDBhJDBsJDBrJDBhJDBsLjBsJDBhMjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzprJDthMjBhJDBhLzBhJDBhJDBhDjthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtLLjBsJDBhJDBvJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBhJBphLzphJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphDjBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBLJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJD4hJDBhJDBhMjBsJD4hJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjphLzBhJDBhJDBvJBphJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhDjBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBLJDphJDBhJDtrJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJBphJDBhJDtrJDBhMjBhJD4hLzBhJDBhMjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhDjBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBhJDBLLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLhphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJD4hJDBhJD4hLzBhJDBhJDBvJDBhJDBsJDBhJDBhJDBsJDBrDjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphLzBhJDBhJDBvJDBhJDBsJDBhJDBhJDBLLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLhphLzBhJD4hJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhDjBsLjBsJDBhJDBhJD4hJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDpLJDBhJDBhJDtrLjBsJDBhJDBvJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJBphJDthJDphJDBhJDBsLjBsJDBhMjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhDjBhJDBhLzBhLjBhJDBhJDtrJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBhJDBLLzBhLjBhJDBhLzphJDBhJD4hLzBhJDBhMjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLhphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhDjBhJDBsJDBrJDBhJDBsLjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBLJDphJDBhJDtrJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJBphLzphJDBhJDBhMjBhJDBhJDBvJDBhJDBhJD4hLzBhJDBhMjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthDjBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBsJDBhJDBvJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBhJDBLLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBsJDBhJDBhJD4hJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJBphJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsDjBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDthJDBhJDBhJDthJDphJDBLJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhMjBhJDBhMjBsJDBhMjBhJDBhLxphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDthJDBhDjBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDthJDBhJDBLJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhLzBhJDBhJDBhLxphJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphMjBvJD4hLzBhJDBhMjBhJDBhDjthJDBhJDBhJDthJDphJDBhJDBsLjBrJDthJDBhJD4hJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDBhJDthJDphJDBLJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhLzphJBphJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhDjBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDthJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBLJDthJDphJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBsJDBhJDBhJDBsJDBrJBphJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhMjBhJDBhMjBhJDBhMjBhJDBhDj4hLzBhJDBhMjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBLJDBhLzphJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDthJDBhJDBhJDthJDphJDBhJDBhLzphJDBhJDBhJDthJDphJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhLxprJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBhJDBhLzBhLjBhJDBhJDBsLjBhJDBhDjBhJDthJDphJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBhLzphMjBvJDthMjBhJDBhLzBhJDBhJDBhLzBhLjBhJDBhJDtrJDBhJDBhJDBsJDBrJDBhJDBsLjBhJDBLJDBhJDthJDphJDBhJDBsLjBsJDBhJDBhJD4=
看到末尾的=,想到base64,所以是凯撒与base64的结合。
先用脚本爆破凯撒,将结果用base64编码
import base64
# 截取文件最前面一部分进行猜测,因为根据后面可知这一部分是近似的四字符反复重复
key = "JDBhJDBsJDBhJDBsJDBhJDBhJDBsJDBrJDBhJDBhLzphJDBhJDBhJDthJDphJDBh"# 遍历凯撒加密中25种的可能性
for n in range(0, 26):str_encrypt = ""for letter in key:if "a" <= letter <= "z":str_encrypt += chr((ord(letter) - ord("a") + n) % 26 + ord("a"))elif "A" <= letter <= "Z":str_encrypt += chr((ord(letter) - ord("A") + n) % 26 + ord("A"))else:str_encrypt += letter# 输出每一种可能性最后的结果print(base64.decodebytes(str_encrypt.encode()))
结果中发现只有当n=25时,会出现starry语言特有的+,*等符号
于是用脚本将其全部转化成starry语言
import base64
with open("C:\\Users\\Lucky\\Desktop\\华科杯\\misc\\一闪一闪亮晶晶\\flag.txt", "r", encoding="utf-8") as f: #flag.txt是凯撒密码的文本str_encrypt = ""n = 25for letter in f.read():if "a" <= letter <= "z":str_encrypt += chr((ord(letter) - ord("a") + n) % 26 + ord("a"))elif "A" <= letter <= "Z":str_encrypt += chr((ord(letter) - ord("A") + n) % 26 + ord("A"))else:str_encrypt += letteropen("C:\\Users\\Lucky\\Desktop\\华科杯\\misc\\一闪一闪亮晶晶\\flag.starry", "wb").write(base64.decodebytes(str_encrypt.encode()))
最后用starry语言转换脚本转换就能得到flag
import sys
fp = open('C:\\Users\\Lucky\\Desktop\\华科杯\\misc\\一闪一闪亮晶晶\\flag.starry') #flag.starry是保存的starry语言文件
data = fp.read()
fs = open('C:\\Users\\Lucky\\Desktop\\华科杯\\misc\\一闪一闪亮晶晶\\f.txt', 'w') #f.txt是输出的中间文件
sub = 0
for i in data:if i == '\n':continueelif i == ' ':sub += 1elif i == '+':if sub == 1:fs.write('dup\n')sub = 0elif sub == 2:fs.write('swap\n')sub = 0elif sub == 3:fs.write('rotate\n')sub = 0elif sub == 4:fs.write('pop\n')sub = 0else:fs.write('push ' + str(sub-5) + '\n')sub = 0elif i == '*':if sub == 0:fs.write('+\n')sub = 0elif sub == 1:fs.write('-\n')sub = 0elif sub == 2:fs.write('*\n')sub = 0elif sub == 3:fs.write('/\n')sub = 0elif sub == 4:fs.write('%\n')sub = 0else:print('error!!!')sub = 0sys.exit()elif i == '.':if sub == 0:fs.write('num_out\n')sub = 0else:fs.write('char_out\n')sub = 0else:print('error!!!!')sys.exit()
fp.close()
fs.close()
fp = open('C:\\Users\\Lucky\\Desktop\\华科杯\\misc\\一闪一闪亮晶晶\\f.txt', 'r')
data = []
for line in fp:line = line.strip('\n')if line[:4] == 'push':data.append(int(line.split(' ')[1]))elif line == '*':x = data[-1]y = data[-2]data = data[:-2]data.append(x * y)elif line == '+':x = data[-1]y = data[-2]data = data[:-2]data.append(x + y)elif line == '-':x = data[-1]y = data[-2]data = data[:-2]if (x-y)<0:data.append(y-x)else:data.append(x-y)elif line == 'dup':x = data[-1]data.append(x)elif line == 'char_out':x = data[-1]data = data[:-1]print(chr(x),end="")else:print('error!!!')sys.exit()
flag{785c45ea-d2a1-4993-8d4f-325323d5bcd9}