蓝鲸安全CTF打卡题——第一期隐写术
前言
渣渣一枚,萌新一个,会划水,会喊六六
上一篇文章:蓝鲸安全CTF打卡题——第一期密码学
个人博客:https://www.cnblogs.com/lxz-1263030049/
本文首发先知社区:蓝鲸安全CTF打卡题——第一期隐写术
再过几天就是中秋节了,我打算尽自己最大的能力把蓝鲸安全平台上面的打卡题目的writeup
整理出来。
有什么错误的地方 希望各位大佬指正(谢谢Orz)
一:雨中龙猫
知识点
图片源码隐写、base64编码
解题思路
使用普通的记事本打卡图片就可以了,这一题感觉有点坑(MISC不按常规套路出牌),使用常规的方法没有想出来,后来看了塔主的解题视频(5分钟的) 里面说了一下关于base64
的内容,所以想到了方法(HHHH)
由于题目中提示有答案的格式,所以先对whalectf
进行base64
加密(base64加解密平台)
在记事本中搜索内容d2hhbGVjd
(一次一次的尝试,每一次尝试就减少几个字符)
我们能够看到最后提供的提示是:py
,同样的操作,我们进行base64
操作
我们继续刚刚的操作就会得到
合并两次得到的结果就会得到:d2hhbGVjdGZ7TG9uZ19tYW9faXNfaGFwcHl9
base64
解密之后得到:
最后得到答案:whalectf{Long_mao_is_happy}
二:追加数据
知识点
文件绑定、word
隐藏
文件绑定的方法
在cmd中
copy /b 1.jpg+2.txt 3.jpg
解题思路
拿到图片,在kali
里面使用binwalk
工具进行分析
使用命令:
binwalk whalediary.jpg
可以看到一个zip
压缩包隐藏在里面,使用foremost
命令
使用命令:foremost whalediary.jpg
使用word
,打开docx
文件就会得到(由于我事先把word
中的隐藏关闭了,所以打开的文档可能和没有关闭的人的不同)
我们只需要注意每一段后面的字母就好,把他们组合起来就是答案(可是我没有读懂QAQ)
三:追加数据
知识点
PNG
文件格式、zlib
压缩数据、二维码识别
解题思路
首先使用pngcheck
工具检查图片的IDAT
位
使用的命令为:pngcheck.exe -v whalectf.png
可以看到一个IDAT位为0x17345,长度为193 用winhex打开图片,找到IDTA块对应的位置 如图所示截取:
这里不需要截取长度标志位C1
和IDA
T图像数据块和最后四位的CRC
冗余校验码,使用如下脚本进行分析即可:
# python2 #! /usr/bin/env python import zlib import binascii IDAT='789CA552B911C3300C5B09D87FB99C65E2A11A17915328FC8487C0C7E17BCEF57CCFAFA27CAB749B8A8E3E754C4C15EF25F934CDFF9DD7C0D413EB7D9E18D16F15D2EB0B2BF1D44C6AE6CAB1664F11933436A9D0D8AA6B5A2D09BA785E58EC8AB264111C0330A148170B90DA0E582CF388073676D2022C50CA86B63175A3FD26AE1ECDF2C658D148E0391591C9916A795432FBDDF27F6D2B71476C6C361C052FAA846A91B22C76A25878681B7EA904A950E28887562FDBC59AF6DFF901E0DBC1AB'.decode('hex') result = binascii.hexlify(zlib.decompress(IDAT)) bin = result.decode('hex') print bin print '\r\n' print len(bin)
就会得到如下所示:
一串0和1
的数据 长度为1024
是一个正方形 可以想到是要生成一个二维码,把生成的0和1放在result.txt
里面,用如下脚本生成二维码
# python2 #! /usr/bin/env python import Image MAX = 32 pic = Image.new('RGB',(MAX*9,MAX*9)) f = open('result.txt','r') str = f.read() i = 0 for y in range(0,MAX*9,9): for x in range(0,MAX*9,9): if(str[i] == '1'): for n in range(9): for j in range(9): pic.putpixel([x+j,y+n],(0,0,0)) else: for k in range(9): for l in range(9): pic.putpixel([x+l,y+k],(255,255,255)) i = i+1 pic.show() pic.save("flag.png") f.close()
得到二维码:
使用QR_Research
或者其它工具也是可以的,扫描后就出现flag
最后得到答案:whale{QR_code_and_png}
四:破碎的心
知识点
条形码
解题思路
我们把图片下载下来之后会发现这是一个不完整的条形码
我们选择其中的条形码还原即可 在画图里,先用矩形框选择一些连续的条纹,按住ctrl
,按上下键不断还原即可
最后用BcTester
打开即可得到flag
最后得到答案:whale{BarC0d3_Pick}
五:我们不一样
知识点
双图对比 compare
命令的使用
解题思路
首先使用Linux
中的binwalk
命令
我们可以看到有两张图 使用compare命令
看到图片左下角有一个非常小的变化,使用python
脚本打印出来
# python2 #coding:utf-8 import Image import random img1 = Image.open("1.png") im1 = img1.load() img2 = Image.open("2.png") im2 = img2.load() a='' i=0 s='' for y in range(img1.size[1]): for x in range(img1.size[0]): if(im1[x,y]!=im2[x,y]): print im1[x,y],im2[x,y] if i == 8: #以8个为一组 打印出字符串 s=s+chr(int(a,2)) a='' i=0 a=a+str(im2[x,y][2]) i=i+1 s=s+'}' print s
运行之后就会得到:
我们可以看到它的蓝色通道不一样,它是把蓝色像素转换成为0和1,8个位一组转换成字符,当然 flag也是在
最后的答案:whale{w3_ar3_d1ffe2en7}
六:黑白打字机
知识点
二维码、steganography
、五笔编码
解题思路
把图片下载之后发现,不是正确的二维码,需要使用光影魔术手进行反色处理,再使用QR_Research
就可以得到:
提示我'你会五笔吗'
图片的名字yhpargonagets
反过来是steganography
,
百度得到这个工具(下载需要积分,不过我有)我们使用这个工具解密,勾选Decode
和Decrypt
,发现需要密码
之前提示我们的话,我们针对每个字都进行五笔解密查询(一定要86版五笔)
最终得到一串字符wqiywfcugghgttfnkcg
,以此当密码输入,就会得到:
最后得到答案:venusctf{V3nus_St3gan0graph1_1s_g00d}
参考资料:
Image Steganography: https://download.csdn.net/download/qq_41187256/10682803
CTF Wiki: https://ctf-wiki.github.io/ctf-wiki/misc/introduction/
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
异常、堆内存溢出、OOM的几种情况
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/82813353 堆内存溢出 【情况一】: java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: < jvm-arg>-Xms3062m < / jvm-arg> < jvm-arg>-Xmx3062m < / jvm-arg> 【情况二】 java.lang.OutOfMemoryError: GC overhead limit exceeded 【解释】:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;一般是因为堆太小,导致异常的原因,没有足够的内存。 【解决方案】: 1、查看系统是否有使用大内存的代码或死循环; 2、通过添加JVM配置,来限制使用内存: < jvm-arg>-X...
- 下一篇
高性能JavaScript之加载和执行
JS在浏览器中的性能,可以认为是开发者所面临的最重要的可行性问题。这个问题因JS的阻塞特性变得复杂,也就是说当浏览器在执行JS代码时,不能同时做其他任何事情。事实上,大多数浏览器都使用单一进程来处理UI(用户界面)更新和JavaScript脚本执行,所以同一时刻只能做其中一件事情。JS执行过程耗时越久,浏览器等待响应用户输入的时间就越长。 从基础层面来说,这意味着<script>标签每次出现都霸道地让页面等待脚本的解析和执行。无论当前的JS代码是内嵌的还是在外链文件中,页面的下载和渲染都必须停下来等待脚本的执行完成。这在页面生存周期中是必要的,因为脚本执行过程中可能会修改页面的内容。一个典型的例子就是在页面中使用document.write()(经常用来显示广告)。 例如: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Script Example</title> </head...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7,8上快速安装Gitea,搭建Git服务器