ctfshow-萌新赛

 · 2020-3-8  ·次阅读


萌新赛web_签到题

源码:

QQ截图20200308132725

这道题的预期解是命令执行

构造payload

?url=;ls;

发现flag index.php两个目录

QQ截图20200308133544

再构造payload

?url=;cat flag;

得到flag

然后我做的时候是直接访问/flag 下载flag文件得到flag

QQ截图20200308133922

不愧是我(萌新)

萌新赛密码学_签到题

Ao(mgHX^E)AN2PSBOu3qI0o

直接base85解码得到flag

萌新赛密码学_抱我

下载flag.py

QQ截图20200308134323

完全不懂的py脚本,就交给呆头鹅林师傅了

1

最后林师傅解出来的随机数列

d f l 3 3 { 6 { 6 g
3 a f a 6 { 3 } a g
{ } a a g d f } 6 f
3 6 d { d f l { 6 a
6 g a f d d f g } {
3 f } } 6 l a { 3 }
f d f 3 } g l a } 6
} l g 6 g 6 d f l f
{ d f g d 3 f d f g
{ g 6 a } a 3 { 6 }
f a { } f } f } } }

结合群主的爱好,盲猜flag{36d}!!!

萌新赛杂项_qrcode

题目下载下来打开是一段二进制,结合题目qrcode应该是二进制和二维码之间的转换

1111111011100111101111111100000101011101000100000110111010010010010010111011011101010000110001011101101110101110110110101110110000010011011001010000011111111010101010101111111000000000011100110000000010000011010010111100110111010010110101100001001101100110100100111101111111111111100000000001101101110100101110100101101001011011011001000100100111111100111111111110110010000000010000011110111100110110010111111010110111111000100000000011101111000110101111111010101100101011011100000100011001110001011110111010010111101111101001011101000011101000110111101110100101000110000111010000010000100100100011101111111010110010101011111

直接上脚本

from PIL import Image
MAX = 25
pic = Image.new("RGB",(MAX, MAX))
str = "得到的二进制数字"
i=0
for y in range (0,MAX):
    for x in range (0,MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0, 0, 0))
        else:
            pic.putpixel([x,y],(255,255,255))
        i = i+1
pic.show()
pic.save("flag.png")

得到二维码,扫描得flag

flag

萌新赛杂项_签到

查看源代码

QQ截图20200308155004

发现第十行代码意外的长

把下面下载下来用notepad打开 查看第十行

QQ截图20200308155220

把tab替换成1,空格替换成0

00101101001011100010111000101110001011100010000000101101001011100010111000101110001011100010000000101101001011100010111000101110001011100010000000101101001011100010110100101110001000000010110100101110001011100010111000101110001000000010111000101101001011010010110100101101001000000010110100101110001011100010111000101110001000000010110100101101001011100010111000101110001000000010110100101101001011100010111000101110001000000010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011010010111000101110001000000010110100101110001011100010111000101110001000000010111000101110001011100010111000101110001000000010110100101110001011100010111000101110001000000010111000100000001011010010111000101110001011100010111000100000001011010010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011010010111000101110001000000010110100101110001011100010111000101110001000000010111000101110001011100010111000101110001000000010110100101110001011100010111000101110001000000010111000100000001011010010111000101110001011100010111000100000001011010010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011100010111000101110001011100010110100100000001011010010111000101110001011100010111000100000001011100010110100101101001011010010110100100000001011010010110100101110001011100010111000100000001011010010111000101110

转换字符串

QQ截图20200308155637

得到

-.... -.... -.... -.-. -.... .---- -.... --... --... -... ....- -.. -.... ..... -.... . -.... --... ....- -.. -.... ..... -.... . -.... --... ....- ....- -.... .---- --... -..

摩斯解码处理

QQ截图20200308155735

得到十六进制

666c61677b4d656e674d656e6744617d

最后转换ASCII码得到flag{MengMengDa}

萌新赛杂项_劝退警告

下载下来是一张gif,直接改后缀.zip解压发现压缩包

QQ截图20200308135432

压缩包中两个文件flag2.zip和sudoku.png

右边的注释说明密码需要我们解数独 但是sudoku.png也显示是加密的

这里我用Ziperello来爆破发现导入压缩包的时候显示只有一个文件是加密的

QQ截图20200308135730

