|
[网络安全] 四十一.WHUCTF (4)三道隐写基础题目(文字解密、图片解密、佛语解码)原创 Eastmount 娜璋AI安全之家 昨天
收录于话题
#安全系列89
#Web渗透42
前文分享了WHUCTF部分Web题目,包括代码审计、文件包含、过滤绕过、SQL注入。这篇文章将讲解隐写Misc解题思路,详细分享文字解密、图片解密和佛语解码。基础性CTF文章,希望您喜欢。
第一次参加CTF,还是能学到很多东西。下面分享两道我完成的WEB类型题目的解题过程,希望对您有所帮助。非常有意思的文章,作为在线笔记,希望对入门的博友们有帮助!最后感谢武汉大学,感谢这些大佬和师傅们(尤其出题和解题的老师们)~
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!
接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~
推荐前文:网络安全自学篇系列-100篇
https://blog.csdn.net/eastmount/category_9183790.html
文章目录:
- 一.Misc-版权保护
1.题目描述
2.解题思路
- 二.Misc-过早了吗
1.题目描述
2.解题思路
- 三.Misc-佛系青年BingGe
1.题目描述
2.解题思路
- 四.总结
作者的github资源:
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。网站目前可以访问,后续应该会关闭,初学者可以试试,但切勿破坏。
一.Misc-版权保护
1.题目描述该题目解压之后包括两个文件,题目描述为“小p发现自己的文章被别人复制粘贴了,感到很气愤,于是他偷偷地将flag藏到了文章中,你能找到flag吗?格式 whuctf{}”。
打开内容如下,由很多“我最帅”组成。这该如何获取Flag呢?
2.解题思路查看“题目.txt”看到很多重复的“我最帅”,结合题目版权保护猜测其主要考察 —— 宽字节隐写,其中零宽度字符用来作为一种水印参考ga1axy大佬的文章。
(1) 我们通过CyberChef显示文字Unicode编码内容。
CyberChef是一个简单、直观的Web应用程序,用于在Web浏览器中执行各种网络操作。这些操作包括简单的编码(如XOR或Base64)、更复杂的加密(如AES、DES和Blowfish)、创建二进制文件和hexdump、数据的压缩和解压缩、计算散列和校验和、IPv6和X.509解析、更改字符编码等。GitHub链接:
- https://github.com/gchq/CyberChef
打开CyberChef主页显示如下图所示,比如对“Hello”进行MD5加密。
通常零宽度字符在一般的文本编辑器中是不可见的,比如:Hello,我们用CyberChef查看一下即可发现其中的奥秘。
(2) 如果我们直接用kali vim打开也可以看到隐藏的信息,并且值字与字之间相隔8个字符,且仅有 <200d> 和 <200c> 形式。在宽字节隐写下,\u200d代表0 ,\u200c代表1,它是不是能转换成二进制呢?
可以看到里面只有 <200d> 和 <200c> 这两种零宽度字符,稍微调整一下界面如下图所示:
(3) 编写Python脚本提取“我最帅”中的内容。如果遇到“\u200d”则显示0,遇到“\u200c”则显示1,并将结果内容当作比特串转换为ascii后显示。
- #coding=utf8
- import binascii
- f = open('题目.txt','r',encoding='utf8')
- lines = f.readline()
- f.close()
- #转换为二进制0和1
- i = 0
- content = ''
- for x in lines:
- if x == '\u200d':
- content += '0'
- elif x == '\u200c':
- content += '1'
- #i=i+1
- print("输出二进制:")
- print(content)
- #--------------------------------------------------------------------------------------
- #base = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f]
- base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('a'),ord('a')+6)]
- #print(base)
- #二进制 to 十进制: int(str,n=10)
- def bin2dec(string_num):
- return str(int(string_num, 2))
- #十进制 to 十六进制: hex()
- def dec2hex(string_num):
- num = int(string_num)
- mid = []
- if num == 0:
- return '0'
- while True:
- if num == 0: break
- num,rem = divmod(num, 16)
- mid.append(base[rem])
- return ''.join([str(x) for x in mid[::-1]])
- #二进制 to 十六进制: hex(int(str,2))
- def bin2hex(string_num):
- return dec2hex(bin2dec(string_num))
- #--------------------------------------------------------------------------------------
- #转换为十六进制
- k = 0
- result = ''
- num = ''
- while k < len(content):
- if k!=0 and (k+1) % 4 == 0:
- num += content[k]
- result += bin2hex(num) #二进制转十六进制
- #print(num)
- #print(bin2hex(num),'\n')
- num = ''
- else:
- num += content[k]
- k += 1
- print("\n输出十六进制:")
- print(result)
- #提取flag
- result = result + '0'
- flag = binascii.unhexlify(result)
- print("\n输出flag:")
- print(flag)
复制代码
输出结果如下图所示,whuctf结果为{Y0u_kn0w_h0w_t0_pr0tect111}。
同时,我们可以通过在线网站将0和1二进制直接转换为十六进制,然后调用binascii.unhexlify函数即可获取flag。
补充其他师傅的Python脚本方法:
- with open( '题目.txt', 'rb') as f:
- str = f.read()
- print(str)
- length = len(str)
- i = 0
- s = 0
- sum = 0
- while i < length:
- if (int(str[i]) == 226 and int(str[i+1]) == 128 and int(str[i+2]) == 141):
- sum = sum*2
- s = s+1
- if s % 8 == 0:
- print(chr(sum), end='')
- sum = 0
- if (int(str[i]) == 226 and int(str[i+1]) == 128 and int(str[i+2]) == 140):
- sum = sum*2
- sum = sum+1
- s = s+1
- if s % 8 == 0:
- print(chr(sum), end='')
- sum = 0
- i = i+3
复制代码
最后补充武大CTF师傅的WP代码和参考文献,确实跟他们学到很多,推荐大家学习。
- 武汉大学CTF - PeiQi师傅
- 2020_WHUCTF_Writeup - Ly-sec-l师傅
- http://www.ga1axy.top/index.php/archives/36/#版权保护
- whuctf.md - prontosil师傅
- https://github.com/eastmountyxz/CTF-RE
二.Misc-过早了吗1.题目描述该题目提供的是一张早餐图片“yummy.jpeg”,同时提示信息为“一日之计在于晨,你过早了吗?这是我的早餐,有我喜欢的食物,有你喜欢的flag”。
看到这个题肯定想到是图片隐写,图片打开如下图所示,建议读者去我Github链接下载。
- https://github.com/eastmountyxz/CTF-RE
2.解题思路之前做过图片隐写的CTF题目,我的第一想法就是能否用Stegsolve工具获取二维码,然后扫描提取flag,如下图所示。哈哈,还是自己太菜了,想得太简单了~
但这道题目,并没有反映。
真正的解决方法是通过另一个工具steghide解出隐藏的内容。
Steghide是一款开源的隐写术软件,它可以让你在一张图片或者音频文件中隐藏你的秘密信息,而且你不会注意到图片或音频文件发生了任何的改变。Steghide是一个命令行软件,其安装语句为“apt-get install steghide”,大家在第一次使用时可以调用steghide --help查看帮助信息。
第一步,在Linux系统中安装steghide。
sudo apt-get install steghide
第二步,在steghide中输入如下命令获取信息。
通过steghide提取出c.txt,如下所示。
yxz@DESKTOP-KUPRQ86:~$ steghide extract -sf yummy.jpegEnter passphrase:wrote extracted data to "c.txt".yxz@DESKTOP-KUPRQ86:~$
打开c.txt文件如下:
ABAAABAABBABAAABAABAABAAAABBAAABBBBABBBABAAABBAABBAAAAAABBABBAABBBAABBABBBAAABAAAAAAABAABBAAAABBAAABAABAAAAAAAABABAAABABAAAAABAABABAABB
第三步,仅有A和B组成,这是培根(Bacon)密码,然后对其进行解密。
培根密码实际上就是一种替换密码,根据所给表一一对应转换即可加密解密 。
我们通过在线解密网址进行解密,网址为:https://tool.bugku.com/peigen/
最终的flag值为:
- whuctf{ITISIMPORTANTTOEATBREAKFAST}
第四步,补充知识。
如果我们想在“mm.jpg”图片中隐藏一段密码。
密码为“secret.txt”中的内容“CSDN eastmount”,如下图所示:
使用如下命令即可实现:
steghide embed -cf [图片文件载体] -ef [待隐藏文件]steghide embed -cf mm.jpg -ef secret.txt
此时我们用Notepad++等软件时候看不到隐藏信息的,如果想查看,则要输入如下命令:
steghide info mm.jpg
为了便于区分,我们将隐藏信息后的图片移动到另一个文件夹内解压,然后获取加密的文件,使用命令如下:
steghide extract -sf mm.jpg
最终提取“secret.txt”文件并获取密码“CSDN eastmount”。
是不是非常有意思,O(∩_∩)O
参考及推荐文章:
- WHUCTF官方WP
- http://www.ga1axy.top/index.php/archives/36/#过早了吗 - ga1axy师傅
- [安全工具] Steghide:Linux下流行命令行隐写工具-鸾林居士
三.Misc-佛系青年BingGe1.题目描述该题目提供的是一段描述,我看见我的朋友BingGe坐在信部网球场的栅栏边上看一本佛经,我很好奇,也过去看,只见上面写着:
佛曰:般羅穆僧冥神大侄所隸奢尼哆恐侄大藐若故曳咒室呐阿竟諳他缽悉爍諦哆咒豆苦缽尼帝所冥等上哆瑟俱薩諸諳伊冥特諳實怯他罰不參亦皤有婆僧藝俱羯怯至皤滅知真哆訶亦能怯瑟梵陀奢知呼故梵夢死有皤能薩曰俱穆勝竟怯明奢參世缽佛皤羯瑟奢孕梵逝楞呐醯故奢想謹提諦盡侄阿哆利俱吉罰老謹涅神能皤集實輸奢薩奢數哆波者俱勝俱所遠盡呐倒利闍盧諦罰薩梵曰度提大諦哆穆輸醯怯參侄諸娑梵伽知勝穆伊顛冥參道冥有
看到这个题知道是考察文字解密,比如之前分享过“王”字解密,那么这道题怎么做呢?
2.解题思路在CTF Crypto中,解码佛语是常见题型。
第一步,我们通过在线网站解密佛语。
- http://www.keyfc.net/bbs/tools/tudoucode.aspx
在网站中输入内容并点击“参悟佛所言的真意”,解码获取数据为:
767566536773bf1ef643676363676784e1d015847635575637560ff4f41d
注意:这里佛语前边要(中文冒号)加上“佛曰:” 或者 “如是我闻:”。同理,如果我们需要对字符串进行加密,如“flag{eastmount}”,则点击“听佛说宇宙的真谛”即可。
第二步,题目提醒“栅栏边上”,于是联想栅栏密码,多次尝试栅栏解密+hex to ascii,发现为6时能得到flag。
栅栏密码是一种置换密码。例如密文:TEOGSDYUTAENNHLNETAMSHVAED
解密过程:先将密文分为两行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话:THE LONGEST DAY MUST HAVE AN END
通过在线网站解密得到结果:
7768756374667b6e305f315f616d5f6e30745f615f36756464683173747d
- https://www.qqxiuzi.cn/bianma/zhalanmima.php
第三步,进行16进制解密获取flag。
- import binascii
- num = '7768756374667b6e305f315f616d5f6e30745f615f36756464683173747d'
- flag = binascii.unhexlify(num)
- print(flag)
- #'whuctf{n0_1_am_n0t_a_6uddh1st}'
复制代码
参考及推荐文章:
- WHUCTF官方WP
- 2020_WHUCTF_Writeup - Ly-sec-l师傅
四.总结写到这里,这篇文章就介绍完毕,希望对您有所帮助。学安全近一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。
虽然非常忙,但每当看到博友的提问或交流都不忍拒绝,其实自己真的快忙疯了。看到这些大山走出去的学生,大一新生,求职研究生或遇到问题的朋友,都想帮他们一把,因为我们也是在很多人的帮助下成长起来的。而看到很多私活、广告、合作、出书之类的私信,我都会拒绝或不回时光飞逝,还有太多知识要去学习,太多陪伴要去争取,太多文字要去记录,且行且珍惜,最爱的人,晚安。
深知自己很菜,得努力前行。2020年5月第一次参加CTF比赛写的。这半年来,原创博客越来越少,希望自己能在博士路上不断前行,多读论文,多写论文,多学新知识。加油!也祝所有在读博士都学有所成,勿忘来时的路,砥砺前行。最后还是那句话,人生路上,好好享受陪伴家人的日子,爱你们~
|
|