CTF之简单杂项

杂项

常见编码

ASCII

ASCII非打印控制字符(0-31,127)
ASCII打印字符
扩展ASCII打印字符

image-20210519164502038

base64/32/16编码

定义

base64、base32、base16可以分别编码转化8位字节为6位、5位、4位。16,32,64分别表示用多少个字符来编码,常用的为base64。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。

base64

编码原理

Base64编码要求把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式,6位2进制能表示的最大数是2的6次方是64,这也是为什么是64个字符(A-Z,a-z,0-9,+,l这64个编码字符,=号不属于编码字符,而是填充字符)的原因,这样就需要一张映射表

image-20210507124721532

若三位一组分组时不足三位:

差一位:转二进制时后面补8个0,对应base64码为‘=’

一个’='可以隐藏2bit信息

image-20210507124815261

差两位:转二进制时后面补16个0,对应base64码为‘==’

两个’='隐藏4bit信息

image-20210507124835406

base32/16

编码原理

base32就是用32(2的5次方)个特定ASCII码来表示256个ASCII码。所以,5个ASCIl字符经过base32编码后会变为8个字符(公约数为40),长度增加3/5,不足8n用“=”补足。

base16就是用16(2的4次方)个特定ASCII码表示256个ASCII字符。1个ASCIl字符经过base16编码后会变为2个字符,长度增加一倍。不足2n用“=”补足

base16实际上也是十六进制转换

image-20210507124957377

image-20210507125005820

image-20210507125018033

与base64类似,base32使用32个可见字符进行编码,2的5次方为32,所以每5bit为1个分组。5字节为40bit,对应于8个base32分组,即5个字节用8个base32中字符来表示。但如果不足5个字节,则会先对第一个不足5bit的分组用0补足了5bit,对后面剩余分组全部使用“=”填充,直到补满5个字节。由此可知,base32最多只有6个等号出现

shellcode

源文本:The quick brown fox jumps over the lazy dog
编码后:
\×54\×68\×65\×20\×71\×75\×69\x63\x6b\×20\×62\×72\×6f\×77\x6e\x20\×66\x6f\×78\×20\×6a\×75\x6d\×70\×73\×20\×6f\×76\x65\×72\×20\×74\x68\x65\×20\×6c\x61\×7a\x79\×20\x64\x6f\x67

解码:本质还是解十六进制

Quoted-printable编码(只针对于非英文)

源文本:敏捷的棕色狐狸跳过了懒惰的狗
编码后:
=E6=95=8F=E6=8D=B7=E7=9A=84=E6=A3=95=E8=89=B2=E7=8B=90=E7=8B=B8=E8=B7=B3=E8=BF=87=E4=BA=86=E6=87=92=E6=83=BO=E7=9A=84=E7=8B=97

http: // www.mxcz.net/tools/QuotedPrintable.aspx

  • 编码原理
  • 任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值.例如,ASCII码换页符(十进制值为12)可以表示为”=0C”,等号”=”(十进制值为61)必须表示为”=3D”.除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式.
  • 所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示,但是等号”=”(十进制值为61)不可以这样直接表示.ASCII的水平制表符(tab)与空格符,十进制为9和32,如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为"=09″(tab)或"=20″(space).

XXencode编码

简介:
XXencode将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间。以所对应值的位置字符代替。它所选择的可打印字符一共64个字符。跟base64打印字符相比,就是XXencode多一个“-”字符,少一个”/”

字符:+- 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
源文本:Thequickbrownfoxjumpsoverthelazydog
编码后:hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNk++

UUencode编码

简介:
UUencode是一种二进制到文字的编码,最早在unix邮件系统中使用,全称:Unix-to-Unix encoding,UUencode将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用零补齐。三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值。这个数值只会落在0到63之间。然后将每个数加上32,所产生的结果刚好落在ASCIl字符集中可打印字符(32-空白…95-底线)的范围之中

特点:没有特点,一串乱码但都在可打印字符范围内

源文本:Thequickbrownfoxjumpsoverthelazydog
编码后:M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9PH*

URL编码(%编码)

本质ASCII编码的十六进制前加%

Unicode编码

Unicode码扩展自ASCIl字元集。在严格的ASCIl中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全16位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。Unicode只有一个字符集,中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符,比如汉字"经"的编码是0x7ECF

特征 &,#

http: //www.mxcz.net/tools/Unicode.aspx

Escape/UNescape编码

简介:

