目录
梅花香之苦寒来
just_a_rar
鸡你太美
神奇的二维码
一叶障目
穿越时空的思念
纳尼
outguess
我有一只马里奥
谁赢了比赛?
来题中等的吧
gakki
find_me
base64隐写
伟大的侦探
KO
黑客帝国
你能看懂音符吗
ezmisc
sqltest
你有没有好好看网课?
拿到图片后binwalk啥也没有,拖进010看16进制
文件结构很完整,但是FFD9后面跟着一大串数字字母,而且貌似还有一定规律。 把这些字符复制出来,将十六进制转为字符 。
有情况得到了一堆坐标,那不就明白咋回事了吗,类似坐标, 利用python中的matplotlib模块对该段坐标进行绘图得到二维码
1.txt文本文档要写成这种格式:
扫码得到flag `flag{40fc0a979f759c8892f4dc045e28b820`
ps: 这些库的安装方法可以参考这篇文章:Python学习-windows安装Python以及matplotlib.pyplot包_xiaopihaierletian的博客-CSDN博客
题目说just a rar,总感觉不仅仅是一个rar,binwalk分离无果,看看16进制啥也没有。
那既然文件名是“4位数.rar”,感觉就是个4位数的暴力破解呀,果然出密码了。
拿到flag.jpg
看16进制,开头就看到Exif,,emmm,好熟悉的名字
扔进Exif元数据编辑器,得到flag flag{Wadf_123}
题目名字好评
有两个gif文件,放进010里查看,第一个好像没啥问题,第二个是坏的,缺少文件头
把文件头补上保存,就得到了第二只完整的坤坤,flag就在里面
flag{zhi_yin_you_are_beautiful}
得到一个二维码,扫码支付?付个P
binwalk分离出4个rar
分别解压:
得到一串base64,YXNkZmdoamtsMTIzNDU2Nzg5MA==
,解码得到asdfghjkl1234567890
解压出来发现鸟都没有
一个里面有一个word文件,里面有非常长的base64编码,自己试着解码了几次都没啥效果,看别人的wp知道这么长肯定编码了很多次,直接脚本跑:
import base64
def decode(f):
n = 0;
while True:
try:
f = base64.b64decode(f)
n += 1
except:
print('[+]Base64共decode了{0}次,最终解码结果如下:'.format(n))
print(str(f,'utf-8'))
break
if __name__ == '__main__':
f = open('./base64.txt','r').read()
decode(f)
[+]Base64共decode了20次,最终解码结果如下: comEON_YOuAreSOSoS0great
用这段解出来的码去破解音乐的那个压缩包,解压成功
把mp3文件拖进audacity,看到这一短一长的波形图,dna动了,我猜它是摩斯密码。
解码如下:
得到最终结果:flag{morseisveryveryeasy}
给了一个很模糊的照片,盲猜大小被改过,需要通过crc值爆出真正的宽高
扔进010,crc不匹配报错 ,图片能打开,但是出现CRC匹配错误
一般是修改了宽高
这是一个修复crc错误的脚本,大佬的世界咱也不懂
#coding=utf-8
import zlib
import struct
#读文件
file = '1.png' #注意,1.png图片要和脚本在同一个文件夹下哦~
fr = open(file,'rb').read()
data = bytearray(fr[12:29])
crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
#crc32key = 0xCBD6DF8A #补上0x,copy hex value
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') #hex下copy grep hex
n = 4095 #理论上0xffffffff,但考虑到屏幕实际,0x0fff就差不多了
for w in range(n):#高和宽一起爆破
width = bytearray(struct.pack('>i', w))#q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
#print(data)
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(width,height)
#写文件
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')#保存副本
fw.write(newpic)
fw.close
脚本直接给跑出来了
flag{66666}
尝试去搞懂原理,发现crc这玩意和计算机组成原理相关,大数据专业竟然不学这玩意?!突然意识到一个大问题
那就先学会看crc的值吧,推荐一个文章
png图片CRC爆破原理的学习 - 云千 - 博客园
给了个mp3文件,试听了一下,全损音质,肯定被动过手脚
看波形图,这意思又是摩斯电码?
它分成两部分,两部分分别解码
试了半天在线解码工具,都不大行,最后还是用jocker的转码工具,得到:
F029BD6F551139EEDEB8E45A175B0786
F029BD6F5
flag{f029bd6f551139eedeb8e45a175b0786}
给了个打不开的gif,拖进010分析,这不是少文件头么
GIF (gif),文件头:47494638
补全文件头就打开了,貌似是base64编码的轮播,再拖进stegsolve把编码记下来解码就好了
点这个:
base:Q1RGe3dhbmdfYmFvX3FpYW5nX2lzX3NhZH0=
解码:CTF{wang_bao_qiang_is_sad}
王宝强is sad, 哈哈哈哈哈哈哈哈哈哈哈哈
给了一堆乱七八糟的
小猫图片的16进制出现了Exif,拖进Exif元数据查看器发现社会主义核心价值观编码
解码结果:
就给了个abc,试了也不是密码,把我整懵了,看了别的师傅的博客,才知道outguess是一个linux命令
outguess安装:
Kail终端命令输入git clone https://github.com/crorvick/outguess
安装包随即下载到文件夹。双击打开文件夹,右键点击空白区域选终端打开。
随后输入以下命令./configure && make && make install
进行安装
结合题目名字,对这张图片进行使用outguess
导出隐写内容
outguess -k 'abc' -r mmm.jpg flag.txt
给了一个自解压的exe,自动解压出1.txt。学了一下自己解压命令,就是那个silent
Silent=参数
参数 可以是 1 或 2。如果 参数 是 1,开始解压对话框会完全隐藏,包含进程指示和文件名。如果 参数 是 2,则跳过开始解压的确认,但用户仍然可以看到压缩文件的解压进程。
改成2保存,但是也没啥用
作用就是不自动解压了,马里奥的图标出来了
NTFS交换数据流(Alternate Data Streams,简称ADS)是NTFS磁盘格式的一个特性。在NTFS文件系统下,每个文件都可以存在多个数据流,意思是除了主文件流之外还可以有许多非主文件流寄宿在主文件流中,这些利用NTFS数据流寄宿并隐藏在系统中的非主文件流我们称之为ADS流文件。虽然我们无法看到ADS流文件,但它们却是真实存在。
NTFS
流隐藏文件,使用工具NtfsStreamsEditor
下载地址:【NtfsStreamsEditor】NtfsStreamsEditor V2.0官方免费下载_正式版下载-多特软件站
文件系统的官方文档:FAT、HPFS 和 NTFS 文件系统概述 - Windows Client | Microsoft Docs
flag{ddg_is_cute}
给了个图片,我也不懂围棋
但是这个缩略图好TM像二维码啊,没思路,Binwalk一下
binwalk分离出了一个压缩包,gif有加密,尝试爆破
发现有一帧有异样,保存这一帧,再打开查看,在Red plane 0处发现有二维码
果然还是二维码
flag{shanxiajingwu_won_the_game}
给了个神似条形码的图片,在stegsolve试了好久,没啥结果
这图片也有点像摩斯电码.- .-.. .--. .... .- .-.. .- -...
转码得:
ALPHALAB
flag{alphalab}
oh,girl
binwalk出了一个rar文件,试试暴力破解
easy
什么玩意
到这里看别人wp,知道得做词频统计,脚本如下:
# -*- coding:utf-8 -*-
#Author: mochu7
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- =\\{\\}[]"
strings = open('./flag.txt').read()
result = {}
for i in alphabet:
counts = strings.count(i)
i = '{0}'.format(i)
result[i] = counts
res = sorted(result.items(),key=lambda item:item[1],reverse=True)
for data in res:
print(data)
for i in res:
flag = str(i[0])
print(flag[0],end="")
GXY{gaki_IsMyw1fe}
备注里有东西,感觉像盲文,查了对照表,发现人家盲文每列3个点,这是4个点啊
随便找了个解密网站,它又能解出来
wctf2020{y$0$u_f$1$n$d$_M$e$e$e$e$e},就出来了
那个txt是每行都经过两次base64加密的C语言,那个jpg是公众号
def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s2)):
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
return res
def solve_stego():
with open('ComeOn!.txt', 'rb') as f:
file_lines = f.readlines()
bin_str = ''
for line in file_lines:
steg_line = line.replace('\n', '')
norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
diff = get_base64_diff_value(steg_line, norm_line)
print diff
pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2)
else:
bin_str += '0' * pads_num * 2
print goflag(bin_str)
def goflag(bin_str):
res_str = ''
for i in xrange(0, len(bin_str), 8):
res_str += chr(int(bin_str[i:i + 8], 2))
return res_str
if __name__ == '__main__':
solve_stego()
命令:python 1.py
flag{6aseb4_f33!}
这个压缩包密码看起来像乱码
福尔摩斯小人密码
flag{iloveholmesandwllm}
不就oOk编码么,怎么越做越简单了,解码出来就是flag
贴一下解码网站:Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]
给了很长很长的字符串,看着像16进制,尝试把开头的一部分转字符串,发现Rar
以原始文件流保存文件:
s=''
import binascii
out=open('2.rar','wb')
out.write(binascii.unhexlify(s))
out.close()
s那个后面复制黏贴那些16进制,得到加密的rar,四位数暴力破解
解压出一张打不开的图片
它只有一个PNG的文件头
末尾是FFD9,是jpg的文件尾,把文件头改成FFD8就可以正常查看了
给了个rar打不开,发现文件头写错了,把6152改成5261就好了
得到一个word文件,感觉像某种隐写
中间还有一个小插曲,就是我的word已经开了隐藏文字显示,那些音符好像是隐藏了的,还有就是隐藏了的文字好像没法直接往外复制?可以选中文字右键点击“链接”选项,他就会给你显示出来,弹出的新对话框的音符可以复制出去。
使用010 Editor
打开出现CRC
校验出错
上脚本爆宽高
import zlib
import struct
# 同时爆破宽度和高度
filename = "flag.png"
with open(filename, 'rb') as f:
all_b = f.read()
data = bytearray(all_b[12:29])
n = 4095
for w in range(n):
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = zlib.crc32(data)
#替换成图片的crc
if crc32result == 0x370c8f0b:
print("宽为:", end = '')
print(width, end = ' ')
print(int.from_bytes(width, byteorder='big'))
print("高为:", end = '')
print(height, end = ' ')
print(int.from_bytes(height, byteorder='big'))
结果:
宽为:bytearray(b'\x00\x00\x01\xf4') 500
高为:bytearray(b'\x00\x00\x01\xc8') 456
修改高度就好
flag{1ts_vEryyyyyy_ez!}
考察盲注相关的流量包,如下操作:
文件>>>导出对象>>>http
给各位避个坑,到保存的页面分析就好了,别导出,尤其别导出到桌面上,我的电脑差点炸了
sql语句
id=1 and ascii(substr(((select concat_ws(char(94),flag from db_flag limit 0,1)),1,1))>100
找出每组最后一个数字
至于为什么要这样找呢?
它有两种响应包,第二种应该是盲注为TRUE的反应,就是盲注的基础知识了,我的盲注也不大行
提取到:
102 108 97 103 123 52 55 101 100 98 56 51 48 48 101 100 53 102 57 98 50 56 102 99 53 52 98 48 100 48 57 101 99 100 101 102 55 125
f=open('./sql.txt','r').readlines()
for i in f:
print(chr(int(i)),end="")
flag{47edb8300ed5f9b28fc54b0d09ecdef7}
给了两个压缩包
flag3.zip提示了6位数字,那就先爆破它
解压
不是密码就是提示