1.题目给了一个py脚本,读脚本可知,用base64加密图片,传给服务器。判断和原图是否相同,长度必须相同,里面内容最多有config.diff_chars不同,hint中config.diff_chars的值为1024。接着利用tensorflow训练的一个模型来判断,图片中是何种动物,训练的模型给了一个GitHub地址。
2.判断是否输出的条件为if top_k[0] == 1:
,根据在本机训练模型试验的结果,意思是:判断是否为狗的几率最大,就输出flag。显然与题目本意不同,所以我们只需要将给我们的原图base64之后发过去就好了。
3.发包过去的时候要注意,不能一次性全部发过去,否则会出错,所以我们每次发送1024,发一个包暂停0.5秒,最后即可得到flag。(如果出错,重试几次就好)脚本如下:
from pwn import *
from time import sleep
img = open('./basque-shepherd-dog.jpg', 'rb').read()
img_base64 = base64.b64encode(img)
conn = remote('117.50.13.213', 12345)
size = 0
while size < len(img_base64):
conn.send(img_base64[size:size+1024])
size += 1024
print(size)
sleep(0.5)
conn.interactive()
首先在MacOS High Sierra 10.13上挂载镜像,提示需要输入密码,根据镜像文件尾部明文,猜测密码是N1CTF_APFS,输入成功挂载。
挂载后发现镜像中含有ctf文件夹,内含531个txt。
根据题目提示的WWDC2017发布的APFS新特性,找到如下描述:
使用apfs_snapshot(注意:该程序在/System/Library/Filesystems/apfs.fs/Contents/Resources/路径下,且10.12版本有,10.13没有)找到快照ctf:
使用mount_apfs挂载快照到snap下:
发现恢复快照后同样是一个ctf文件夹,内含531个txt,ls后发现文件大小,修改时间没有差异。
又由提示的
找到如下的资料,猜测和恢复快照前后的txt修改时间有关(需要读取到纳秒级,ls显示的精度不够):
尝试通过python读取文件的mtime(纳秒级),发现确实是纳秒部分才出现变化:
由提示的
,猜想是提取快照前后的文件修改时间进行异或,得到flag,但是提取9位纳秒进行异或后没有看到什么有价值的信息。
重新观察打印的时间信息,发现尾部都是00x,而且最后一位都是0-7,猜测是隐写在最后一位,且需要转成3位的bin(如 7 -> 111),再加上提示的异或后是一个zip,所以开头应该是504b0304,对照后发现吻合,写脚本转换即可提取出zip:
压缩包同样经过了加密,密码是N1CTF_APFS:
另:其实未异或前提取出的隐藏信息也是一个zip,同样加密了,隐藏了假flag hhh:
首先stegsolve发现RGB的最低位都隐写了信息,提取出来发现是个加密的压缩包:
根据后来给的提示:
猜测密码和色号有关,而且在YSL官网查得具有这几种色号的应该是方管ROUGE PUR COUTURE :)
结合给出的图片,和YSL官网的色号,用PS确定色号:)
又根据提示的bin2text,对色号进行转换:
其中efbbbf为BOM头,保存为txt打开即可得到密码:
解密得到flag。