杂项随记(汇总)
杂项随记(汇总)
常见编码
对常见的编码进行整理,原文本与编码后进行对比,直观一点
ASCII编码
ASCII | HEX | DEC |
---|---|---|
flag{hello_ctfer} | 66 6c 61 67 7b 68 65 6c 6c 6f 5f 63 74 66 65 72 7d | 102 108 97 103 123 104 101 108 108 111 95 99 116 102 101 114 125 |
Base64/58/32/16编码
原文 | base64 | base58 | base32 | base16 |
---|---|---|---|---|
flag{hello_ctfer} | ZmxhZ3toZWxsb19jdGZlcn0= | xpoetRPM7vtSVFL9Lrjejfr | MZWGCZ33NBSWY3DPL5RXIZTFOJ6Q==== | 666c61677b68656c6c6f5f63746665727d |
shellcode编码
原文 | shellcode编码 |
---|---|
flag{hello_ctfer} | \x66\x6c\x61\x67\x7b\x68\x65\x6c\x6c\x6f\x5f\x63\x74\x66\x65\x72\x7d |
Quoted-printable编码
原文 | Quoted-printable编码 |
---|---|
你好希提爱抚选手 | =E4=BD=A0=E5=A5=BD=E5=B8=8C=E6=8F=90=E7=88=B1=E6=8A=9A=E9=80=89=E6=89=8B |
Xxencode编码
原文 | Xxencode编码 |
---|---|
flag{welcome_yichen} | INalVNrhrNKlXPqpZLrZdMqVZPbo+ |
UUencode编码
原文 | Uuencode |
---|---|
flag{welcome_yichen} | 49FQA9WMW96QC;VUE7WEI8VAE;GT |
URL编码
原文 | URLencode |
---|---|
flag{welcome_yichen} | %66%6c%61%67%7b%77%65%6c%63%6f%6d%65%5f%79%69%63%68%65%6e%7d |
Unicode编码
原文 | unicode |
---|---|
flag{welcome_yichen} | \u0066006c00610067007b00770065006c0063006f006d0065005f00790069006300680065006e007d |
Escape/Unescape编码
这是一个js函数,该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。
原文 | Escape |
---|---|
flag{welcome_yichen} | flag%7Bwelcome_yichen%7D |
HTML实体编码
flag{welcome_yichen} | flag{welcome_yichen} |
敲击码(Tap code)
原文 | Tap code |
---|---|
flag{welcome_yichen} | 2131112252153113343215542413231533 |
莫尔斯电码(Morse Code)
welocme yichen | ·-- · ·-·· --- -·-· -- ·/-·-- ·· -·-· ···· · -· |
Ook编码
原文 | Ook | short Ook |
---|---|---|
yichen | Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. | |
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. | ||
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. | ||
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook. Ook? Ook. | ||
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! | ||
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook. | ||
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. | ||
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! | ||
Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. | ||
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. | ..... ..... ..... ..... ..!?! !.?.. ..... ..... ..... ..... ?.?!. ?!.?. | |
..... ...!? !!.?! !!!!! !!?.? !.?!. !!!!! !!!!! !!!.. ..... ....! .!!!! | ||
!!!.. ..... ..... ..... ..!.? . |
brainfuck
原文 | brainfuck |
---|---|
flag{welcome_to_misc_world} | --[----->+<]>.++++++.-----------.++++++.[----->+<]>.----.[->+++<]>.+++++++.---------.++++++++++++.--.--------.------.[--->+<]>-.-----.+[----->++<]>-.++++++++++++++.----.++++++++++.+++[->+++<]>+.----.[--->+<]>++.--------.+++.------.--------.>--[-->+++<]>. |
社会主义价值观编码
原文 | 社会主义价值观编码 |
---|---|
flag{welcome_to_misc_world} | 公正公正公正诚信文明公正民主公正法治法治诚信民主法治法治公正平等公正诚信文明公正和谐公正友善敬业公正诚信和谐公正平等平等诚信平等法治自由公正诚信平等平等诚信平等公正诚信和谐公正敬业法治和谐公正和谐平等友善敬业法治法治公正诚信平等法治文明公正友善公正公正自由法治友善法治 |
Handycode
原文 | Handycode |
---|---|
flag{welcome_to_misc_world} | 333 555 2 4 9 33 555 222 666 6 33 8 666 6 444 7777 222 9 666 777 555 3 |
BubbleBabble
原文 | BubbleBabble |
---|---|
flag{welcome_to_misc_world} | xinik-samak-luval-lanek-semyk-zerek-helol-gireh-ziryk-nusak-filol-luril-derik-gyzox |
AAencode
原文 | AAencode |
---|---|
yichen | ゚ω゚ノ= /`m´)ノ ~┻━┻ //´∇`/ ['']; o=(゚ー゚) ==3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^^o)/ (o^^o);(゚Д゚)={゚Θ゚: '' ,゚ω゚ノ : ((゚ω゚ノ==3) +'') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '')[o^^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'') [c^^o];(゚Д゚) ['c'] = ((゚Д゚)+'') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'')[゚Θ゚]+ ((゚ω゚ノ==3) +'') [゚ー゚] + ((゚Д゚) +'') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'') [゚Θ゚]+((゚ー゚==3) +'') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'') [゚Θ゚];(゚Д゚) [''] =(o^^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'') [o^^o -゚Θ゚]+((゚ー゚==3) +'') [゚Θ゚]+ (゚ω゚ノ +'') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'')[c^^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) [''] ( (゚Д゚) [''] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^^o))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (c^^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^^o) +(o^^o))+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_'); |
Jsfuck
与佛论禅
原文 | 与佛论禅 |
---|---|
flag{hello_world} | 佛曰:侄藝顛冥耨俱度哆所皤伽冥槃彌俱彌侄怛侄寫摩皤離冥蘇梵礙得怯真侄槃佛俱遮諳提知寫奢滅無究都依俱是呐依喝菩。殿智三集朋栗俱蒙僧侄輸冥大諳尼三冥栗侄是漫 |
常见文件头汇总
JPEG (jpg),文件头:FFD8FF 文件尾:AE 42 60 82
PNG (png),文件头:89504E470D0A1A0A
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D
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
Word隐写
word本质是一个压缩包,可以隐藏图片或txt
显示隐藏内容:文件->显示->隐藏文字
base64隐写
2020科来杯,CTF的起源这道题,给了一个 txt,里面全是 base64 编码后的内容,正常 base64 解码没啥信息,属于 base64 隐写,放两个师傅们的脚本
import base64
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('stego.txt', 'rb') as f:
flag = ''
bin_str = ''
for line in f.readlines():
stegb64 = str(line, "utf-8").strip("\n")
rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")
offset = abs(b64chars.index(stegb64.replace('=','')[-1]) - b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=') #no equalnum no offset
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print([chr(int(bin_str[i:i + 8], 2)) for i in range(0, len(bin_str), 8)])
# -*- coding: cp936 -*-
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('base64stego.txt', 'rb') as f:
bin_str = ''
for line in f.readlines():
stegb64 = ''.join(line.split())
rowb64 = ''.join(stegb64.decode('base64').encode('base64').split())
offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=') #no equalnum no offset
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)])
图片相关
PNG 格式简介
文件格式:对于PNG文件来说,其文件头总是由固定的字节来描述的,剩余的部分由3个以上的PNG数据(Chunk)按照特定的顺序组成。
文件头:89 50 4E 47 0D 0A 1A 0A + 数据块 + 数据块 + 数据 块…..
zsteg工具
png 隐写神器,他会自动的找一些东西,比如
-E 参数可以提取隐藏的文件
zsteg -E "b1,r,lsb,xy" red_blue.png > 1.png
修改图片高度
如果linux下打不开,windows下打得开可能就是该高度了
左边是宽度,圈起来的是高度,,把高度改成跟宽一样的
文件尾追加文件
直接十六进制编辑器
图片元数据
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(Data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
元数据中隐藏信息在比赛中是最基本的一种手法,通常用来隐藏一些关键的 Hint 信息 或者一些重要的比如 password 等信息。
这类元数据可以 右键 -> 属性 查看
outguess
kali下使用outguess -r avatar.jpg -t 1.txt
把 avatar.jpg 图片破解信息的数据输出到 1.txt
f5-steganography
F5隐写加密:
java Embed 原图片.jpg 生成的图片.jpg -e 隐藏的文件.txt -p 密码
F5隐写解密:
java Extract 生成的图片.jpg -p 密码
演示:
ps. 之所以使用jview是看自带的.bat文件是用的这个,但是用java貌似没啥影响
Beyond Compare
使用软件:Beyond Compare 提取码: uuch
安装打开后界面是这样的:点击红框框出来的
选择图片比较
上面还有一些选项可以试试
IDAT信息隐藏
IDAT:存储实际的数据,在数据流中可包含多 个连续顺序的图像数据块,储存图像像数数据。
在数据流中可包含多个连续顺序的图像数据块。
采用 LZ77 算法的派生算法进行压缩。
可以用 zlib 解压缩。
IDAT块只有当上一个块充满时,才会继续下 一个新块
如果有 IDAT 还没填满就填充了下一个就要考虑是不是有问题
命令:pngcheck.exe -v sctf.png
可以查看
也可以使用 Stegsolve -> Analysis -> ** File Format **有详细介绍
这就说明这 138 是认为添加的,把这个位置的内容串保存出来,在进行其他操作(文本进制转换、写图片)
LSB信息隐藏
PNG文件中的图像像数一般是由RGB三原色组成,每一种颜色占用8位,取值范围为 0×00~0xFF,即256种颜色,一共包含了256的三次方的颜色,即16777216(1千677W)种 颜色。人类的眼睛可以区分约1000万种不同的颜色,这就意味着人类的眼睛无法区分余下的颜色大约有6777216(677W)种
LSB隐写就是修改RGB颜色分量的最低二进制位(LSB),每个颜色都会有8bit,LSB隐写就是修改了像数中的最低的1Bit,而人类的眼睛不会注意到这前后的区别,每个像数可以携带 3Bit的信息,这样就把信息隐藏起来了
使用 Stegsolve 各个通道都看看,或者 Analysis -> Data Extract 合起来看看,有什么熟悉的保存出来
cloacked-pixel
https://github.com/livz/cloacked-pixel
这是一个用来看 LSB 隐写的东西(带密码的 LSB)
可以提取数据,用法很明确了
$ python lsb.py
LSB steganogprahy. Hide files within least significant bits of images.
Usage:
lsb.py hide <img_file> <payload_file> <password>
lsb.py extract <stego_file> <out_file> <password>
lsb.py analyse <stego_file>
GIF信息隐藏
在某一帧图片藏着信息,用 ps 或者爱奇艺万能播放器也可以一帧一帧的看
每一帧图片间隔时间,可能藏着规律,或许是二进制编码、或许是摩斯密码
ZIP相关
ZIP介绍
ZIP文件格式的组成: 压缩源文件数据区[文件头+文件数据+数据描述符]{此处可重复多次} +核心目录 +目录结束标识
格式缺失
文件头删掉的,但不开,但是用 binwalk 分析可以查出有 zip 个文件尾,可以用 winhex 添上文件头
ZIP伪加密
全局方式位标记,如果是 09 00 就会提示需要密码,一共有两处,如果想要实现伪加密,改前面的压缩源文件数据区的是不管用的
在后面的压缩源文件目标区管用,甚至只改后面这个就行
当然,如果本来是有密码的,你改掉是会出错的
密码爆破
。。。ARCHPR
RAR会比其他格式慢,RAR不管密码对不对,直接去试,解不出来就不对,而ZIP是先检验密码是不是正确的
ZIP明文攻击
手里有原压缩包和压缩包内部分文件,可以使用明文攻击方式。 可以将压缩包内的文件进行压缩,然后用ARCHPR这个工具进行明文攻击
举个例子,已知 明文攻击.zip 中存在的文件 明文.txt
因此将 明文.txt 压缩,这里需要判断明文压缩后的CRC32是否与加密文件中的一致,若不 一致可以换一个压缩工具。
当明文的大小比较小时,攻击速度会比较慢;即使有时没有恢复密码,也可以使用明文攻 击,最后点保存还是能得到压缩包里内容的。
如果做题的时候,压缩包里有五个文件,是加密的,但是你有四个文件是直接可以查看的,就可以猜测是不是明文攻击
CRC爆破
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值
在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也 会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容
https://github.com/theonlypwner/crc32
python crc32.py reverse crc值 根据爆破出来的看看有是不是有啥特殊意思
NTFS流隐写
安恒的一道题:猫片,先是LSB提取一个png,然后改高度得到完整的取反色,下载文件,得到RAR,使用NTFS流隐写,打开软件,然后用 winrar 解压缩,然后扫描一下,发现一些其他的东西,导出就可以了
zlib解压
import zlib
def compress(infile, dst, level=9):
infile = open(infile, 'rb')
dst = open(dst, 'wb')
compress = zlib.compressobj(level)
data = infile.read(1024)
while data:
dst.write(compress.compress(data))
data = infile.read(1024)
dst.write(compress.flush())
def decompress(infile, dst):
infile = open(infile, 'rb')
dst = open(dst, 'wb')
decompress = zlib.decompressobj()
data = infile.read(1024)
while data:
dst.write(decompress.decompress(data))
data = infile.read(1024)
dst.write(decompress.flush())
if __name__ == "__main__":
#compress('in.txt', 'out.txt')
decompress('zlib_out', 'out_decompress.txt')
流量分析
wireshark介绍
Wireshark(前称Ethereal)是一个网络封包分析软件
网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark 使用 WinPCAP 作为接口,直接与网卡进行数据报文交换
捕捉过滤器
数据经过的第一层过滤器, 它用于控制捕捉数据的数量,以避免产生过大的日志文件,用于决定将什么样的信息记录在捕捉结果中,需要在开始捕捉前设置
显示过滤器
在 CTF 中基本都是给一个数据包,所以基本都是用显示过滤器来筛选
基本语法
语法 | protocol | . | string1 | . | string2 | comparison operator | value | logical operations | other expression |
---|---|---|---|---|---|---|---|---|---|
例子 | http | . | request | . | method | == | "post" | or | icmp.type |
string1和string2是可选的,依据协议过滤时,可直接通过协议来进行过滤,也能依据协议属性值进行过滤
实际使用
打开一个数据包,点击 表达式 会看到很多字段
也可以直接输入 http 就会自动过滤
http.request.method==GET
这样就可以过滤用 GET 方式请求的数据
过滤数据
按照协议过滤:
snmp || dns || icmp
按照协议属性值:
ip.src == 10.230.0.0/16 显示来自10..230网段的封包
tcp.port == 25 显示来源或目的TCP端口号为25的封包
tcp.dstport == 25 显示目的TCP端口号为25的封包
http.request.method == "POST" 显示post请求方式的http封包
http.host == "example.com" 显示请求域名为example.com的http封包
内容过滤语法:
tcp contains "http" 显示payload中包含"http"字符串封包
http.request.url contains "online" 显示请求的url包含"online"的http封包
还有个matches来做正则匹配,以后补充
搜索字符串:ctrl+F 选择分组详情、字符串,然后输入想找的查找就可以
右键 -> 追踪 -> TCP流,可以跟踪TCP会话的过程
有时候这里会有一些 zip、png、jpg的信息,如果熟悉文件头的话一眼就能看出来,用下面的save as...就可以保存成出来,然后用 winhex 保存成图片或压缩包
wireshark着色规则
Tshark
在 wireshark 命令行里的工具
常用参数: -r 设置读取本地文件
-R
键盘流量分析
数据长度为八个字节
USB流量分为键盘流量和鼠标流量。
键盘数据包的数据长度为8个字节,击键信息集中在第3个字节
映射关系
https://usb.org/sites/default/files/documents/hut1_12v2.pdf
可以用tshark命令可以将 leftover capture data进行提取
tshark -r 流量包 -T fields -e usb.capdata > usbdata.txt
提取出来后根据映射关系还原即可
状态不好,以后再弄