Capture The Flag Miscellaneous 4
Miscellaneous 【6】 🔒
Miscellaneous 【5】 🔒
Miscellaneous 【4】 – flag{misc}
Miscellaneous 【3】
Miscellaneous 【2】
Miscellaneous 【1】
Ax Introduction
什么是CTF,什么是MISC。
CTF定义:网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们模拟攻击的比赛。
- 类型:解题模式、攻防模式、混合模式
- 赛事:DEFCONCTF、XCTF、Real World CTF等
- 题目:PPC、MISC、PWN、WEB、REVERSE、CRYPTO、STEGA
MISC定义:Miscellaneous,安全杂项,流量分析、电子签证、人肉搜索、数据分析等等等等等,就是除了最初的几个大类之外的题目。
别看杂项杂,每一项都是很专业的东西,所以要学的东西很多很多。还能遇到有些有趣的东西呢。
常用工具
WinHex yyds
010editor
kali linux
binwalk 查看文件中是否隐藏信息
formost 通过分析文件头和内部数据结构和尾,还原文件,使文件分离出来。
zip2john 破解压缩包密码,再用
john
看破解的密码文件zip2john flag.zip password.txt john password.txt
fcrackzip zip压缩包破解工具
fcrackzip -b -c 'aA1!' -l 1-10 -u crack_this.zip # 选择大小写且数字!-b代表brute-force;-l限制密码长度;-c指定使用的字符集:-u是解压 fcrackzip -b -c '1' -l 1-10 -u crack_this.zip # 如果知道是数字,直接使用数字 gzip -d /usr/share/wordlists/rockyou.txt.gz # 解压kali自带的字典 fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u crack_this.zip # 使用字典爆破
tshark Linux版本的wireshark工具。
strings、egrep、awk 找东西滴
Wireshark 有时候会有分析数据包的取证题目需要用到。
隐写工具
- Jphs05 图片信息隐藏
- Stegsolve 分析图片隐写工具
- zsteg 隐写工具LSB
RouterPassview 路由器配置文件查看器
好玩的工具
- http://www.atoolbox.net/ 好好玩
- https://www.pdfpai.com/downgif2png
- https://www.11zon.com/zh-cn/
加密算法在线网站
- MD5
- 各种加密
Bx Flag{keyisflag}
只有不断的做题,才能学习到更多的东西,包括出题的套路,you know,but 作者的想法你是永远猜不到的,也许就在你意想不到的地方。
我会去做各大在线网站的题目,然后记录于此便于我回顾。
Bugku
Bugku_多种方法解决
得到一个exe文件,用winhex打开,是图片的base64编码
1)用命令解决
base64 -d "解密的内容">>flag.png
2)用在线网站
http://www.jsons.cn/img2base64/
3)用浏览器地址栏
随便用什么方法将里面的内容复制到浏览器地址栏,出现图片
4)用HTML代码
大佬思路:”右键评论区一个人的头像 审查元素 把src替换成base64代码 完成) 懒得去开工具了“
写代码:
Base64 在CSS中的使用
.demoImg{ background-image: url("data:image/jpg;base64,/9j/4QMZRXhpZgAASUkqAAgAAAAL...."); }
Base64 在HTML中的使用
<img width="40" height="30" src="data:image/jpg;base64,/9j/4QMZRXhpZgAASUkqAAgAAAAL...." />
5)用工具解决
可以自己用代码写,也可以下载,不过我感觉没有必要。
6)用扫描二维码的网站
得出KEY{dca57f966e4e4e31fd5b15417da63269}
Bugku_闪的好快
一个动态二维码,每个二维码都有一个字符,方法就是找合适的工具。
各种方法
1)在线网站
2)convert命令
3)stegsolve工具 -> Frame Browser
使用脚本
第一步,批量生成
from PIL import Image
import os
gifFileName = 'masterGO.gif'
#使用Image模块的open()方法打开gif动态图像时,默认是第一帧
im = Image.open(gifFileName)
pngDir = gifFileName[:-4]
#创建存放每帧图片的文件夹
os.mkdir(pngDir)
try:
while True:
#保存当前帧图片
current = im.tell()
im.save(pngDir+'\\'+str(current)+'.png')
#获取下一帧图片
im.seek(current+1)
except EOFError:
pass
生成图片
第二步,批量扫码
from PIL import Image
import pyzbar.pyzbar as pyzbar
import os
def qrcode_parse_content(img_path):
'''
单张图片的二维码解析
'''
img = Image.open(img_path)
#使用pyzbar解析二维码图片内容
barcodes = pyzbar.decode(img)
#打印解析结果,从结果上可以看出,data是识别到的二维码内容,rect是二维码所在的位置
# print(barcodes)
# [Decoded(data=b'http://www.h3blog.com', type='QRCODE', rect=Rect(left=7, top=7, width=244, height=244), polygon=[Point(x=7, y=7), Point(x=7, y=251), Point(x=251, y=251), Point(x=251, y=7)])]
result = []
for barcode in barcodes:
barcode_content = barcode.data.decode('utf-8')
result.append(barcode_content)
return result
def load_imgs(folder):
'''
加载文件夹下的图片
'''
imgs = []
for img_path in os.listdir(folder):
ext = os.path.splitext(img_path)
if len(ext) > 1 and is_img(ext[1]):
imgs.append(img_path)
return imgs
def is_img(ext):
'''
判断文件后缀是否是图片
'''
ext = ext.lower()
if ext == '.jpg':
return True
elif ext == '.png':
return True
elif ext == '.jpeg':
return True
elif ext == '.bmp':
return True
else:
return False
if __name__ == "__main__":
imgs = load_imgs('./') # 打开图片文件夹,我这里是当前程序运行目录
contents = []
for img in imgs:
contents.extend(qrcode_parse_content(img))
file = './result.txt' # 写入文件路径,我这里程序当前运行目录下的result.txt
with open(file,'w') as f:
for c in contents:
f.write(c + '\n')
但脚本出现了问题,就是顺序是乱的,这和文件名有关,怎么搞啊这。
查阅资料,发现它之所以会出现“乱序”是因为使用默认ASCII的字符串排序方式,要改进代码就必须将排序改为按数字的方法排序,这个问题就先留着,以后来解决吧。乱的也不多,复制10-17到最后就可以了。
SYC{F1aSh_so_f4sT}
当然也有工具啦,比如Excel的批量识别工具(搜索方方格子)
工具网址:https://pc.wwei.cn/
Bugku_come_game
给了一个游戏,但一直过不去。。,游戏会生成一个save文件,打开后发现关数,改成别的关数再按R重新开始,就可以跳关,第五关发现flag
6E23F259D98DF153
Bugku_白哥的鸽子
得到一个鸽子的图片,直接拿到winhex分析,得到乱序的flag,但是这不会是凯撒,以为存在flag{}的符号,应该是栅栏。
直接走一波栅栏密码
3栏得到flag{w22_is_v3ry_cool}
Bugku_linux
得到一个tar.gz的压缩包
解压tar -zxvf 压缩包得到flag文件夹,是二进制文件,直接搜索flag或key关键字。
Bugku_简单套娃
得到一张图片, 看看有没有隐藏什么
隐藏了一张图片,但是我用foremost爆不出来,用010editor判断
看到第二个文件头FF D8 FF E0
,以下的都复制,然后新建一个HEX(十六进制)文件,粘贴进去,保存为jpg文件。
flag{Mumuzi_the_God_of_Matryoshka}
不知道是不是我看清楚了,用stegsolve将两张图片合成一下
提交成功。
Bugku_split_all
得到一张PNG的图,打开010editor,查看发现有一个PNG标识和一部分GIF的头。
把全面的删掉,补全GIF47 49 46 38
。然后改为gif,就变成了一个比签还细的图片。
这肯定是分离出gif,然后拼接起来才能看见完整的图。
没想到这个gif网址直接满足了我的需求,太强了。
再借助大佬的python脚本试试
from PIL import Image
im = Image.open('file.gif')
# 分离
for i in range(770):
# 在给定的文件序列中查找指定的帧。如果查找超越了序列的末尾,则产生一个EOFError异常。
# 当文件序列被打开时,PIL库自动指定到第0帧上。
im.seek(i)
im.save('123/'+str(i)+'.png') # 保存在123的目录中
new_one = Image.new('RGB', (770, 432))
# 拼接
for j in range(770):
ima = Image.open('123/'+str(j)+'.png') # 打开123目录
# 将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。
# 如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。
new_one.paste(ima, (j, 0, j+1, 432))
# 保存
new_one.save("flag.png")
非常滴nice,flag{9f019c27eca746beb9c297cd70bf93ca}
Bugku_look
得到一张bmp的文件,但是打不开图片,文件头看一下
是压缩包,改为zip,然后解压,得到图片
安装zsteg
使用zsteg -a 得到flag
flag{3c15d07e-5d9a-4ccb-b67c-d2369eb2c1b9}
Bugku_放松一下吧
得到几个压缩包,第一个压缩包需要你玩游戏得到另一个的password,这应该是老套路
修改关卡。然后R刷新
得到了password
用密码解压另一个文件得到一个提示和一个图片。
Passsword是base加密,但不知道是多少,于是又临时学习了以下编码知识
早期F5算法总插入 “JPEG Encoder Copyright 1998,James R.Weeks and BioElectroMech”, 而普通图像编辑器几乎不会插入这条信息。
原来刷新的意思是F5,下载工具:https://github.com/matthewgao/F5-steganography.git
执行命令
java Extract 你需要刷新.jpg -p 66666666
得到:bugku{F5_and_i_wanna_is_so_cool}
Bugku_cisco
下载解压出来是两个文本文件1.txt
和2.txt
,然后第二个文本是一个什么加密,有点像base65。
是AES加密,cisco的模拟文件是pkt,把1.txt改成这个后缀。
还得下载思科模拟器,唉,这不折磨人吗,给个下载链接咯:http://www.downza.cn/soft/30116.html
用这个软件还需要去注册一个账号,之后登入提示需要到邮件更改密码。
https://www.netacad.com/courses/iot/introduction-iot#anchor 点sign up today
搞了半天还是不行,这时突然来了封邮件,再试试。
https://blog.csdn.net/weixin_45798690/article/details/123589033 注册指南
在思科学院做了点题,那边就登入成功了。
阿这,版本又出现了问题。只能换一个了。
最后,换成了7.3版本,
题目的描述提示密码是flag,点击交换机,切换到命令模式
Switch>ena
Switch>enable
Password:
Switch#show running-config | include flag
enable password flag
banner motd ^Cflag^C
password flag{wenzi_houzhui_sike}
Switch#
flag{wenzi_houzhui_sike}
Bugku_被勒索了
描 述: 题主遇到真实事件改编 全盘所有文件都被加密了,检查文件的时候发现了火绒的数据目录没有被加密,不知道能不能发现什么线索
下载一个火绒,首先将Huorong文件解压为到Huorong中,然后把找个文件放到C:\ProgramData
下,再安装火绒,点击隔离区恢复这个文件。
目前5.0版本会在安装时删除数据文件,所以要使用低版本的火绒,我用的是sysdiag-full-3.0.0.24.exe
得到flag{Virus_traceability}
Bugku_disordered_zip
给了一个压缩包,打不开。
放010里看发现是0304开头,修改为50 4B 03 04
。按insert键边插入模式就不会覆盖。
解压需要密码,放Linux中查找隐藏信息。
发现一张PNG,分离出来。是一张二维码,但是缺了两个角,是两个定位的,修补以下。
就用画图补一下
识别得到psw:yeQFPDS6uTaRasdvwLKoEZq0OiUk
经过尝试,在栅栏中解出
得到一个flag文件,分析文件头,25 50 44 46
是PDF文件
改文件后缀为pdf打开,搜索flag发现隐藏的flag,直接复制白色文字,粘贴。
flag is not her
但这不是flag。
用webstego解密
flag{ZnSRBg8vNJV5bXfUaxryetQjO4l}
Cx Additions
File Format
格式 | 头部 |
---|---|
.jpg | FF D8 FF |
.png | 89 50 4E 47 |
.bmp | 42 4D |
.gif | 47 49 46 38 |
.zip | 50 4B 03 04 |
.rar | 52 61 72 21 |
.avi | 41 56 49 20 |
25 50 44 46 |
常用文件的文件头如下(16进制):
JPEG (jpg),文件头:FFD8FFE1
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424DC001
CAD (dwg),文件头:41433130
Adobe Photoshop (psd),文件头:38425053
Rich Text Format (rtf),文件头:7B5C727466
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A
Outlook Express (dbx),文件头:CFAD12FEC5FD746F
Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Adobe Acrobat (pdf),文件头:255044462D312E
Quicken (qdf),文件头:AC9EBD8F
Windows Password (pwl),文件头:E3828596
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46
MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11
MIDI (mid),文件头:4D546864
Cypher Method
参考:L
Web类编码
# HTML源码
<a href="javascript:alert(1)">test</a>
# JS编码:
<a href="javascript:\u0061\u006c\u0065\u0072\u0074(1)">test</a>
# URL编码:
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(1)">test</a>
# HTML编码:
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(1)">test</a>
URL编码
一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。这意味着,如果URL中有汉字和其他符号,就必须编码后使用。我们在进行 URL 请求时,浏览器会自动帮我们把部分符号转换成 %
+ 十六进制数字
的形式
http://127.0.0.1/flag.php?x=1{)wo我
转化为
http://127.0.0.1/flag.php?x=1{)wo%E6%88%91
HTML实体编码
因为HTML对符号很敏感,比如空格,“<”,“>”等,于是这些符号需要用一些编码代替,这些编码就是HTML实体编码。
JavaScript编码
JavaScript编码主要是为了解决URL编码留下的坑进行的
escape()函数编码:形式为%uXXXX
、%XX
,字符范围0-F
,本身就是URL编码的一种实现方式
Unicode 编码:'\u' + '四位十六进制数字'
不够四位前面补0
JSFuck: 一种基于JavaScript原子部分的晦涩的编程风格,它只有6种字符:[
]
(
)
!
+
,也可以来编写程序并执行,可以做到所有JavaScript能做的事情
MD5
MD5以512位分组来处理输入文本,每一分组又划分为16个32位子分组。算法的输出由四个32位分组组成,将它们级联形成一个128位散列值。是不可逆的加密。
AES加密
特征:AES加密最重要的特征还是它的S-box,反汇编代码中很明显,而且容易定位
又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位)。根据密钥的长度,算法被称为AES-128,AES-192或者AE-256。
从安全性来看,AES-256安全性最高 从性能来看,AES-128性能最高
sha1
对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。
CRS32
在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。
特征:CRC32的计算结果只有8位
Cyclic Redundancy Check循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。 算法原理 假 设数据传输过程中需要发送15位的二进制信息g=101001110100001,这串二进制码可表示为代数多项式g(x) = x^14 + x^12 + x^9 + x^8 + x^7 + x^5 + 1,其中g中第k位的值,对应g(x)中x^k的系数。将g(x)乘以x^m,既将g后加m个0,然后除以m阶多项式h(x),得到的(m-1)阶余项 r(x)对应的二进制码r就是CRC编码。
h(x)可以自由选择或者使用国际通行标准,一般按照h(x)的阶数m,将CRC算法称为CRC-m,比如CRC-32、CRC-64等。国际通行标准可以look
g(x)和h(x)的除运算,可以通过g和h做xor(异或)运算。比如将11001与10101做xor运算:
这里把计算过程的要点记录一下:
CRC32是CRC算法一种,先参考Wiki上CRC算法的原理和实例搞明白基本的计算方法。
最常见的CRC32算法就是IEEE 802.3里生成FCS字段用的那个:
a) CRC32使用的Polynomial是,是什么,你知道码
b) IEEE 802.3在传送数据时使用的是最低有效位优先 (least significant bit first),所以要根据你机器的架构转换成有效的比特流输入。同理,输出流也一样。
c) 为了有效识别输入流开头和结尾的零,开头的32位要按位取反(complement),最后计算出的余数也要按位取反。
按照上述方法计算能得到想要的CRC32值了。
Base 系列编码
是我们最常见的编码,除此之外,其实还有 Base16、Base32、Base58、Base85、Base100 等,他们之间最明显的区别就是使用了不同数量的可打印字符对任意字节数据进行编码,比如 使用了 64 个可打印字符(A-Z、a-z、0-9、+、/),Base16 使用了 16 个可打印字符(A-F、0-9),这里主要讲怎么快速识别,其具体原理可自行百度,Base 系列主要特征如下:
- Base16:结尾没有等号,数字要多于字母;
- Base32:字母要多于数字,明文数量超过 10 个,结尾可能会有很多等号;
- Base58:结尾没有等号,字母要多于数字;
- :一般情况下结尾都会有 1 个或者 2 个等号,明文很少的时候可能没有;
- Base85:等号一般出现在字符串中间,含有一些奇怪的字符;
- Base100:密文由 Emoji 表情组成。
莫斯码
栅栏密码
特征:字母不会太多
①把将要传递的信息中的字母交替排成上下两行。
②再将下面一行字母排在上面一行的后边,从而形成一段密码。
明文:THE LONGEST DAY MUST HAVE AN END
加密:
1、把将要传递的信息中的字母交替排成上下两行。
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
2、 密文:
将下面一行字母排在上面一行的后边。
TEOGSDYUTAENN HLNETAMSHVAED
解密:
先将密文分为两行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话
明文:THE LONGEST DAY MUST HAVE AN END
培根密码
培根密码,又名倍康尼密码(Bacon’s cipher)是由法兰西斯·培根发明的一种隐写术,它是一种本质上用二进制数设计的,没有用通常的0和1来表示,而是采用a和b,看到一串的a和b,并且五个一组,那么就是培根加密了。
凯撒密码
通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。只需简单地统计字频就可以破译
维吉尼亚密码
维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行及26列的字母表。另外,维吉尼亚密码必须有一个密钥,这个密钥由字母组成,最少一个,最多可与明文字母数量相等。维吉尼亚密码表如下:
猪圈密码
是一种以格子为基础的简单替代式密码,是共济会的暗号
波利比奥斯方阵密码Polybius
公元前2世纪,一个叫Polybius的希腊人设计了一种将字母编码成符号对的方法,他使用了一个称为Polybius的校验表,这个表中包含许多后来在加密系统中非常常见的成分。Polybius校验表由一个5行5列的网格组成,网格中包含26个英文字母,其中I和J在同一格中。相应字母用数对表示。在古代,这种棋盘密码被广泛使用。
rabbit加密
特征:有U2Fsd开头
utf-7编码
特征:url解码后可以看到如下,里面有“+/v++”,可以猜出这是UTF-7编码
UTF-7:这是一种使用7位ASCII码]对Unicode码进行转换的编码。它的设计目标仍然是为了在只能传递7为编码的邮件网关中传递信息。UTF-7对英语字母、数字和常见符号直接显示,而对其他符号用修正的Base64编码。符号+和-号控制编码过程的开始和暂停。所以乱码中如果夹有英文单词,并且相伴有+号和-号,这就有可能是UTF-7编码。
Uuencode编码
Uuencode是二进制信息和文字信息之间的转换编码,也就是机器和人眼识读的转换。Uuencode编码方案常见于电子邮件信息的传输,目前已被多用途互联网邮件扩展(MIME)大量取代。
Uuencode将输入文字以每三个字节为单位进行编码,如此重复进行。如果最后剩下的文字少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6-bit为单位分为4个群组,每个群组以十进制来表示所出现的数值只会落在0到63之间。将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。
Uuencode编码每60个将输出为独立的一行(相当于45个输入字节),每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是“M”这个ASCII字符(77=32+45),最后一行的长度字符为32+剩下的字节数目这个ASCII字符。
rot13加密算法
Rot13是一种非常简单的替换加密算法,只能加密26个英语字母。方法是:把每个字母用其后第13个字母代替。
因为有26个字母,取其一半13。
s = "xrlvf23xfqwsxsqf"
ans = ""
for i in s:
if 'a' <= i <= 'z':
ans += chr(((ord(i)-ord('a')) + 13) % 26 + ord('a'))
else:
ans+=i
print(ans)
当铺密码
该加密算法是根据当前汉字有多少笔画出头,对应的明文就是数字几。
当前汉字有多少笔画出头,就是转化成数字几
例如:口 0 田 0 由 1 中 2 人 3 工 4 大 5 王 6 夫 7 井 8 羊 9
解密脚本
dh = '田口由中人工大土士王夫井羊壮'
ds = '00123455567899'
cip = '王壮 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由 土夫 井中 士夫 王工 王人 土由 由口夫'
s = ''
for i in cip:
if i in dh:
s += ds[dh.index(i)]
else:
s += ' '
#print(s)
ll = s.split(" ")
t = ''
for i in range(0,len(ll)):
t += chr(int(ll[i])+i+1)
print('t=', t, '\t\tt.lower()=', t.lower())
各种奇葩加密
与佛论禅/新约佛论禅
字符串转换后,是一些佛语。
与熊论道
字符串转换后,是一些熊语。
兽音译者
字符串转换后,是一些兽语。
社会核心价值观
字符串转换后,是社会核心价值观。
颜文字加密
字符串转换后,是颜文字。
Ook加密
https://www.splitbrain.org/services/ook
OOK!只有三个不同的语法元素:
Ook。
OOK?
OOK!