安恒月赛7月-MISC wp

  1. 前言
  2. MISC1:真正的CTFer在哪?!
  3. MISC2:解不开的秘密
  4. 感悟

前言

今天安恒月赛,和最近一部热剧有一点点关系。而我就做出了两道MISC题,还是写一下Write Up。。。。

MISC1:真正的CTFer在哪?!

下载解压题目文件,发现一张图片

用binwalk分析一下,并没有隐藏文件

查看图片详细信息,没有隐藏东西。然后看了下图片宽高(分辨率),并用winHex打开发现,高度不一致

将分辨率转换成16进制,0500应该改为0A00。高度恢复了

发现flag了

发现看不清,也可以看出。想用stegsove反色看一下,然而用stegsolve打不开修改高度后的图片。

于是百度了下原因

对一张正常的图片,通过修改其宽度或者高度隐藏信息,使计算出的CRC校验码与原图的CRC校验码不一致;windows的图片查看器会忽略错误的CRC校验码,因此会显示图片,但此时的图片已经是修改过的,所以会有显示不全或扭曲等情况,借此可以隐藏信息。

而Linux下的图片查看器不会忽略错误的CRC校验码,因此用Linux打开修改过宽或高的png图片时,会出现打不开的情况

箭头所指即为crc效验码。

可以通过爆破图片修改前的宽和高来匹配CRC校验码,并用正确的宽和高来修复图片

为了做题的方便,先尝试爆破高度,脚本如下(百度搜的,还不会写,只修改了参数):

# -*- coding: utf-8 -*-
import binascii
import struct
#\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xA4\x08\x06\x00\x00\x00
crc32key = 0x6F03AD71
for i in range(0, 65535):
  height = struct.pack('>i', i)
  #CRC: 6F03AD71
  data = '\x49\x48\x44\x52\x00\x00\x05\x1C' + height + '\x08\x06\x00\x00\x00'
  crc32result = binascii.crc32(data) & 0xffffffff
  if crc32result == crc32key:
    print ''.join(map(lambda c: "%02X" % ord(c), height))

运行脚本,输出000009E4,即原图片高度为00 00 09 E4爆破成功

修改后,发现可以用stegsolve打开了

MISC2:解不开的秘密

下载题目文件并解压。发现一个word文档和file文件。word文档是加密的,file是一串16进制。Hex转ASCII

很明显应该是Base64,解密

发现很多信息,第一印象先考虑password的值,发现并不对。于是仔细分析下解密的内容

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\RealVNC]

[HKEY_CURRENT_USER\Software\RealVNC\vnclicensewiz]
"_AnlClientId"="8f5cc378-2e1d-4670-80e0-d2d81d882561"
"_AnlSelected"="0"
"_AnlInclRate"="0.0025"

[HKEY_CURRENT_USER\Software\RealVNC\vncserver]

[HKEY_CURRENT_USER\Software\RealVNC\VNCViewer4]
"dummy"=""

[HKEY_CURRENT_USER\Software\RealVNC\VNCViewer4\MRU]
"00"="127.0.0.1"
"Order"=hex:00,01
"01"="127.0.0.1:5900"

[HKEY_CURRENT_USER\Software\RealVNC\WinVNC4]
"Password"=hex:37,5e,be,86,70,b3,c6,f3
"SecurityTypes"="VncAuth"
"ReverseSecurityTypes"="None"
"QueryConnect"=dword:00000000
"PortNumber"=dword:0000170c
"LocalHost"=dword:00000000
"IdleTimeout"=dword:00000e10
"HTTPPortNumber"=dword:000016a8
"Hosts"="+,"
"AcceptKeyEvents"=dword:00000001
"AcceptPointerEvents"=dword:00000001
"AcceptCutText"=dword:00000001
"SendCutText"=dword:00000001
"DisableLocalInputs"=dword:00000000
"DisconnectClients"=dword:00000001
"AlwaysShared"=dword:00000000
"NeverShared"=dword:00000000
"DisconnectAction"="None"
"RemoveWallpaper"=dword:00000000
"RemovePattern"=dword:00000000
"DisableEffects"=dword:00000000
"UseHooks"=dword:00000001
"PollConsoleWindows"=dword:00000001
"CompareFB"=dword:00000001
"Protocol3.3"=dword:00000000
"dummy"=""

百度搜索一下关键字RealVNC,发现这是VNC加密。了解一下相关知识

1、因为VNC的密码是保存在注册表中的,需要能读出来,这一点比PCANYWHERE的利用难度大一点

VNC3.0版本的的密码存放在HKEY_CURRENT_USER\Software\ORL\WinVNC3\Password 处

VNC4.0版本的密码存放在HKEY_CURRENT_USER\Software\RealVNC\WinVNC4\Password 处

2、假如我们已经获得了web服务器的webshell权限,同时对注册表有读取权限(这里如何获得web服务器的webshell权限,暂不介绍),我们使用命令webshell命令regedit -e c:\vnc.reg HKEY_CURRENT_USER\Software\RealVNC\WinVNC4\ 把注册表信息导出到c盘下的vnc.reg文件,然后右键编辑

如上图,我们看到了加密后保存在注册表里的vnc密码,可以使用破解软件vncx4.exe来破解该密码

命令:vncx4 -W

然后顺序输入上面的每一个十六进制数据,每输完一个回车一次就行了

得到的密码,应该就是word文档的密码了。输入密码打开

根据提示,flag应该就在这里了。

首先,保存word里的图片,考虑图片隐写。然而并不是图片隐写,那flag应该还在word里。移走图片,发现

这个地方可能有东西,文件->选项->显示。显示(打印)隐藏文字。

然而并没有什么用。于是直接复制那串空白,粘贴到一个地方,得到flag了。。。

感悟

做了安恒月赛的题,发现自己依旧还很菜。不过在做题的过程中又学到了新知识。

小白进阶ing。。。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 qwzf1024@qq.com

×

喜欢就点赞,疼爱就打赏