Escape/Unescape加密解码/编码解码,又叫%u编码,采用UTF-16BE模式,Escape编码/加密,就是字符对应UTF-1616进制表示方式前面加%u。Unescape解码/解密,就是去掉“%u“后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。
举例:
​ 源文本:The
​ 编码后:%u0054%u0068%u0065

敲击码

简介

​ 敲击码(Tap code)是一种以非常简单的方式对文本信息进行编码的方法。
因该编码对信息通过使用一系列的点击声音来编码而命名,敲击码是基于5×5方格波利比奥斯方阵来实现的,不同点是是用K字母被整合到C中。

image-20210507125544701

image-20210507125536385

莫尔斯电码(Morse Code)

简介:

莫尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯在1836年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代码,摩尔斯电码主要由以下5种它的代码组成:

点(.)

划(一)
每个字符间短的停顿(通常用空格表示停顿)
每个词之间中等的停顿(通常用/划分)
以及句子之间长的停顿

摩斯电码一定是有分隔的

源文本:THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG
编码后:-...../--.-..-..-.-.-.-/-....-.---.---./..-.----..-/.---..---.--..../---...-..-./-...../.-...---..-.--/-..-----.

对应表

image-20210507125638546

ROT 5/13/18/47

简介

  • ROT 5/13/18/47是一种简单的码元位置顺序替换密码

  • ROT 5只对数字进行加密,用当前数字往前数用第5个数字替接当前数字

  • ROT 13只对字母进行加密,用当前字母往前数用第13个字母替换当前字母

  • ROT 18将ROT5和ROT13组合一起

  • ROT 47对数字、字母、常用符号进行编码,按照它们的ASCl值进行位置誉换,用当前字符ASC1|值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号。用于ROT47编码的字符其ASCII值范图是33一126,具体可参考ASCll编码。

举例:ROT13
明文:thequickbrownfoxjumpsoverthelazydog
密文:gurdhvpxoebjasbkwhzcfbiregurynmlqbt

变形

JSfuck

JSFuck只使用6种字符

[ ] ! ( ) +

来书写任何Javascript代码。当然,用这种方式写出来的代码会很长。JSFuck不需要依赖浏览器,也可以在Node.JS上运行。

不是一一对应

brainfuck编码

Brainfuck加密,brainfuck又被称为brainf**k或者BF,brainfuck语言用

< > + - . ,[ ]

八种符号来替换C语言的各种语法和命令,具体规则如下:

特点

​ 加号多,五位一组

变形:Ook

OoK. Ook! Ook?

image-20210507125922177

再变:short Ook

再Ook基础上删去Ook,并且可以删去并排列入一行中

隐写术(消息嵌入技术)

​ 隐写术(steganography)一词来源于希腊词汇stegons和graphia,意即“隐藏”(cover)和“书写”(writing)。
​ 在古希腊战争中,为了安全地传送军事情报,奴隶主剃光奴隶的头发,将情报纹在奴隶的头皮上,待头发长起后再派出去传送消息。
​ 在我国信息隐藏的发展很大程度上得益我战争中隐蔽通信的需要。我国古代有文字可考的最早的信息隐藏见于《六韬》中对“阴符”的记载。“阴符”是当古代战中中采用的高度保密的通讯方式。其办法是先制造形制、花纹不同的兵符,每一种表示一种固定的含义。这种含义须事先约定好,只有当事人可以理解,若被敌方截获,他们也不会知道其中的含义。

​ 将某些特殊信息隐藏于正常载体之中,从而实现掩盖特殊信息存在的事实,在通信过程中隐蔽通信掩盖了秘密通信的行为,不易引起攻击者的怀疑。

隐写载体

  • 文本
  • 图像
  • 音频
  • 视频

image-20210507130758867

1、插入隐藏

  • ​ 在文本文件、多媒体文件及可执行文件等载体文件中,利用其文件特性与冗余性,在不影响载体正常使用的情况下,将秘密信息插入到载体中,实现信息隐藏。
  • ​ 根据文件特性与冗余性可分为:追加插入法和前置插入法
1.1、追加插入
  • 追加插入法是数字隐写术中最常用、最简单的一种方法,一般是利用文件的特性在文件末位进行附加数据。
  • 例如:对于JPG图片,其文件结构特性为图像开始(SOl)标记为0xFFD8,图片结尾(E0I)结束标记为0xFFD9。
  • image-20210507130911993