那么这个sudoku.png就可能是伪加密,通过修改二进制解压出sudoku.png

sudoku

然后在线解数独,通过注释说明的方法得到flag2.zip的密码得到flag2.zip

结果flag2.zip还有密码,而且不是伪加密,只有注释:这道题很难,你现在离开还来得及。

QQ截图20200308140057

我可能会离开吗!必不可能啊。通过与群里的几位师傅商量,我们最终觉得这应该是明文爆破,但是怎么构造明文可就难倒大家了。

也不难发现,这个说明.txt大小只有1kb 48字节,我们通过把注释写到txt中惊奇的发现也是48字节!!!(有的师傅是36字节,原因是txt的编码方式不同,更改编码方式就行)

直接开始爆破,在爆破的过程中一半我们不用等爆破完直接停止就能得到恢复后的文件

,但是这个不能立即停止…..足足爆破了两个小时也没停

最后发现是停止的时间问题(明文爆破分两个阶段,第一个阶段我们就能得到恢复后的文件,第二阶段是寻找密码的过程。我们只需要解压后的文件,不需要密码,所以在第一阶段结束后就可以停止了,时间长的话就没有办法立即停止了。。。orz)

QQ截图20200308140749

得到的这个flag.zip就很好爆破了,这里我是根据注释,写出了字典爆破,大家也可以用掩码爆破,得到open your eye.jpg根据文件名,猜到用silenteye来提取隐藏信息

得到flag.txt

QQ截图20200308141027

不难发现是16进制 直接扔到winhex

QQ截图20200308141229

猜测是pyc文件 关于pyc文件是py文件运行时产生的,我们可以通过反编译得到py文件,反编译的话有在线反编译的

得到

(lambda __print, __g, __y, __operator: [ [ [ [ [ [ (check(0), None)[1] for __g['check'], check.__name__ in [
 (
  lambda x: (lambda __l: [ [ (lambda __sentinel, __after, __items: __y(lambda __this: lambda : (lambda __i: [ [ (lambda __sentinel, __after, __items: __y(lambda __this: lambda : (lambda __i: [ [ __this() for __l['n'] in [__operator.iadd(__l['n'], decode(arr[int(__l['i'])] + decode(arr[11] + chr(61) * 2) * 2))] ][0] for __l['i'] in [__i] ][0] if __i is not __sentinel else __after())(next(__items, __sentinel)))())([], lambda : [ __this() for __l['v'] in [__operator.iadd(__l['v'], chr(int(__l['n'])))] ][0], iter(__l['c'])) for __l['n'] in [''] ][0] for __l['c'] in [__i] ][0] if __i is not __sentinel else __after())(next(__items, __sentinel)))())([], lambda : (lambda __after: (__print(__l['v']), __after())[1] if __l['x'] == 1 else __after())(lambda : None), iter(flag.split(decode(arr[10] + decode(arr[11] + chr(61) * 2) * 2))))
   for __l['v'] in [''] ][0]
   for __l['x'] in [x] ][0])({}), 'check')]
          ][0]
 for __g['decode'], decode.__name__ in [(lambda s: (lambda __l: [ base64.b64decode(__l['s'].encode()).decode() for __l['s'] in [s] ][0])({}), 'decode')] ][0]
 for __g['encode'], encode.__name__ in [(lambda s: (lambda __l: [ base64.b64encode(__l['s'].encode()).decode() for __l['s'] in [s] ][0])({}), 'encode')] ][0]
 for __g['flag'] in ['136-139-78-132-162-89-49-117-70-161-49-118-70-02-01-01-70-137-01-160'] ][0]
 for __g['arr'] in [['NQ', 'MQ', 'Mw', 'MA', 'NA', 'Ng', 'Mg', 'OQ', 'Nw', 'OA', 'LQ', 'PQ']] ][0]
 for __g['base64'] in [__import__('base64', __g, __g)] ][0])(__import__('__builtin__', level=0).__dict__['print'], globals(), lambda f: (lambda x: x(x))(lambda y: f(lambda : y(y)())), __import__('operator', level=0))

通过hint改check(0)为check(1)运行得到flag

萌新赛杂项_萌新福利

解压得到show.bin文件

根据提示求反

QQ截图20200308160159

输出音频文件,得到flag(小姐姐声音真好听……)