还刷刷刷刷刷
ctfshow
Misc17
这题因为提示falg在图片数据里,用binwalk分离无结果
然后尝试使用kali zsteg工具的zsteg -e extradata:0 misc17.png > 1.txt命令提权
因为注册表,重装了kali
只能重装zsteg工具
先使用sudo su命令进入root用户(其具有最高权限)
sudo su 命令执行后会让输入密码,(这里是kali的密码)注意,密码是可能不会显示的,不能输错,输完回车即进入root用户
先装zstage工具,命令
sudo apt update
查看可升级的安装包
然后使用命令进行更新和安装
sudo apt install -y ruby ruby-dev ruby-bundler zlib1g-dev libpng-dev build-essential
执行
以上是确保系统已更新并安装必要的依赖库
接下来通过RubyGems安装zsteg
命令
bashsudo gem install zsteg
结果发现安装不了,问了deepseek一会儿让我换源一会儿让我通过GiHtub源码直接装,又或者直接命令apt装,还检查了Ruby版本是否兼容,(虽然这些我都不懂,但还是照做了)但发现并没有什么作用
最后在执行 sudo apt update sudo apt install zsteg 时显示警告,域名解析错误,然后判断应该是网络连接有问题,(真fou了,昨天还能用)这里检查了网络连接
ping 8.8.8.8
执行后发现它说网络不可达,所以尝试检查网络接口状态
检查网卡是否启用
bash
ip a
发现还是一大堆我看不懂的(忘了截图)
但如果网卡显示DOWN,则手动启用:
bashsudo ip link set eth0 up #有线网
sudo ip link set wlan0 up #无线网
然后尝试重新获取ip
bashsudo dhclient eth0 #有线网
sudo dhclient wlan0 #无线网
然后就发现可用了
那就继续用RubyGems安装zsteg
bashsudo gem install zsteg
检查是否成功
bashzsteg --version #输出示例
啥玩意儿?又没成功?
我。。今天全再这装工具了,中午也是为了重装pycharm出了点问题搞了一中午 ,。
算了,继续
既然这样那就应该检查zsteg是否真正安装
bashwhich zsteg
这里注意是which,不是where
得到路径
那就说明zsteg已安装,但版本信息丢失
那就尝试命令
bash#进入 zsteg 所在目录
cd /user/local/bin #替换为自己的真实路径
./zsteg --help #直接运行,看是否能正常使用
(注意第二行和第三行是分两次执行的)
虽然看不懂,但貌似是能正常执行的
那就说明是非正式安装(手动编译或者源码运行我这应该属于后者)
因为刚我是通过gem安装的,那就先验证版本信息
bashgem list zsteg
得到版本后重新安装并强制更新
bashsudo apt purge zsteg #卸载现有版本
sudo apt install zsteg #重新安装
其实第一行bash命令可执行也可不执行,毕竟刚已经进入了
分两步执行
最后的最后,再来
zsteg --version
我就不信还安装不成功!!!
裂开了,真的,
装这个工具花了不下三小时
但还是尝试使用命令分离一下,竟然发现可用
so?明明可用为什么检测命令zsteg --version显示unknow version??
这个问题从网上找了很多方法还是没解决,既然能用就好,暂时先放一下
因为zsteg检测到misc17.png有隐藏的信息
那么接下来就用zsteg 把misc.png中的隐藏信息“extradata:0”提取到指定文件“s”
zsteg -E 'extradata:0' 图片名 >s #单引号里的即为隐藏信息
然后binwalk分离文件s
binwalk -e 图片名 --run-as=root
然后打开kali下的_s.extracted文件
打开1F1获得flag
misc的题工具很重要,但有时候知识学到的没有多少,装工具却浪费了很多时间
Misc23
题目提示答案在时间里,用notepad++打开没有发现什么
使用kali exiftool 命令
然后就发现了可疑字符串
看到第一行,ctfshow{}典型flag的格式,然后注意到UnixTimestamp这个东东, 上网查了一下,这是官方给的定义
还有背景
什么时间戳不戳的,哎呀看他说那么高端 我理解的所谓溢出就是当32位整数的值超出其表示的范围(就是无法表示了)
如32位整数的表示范围是-2,147,483,648(逗号隔开好看一点)到2,147,483,647,当超出2,147,483,647时就无法表示了,这个就叫溢出
举个例子就是当在32位整数表示范围-2,147,483,648到2,147,483,647的最大值2,147,483,647上加1,结果就会相当于“绕回”最小值-2,147,483,648。但在这好像没有什么大用途。
接着看DECtoHEX,别的不用管,只用记住它是将十进制数转换为十六进制数的函数
然后看到getflag
注意到get flag下面这一行
没错,这个了解一下,没提供什么有用的消息hh
这里是关键:
所以上面的这个提示 ctfshow{}, UnixTimestamp, DECtoHEX, getflag
解释起来就是用ctfshow{}包裹 先 UnixTimestamp(转换为时间戳)再 DECtoHEX (转换为十六进制)的结果 就能get flag 有意思有意思
对于时间戳 ,它是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点。然而,这种格式对于人类阅读并不友好,因此需要转换成可读的日期和时间格式。时间戳转换工具能够将时间戳快速转换为人类可读的日期时间格式,同时也支持反向转换,即将日期时间转换为时间戳
注意到这四个时间戳
所以这里应该将可读日期转换为时间戳
就是这个工具 Unix时间戳(Unix timestamp)转换工具 - 站长工具
(这里在找在线转换网站的时候我还发现了另一个转换时间戳的网址,有很多比如Javascript、php、html工具,条形码生成、甚至元素周期表等涉及各学科不仅仅是网络知识的有用工具,放这了在线工具 - 你的工具箱)
那么接下来开始转换时间戳 (这里转换之前不要忘了把年月分隔符:换为 - 刚开始我就忘了,还奇怪怎么转不出来 后面的时间倒不用换,就用:即可)
第一个时间:
第二个时间:
第三个:
最后一个:
所以将四个转换成的时间戳就是
874865822 2699237688 2156662245 460377706 #全部转为16进制
然后转十六进制
还是一个个转
1:
2:
3:
4:
最后连起来
3425649ea0e31938808c0de51b70ce6a #转16进制结果
最后包裹ctfshow{3425649ea0e31938808c0de51b70ce6a}
提交正确