1.2、前置插入
  • 前置插入法是利用文件的冗余部分进行插入,而且丝毫不影响原始文件的使用效果。冗余部分可以是批注内容、注释信息等,一般文件都存在批注信息,此类信息修改后对原始文件不会产生影响。

  • 例如,对于文本文件和数字媒体文件很容易用来嵌入数据,以jpg图片和文本文件为例。

标识符十六进制值大小(字节)详细信息
SOIFF D82图像起始位置
APP0FF D82文件详细信息
SOF0FF C02框架起始位置
SOSFF DA2扫描起始位置
EOIFF D92图像结束位置
  • 在文件详细信息中修改属性值,在JPEG的应用程序标识符FFE0和帧起始标识符FFC0这两个标识符之间一般为批注区,对于数据隐藏来说批注区是很好的利用位置。

image-20210507131002945

image-20210507131022481

2、替换隐藏

  • 通过替换方法隐藏消息会改变载体消息中的字节或者置换字节顺序。替换方法不会在载体文件中增加任何新的内容,而是通过修改字节或者调整字节位置达到隐藏消息的目的。

LSB原理

  • 图像是由像素组成,每个像素有一个灰度值。灰度值是介于0到255之间的整数,0代表黑色,255代表白色,其中灰度值越大表示亮度越高。例如在图片中像素灰度用8比特二进制数表示,其中最高位对图像的贡献最大,最低位对图像的贡献最小,最低位则为最低比特位(least significant bit,LSB)。我们将一副图片所有像素的比特位抽取出来,就构成了8个不同的位面。
  • 将信息嵌入到随机选择的图像点中最不重要的像素位(LSB)上,这可保证嵌入的水印是不可见的。嵌入只在像素的最低位嵌入,使得其像素值的改变量最小,将文件某些像素转换成二进制,如图所示

image-20210507131128306

最低位即转化为二进制数后最右位(奇数位1,偶数为0)

  • 使用LSB嵌入时,都先将要隐藏的文件转换为二进制代码,假设我们要把011010嵌入到以上像素的图片中(使用最低有效位替换)。
  • 利用最低比特位替换可以将信息添加到载体文件的最低有效像素位(LSB)上面,而且可以保证嵌入的数据或水印对载体影响较小。

image-20210507131155291

3、图片隐写

3.1、PNG(无损压缩)
  • 对于一个PNG文件来说,其文件头总是由位固定的字节来描述的,剩余的部分由3个以上的PNG的数据块(Chunk)按照特定的顺序组成。
  • 文件头89504E470DOA1A0A+数据块+数据块+数据块……
  • 数据块CHUNk
  • PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。

image-20210507131222846

image-20210507131256273

对于每个数据块都有着统一的数据结构,每个数据块由4个部分组成

CRC域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。

3.1.1、IHDR
  • 文件头数据块IHDR(Header Chunk):它包含有PNG文件中存储的图像数据的基本信息,由13字节组成,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块

  • 其中我们关注的是前8字节的内容

  • 我们经常会去更改一张图片的高度或者宽度使得一张图片显示不完整从而达到隐藏信息的目的。

    域的名称 字节数 说明
    Width 4bytes 图像宽度,以像素为单位

    Height 4bytes 图像高度,以像素为单位

3.1.2、IDAT
  • 图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
  • 储存图像像数数据
  • 在数据流中可包含多个连续顺序的图像数据块
  • 采用LZ77算法的派生算法进行压缩
  • 可以用zlib解压缩
  • 值得注意的是,IDAT块只有当上一个块充满时,才会继续一个新的块。
3.1.3、IEND
  • 图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
  • 00 00 00 00 49 45 4E 44 AE 42 60 82
  • IEND数据块的长度总是00 00 00 00,数据标识总是IEND 49 45 4E 44,因此,CRC码也总是 AE 42 60 82。

image-20210507131401272

3.2、JPG(有损压缩)
  • JPEG是有损压缩格式,将像素信息用JPEG保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在0至100之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够了
  • JPEG没有透明度信息
  • JPG基本数据结构为两大类型:“段”和经过压缩编码的图像数据。
  • 0xffd80xffd9JPG文件的开始结束的标志。
名称字节数数据说明
段标识1FF每个新段的开始标识
段类型1类型编码(标记码)
段长度2段内容和段长度,不包括段标识、段类型
段内容2≤65533字节

JSteg隐写算法

  • 基于DCT系数的变换进行数字隐写,主要思想是将秘密消息嵌入在量化后的DCT系数的最低比特位上。但对原始值为0、1的DCT系数不进行嵌入。提取秘密消息时,只需将载密图像中不等于0、I的量化DCT系数的LSB取出即可。
  • DCT系数包含一个DC系数和多个AC系数。

