一个新手学习CTFer的成长之路必定要通过大量的刷题,下面是bugku部分题目wp
把图片放进010发现有一串二进制先转ASCII码获得一个关键词,但不知道是什么东西
然后通过搜索FFC2来修改JPEG图片的高度,把00改为01
这里猜出应该是一个7z压缩包文件头,应该被出题人改了文件头
7z的文件头是377ABCAF271C,然后修改为正确头部后并且修改文件后缀名为7z
发现了有一个图片,但是这个压缩包被加密了,但是回想一下,开始的时候用二进制转ASCII码有一串东西,猜一猜是不是密码?
好家伙,果然是密码
但是这张图片跟刚才的那个也是图片高度被修改了,继续用winhex或者010修改红色框的00改为01,保存
然后把两张这样的图片的flag数据合在一起
flag{666C61677B6D795F6E616D655F482121487D}
然后去提交,发现不正确,再仔细看了一下flag里面的是十六进制的数值,我们去转换一下ASCII码
flag就这样出来了
flag{my_name_H!!H}
用winhex打开,结果发现下面有一大串16进制数据,FF D9是JPG文件尾
然后复制这些数据
用Notepad++打开,并用这个软件里面的一个插件进行转换 HEX—》ASCII码
看上去有点像坐标点
再看一下图片属性信息
会画图吗???
进行一番的替换,把括号和逗号都替换掉
Linux系统里面有一个专门画图工具,根据坐标数值画图 —— gnuplot
扫描二维码得出flag
flag{40fc0a979f759c8892f4dc045e28b820}
又是一大串2进制,用脚本或者转换工具转一下为十六进制
把这些十六进制转换为ASCII码
可以看出这是rar文件
复制下来,用010以十六进制导入,并另存为以rar后缀的压缩包,解压获得一张图片
看一下图片属性信息
Base64解密获得flag
flag{01a25ea3fd6349c6e635a1d0196e75fb}
直接用Audacity打开就可以发现是摩斯密码
… -… -.-. ----. …— … -… …- ----. -.-. -… ----- .---- —… —… …-. … …— . -… .---- --… -… --… ----- ----. …— ----. .---- ----. .---- -.-.
直接解码获得flag
5BC925649CB0188F52E617D70929191C
借用大佬的一个脚本“根据RGB数值自动因式分解画图.py”
网上好多大佬解这题用的脚本是已经定义好X和Y,而我找的大佬脚本是自动进行因式分解,自动生成,可用性应该高一点
from PIL import Image
def Crack(n):#yinshufenjie
flag = []
for each in range(2,int(n **0.5)+1):
if(n % each == 0):
print(each,int(n/each))
flag += [(each,int(n/each))]
if len(flag) == 1:return flag[0]
else:
choice = input("Which group to select(0-%s):"%(len(flag)-1))
return flag[int(choice)]
def Paint(X,Y,listrgb):#Draw according to string list
pic = Image.new("RGB",(X, Y))
i=0
for x in range (0,X):
for y in range (0,Y):
temp = listrgb[i].split(',')
pic.putpixel([x,y],(int(temp[0]),int(temp[1]),int(temp[2])))
i = i+1
pic.show()
pic.save(r"/root/flag%s.png"%(X))
listrgb = open(r"/root/1.txt").readlines()
X,Y = Crack(len(listrgb))
Paint(X,Y,listrgb)
Paint(Y,X,listrgb)
然后仔细看了一下1.png 5.png 21.png,好像是二维码的定位符,但是顺序乱了
调完后,用记事本将信息记录下来,有数字的用1代替,没有的用0代替。
111111101010101000101000001111110000101111111
100000101100111101010011101100011001001000001
101110101110011111010011111101000101001011101
101110101101100010001010000011110001101011101
101110100011100100001111101111111011101011101
100000101100100000011000100001110100001000001
111111101010101010101010101010101011101111111
000000000011001101001000110100110011100000000
110011100100100001111111100100101000000101111
101001001011111111101110101011110101101001100
100000111100100100000110001101001101010001010
001100010011010001010011000100000010110010000
010110101010001111110100011101001110101101111
100011000100011100111011101101100101101110001
001100110100000000010010000111100101101011010
101000001011010111110011011111101001110100011
110111110111011001101100010100001110000100000
110101000010101000011101101101110101101001100
010011111110001011111010001000011011101101100
011001011001010101100011110101001100001010010
010111111111101011111111101101101111111111100
011110001100000100001000101000100100100011110
111110101110011100111010110100110100101010010
110010001011101011101000111100000011100010000
101011111011100111101111111100001010111110010
110100011000111000100111101101111101000100010
111101111110001001000011010110001111110111110
011001010101000110010100010001000101101010001
011101110101101101100100001101101000111101001
110110001001101100010101101111110100101100110
000011100111000000000100001010101111100010010
111010010011110011101110010100001011111010010
101001100010111111110100000100001010101010100
000010011001001101110101001111100101111101101
000010111101110001101011000001000101110100110
011110011010100010100000011011000001110010000
100110100100001101111111101100101110111110011
000000001111110101101000101011100100100011010
111111100011111011011010101101110011101011110
100000101110101101101000111110010001100010001
101110101011100001111111101101001000111111011
101110100110111101101000001001101100011101101
101110100000011101100001101010110010010010001
100000101011001011111011001011000011010110000
111111101010101001111011110101101110000101101
然后用py脚本把以上01转换为二维码
扫描二维码得出了一串base64编码
Vm0xd1NtUXlWa1pPVldoVFlUSlNjRlJVVGtOamJGWnlWMjFHVlUxV1ZqTldNakZIWVcxS1IxTnNhRmhoTVZweVdWUkdXbVZHWkhOWGJGcHBWa1paZWxaclpEUmhNVXBYVW14V2FHVnFRVGs9
经过多次base64解码得出flag
这题原题的附件是一个rar压缩包里面有一个视频的,但是这个网站给的附件是一个test.mp4文件,应该被人修改了,所以就没做出来,不过可以在网上看到大概的解题思路
这题的flag为SYC{Hei_hei_hei}
有7张图片,看过每张图片的属性信息没可疑线索,用stegsolve打开
根据7张图片给出的英文字母组成Make Me Tall ——使我变高???
还以为这个是一个flag,结果提交不了
那么 意思是让我变高 那么我们就在010或者winhex里面把它们都变高看看
然后发现每个图片最底层都是黑白相间的方块,看起来像是二进制。
使用记事本将黑白块用01记录下来。
仔细观察这几个二进制,发现第一列连起来1100110转换刚好对应的ASCII码是f
然后用大佬们的一个脚本跑一下,把每一列打竖的二进制进行转换
c1 = '11111111010111101111'
c2 = '11111011111110111111'
c3 = '00001100101010110001'
c4 = '01001010010000001101'
c5 = '11010011011101010111'
c6 = '10011011011010110110'
c7 = '00111001101101111101'
flag = ''
for i in range(0,20):
c = c1[i]+c2[i]+c3[i]+c4[i]+c5[i]+c6[i]+c7[i]
flag += chr(int(c,2))
print flag
下载附件是一个zip文件自己添加一下后缀名为zip并解压
里面有三个文件,当我想解压ctf1.zip文件时要我输入密码。。。。。这。。
直接用我的专用破解压缩包加密神器PRTK,直接秒破,密码为password
这个是base64编码
然后用010打开ctf2.jpg看一下
居然找到一个zip头,马上把这个文件的后缀名jpg改为zip
得出这串东西,然后查了一下资料发现是ook编码
直接拿去解码,传送门https://www.splitbrain.org/services/ook
然后得到大佬的提示,这个是base58编码
传送门https://www.jisuan.mobi/pbHzbBHbzHB6uSJx.html
ctf3.jpg这个看上去是一个模糊的二维码,直接用 QR Research直接可以扫描出
得出flag的最后一部分
即flag为flag{hackermisc12580}
是一个gif的红绿灯图片,用stegsolve打开发现有1168张图片合成的一张gif图片
发现有一些图片是没有灯的,即灰色那些,红绿灯只有三种颜色,所以就把灰色(即没颜色的)删了,花了我15分钟才慢慢的删完,累死我了
删除完之后,在文件夹里面调节大小的时候,突然发现最左侧和最右侧的一列颜色都是一样的,推测最右侧的一列为空格(即黄灯),因为ASCII码128位,最左侧的为0,得出绿色为0,红色为1,留下中间的7列。
一共455张图片,65组7位二进制数,红灯为1,绿灯为0,将图片信息记录下来
11001101101100110000111001111111011101000011011000110011011010011100110110011101111111100000110100111100110111110110100111010011101000110011110111011101000110001011000011011101011111111010001100001011111111010011100100110100110011011001100110001110001110111111110011011010011001100110011111010011110011011111111011111010000110011110111010111111111001011000011101011011111011010011100100110011101111101100001110101111010011100110110001110010001100111111101
然后用py脚本把二进制转换为字符串
flag{Pl34s3_p4y_4tt3nt10n_t0_tr4ff1c_s4f3ty_wh3n_y0u_4r3_0uts1d3}
下载附件zip,修改一下文件名称
用010看了一下,发现这里有一个50 4B 03 04的十六进制zip文件头,而且还看到了50 4B的文件尾,应该是一个隐藏的zip文件吧
在Kali用binwalk工具查看到这个压缩包里面有一个flag.swf文件和隐藏压缩包里面有一个tingshuo.txt文本
直接用foremost分离,但是依然里面还是有密码
然后用PRTK进行压缩包密码爆破,发现有文本的压缩包被秒破出来,密码是0,但是swf文件的那个压缩包还是没跑出来
密码是50位?what?
然后根据全球知名解压缩工具bandizip给出的爆破密码的时间表
密码50位,对应的应该是11.zip的,但是密码它有50位???暴力破解能解到地老天荒,密码会不会在属性里?然后看了一下,什么线索都没有
然后来通过猜测一下密码,如果是50位混合组合密码,肯定想都别想了,要不试试用相同符号、数字、字母密码?
打开ARCHPR,跑一下刚才制作的字典直接得出密码为50个a
因为我电脑没有安装什么flash播放器,所以运行不了flash动画的文件,但是我安装了一个可以查看swf源码的工具JPEXS Free Flash Decompiler,直接放进去进行代码审计
然后通过该工具的查找功能,查一下有没有flag或者Key等等关键词字
结果在第171个文本里面有一个K值,仔细看了一下是十六进制
打开压缩包发现有一张png图片,于是就打开png图片一看,这。。。。
这不就是一个zip压缩包么?为何要改png格式。。。。。
于是把png改为zip,继续解压缩
打开压缩包仔细看了一下
然后直接用上我最喜欢破解压缩包密码的神器PRTK
解压玩之后打开第81张图片,看上去很普通,再看一下图片的属性
然后用stegsolve看一下
啊。。。。这。。有点像二维码,但是中间一大朵花挡住了,再翻几下也没有突破新的线索
然后前段时间打强网杯遇到了一题杂项题里面也是有一张jpg图片隐写了,当时是使用了JPHS这个工具进行查看jpg的隐写文件
打开软件后导入图片
然后点击Seek
补充一点如果不知道密码的话,要使用stegbreak进行爆破,命令如下
又发现了50 4B 03 04 的十六进制,这就是zip的文件头
立马修改后缀名
解压后发现一个txt文本
这。。。。。。佛语的意思不懂,再网上找到了这样的一个网站能进行佛语解码
网址http://www.keyfc.net/bbs/tools/tudoucode.aspx
把佛曰那句话复制进去
点击参悟佛所言的真意,然后有一串东西
H-hDs10OZL3lhIZZbeRSbbbVRZNm32W2X33mGm3Txt999RdV9hx0
然后回想一下,题目给的提示
提示:翻过四个栅栏即可得到flag
就是栅栏解密
但是解完后又来一串东西。。。。感觉有点像是base64编码
然后用notepad++里面又一个插件可以解码
或者也可以来这里进行解码,传送门https://base64.us/
得出flag{CoolyouGotItNowYouKnowTheFlag}
这题有点捞,网上的人都没人写WP,害得我解了几个小时找方法,难受一批
下载完后有一张png图
首先来讲png图⽚,png图⽚是⼀种⽆损压缩的位图⽚形格式,也只有在⽆损压缩或者⽆压缩的图⽚(BMP)上实现lsb隐写。如果图像是jpg图⽚的话,就没法使⽤lsb隐写了。原因是jpg图⽚对像数进⾏了有损压缩,我们修改的信息就可能会在压缩的过程中被破坏。
用stegsolve打开,发现Green plane 0 和Blue plane 0,两张图那个小猪里面好像有一个二维码的线条,那就证明了这个题目是lsb加密图片隐写
传送门:
https://github.com/danielmiessler/SecLists/blob/master/Passwords/darkweb2017-top1000.txt
但是python脚本的话我看到另外一个大佬写的WP
这位大佬提供的python用出题人说的字典进行爆破lsb隐写脚本,但是可能我太菜了,悟性不够高,运行了好几次这个脚本都是出现这种情况
一直说我没有lsb库,我就用pip来安装,结果pip和pip3都是试过,依然不行,就这个问题花了我几个小时查资料还是没能解决,我就没使用这位大佬的脚本了。
然后我就用github上提供的lsb脚本
https://github.com/livz/cloacked-pixel
根据脚本的使用教程,和出题人的提示说密码是纯7为字母,并且字典建议倒着用效果会更好,然后经过一番的排除操作
结果发现了正确密码就是raiders,中文意思是掠夺者,那应该代表就是获得flag的行为吧
flag{37d9704c-9752-434c-8891-ee15e1800490}
然后随便点开一个压缩包看了一下发现被加密的压缩包里面有一个大小为4字节的文本
科普一下CRC32碰撞
然后可以用CRC32碰撞脚本进行爆破
由于前段时间打强网杯的时候遇到了一题MISC题目,里面也需要CRC32碰撞,但是那个脚本只能单独的一个一个压缩包进行碰撞,虽然速度是秒破,但是一个一个的搞太麻烦了
然后在网上找到了大佬们的WP,他们写的CRC32碰撞脚本是直接把68个压缩包连在一起进行碰撞,然后把碰撞出来的内容保存在out.txt文本里面
这里有一点要注意,如果用的是python2来运行的话就必须要加上0xffffffff,如果是用python3就不用加
代码如下:
import zipfile
import string
import binascii
def CrackCrc(crc):
for i in dic:
for j in dic:
for p in dic:
for q in dic:
s = i + j + p + q
if crc == (binascii.crc32(s) & 0xffffffff):
#print s
f.write(s)
return
def CrackZip():
for I in range(68):
file = 'out' + str(I) + '.zip'
f = zipfile.ZipFile(file, 'r')
GetCrc = f.getinfo('data.txt')
crc = GetCrc.CRC
#print hex(crc)
CrackCrc(crc)
dic = string.ascii_letters + string.digits + '+/='
f = open('out.txt', 'w')
CrackZip()
f.close()
并且把脚本放在123文件夹里面
打开out.txt发现有一串base64编码
Flag.txt fix the file and get the flag ----里面有一个flag的文本,提示说要修复文件并且 获得flag
然后我就用010打开这个base64解码后的文本
发现文件末尾是C43D7B00400700,不知道是什么东西,百度查了一下大佬们的WP说是rar文件尾,于是自己觉得不是很相信,就随便用一个rar文件导入进去看一下
打开压缩包即可获得flag
flag{nev3r_enc0de_t00_sm4ll_fil3_w1th_zip}
然后解压里面的flag.rar压缩包出现了这种情况
Secret.png ???我猜应该里面有一张图
但是这样是解压出来是没有图片的,然后把刚刚题目的附件放进010或者winhex看了一下发现是50 4B 03 04 明显是zip文件头
再次用winrar解压flag.rar,还是出现这种情况
然后把这个flag.rar文件放进010查看
文件头和尾都正常,然后查了一些资料终于发现是这题涉及到rar文件的格式编码
详情参考https://blog.csdn.net/vevenlcf/article/details/51538837
如果用WinRAR的修复功能,则只能修复rar文件,不能把这个图片复原,rar格式编码中:
红色框圈住74就是rar里面的flag.txt文本头部编码,这个文本的十六进制一直从00到65
才结束,这样可以判断出74是在rar文件的格式编码的一种文件数据块头部,里面包含文
件大小、文件名、信息等等
由此可见rar里面还有一张名为Secret.png的图,在flag.txt结束的地方就是下一个块开始
的地方,所以png文件的头部编码为74,我们修改过来即可:
图片终于出来了
但是很遗憾这个图片是一张空白图片,很不甘心,直接把图片放进010或者winhex查看
这个47 49 46 38 很明显是GIF的文件头,直接改后缀名
但是改了后缀还是空白图,然后我就用ps打开这个文件,发现有两个白色图层
然后我用stegsolve分别打开这两个图
然后把两个图进行合拼
这个时候扫描得不出什么信息,二维码的定位符都不完整,左上角的就不说了,没法补上,右上角可以补上黑方块:
然后使用二维码查看工具QR Research直接扫描就可以得到flag
一个这样的文件不知道是什么东西,用010打开看了一下是PNG文件
现在只有一种想法,就是这个是一个伪加密ZIP,因为在win打开要输入密码,在Kali打开直接报错,如果正常有密码的话,在两种系统都能正常要你输入密码的,为了验证是不是伪加密,我使用010进行修改一下试试
结果发现蓝色选中的那两个十六进制的数为01 00,这个就是伪加密,如果想要把伪加密移除的话要改为00 00
打开里面发现有一张为B2.png的图片,看上去和题目给的附件的图片好像是一样的,然后我去看一下两张图的属性信息对比一下
结果发现两站图就是除了名字和大小不一样之外,其他的属性都一样的,我猜应该是图片盲水印攻击,因为前段时间打强网杯的时候也是遇到这种情况,所以有了经验
盲水印攻击脚本下载传送门https://github.com/linyacool/blind-watermark
然后把两张图都放在这个文件夹里面, 用python2环境跑一下,注明一下B2是无水印图片,2B是有水印图片
这里要吐槽这个flag,真的恶心,那个F后面的看上去真的很像一个0,但却是一个大写O,那个前括号后面的是i的大写不是L的小写
NUST{I_10v3_2B_FOr3v3r}
然后把QAQ附件放进去010分析
看到chr、ord、range、QAQ.py、main、name基本可以判断是个pyc文件
添加后缀名为pyc文件后用uncompyle6进行pyc反编译
pip install uncompyle6 #安装
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author: virgin-forest
# Time: 2019-03-22 12:00:56
# Describe:
def decryt(key,plain):
cipher = ''
for i in range(len(plain)):
cipher += chr(ord(key[i % len(key)]) ^ ord(plain[i]))
return cipher
def getPlainText():
plain = ''
with open('cipher.txt') as (f):
while True:
line = f.readline()
if line:
plain += line
else:
break
return plain.decode('base_64')
def main():
key = 'LordCasser'
plain = getPlainText()
clear = decryt(key,plain)
with open('clear.txt','w') as (f):
f.write(clear)
if __name__ == '__main__':
main()
得到clear.txt文本是一些明文
发现一个单词STEGOSAURUS——剑龙??
于是百度一波
然后去下载stegosaurus脚本
传送门https://github.com/AngelKitty/stegosaurus
执行这个脚本,分离出flag
科普一下这个stegosaurus的知识和用法
(这题不会做,拿大佬WP)
附件是一个dmg格式的文件,dmg是MacOS上的压缩镜像文件,相当于在Windows上常见的iso文件
N1CTF{APFS_a_N3xt_30_Year_Filesystem}
打开图片,这。。。。。。。。不敢多想其他,还是赶紧把它做出来吧
用binwalk查看图片有一个rar文件并用foremost把它分离
居然有密码,爆破密码没啥用,然后仔细看了一下图片有一句话,试试这句话是不是密码,结果居然成功了。解压密码竟然是图片中的“喜欢我吗.”
里面有一个文本,文本内容就是这样
发现有摩斯密码,直接解码,得出的字符好像是一条网址
HTTP://ENCODE.CHAHUO.COM/
把网址后面的base64作为密文粘进去,填上key,可解出明文:(注意:这个是AES解密)
将解出的明文和网址前半部分网址合起来
即http://c.bugku.com/momoj2j.png
得到一个图片链接,下载后发现是个反色的二维码:
使用stegsolve取反后用QR Research可扫出flag:
KEY{nitmzhen6}
提示:第一层:CRC32 碰撞
第二层:维吉尼亚密码
第三层:sha1 碰撞
第四层:md5 相同文件不同
第五层:RSA
先直接用CRC32碰撞脚本跑一波
脚本传送门https://github.com/theonlypwner/crc32
依次碰撞三个txt文件
从结果上猜测最有可能的组合是:_CRC32_i5_n0t_s4f3
使用这个密码成功解压7z,再解压里面的7z,看到一个keys.txt,里面有10000个密钥,一个ciphertext.txt,里面有一段密文。还有个tips.txt:
from pycipher import Vigenere
keys = []
cipher = 'rla xymijgpf ppsoto wq u nncwel ff tfqlgnxwzz sgnlwduzmy vcyg ib bhfbe u tnaxua
ff satzmpibf vszqen eyvlatq cnzhk dk hfy mnciuzj ou s yygusfp bl dq e okcvpa hmsz vi
wdimyfqqjqubzc hmpmbgxifbgi qs lciyaktb jf clntkspy drywuz wucfm'
with open('./keys.txt', 'r')as f:
keys = f.readlines()
plain = ''
with open('./plain.txt', 'w')as f:
for i in keys:
i=i.replace('\n','')
plain = Vigenere(i).decipher(cipher)
f.write(plain+'\n')
从得到的10000个明文中,搜索“Vigenere”,找到唯一一条有意义的明文:
THEVIGENERECIPHERISAMETHODOFENCRYPTINGALPHABETICTEXTBYUSINGASERIESOFDIF
FERENTCAESARCIPHERSBASEDONTHELETTERSOFAKEYWORDITISASIMPLEFORMOFPOLYAL
PHABETICSUBSTITUTIONSOPASSWORDISVIGENERECIPHERFUNNY
从最后可以得到下一个压缩包的密码是“vigenere cipher funny”,需要全部改为小写。
解压得到一个加密7z和一个txt:
写个python跑一下:
import string
import hashlib
printable = string.printable
for k1 in printable:
for k2 in printable:
for k3 in printable:
for k4 in printable:
key = k1 + '7' + k2 + '5-' + k3 + '4' + k4 + '3?'
sha1 = hashlib.sha1(key.encode('utf-8'))
flag = sha1.hexdigest()
if '619c20c'and'a4de755'and'9be9a8b'and'b7cbfa5'and'e8b4365' in flag:
print(key)
挨个试跑出来的结果:
逐个测试最后发现“I7~5-s4F3?”是真正的密码。解压后看到一个7z和一个txt:
经尝试Goodbye World :-(
是正确的密码。
这里涉及MD5的一个漏洞知识,可以自己科普一下——MD5碰撞生成器
解压之后得到一个pem密钥文件,和一个enc密文文件。
下载RSA攻击脚本
传送门https://github.com/Ganapati/RsaCtfTool
安装脚本的步骤:
git clone https://github.com/Ganapati/RsaCtfTool.git
sudo apt-get install libgmp3-dev libmpc-dev
pip3 install -r “requirements.txt”
python3 RsaCtfTool.py
运行以下命令:
python3 RsaCtfTool.py --publickey ‘./rsa_public_key.pem’ --uncipherfile ‘./flag.enc’