>
>
izer_0@ctfshow萌新赛
izer_0
Web
萌新赛web_签到题
system只用了..来拼接我们输入的字符串
直接?url=;ls;
得到flag文件
cat flag就行了
萌新赛web_给她
根据题目提示git源码泄露
得到hint.php
可以发现是考察sprintf格式化字符串没做检查造成的漏洞(https://paper.seebug.org/386/)
构造payload=?name=admin&pass=%1$'+or+1=1%23
name就盲猜
pass的%1$用来吃掉单引号被addslashes转换成\'的\即可逃逸单引号 '
+会被urlencode编码为空格
#网页有特殊的用途所以要手动urlencode为%23
跳转得到
好的404重启题目...
屁一开始没仔细看给坑了
问群里师傅得到提示让我仔细看(感谢各位师傅)
可以发现注释有说flag的位置,还有cookie的file
解16进制可以发现是flag.txt
很明显是用来读取文件的,试试自己构造/flag
16进制转码后的传过去发现提示not has flag
在随便构造发现报错得到是
函数file_get_contents()来读的文件
那么用伪协议
一开始用的php://input
发现没用,查后发现原因
那么转用php://filter/read=convert.base64-encode/resource=xxx.php
提示not has base64
说明是可以的但过滤了字符串base64,那就换个过滤器(再次感谢群里师傅提醒)
php://filter/read=string.rot13/resource=/flag
得到rot13后的flag
网上在线解密回来即可(ROT13在线:https://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php)
Crypto
萌新赛密码学_签到题
Ao(mgHXE)AN2PSBOu3qI0o
开头的Ao(mg就是flag base85编码后的结果
直接在线https://www.qtool.net/baseencode得到flag
萌新赛密码学_抱我
抱我??
群主出的题!!!
盲猜36d
钉提交成功下一题
分析源码可以发现就是
大循环299次每次随机从[0,36]之间选个数字
再从cssting取出对应位置的字符添加到密文中
接着进入小循环10次
随机从[0, len(key) - 1]选个数字
再从key取出对应位置的字符添加到密文中
一次大循环得到11位的密文,其中第一个都是密钥,是要提取仍掉的
直接上代码
def decode(cipher):
deCipher = ''
for i in range(1,len(cipher),11):
deCipher+=cipher[i:i+10]
return deCipher
print(decode(cipher))
就可以得到乱序的flag,词频统计一下(在线http://www.aihanyu.org/cncorpus/CpsTongji.aspx)
抛开flag{}就只剩36d了
flag直接就出来了
萌新赛密码_妈呀,完了
2进制转为字符串
#二进制转字符串
int_ ="01000100010100110111100100110011010010100111100101001011011101100101000001000011010100000110110101001000001101000101011101000011011110100010101101010100011010000101011101101001001100100100011001100111010010110110111100111001011001010101001101010000010101010011010001100101001101010110011100101011011010100101101001010101001100110100011001110010010101110100111001110110010011000100110100110101001101010110101101000101011001100011000101101000010001010110110101001110011100100111010100101011010011100100010100110011"
str_= ",".join([str(int(int_[i:i+8],2)) for i in range(0,len(int_),8)])
print(str_)
得到
DSy3JyKvPCPmH4WCz+ThWi2FgKo9eSPU4e5g+jZU3FrWNvLM55kEf1hEmNru+NE3
分析一下是64位
emm这时候就需要去群里拿小本本记录大佬们的发言
最后36D群主说了密钥为20121221
也解释可妈呀,完了的意思,
图是用来让我们向玛雅这边想出这密钥的
有密文和密钥,而且有+号那么就是非对称那边猜了
最后AES在线解密出得
解密网站:http://tool.chacuo.net/cryptaes(不知道偏移量所以加密模式选择ECB,还有字符集需要选择为utf8)
杂项
萌新赛杂项_签到
打开网页源码可以看到异常的行标号
右键另存为下载html源码
16进制查看可以看到尾部有一串20 09
重复的两个数可以先联想到二进制
把20转为0,09转为1
转为字符串得到一串摩尔斯密码
http://www.zhongguosou.com/zonghe/moersicodeconverter.aspx(摩尔斯在线解密)
摩尔斯解密得到一串16进制数
最后转为字符则可得到flag
萌新赛杂项_千字文
下载转png后缀打开发现是二维码,直接扫没结果
用Stegsolve找plane 0 发现有好多好多的二维码
可以用ps等分划出来https://jingyan.baidu.com/article/59703552817b468fc00740c4.html
把水平划分和垂直划分设置为25(二维码大小为625可等分为25*25)
另存为web格式
或者用代码来整
from PIL import Image
image = "solved.png"
img = Image.open(image)
index=0
for i in range(25):
for j in range(25):
box = (25*i,25*j,25+25*i,25+25*j)
img.crop(box).save('./png/'+str(index)+'.png')
index+=1
最后在用微微二维码批量(群里有)扫描得到内容
打开自动保存的csv文件发现真的是千字文(哇哦)
往下划就发现flag啦
萌新赛杂项_qrcode
解压的到一串二进制结合题目很明显是要我们把二进制转为二维码
直接上代码
from PIL import Image
x = 25
y = 25
im = Image.new('RGB', (x, y))
white = (255, 255, 255)
black = (0, 0, 0)
text="0101***"#二维码的二进制
index=0
for i in range(x):
for j in range(y):
if text[index] == '1':
im.putpixel((i, j), black)
index+=1
else:
im.putpixel((i, j), white)
index+=1
im.save("QRcode.jpg")
二维码只有黑白两色,rgb的颜色:黑(255,255,255)和白(0,0,0)对应二进制的1和0
行和高都为25(可以看下二进制数一共是有625个)
得到二维码图片后需要放大才能用工具扫出来
扫完便可得到flag了
萌新赛杂项_萌新福利
一波梭哈分析没任何发现,
直接解压show.zip出得到show.bin
用16进制查看(HxD或Winhex还有010editor都行)
emm看不懂的16进制
水群去发现36D群主说了取反
噢噢噢取反,这么说就简单明了了嘛
百度走起
输入python 取反
既然show.bin是取反后的结果那么反过来得到源码就行了
import struct
list_=[]
with open("show.bin",'rb') as f:
list_ = f.read()
list_s=[]
for i in list_:
if i == 0:
list_s.append(i)
else:
list_s.append((i^255)+1)
with open("flag.mp4","wb") as f:
for i in list_s:
a = struct.pack('B', i)
f.write(a)
直接.mp4是取反后发现头部的
其实在分析show.bin的时候就可以发现头部第一行的前三字节和后四字节都为00了,
然而我只知道mp4有这种格式头
如果有师傅还知道有别的特征请务必分享下,双手合十感谢
最后听个十几二十遍小姐姐的语音差不多就知道flag了
izer_0
密码题妈呀的代码写错了,第二行的","多了个逗号抱歉- -
修改下:
int_ ="01000100010100110111100100110011010010100111100101001011011101100101000001000011010100000110110101001000001101000101011101000011011110100010101101010100011010000101011101101001001100100100011001100111010010110110111100111001011001010101001101010000010101010011010001100101001101010110011100101011011010100101101001010101001100110100011001110010010101110100111001110110010011000100110100110101001101010110101101000101011001100011000101101000010001010110110101001110011100100111010100101011010011100100010100110011"
str_= "".join([str(int(int_[i:i+8],2)) for i in range(0,len(int_),8)])
print(str_)
admin
不是mp4格式的,是m4a格式
izer_0
感谢admin师傅的提醒
可以在这看到各种ftype对应的文件类型(http://www.ftyps.com/)
萌新福利的题取反后头文件的ftype为m4a那么对应也是m4a的文件了
怪不得我整的mp4也能听
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论