ai-nimals

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。(如果出错,重试几次就好)脚本如下:

  1. from pwn import *
  2. from time import sleep
  3. img = open('./basque-shepherd-dog.jpg', 'rb').read()
  4. img_base64 = base64.b64encode(img)
  5. conn = remote('117.50.13.213', 12345)
  6. size = 0
  7. while size < len(img_base64):
  8. conn.send(img_base64[size:size+1024])
  9. size += 1024
  10. print(size)
  11. sleep(0.5)
  12. 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。