前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTF 玩转 Crypto 月度总结

CTF 玩转 Crypto 月度总结

作者头像
信安之路
发布2018-08-08 16:05:29
2.7K0
发布2018-08-08 16:05:29
举报
文章被收录于专栏:信安之路信安之路

本文作者:jianghuxia 文章来源:我们的 RTIS CTF 雏鹰进阶之路 学习小组成立有两个多月了,本次送书活动的主力输出就是我们群里的小伙伴两个月的学习汇总,也算小组成员对这两个月的学习做出的答卷,送书作为一项小小的奖励

写下这份月结,心里还是有点小兴奋,毕竟为数不多。

两个越来,感谢老大哥们的照顾,自己学到挺多的简单的写下 Crypto 各类密码学和 misc 类流量分析的心得。菜鸡一个,不喜勿喷。

赛题玩转密码学——第一讲(DES 和 Xor ):

Level_1:XOR

1、什么是XOR?

即逻辑异或( exclusive or),又称EOR。与一般的逻辑或 OR 不同,当两两数值相同为否,而数值不同时为真。

个人理解:消消乐我们都玩过吧,,有相同的可以消除,即不存在,为 0;不相同的消不掉吧,即存在,为 1。

2、XOR的应用

简单的 xor 运用

举个例子(直接谷歌的例子):

强调一点,A xor B xor A = B XOR 0 = B,好比消消乐一样,有相同的就消掉了,剩下的都是消不掉的。

稍微难一点的 XOR 运用

密码学中,一次性密码本就运用 XOR 原理。。

还是如以上例子,字符串 ”Wiki” 的对应的 ASCII 即有 32 位(4*8),所对应的密钥也要 32 位,那我们假设需要加密更长的字符串呢,所需要的密钥是不是也要加长到与密文相同的长度呢?可以想象,这样虽然很难破解密钥,但是因为要与密文相同的长度,这样,密钥配送就显得复杂了。

稍微复杂一点的 XOR 运用

其实 XOR 运算是一种十分简单的运算。相对 CTF 而言,出题者喜欢将其与其他密码技术一同出题,例题即为此类。

题目:PragyanCTF_2018_Crypto_Xmen OR the avengers

题目总感受:

这题属于开窍的那种,但是又是开窍后快疯的那种。(CTF 真的是脑洞大呀)

解题步骤:

给了三个文件,这题还是向群里的一个老哥拿的,刚开始没有什么头绪,只知道 Xor肯定是要进行的。。后面等到比赛快结束的时候,突然看到原来有个 hint (话说大家看题目一定要仔细看题目啊),突然有点头绪,

思路是将 info_clear.txt 与 info_crypy.txt 先进行 Xor 运算试试吧,哇,得到一下内容(说实话,看着英语,有点难受):

虽然,好像嘛,大概嘛,我没看懂,但是嘛:ecb、aes、md5、base64 这些都是熟悉的字眼呀。

我们可以进一步猜测:采用了 AES 的 ECB 模式(别急,每周一更,总会讲到 AES),这个不懂没关系,你只要知道采用了 AES 的 ECB 模式就行了。

那么 md5 和 base64 哪里用到了呢。聪明的你应该想到了:不是还有个 superheroes_group_info_crypt.txt,打开一看,嗯~~,可以 base64。到这一步,可以说一切按思路顺利进行。

那么 MD5 呢,这里真的是要疯了,就是没想到 MD5 什么内容,12345 试了,this 试了,都不行,前后搞了 1 个多小时,后面终于试出来正确步骤:原来是将 Xor 得到的内容 md5 一下,以十六进制数据字符串值导出编码得出 key。(估摸着那个 12345 就是误导人来的,正确的 this,是 Xor 得到的内容)

然后顺着思路下去,将 key 作为 AES 的密钥,再以 ECB 模式,解密 superheroes_group_info_crypt.txt 文本内容 base64 后的字符串,即可得到答案。

相关链接:

逻辑异或:

https://www.wikiwand.com/zh-hans/%E9%80%BB%E8%BE%91%E5%BC%82%E6%88%96#/%E9%A1%9E%E4%BC%BC%E7%AC%A6%E8%99%9F

