进制
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
在CTF比赛中,常见进制为二进制、八进制、十进制、十六进制。
常规考点 进制转换
举例说明:当遇到多个进制组合编码后,可利用python或其他脚本语言编写脚本进行解码,也可手搓(233333)。
例题为2018年科来杯的一道misc题
"d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e"
编写脚本后解码,可得到flag。
二进制
当得到一堆01数据时,可考虑是否为二进制编码,确认为是二进制编码后,可将对应编码转换成十六进制编码。
利用工具后我们可以发现,出现rar的字段,那么可以判断是压缩包文件,我们将二进制数据转换为压缩包文件形式。
运行脚本,在本地生成压缩包文件。
得到压缩包文件。
打开压缩包是一个完整的图片。
那么说点和进制无关的内容
再介绍一下同为01数据,但并非二进制编码的题型(方便对比)
隐写 IDAT考点
当得到一串01数据
“1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011”
判断长度为625 可以想到625开根是25 是一个正方形的形状。
可编写脚本进行解密,得到图片。
二进制转text
得到一串二进制数据后,可转成text。
0110011001101100011000010110011101111011001100100011000100110010001100110011001001100110001100100011100100110111011000010011010100110111011000010011010101100001001101110011010000110011001110000011100100110100011000010011000001100101001101000110000100111000001100000011000101100110011000110011001101111101
二进制转摩斯电码
得到一串二进制数据后,可转text,出现”.”,” -“,判断为摩斯电码,进行解密。
八进制、十进制、十六进制参考多进制混合及上述考点进行变通。
BASE家族
BASE64、BASE58、BASE32、BASE16
BASE64
64个可打印字符,A~Z、a~z、0~9、+、/,64个可打印字符,“=”符号用作后缀填充
BASE58
相比Base64,Base58不使用数字”0″,字母大写”O”,字母大写”I”,和字母小写”l”,以及”+”和”/”符号。
BASE32
32个可打印字符,A~Z、2~7、32个可打印字符,“=”符号用作后缀填充
BASE16
16个可打印字符,A~F、0-9,16个可打印字符
结合下面的图片,可了解BASE家族之间的联系和区别。
BASE64异或
该题为2018年护网杯 misc easy-xor
根据题目可判断为需要xor
得到一串编码“AAoHAR1UIFBSJFFQU1AjUVEjVidWUVJVJVZUIyUnI18jVFNXVRs” 根据上述特征,可发现是base64编码,编写脚本对此字符串进行xor。
BASE64编码转图片
得到一串BASE64编码,编写脚本将字符串转码成图片。
BASE家族合集
该题是南邮CTF平台的一道misc题
得到一串BASE编码,编写脚本将字符串解码。
BASE64套娃
得到一串BASE64编码,编写脚本将字符串解码。
图片码
条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。
该题中的条形码 需要用PS或类似工具 将条形码各竖列的条水平补全 即可得到flag。
二维码
维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
该题为bugku平台普通的二维码
扫描二维码 回显如下所示
使用HexFrame打开,发现结尾处有类似进制的字符串。
发现没有大于8的数字,初步判定为八进制,将字符串数据 按三个分隔。
得到如下数据
146 154 141 147 173 110 141 166 145 137 171 060 125 137 120 171 137 163 143 162 151 160 164 137 117 164 143 137 124 157 137 124 145 156 137 101 163 143 151 151 041 175
将八进制数据转换为ascii码,即可得到flag。
二维码反色
有一部分二维码题目,反色后 无法通过QR或者其他工具进行扫描,qq或微信有时候可以。
将二维码进行反色,得到新的二维码进行扫描。
二维码修补
当二维码三个标识受到破坏时,可利用PS等工具进行修复。
修复完成后,即可进行二维码扫描。
PDF417
PDF417条码是一种高密度、高信息含量的便携式数据文件,是实现**及卡片等大容量、高可靠性信息自动存储、携带并可用机器自动识读的理想手段。
图片码PDF417
首先得到一个飞机票图片
二维码修复 就不做操作了 参考上面的介绍。
下面的图片码为PDF417码,我们将下面的图片码进行在线扫描,发现没有数据。
将图片码进行反色处理。
将反色后的图片码进行在线扫描,出现了key的数据。
其他编码
URL编码
是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器。
URL编码的特征为%,所有的URL编码都是由%XX组成的。
该题为南邮平台 php是世界上最好的语言
根据代码可知,需要编码两次,因为浏览器会转换一次。
传参的hackerDJ 将h转换为URL编码为%68 可将%转换为%25
将%2568替代h 传参 %2568ackerDJ传入 可得flag。
shellcode
shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。
当获取一段数据
PYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJIXYJKMK9ICD6DJT019BOB47P1YYE4LK2Q6PLK2VDLLKD6ELLKQVDHLK3N10LKWFGH0OR8SEJS1IS1N1KOM13PLKRLFD7TLKW5WLLK0TGXRXS1ZJLK1ZTXLKPZWPUQJKKS7D1YLKFTLK5QZN6QKOP1IPKLNLK49PCDC7YQ8O4MEQYWJKZTWK3L7T7X2UM1LK1JFDS1ZK3VLKDL0KLKPZ5LUQZKLK**LKC1JHK9G47TELU1O3X238GY8TLIKULIYR58LNPNTNZL62M8MOKOKOKOMY0E34OK3N9HKRRSMWEL14F2ZHLNKOKOKOLIW53858RL2LQ0G1BHWCFRVN54CXD5T3E5BRK8QL6DTJK9M60VKOPUETLIYRF0OKI8OR0MOLLG5LVD62ZHE1KOKOKOE8BVCURR1HU8WPCCBED22HQ03TRND358RF42BORMCX2KU5CIQ03XCDRHSU10FQIKMXQL7TDWK9M3RHF810Q0WPBH3UU26Q522HP7U1P9SRU8GBWI56E12H6S07SSP1SXRE5153P9CXVV54CV56SX3S6TFY3R587FFYWFWGVQ9YLHPLGTQ0K9M101N2V20S61QBKON0FQIP0PKOPUTHAA
使用shellcodeexec
ascii
ASCII 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,到目前为止共定义了128个字符。
0-31、127为ascii控制字符,32-126为ascii显示字符。
测试链接:https://www.sojson.com/ascii.html
\u8fd9\u662f\u4e00\u4e2a\u4f8b\u5***\u007e\u000a\u0066\u006c\u0061\u0067\u007b\u0074\u0069\u0064\u0065\u0073\u0065\u0063\u007d
Quoted-printable
可打印字符引用编码”、“使用可打印字符的编码”,我们收邮件,查看信件原始信息,经常会看到这种类型的编码。
一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值。
测试链接:http://web.chacuo.net/charsetquotedprintable
=3Cmeta=20name=3D=22description=22=20flag=3D=22tidesec=22=20=2F=3E=0A
UUENCODE
uuencode是将二进制文件转换为文本文件的过程,转换后的文件可以通过纯文本e-mail进行传输,在接收方对该文件进行uudecode,即将其转换为初始的二进制文件。
测试链接:http://web.chacuo.net/charsetuuencode
6OMFX]L#]U],*9FQA9WMT:61E<V5C?0``
XXencode
XXencode,也是一个二进制字符转换为普通打印字符方法。跟UUencode编码原理方法很相似,唯独不同的是可打印字符不同。
测试链接:http://tool.chinaz.com/Tools/Unicode.aspx
Kjhasxg1xpxA8NalVNrhoOKFZQqJXTE++
Unicode
Unicode是计算机科学领域里的一项业界标准,包括字符集、编码方案等。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
测试链接:http://tool.chinaz.com/Tools/Unicode.aspx
这是一个例子 flag{tidesec}
部分编码特征总结
混淆和加密
php混淆加密
测试链接:https://www.toolfk.com/tool-convert-php
有时候可以直接进行代码审计,有时候就要运行调试
css/js混淆加密
测试链接:http://tool.chinaz.com/js.aspx
VBScript.Encode混淆加密
VBScript.Encode解码器
测试链接:http://www.cftea.com/tools/online/vbscriptDecode/
PPENCODE
Perl -> 英文字母(无特殊符号)
把Perl代码转换成只有英文字母的字符串
rrencode
Ruby -> 特殊符号
把ruby代码全部转换成符号
jjencode/aaencode
Javascript -> 颜文字
JSfuck
用6 个字符 ( ) [ ] !+ 来对JavaScript进行编码
测试链接:https://www.bugku.com/tools/jsfuck/
jother
密文为8个字符! + ( ) [ ] { }
在浏览器中 console执行即可
brainfuck
密文由+.<>[]’ && ‘!.?或者’+-.<>[]’等构成
Ook
密文由(Ook、Ook?、Ook!)等构成
Npiet
特点文档是像素点的图片
测试链接:https://www.bertnase.de/npiet/npiet-execute.php
总结
本篇主要介绍内容为CTF-MISC 编码的相关内容,借此机会梳理和汇总几年比赛遇到的题型和知识点,欢迎各位表哥提出建议,欢迎各位师傅交流指正。
关注我们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。
想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:
来源:freebuf.com 2020-03-04 10:15:28 by: 纯白posoki
请登录后发表评论
注册