实验吧-ctf-misc

隐写术挑战解析

1.欢迎来到地狱

用winhex对第一个jpg文件补头,获取网址https://pan.baidu.com/s/1i49Jhlj,打开得到音乐文件,用Audacity打开获取摩斯电码,破解,获得密码KEYLETUSGO,打开word文档,查看隐藏字符获得image steganography提示,用网页版image steganography解密文档中的哈士奇图片,获得key{you are in finally hell now},解密zip文件,获得txt与jpg文件,打开txt获得二进制数字,转为字符是“弱口令”,用binwalk检查jpg文件发现zip部分,取出,根据弱口令爆破,得到txt,根据提示对“VTJGc2RHVmtYMTlwRG9yWjJoVFArNXcwelNBOWJYaFZlekp5MnVtRlRTcDZQZE42elBLQ01BPT0=“依次做base64,rabbit,凯撒解密获得唯一一个正常的句子为flag

2.stegas 300

用Audacity打开观察波形发现是(在提示下)曼彻斯特编码(由低到高为0)获得二进制,转为字符是bakdor,然后将其md5加密后的结果输入(题目略有问题)

3.Chromatophoria

根据图片名称使用stegsolve,使用Data Extract,同时选择r,g,b的0获得答案

4.Black Hole

下载获得img,我的Ubuntu无法正常加载,实验吧的writeup也无法使用,使用DiskGenius打开镜像,发现DiskGenius最新版可以找到png文件,但需要专业版才能修复出来。于是就将整个镜像文件打开后去除二进制放入winhex打开,对照DiskGenius将文件取出(先按图片存储位置将图片所在的二进制拿出,在根据文件数据所在簇文件将其中的无用二进制删去,无用二进制大部分是一些\x00组成的字节块),该方法比较麻烦,但最后获得图片可以看到key:

5.心中无码:

使用stegsolve发现b0不太对(在提示下),根据题意去掉图片上的码(即黄色部分)

from PIL import Image
lena = Image.open('Lena.png')
pixsels = lena.load()
width=lena.size[0]
height=lena.size[1]
list1=[]
for x in range(0,width):
  for y in range(0,height):
    r,g,b=pixsels[x,y]
    if r==255 and g==255:
      pass
    else:
      if int(bin(b)[-1])==1:
        list1.append(0)
      else:
        list1.append(1)
print len(list1)
im=Image.new("1",(300,300))
i=0
while i<len(list1):
   im.putpixel((i%300,i/300),list1[i])
   i=i+1

im.save("2.png")

获得二维码,二维码有些模糊扫描不太成功,对其腐蚀

from PIL import Image
lena = Image.open('2.png')
im=Image.new('1',(300,300))
pixsels = lena.load()

for x in range(0,lena.width):
    im.putpixel((x,0),255)
    im.putpixel((x,lena.height-1),255)
for x in range(0,lena.height):
    im.putpixel((lena.width-1,x),255)
    im.putpixel((0,x),255)
for x in range(1,lena.width-1):
  for y in range(1,lena.height-1):
    if (pixsels[x-1, y] == 255) or (pixsels[x, y-1] == 255) or (pixsels[x, y] == 255) or (pixsels[x+1, y] == 255) or (pixsels[x, y+1] == 255):
        im.putpixel((x,y),255)


im.save("2.bmp")

再次扫描获得Brainfuck,在线解码即可

6.黑与白

打开图片获得二维码,下方有一网址,打开网址,没信息,但网址是用大小写字母混合写的,想到培根加密,获得字符“TACP”

将图片放入stegdetect中检测,发现图片可能由jphide加密,使用jphide解密,将刚刚得到的字符串作为密码放入,不行改为小写放入,成功获得结果

7.最低位的亲吻

使用诸多图像无果,想到题目是最低位,从LSB中寻找答案,在看stegsolve中低位中有二维码迹象,决定将图像低位提出组成图片,获得二维码,扫描获得结果(附python代码):

from PIL import Image
lena = Image.open('01.bmp')
im=Image.new('1',lena.size)
pixsels = lena.load()
width=lena.size[0]
height=lena.size[1]