JSteg隐写过程:

  1. 部分解码JPEG图像,得到二进制存储的AC系数,判断该AC系数是否等于1或0,若等于则跳过该AC系数,否则,执行下一步。
  2. 判断二进制存储的AC系数的LSB是否与要嵌入的秘密信息比特相同,若相同,则不对其进行修改,否则执行下一步。
  3. 用秘密信息比特替换二进制存储的AC系数的LSB,将修改后的AC系数重新编码得到隐秘JPEG图像。

隐写软件

  • Stegdetect
    通过统计分技术评估JPEG文件的DCT频率系数的隐写工具,可以检测到通过JSteg、JPHide、OutGuess、InvisibleSecrets、F5、appendX和Camouflage等这些隐写工具隐藏的信息,并且还具有基于字典暴力破解密码方法提取通过Jphide、outguess和jsteg-shell方式嵌入的隐藏信息。
    https://github.com/abeluck/stegdetect
  • JPHS
    JPEG图像的信息隐藏软件JPHS,它是由AllanLatham开发设计实现在Windows和Linux系统平台针对有损压缩JPEG文件进行信息加密隐藏和探测提取的工具。软件里面主要包含了两个程序JPHIDE和JPSEEK。JPHIDE程序主要是实现将信息文件加密隐藏到JPEG图像功能,而JPSEEK程序主要实现从用JPHIDE程序加密隐藏得到的JPEG图像探测提取信息文件,Windows版本的JPHS里的JPHSWIN程序具有图形化操作界面且具备JPHIDE和JPSEEK的功能。

图片隐写常用工具

  • Binwalk
  • Stegsolve
  • Stegdetect
  • StegSecret
  • Steghide
  • jhide
附:
binwalk '文件路径'        #查看文件内容
binwalk -e 文件名  	   #提取文件内容

压缩文件打开后右上角带*说明该文件加密

image-20210508205823825

当文件原始大小 小于等于字节时可以反推文件内容

Python2 crc32.py reverse 0x(crc32值)

功能,而JPSEEK程序主要实现从用JPHIDE程序加密隐藏得到的JPEG图像探测提取信息文件,Windows版本的JPHS里的JPHSWIN程序具有图形化操作界面且具备JPHIDE和JPSEEK的功能。

图片隐写常用工具

  • Binwalk
  • Stegsolve
  • Stegdetect
  • StegSecret
  • Steghide
  • jhide
附:
binwalk '文件路径'        #查看文件内容
binwalk -e 文件名  	   #提取文件内容

压缩文件打开后右上角带*说明该文件加密

[外链图片转存中…(img-tMcJRga9-1624241436389)]

当文件原始大小 小于等于字节时可以反推文件内容

Python2 crc32.py reverse 0x(crc32值)

image-20210508210142841

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据提供的引用内容,我了解到你在CTF比赛中遇到了一些问题。关于CTF杂项题目中的filter,我可以给你一些介绍。 在CTF比赛中,filter通常是指一种对输入进行过滤或转换的机制。这些题目可能会要求你通过某种方式绕过或绕过过滤器来获取答案或漏洞。 常见的filter类型包括: 1. 字符串过滤器:这些过滤器会限制你可以输入的字符或字符串。你可能需要尝试不同的字符或字符组合来绕过过滤器。 2. 文件过滤器:这些过滤器会限制你可以上传或读取的文件类型。你可能需要找到一种方法来绕过文件类型检查,以上传或读取特定类型的文件。 3. 命令过滤器:这些过滤器会限制你可以执行的命令或命令参数。你可能需要找到一种方法来绕过命令过滤器,以执行特定的命令或参数。 为了解决这些题目,你可以尝试以下方法: 1. 了解过滤器的工作原理:阅读题目描述和提示,了解过滤器是如何工作的,以及它们可能会限制哪些内容。 2. 分析过滤器的漏洞:尝试找到过滤器的漏洞或绕过点。这可能需要对过滤器进行代码审计或尝试不同的输入。 3. 尝试不同的输入:尝试使用不同的字符、字符串、文件类型或命令参数来绕过过滤器。你可以尝试一些常见的绕过技巧,如URL编码、特殊字符、文件扩展名绕过等。 4. 与团队合作:如果你遇到了困难,可以与你的团队成员或其他参赛者合作,共同解决问题。他们可能有不同的思路和经验,可以帮助你找到答案。 希望这些信息对你有帮助!如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shadow丶S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值