打开题目网址是个问卷,f12查看可以看到答案和对应的部分flag,拼接在一起即可得到完整flag
打开题目网址,f12找到password部分,可以看到有零宽度字符
把整句话复制出来,vim也可以看到
尝试零宽度字符隐写的几个网址,最终用这个解开:https://offdev.net/demos/zwsp-steg-js
得到隐写的明文:zerowidthcharactersinvisible
,即压缩包密码
打开压缩包发现里面的png损坏,010editor查看发现整体被倒置,用脚本反过来
f=open('f14g.png','r').read()
fi=open('out.png','w')
fi.write(f[::-1])
fi.close()
得到图片
前三个为Arthur and the Invisibles
,中间三个为银河字母,再后三个为跳舞的小人,最后两个为图腾
前几个都可以在这个网址找到在线解密:https://www.dcode.fr/tools-list#symbols
最终得到flag:BJD{UVWHZAITWAU}
,md5一下取32小写即可
下载附件,打开是个gif,而且其中只有两种图案,将图片整体缩小后观察可以看出是个二维码(不过宽为高的两倍,需要改一下),两种处理方式
连上nc,pwd
查看当前目录路径,ls -a
可以看到当前目录下的文件,有个flag,查看发现只显示了一只小老鼠,再ls /
查看一下,可以看到两个和flag有关的文件:f1a9.bak和f1a9.py,cat命令查看py文件发现没有权限,查看bak文件可以得到和flag相关的python代码
发现在flag这个文件中藏有真正的flag,但是flag在文件中被随机写入,整体会很稀疏,所以在刚开始读取flag文件时只会显示一只小老鼠(后面的加载不出来),于是想到写脚本读取文件,附上小帽师傅的脚本
a=open('flag')
a.seek(1024*1024*1024)
for i in range(1024,13428):
a.seek(1024*1024*1024*i)
if a.read(1)==str(chr(0x00)):
continue
else:
a.seek(1024*1024*1024*i)
print(i)
print(a.read(20))
将脚本base64后利用echo执行一句话脚本
将得到的几部分flag拼接在一起即是最后的flag
ssh连上靶机,可以看到欢迎界面
给了一串emoji和网址,打开那个网址是emoji加密,之前虎符也用这个出过题,suika
翻译过来是日语中西瓜的意思,很明显这个西瓜就是解密的密钥,但是这个加密网址有个特点:解密需要特定的链接,可以参考虎符的奇怪的组织这道题,解密方法也在文章中提到过:构造解密链接
先去emoji网站查到标准的西瓜的emoji(非标准无法构造),然后将其构造成以下形式
先base64,再URL Encode,最后仿照其他的解密链接构造成完整链接
https://codemoji.org/share.html?data=eyJtZXNzYWdlIjoi8J%2BQgPCfkL7wn4y08J%2BanPCfjYvwn5CK8J%2BNh%2FCfkILwn42T8J%2BOkfCfkIjwn5Cf8J%2BSgfCfmp%2Fwn42XIiwia2V5Ijoi8J%2BNiSJ9
直接访问这个链接,就可以进入解密页面,选择西瓜,即可得到明文
得到C0dEmOj!so4UnNy
,作为连接靶机的passwd,输入后即可进入靶机
(未完待续ing……)
下载附件得到脚本
# -*- coding:utf-8 -*-
import A,SALT
from itertools import *
def encrypt(m, a, si):
c=""
for i in range(len(m)):
c+=hex(((ord(m[i])) * a + ord(next(si))) % 128)[2:].zfill(2)
return c
if __name__ == "__main__":
m = 'flag{********************************}'
a = A
salt = SALT
assert(len(salt)==3)
assert(salt.isalpha())
si = cycle(salt.lower())
print("明文内容为:")
print(m)
print("加密后的密文为:")
c=encrypt(m, a, si)
print(c)
#加密后的密文为:
#177401504b0125272c122743171e2c250a602e3a7c206e014a012703273a3c0160173a73753d
先通过给的密文,对应f
和g
算出a=57,再根据fla
跑脚本弄出salt值的三个字母,得到salt=ahh
a = 57
for i in range(97,123):
if hex((ord('f')*a + i) % 128)[2:].zfill(2) == '17':
print ('1:'+chr(i))
if hex((ord('l')*a + i) % 128)[2:].zfill(2) == '74':
print ('2:'+chr(i))
if hex((ord('a')*a + i) % 128)[2:].zfill(2) == '01':
print ('3:'+chr(i))
有了a和salt再写解密脚本即可得到flag,由于我自己的脚本怎么改都改不对,就放我xialow大哥的脚本做为参考
from binascii import unhexlify
from gmpy2 import *
from itertools import *
def decrypt(c, a, si):
m = b''
for i in range(len(c)):
m += bytes.fromhex(hex((c[i] - ord(next(si)) + 128) * invert(a,128) % 128)[2:].zfill(2))
return m
c = '177401504b0125272c122743171e2c250a602e3a7c206e014a012703273a3c0160173a73753d'
c = unhexlify(c)
a = 57
salt = 'ahh'
si = cycle(salt.lower())
print(decrypt(c, a, si))