前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ctfshow-萌新赛

ctfshow-萌新赛

作者头像
发布2020-08-19 15:50:23
1.3K0
发布2020-08-19 15:50:23
举报
文章被收录于专栏:奝-大周

萌新赛web_签到题

源码:

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

构造payload

代码语言:javascript
复制
?url=;ls;

发现flag index.php两个目录

再构造payload

代码语言:javascript
复制
?url=;cat flag;

得到flag

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

不愧是我(萌新)

萌新赛密码学_签到题

Ao(mgHX^E)AN2PSBOu3qI0o

直接base85解码得到flag

萌新赛密码学_抱我

下载flag.py

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

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

代码语言:javascript
复制
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应该是二进制和二维码之间的转换

代码语言:javascript
复制
1111111011100111101111111100000101011101000100000110111010010010010010111011011101010000110001011101101110101110110110101110110000010011011001010000011111111010101010101111111000000000011100110000000010000011010010111100110111010010110101100001001101100110100100111101111111111111100000000001101101110100101110100101101001011011011001000100100111111100111111111110110010000000010000011110111100110110010111111010110111111000100000000011101111000110101111111010101100101011011100000100011001110001011110111010010111101111101001011101000011101000110111101110100101000110000111010000010000100100100011101111111010110010101011111

直接上脚本

代码语言:javascript
复制
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

萌新赛杂项_签到

查看源代码

发现第十行代码意外的长

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

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

代码语言:javascript
复制
00101101001011100010111000101110001011100010000000101101001011100010111000101110001011100010000000101101001011100010111000101110001011100010000000101101001011100010110100101110001000000010110100101110001011100010111000101110001000000010111000101101001011010010110100101101001000000010110100101110001011100010111000101110001000000010110100101101001011100010111000101110001000000010110100101101001011100010111000101110001000000010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011010010111000101110001000000010110100101110001011100010111000101110001000000010111000101110001011100010111000101110001000000010110100101110001011100010111000101110001000000010111000100000001011010010111000101110001011100010111000100000001011010010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011010010111000101110001000000010110100101110001011100010111000101110001000000010111000101110001011100010111000101110001000000010110100101110001011100010111000101110001000000010111000100000001011010010111000101110001011100010111000100000001011010010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011100010111000101110001011100010110100100000001011010010111000101110001011100010111000100000001011100010110100101101001011010010110100100000001011010010110100101110001011100010111000100000001011010010111000101110

转换字符串

得到

代码语言:javascript
复制
-.... -.... -.... -.-. -.... .---- -.... --... --... -... ....- -.. -.... ..... -.... . -.... --... ....- -.. -.... ..... -.... . -.... --... ....- ....- -.... .---- --... -..

摩斯解码处理

得到十六进制

代码语言:javascript
复制
666c61677b4d656e674d656e6744617d

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

萌新赛杂项_劝退警告

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

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

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

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

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

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

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

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

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

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

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

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

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

得到flag.txt

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

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

得到

代码语言:javascript
复制
(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文件

根据提示求反

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-3-8,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 萌新赛web_签到题
  • 萌新赛密码学_签到题
  • 萌新赛密码学_抱我
  • 萌新赛杂项_qrcode
  • 萌新赛杂项_签到
  • 萌新赛杂项_劝退警告
  • 萌新赛杂项_萌新福利
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档