源码:
这道题的预期解是命令执行
构造payload
?url=;ls;
发现flag index.php两个目录
再构造payload
?url=;cat flag;
得到flag
然后我做的时候是直接访问/flag 下载flag文件得到flag
不愧是我(萌新)
Ao(mgHX^E)AN2PSBOu3qI0o
直接base85解码得到flag
下载flag.py
完全不懂的py脚本,就交给呆头鹅林师傅了
最后林师傅解出来的随机数列
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应该是二进制和二维码之间的转换
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
查看源代码
发现第十行代码意外的长
把下面下载下来用notepad打开 查看第十行
把tab替换成1,空格替换成0
00101101001011100010111000101110001011100010000000101101001011100010111000101110001011100010000000101101001011100010111000101110001011100010000000101101001011100010110100101110001000000010110100101110001011100010111000101110001000000010111000101101001011010010110100101101001000000010110100101110001011100010111000101110001000000010110100101101001011100010111000101110001000000010110100101101001011100010111000101110001000000010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011010010111000101110001000000010110100101110001011100010111000101110001000000010111000101110001011100010111000101110001000000010110100101110001011100010111000101110001000000010111000100000001011010010111000101110001011100010111000100000001011010010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011010010111000101110001000000010110100101110001011100010111000101110001000000010111000101110001011100010111000101110001000000010110100101110001011100010111000101110001000000010111000100000001011010010111000101110001011100010111000100000001011010010110100101110001011100010111000100000001011100010111000101110001011100010110100100000001011100010111000101110001011100010110100100000001011010010111000101110001011100010111000100000001011100010110100101101001011010010110100100000001011010010110100101110001011100010111000100000001011010010111000101110
转换字符串
得到
-.... -.... -.... -.-. -.... .---- -.... --... --... -... ....- -.. -.... ..... -.... . -.... --... ....- -.. -.... ..... -.... . -.... --... ....- ....- -.... .---- --... -..
摩斯解码处理
得到十六进制
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文件,反编译的话有在线反编译的
得到
(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(小姐姐声音真好听……)