Level_2:DES

1、什么是 DES?

Data Encryption Standard(数据加密标准)是一种对称密钥加密块密码演算法( FIPS 46-3)。

2、DES 的密钥长度

DES 是一种将 64bit 的明文加密成 64bit 的密文的对称密码算法,密匙长度是 64bit,但由于每隔 7bit 会设置一个用于错误检查的 bit,实质上其密钥长度是 56bit。(密钥长度这一点具有争论,了解下即可)

3、DES的结构

DES 的基本结构是由 Horst Feistel 设计的,因此也称为 Feistel 网络(重点),又称 Feistel 结构或 Feistel 密码(这一点也建议伙伴们自行深究 Feistel 网络,因为该结构在其他很多密码算法中也有应用)。而 DES 是一种 16 轮循环的 Feistal 网络。(这边有个很重要点,一定需要详细了解 Feistel 结构中轮函数的运用。

4、DES的加密和解密原理

DES 以其密匙长度 64bit 的明文为一个单位来进行加密的,正如你所想的,DES 即为分组密码的一种。其又为对称密码,所以其加密和解密的表示图如下(画的丑了点)。

DES 加密:

DES 解密:

5、DES的破解

DES 在 20 世纪末,随着计算机的进步,DES 的安全性降低不少,暴力破解已不是问题。

除暴力破解外,还有两种分析方式:差分分析(微分密码分析)和线性分析。但差分分析与线性分析都有一个前提:密码破译者可以选择任意明文并得到其加密的结果,这种方式称为选择明文攻击(Chosen Plaintext Attack , CPA)

6、DES 的密码学特性(CTF 比赛中会 manman 考到)

(1) DES 有补码特性。

(2) DES 有四个所谓的弱密钥。若使用弱密钥,加密和解密有相同的效果。

(3) DES 有 6 对半弱密钥。若使用某个半弱密钥

进行加密,则相当于使用其对应的半弱密钥

进行解密:

题目:SharifCTF_Crypto_DES:

考点:DES 的弱密钥

解题过程:

拿到这个题目,有点懵逼。。。英文没学好,后面一个一个翻译过去,大体意思是:所有纯文本在K下进行加密,从而产生相应的密码文本。求 K,而 K 是一个 64 位的十六进制值,没有 0x 前缀。(K 包含奇偶校验位。)翻看给的

,嗯~~~,妈耶,好多条,不懂了。。百度谷歌一番,咦,有点符合 DES 弱密码耶,要不找找有没相同的值,看它有无可能密钥和私钥重复。。。。嗯,不就是那么多行嘛,python 脚本上。嗯~,发现一波。

即:f084cae61e607b05 -> ef17ae3946ebae4c

然后呢。。。,假如真的是 DES 弱密钥,该怎么弄呢? Mmp,又是谷歌。。。。。。**

翻译:

嗯~~~~。由于题目中我们发现子密钥 f084cae61e607b05 -> ef17ae3946ebae4c 重复了,并且 DES 是 Feistel 网络,而 Feistel 网络具有轮函数的特性(如果你看了 Feistel 网络,但是不知道轮函数,请重新仔细查阅资料),所以我们可以根据这个性质,进行解题,写个 python 脚本, DES 解密:

所得中字母改为大写即为所求:SharifCTF{E0E0E0E0F1F1F1F1}

本题相关资料:

DES 密码:

https://www.wikiwand.com/zh-hans/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%99%E6%BA%96

弱密码:

https://www.wikiwand.com/en/Weak_key

赛题玩转 wireshark ——第一讲:

参加铁三的我一直在学习数据分析赛的内容,学习到很多新姿势,碰巧闲着无聊看了看比赛,发现有道题目很有意思,关于网络数据包分析的一道题。

SwampCTF 2018

https://swampctf.com/

题目:Orcish

题目消息:

观察题目,大体是需要我们分析 data.pcp 流量包,找到隐藏的信息(flag)

首先,拿到这种题,我们需要使用一些软件分析流量包,菜鸡(我)只会点 wireshark,我用 wireshark 打开它。

打开数据包,还好,不多不少。

这里简单讲下如何分析数据包,新手们常会遇到这样的问题,打开软件,直接扎头下去分析。然后,这个看不懂,那个看不懂,后面上翻翻下翻翻,好难啊,就没然后了。

这种思路本质上没错,但是分析方法的差异,会让分析者感受差距巨大,有些人开开心心,时而感叹数据包的神奇,而有的人闷闷不乐,看不懂不是问题,是面对偌大的数据,不知从何下手。毕竟这只是一道赛题,我只能讲讲我自己的做题经验,希望可以帮助大家理解,并不能手把手,像书一样讲的那么全面。。

wireshark 有一个统计的工具栏,这是个可以大大简化工程量的工具,让你对整个数据包的整个走向有个直观的认知,统计工具可以给出一些关于流量的信息。就拿这道题来说,鼠标划上滑下的不仅效率低下,还非常打击做题感,浪费精力。

而我的做法是,通常从统计这个功能那里开始查看对话和端口,分析协议。如果有HTTP流量,我会利用 wireshark 的导出对象功能,查看是否存在可疑的数据文本,相对应的,我们可以通过 http 的导出对象,大体的直观感受数据包的数据流向,查看请求。

再获得这些大体印象之后,我们可以通过鼠标滚动试着快速浏览数据包,并尝试查看是否有任何异常情况(这种方法面对大型数据包基本无效,只能对 ctf 的比赛有些帮助,原因很简单:几百 MB 大型的流量包,不存在快速浏览数据包这种可能(数据的流向是非常不稳定且迅速的),我们只能通过显示过滤器等其他的一些过滤方法过滤出我们想要的东西)

再进行上诉的想法和操作。我发现它的 ipv4 有大量的 tcp 占四分之三,udp 极少,icmp 占四分之一,如下图:

眼前一亮,这里有一个非常异常的地方:icmp 的数据包竟然占了总体的四分之一。熟悉 icmp 的同学,应该知道,这是不正常的。

icmp 又称 Internet 控制报文协议(Internet Control Message Protocol),主要是一种面向无连接的协议,用于传输出错报告控制信息,作用于网络层。其中,我们常常用到的 ping 命令(ping 是用来检测一个设备的可连接性),icmp 数据包在其中显出的作用是非常之大的。(这里简述,如有其他兴趣可与我共同探讨)

在其中,icmp 数据包通常知具有 echo 请求与响应、路由跟踪的功能,icmp 不会目无目的的在这个数据包中占据这么大的数据空间,所以,我可以断定问题出现在 icmp 数据包中。

很多,的确这个时候,我懵逼了,我可以确认 icmp 包存在问题但是我不知从何下手,我尝试观察 imcp 数据包的 Length,以及每个分组的详细信息。

我们可以尝试观看第一个分组(分组编号 6971 ):

我们可以出从中知道,源地址 ip 及网卡的信息,目的地址 ip 及网卡的信息,我们可以知道这个 icmp 包的区段类型是 0,代码是 0,表示这是一个不知所用的 icmp 数据包。。。。嗯~,不知所用,发现了吗,其中肯定有秘密。

继续尝试查看接下来的分组,我们可以发现 6978 至 6986 分组中间大体都是 echo 的响应分组。

但是这些,我还是没啥思路,只能去翻翻他的数据包字节处,嗯!大发现!当我尝试去看把前五个分组,我发现了常见的 gif 文件头

一下是前六个分组的数据包字节截图:

发现了吗,这前六个分组数据 68 至 70 处十六进制对应的 ASCII 码值拼接成字符串是 GIF89a(这是 gif 文件头)

接下来,就是如何在这么这么这么多的数据包分组中提取每个 icmp 分组 68 至 70 处十六进制对应的 ASCII 码值,把它们组合成一个 gif 文件。

答案不言而喻,需要脚本自动化。(人生苦短,我用 python~-~)

脚本如下(需要引入 scapy 的库,还需要注意控制权限):

这里需要强调一点,这里的判断条件,是因为在分析数据包的过程中,我发现没有这个判断,得到的 gif 文件是损坏的。后面想想,原因是我们需要的必须是得通过 10.136.255.127 作为源 ip 发出的,但 icmp 数据包存在源 ip 44.58.44.13 响应的分组,这会影响得到最后的文件的完整度,这也侧面突出文件内部组成的严谨性。

打开得到的 gif 文件,flag 映入眼帘

相比常见的 CTF 数据包类型大多是 http、tcp、ssll 私钥解密、usb 以及其他无线设备协议等流量数据包的题目,我觉得在这次解题分析过程中,我学习了许多 icmp 的知识,相对于喜欢 ctf,不是为了 ctf 而 ctf,而是通过 ctf 去更多实践学习。

赛题玩转 wireshark ——第二讲:

很神奇!作为参赛铁三的参赛队员之一,看庄周小姐姐的直播课,学到了不少。看了诸葛大大的书,学习了很多新知识。这周国外的 CTF 比赛,又发现一道非常有意思的题目,谈谈分享。。

Sunshinectf

https://sunshinectf.org/

题目:Data Exfil

给了个压缩包,解压下,有个 pcap 文件夹

文件夹内含一下文件:

题目分析

,好像。。。。。第一次遇到给了流量包还给了日志的题目。。。心里突然咯噔----会不会很难呀

wireshark 打开

包还是挺多的嘛。。。。。老方法。。。菜单栏统计分析一波。。。

这。。。。可以发现 IPV4 协议的载体有 tcp 也有 udp,大体各占一半吧,嗯~

嗯。。当然还有很多其他消息。。不一一例举了。。。

嗯~ udp 走起,分析一波。。ctf 嘛,,,脑洞大点咯。。。(正常情况下,ctf 比赛的数据包主要都是 TCP 作为传输层协议,udp 嘛,个人观点,很少见)

分析一波咯。。。。真的建议大家去看看诸葛大大的 wireshark 数据包分析实战。。。。学到的很多。。

往下翻翻,大体就是浏览了贼多的网页,google、youtobe、facebook 等等等(前方高能!!!!!)

我不懂我真的不懂。。。

真的我只是浏览了一遍,就发现秘密在这个不详流量包的下面一点点。

看不清。。。。没事,我放大点。

嗯~~~熟悉的 504b0304 开头。。。。。。(以前做 zip 题目多了,对 png、jpg 等文件头已经熟的炉火纯青,特敏感)

接下来咋办,追踪一下 udp 流,复制原始数据,放 winhex 里呗。。。

强调下哈。。winhex 里写入和粘贴的方式都是 ASCII Hex 格式

然后接着重复操作几次,一次写入,得到一下结果

咯。。flag 出来啦。。这道题如果从解题上来看,我们任务完成了。。。。但是,热爱学习的我,,还是作死般的去踩坑了。。。

疯狂踩坑:

坑点一:udp 真的是传输不稳定的协议。。。。

当我在 wireshark 里,复制原始数据,写入 winhex 里的时候。。。我 tm....我才意识到啥叫 UDP 传输是不稳定的。。。

起初我的想法是,写入 winhex 里的数据最后肯定可以还原成一个数据包。但当我还原到以下步骤的时候,天真了。

从此步开始,我还是按照下图的阴影面积的 16 进制复制到 winhex 里。。

突然,发现,粘贴不了到 winhex,失败了。然后我一直再找原因。。。这一找就是一个多小时。。

后面发现是不符合十六进制转化为 ascii 的长度,于是我就把前面的7加上,得到十六进制字符串:

7865742e747874504b0506000000000100010038000000460000000000

写入 winhex 得到下图:

观察一番。。好像没问题,zip 文件的格式三个标志性头都有了。。。

保存。。。。打开,,,,文件损坏。。。

一脸懵逼。。。

继续观察,,,尼玛,多出个 r

把 x 所占的字节删除,保存,打开,嗯,没错。得到了完整的压缩包。

那这么说来了,得到的十六进制字符串应该是:

65742e747874504b0506000000000100010038000000460000000000

也就是说,要把之前的字符 7 和 8 给去掉。。。。尼玛

赛题玩转 wireshark ——第三讲:

这次分享的题目是道老题目,主要是想分享 wireshark 与其他知识点结合的思路。ISCC2017 的题目,writeup 网上也有了,但是为啥选择它呢,因为之前参加 ISCC2017 的比赛,这题没做出来,那时候还不知道什么叫 RSA,也不知道啥叫流量包。。那时候对流量包的剖析方法只有 kali 虚拟机下的 binwalk -eforemost -T,过了这么久,回忆一下当时的解题思路,再结合下现在的,分享给大家。

ISCC2017

题目:说我作弊,需要证据

题目附件就一个 Basic-06.zip, 解压后得到 Basic-06.pcapng

老方法,协议分级分析,可以看到均是 TCP 协议的数据分组

接着顺着思路查看 TCP 中 Data 的内容,,我们可以过滤一下。。

这里以第一个 Data 包为例,我们可以“显示分组字节”查看其中内容

尝试 base64 解码。。即可看到

SEQ 明显就是字符顺序

SIG 实际上是 RSA 的数字签名。

DATA 是 Alice 发送给 Bob 的密文,这怎么看出来的呢。。。题目有提示 Alice 和 Bob 的 ip。

所以我们必须先解出私钥来解密 DATA。

我们接着尝试分析一下数据分组,发现都是类似的内容,我们可以再追踪 TCP 流看看

我们先把这些内容复制到 hahaha.txt 文件中

做到这里,大概数据包能分析到的内容就这么多。剩下的线索在哪里呢?

仔细看看题目吧。。

嗯,根据题目,我们可以简单分析下我们得到的东西,指数 e = 0×10001(65537)、Alice 和 Bob 各自的 RSA 密钥,也就是我们常说的私钥。

(这里如果没有了解 RSA 的伙伴,请自行找找关于 RSA 的基本组成原理,这点至关重要。)

得到了两个人各自的私钥,我们就得到了两个人各自的 N,我们就可以解 N 求出素数因子 p 和 q。

对 N 的分解,我们可以通过这个 http://factordb.com/ 在线分解,也可以通过 yafu 软件分解。

这里使用 http://factordb.com/ 分解。

n1:1696206139052948924304948333474767<34> = 38456719616722997<17> · 44106885765559411<17>

n2:3104649130901425335933838103517383<34> = 49662237675630289<17> · 62515288803124247<17>

即:

p1= 38456719616722997 ,q1=44106885765559411

p2= 49662237675630289 ,p2= 62515288803124247

相对的,我们可以通过 e,p,q 去求得 d。(如果到这步看不懂的话,rsa 解密的基本原理去了解下,本文不在说明)

其次我们可以求得 rsa 的私钥。。。(涉及到 python 的 pwn 模块其中的 RSA 部分)

好了,到了这边思路很明确了。。。

接下来,我们要将 hahaha.txt 一大堆的 base64 解密一下。,当然,,需要脚本自动化了。

下面是逐行解密脚本:

我将 hahaha.txt 里面的所有内容 base64 解密内容存入了 hahaha_base64.txt 中

好,到这里我们先缓缓。。。来我们再看看 SEQ 的值。。。发现了吗。乱序,所以接下来这一步我们需要重新排序 SEQ

看看 hahaha_sort.txt 的内容

这样我们就顺序排出来了把

最后我们需要用刚刚解出来的东西去解密 DATA 数据,SIG 签名

(这里是用 Alice 给 Bob 的东西,所以用 Bob 的私钥解密 DATA,用 Alice 的私钥解密签名)

做到这步。。。我也是很无语。。。。正确的 flag 是 flag{n0th1ng_t0_533_h3r3_m0v3_0n}

找了一下问题。。。还是没找到。。。不过大体的思路跟大家讲了,我去继续摸索代码问题了,找找错误。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 赛题玩转密码学——第一讲(DES 和 Xor ):
  • 赛题玩转 wireshark ——第一讲:
  • 赛题玩转 wireshark ——第二讲:
  • 赛题玩转 wireshark ——第三讲:
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档