menu Ga1@xy's Wor1d
安恒五月赛DAS x BJD部分wp
329 浏览 | 2020-05-24 | 阅读时间: 约 2 分钟 | 分类: wp,MISC | 标签: Misc,比赛wp
请注意,本文编写于 185 天前,最后修改于 185 天前,其中某些信息可能已经过时。

MISC

Questionnaire

打开题目网址是个问卷,f12查看可以看到答案和对应的部分flag,拼接在一起即可得到完整flag

babyweb

打开题目网址,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小写即可

/bin/cat 2

下载附件,打开是个gif,而且其中只有两种图案,将图片整体缩小后观察可以看出是个二维码(不过宽为高的两倍,需要改一下),两种处理方式

testyournc

连上nc,pwd查看当前目录路径,ls -a可以看到当前目录下的文件,有个flag,查看发现只显示了一只小老鼠,再ls /查看一下,可以看到两个和flag有关的文件:f1a9.bakf1a9.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

manual

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……)

CRYPTO

bbcrypto

下载附件得到脚本

# -*- 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

先通过给的密文,对应fg算出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))

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!