for x in range(0,width):
  for y in range(0,height):
      g=pixsels[x,y]
      im.putpixel((x,y),int(bin(g)[-1]))


im.save("2.bmp")

 8.无处不在的广告

将图片放在stegsolve中,在通道red plane0中可获得二维码,反色扫描即可

9.想看正面?那就要看仔细了!

根据提示仔细看图片信息,在文件详细信息备注中发现字符串,填入不太对,发现字符串长度为8,然后用base64解码可得

10.打不开的文件

文件无法显示,猜测缺少头部,用winhex补入gif头部“47494638“,发现动态图,放入ps中逐帧查看获得key

11.py的交易

用ps打开图片会提示有adobe fireworks的数据,用adobe fireworks打开图片,发现还有一层是二维码,取出扫描获得16进制字符,看数字头“03f30d0a”可知是pyc文件,进行反编译(可以下工具,也可以在线找python反编译https://tool.lu/pyc/)即可

12.IHDR

首先发现题目中的图片无法打开,但又好像能看到,而题目中IHDR是png头部一个数据段,由width,height,Bit depth,ColorType,Compression method,Filter method,Interlace method构成(具体请百度),猜测IHDR有问题,用TweakPNG打开提示crc错误,纠正后打开图片依旧看不到key,更改IHDR中其他数据,更改height发现可以看到key(可以用斌walk的结尾和winhex打开文件实际结尾差好多看出)

13.beygond

用binwalk发现这是一个zip文件,改后缀解压获得wav文件,用Adobe Audition CS6打开发现有一个通道频率比较奇怪,点击文件右键提取通道获得该通道获得取出后查看频率(可以改变下方有个有关频率的地方能看的清楚一些),与DTMF编码对照翻译获得“13300133000”即为flag

14.LSB

使用binwalk检测图片发现是bmp,改后缀,题目提示LSB,而查询stegsolve data extract无果(此时直接使用wbStego运行即可得到答案),即可决定将图片最后一位提取出来观察,由于图片是bmp类型,像素在图片中是倒叙存储,即以b,g,r的方式存储,而且当高度为正时图片中最后一行像素是存储在第一行的位置(对于正常二位坐标系,当以左下角为原点高度才会为正),用PIL的getdata读出的像素只是像素点在图片的相对位置,并非在文本文件的相对位置(试一下就明白了),所以我们以文本文件的方式读取图片

bmpfi=open("nvshen.bmp","rb")
bmpstr=bmpfi.read()
bmpfi.close()
bfOffBits=int(bmpstr[13:9:-1].encode("hex"),16)
str1=""
for j in xrange(bfOffBits,len(bmpstr)):
  str1+=bin(ord(bmpstr[j]))[-1]
i=0
lst=""
while i<len(str1):
  str2=str1[i:i+8]
  lst+=chr(int(str2,2))
  i=i+8

fi=open("1",'wb')
fi.write(lst)
fi.close()

将最后得到的文件放入winhex也可得到结果

15.SB!SB!SB!

直接使用stegsolve,在Red plane 0可获得二维码,扫描即可

16.当眼花的时候,会显示两张图

使用binwalk发现文件是由两张png组合而成的,分开,放在winhex中观察发现两个文件中字节数不同,分别是1d55db和1d5648于是将使用stegsolve对图片做减法,发现得到的图片最下角有一条红色的线,猜想相对大一些的图片可能是在结尾加入了密码字符而导致两个文件字节数不相同,将做完减法的图片放入stegsolve观察发现在Red plane 0处线短的很厉害,基本可以确定在图像结尾处添加了对r使用了低位加密的像素点,将大一点(1d5648)的图像放入stegsolve,用stegsolve的data extract选择red0得到结果观察字符串尾部,即可发现key

17.听会歌吧

这个题和隐写关系不大,打开连接是一个网页和两首歌,对两首歌进行检查没有发现问题,打开网页源代码,发现两首歌的连接url都是base64,解密后与文件名相同。同时在源代码我们只发现了download.php,我们可以尝试打开该文件,于是将url改为download.php的base64,即download.php?url=ZG93bmxvYWQucGhw,获得代码

<?php
error_reporting(0);
include("hereiskey.php");
$url=base64_decode($_GET[url]);
if( $url=="hereiskey.php" || $url=="buxiangzhangda.mp3" || $url=="xingxingdiandeng.mp3" || $url=="download.php"){
	$file_size = filesize($url);
	header ( "Pragma: public" );
	header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
	header ( "Cache-Control: private", false );
	header ( "Content-Transfer-Encoding: binary" );
	header ( "Content-Type:audio/mpeg MP3");
	header ( "Content-Length: " . $file_size);
	header ( "Content-Disposition: attachment; filename=".$url);
	echo(file_get_contents($url));
	exit;
}
else {
	echo "Access Forbidden!";
}
?>

看到可以其中有hereiskey.php文件,用相同方式对该文件访问,得到结果

 

### BUU-CTF 中 '伟大的侦探'(Misc 类别)考点分析与解题思路 #### 考点分析 在BUU-CTF的'Misc'类别中,“伟大的侦探”往往涉及推理、密码破译、隐写术以及社会工程学等方面的知识。这类题目旨在考验参赛者对计算机安全领域内非传统技术的理解程度,同时也注重实际操作能力和创造性思维的应用[^1]。 1. **推理与逻辑** 题目可能会给出一段看似无序的文字或图片信息,要求选手通过仔细观察和缜密分析找出隐藏线索并得出结论。这类似于现实世界中的刑侦工作流程,需要高度专注力及良好归纳总结能力[^2]。 2. **编码与解码** 使用古典加密算法如凯撒密码、维吉尼亚密码等进行数据保护是早期通信方式之一,在现代信息安全教育中有重要地位。“伟大的侦探”类题目有时会融入这些基础概念作为切入点,引导玩家探索更深层次的技术原理[^3]。 3. **隐写术** 图像文件内的LSB(Least Significant Bit)修改、音频信号叠加秘密消息等形式构成了数字时代下的新型隐蔽传输手段。此类问题不仅检验了参与者对于多媒体载体特性的掌握水平,还促进了他们开发针对性检测工具的兴趣与发展[^4]。 4. **社会工程学** 利用人际交往过程中的心理弱点获取敏感资料也是网络安全防护体系面临的一大威胁源。因此,在某些特殊情境设定下,如何识别潜在风险并通过合理措施加以规避便成为了考核重点之一[^5]。 --- #### 解题思路 针对以上提到的各种可能形式,以下是几种通用且有效的解决方案框架: 1. **全面审阅材料** 对于任何给定的任务包,首要任务就是彻底浏览所提供的全部文档资源,包括但不限于README说明文档、附件压缩包等内容。注意发现异常之处比如奇怪命名惯例或是多余空白字符序列等等[^6]。 2. **尝试多种假设验证** 当初步扫描未能立即揭示明显答案时,则应考虑建立若干相互独立却又彼此关联的可能性解释方案,并逐一实施实验性测试直至找到确切依据支持其中之一为止[^7]。 3. **运用自动化脚本辅助处理大量重复劳动环节** 如果遇到需批量解析大批量相似结构的数据集场合,则编写Python或其他高级语言程序将是提高效率的关键所在。例如下面展示了一个简单的base64字符串转换函数实现案例: ```python import base64 def decode_base64(encoded_str): try: decoded_bytes = base64.b64decode(encoded_str) return decoded_bytes.decode('utf-8') except Exception as e: return f"Error occurred: {e}" encoded_string = "SGVsbG8gV29ybGQh" result = decode_base64(encoded_string) print(result) # 输出 Hello World! ``` 4. **查阅权威参考资料巩固理论支撑** 在整个求解过程中,适时参考官方教程指南或者是社区讨论区帖子能够有效弥补个人知识盲区的同时加快整体进度推进速度。推荐站点如下所示: - 先知社区:https://xz.aliyun.com/ - 看雪论坛:http://bbs.pediy.com/ - 安全客:http://anquanke.com/ --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值