tl2cents

  • Home
  • Archives
  • Categories
Toc Friends About me

tl2cents

  • Home
  • Archives
  • Categories

DASCTF2021-png隐写WriteUp

2021-03-28
字数统计: 941字   |   阅读时长≈ 3分

zip 伪加密

拿到zip包也没有任何提示的情况下,第一个想到的是zip伪加密,或者就是暴力强行破解(一般设置stringprintable的字典,不超过6位还是能算的)。
 
这个直接拖进winhex或者HxD里面去看,zip文件前面直接找50 4B 03 04,把在它两个字节之后的09改00即可(实际伪加密一般为50 4B 03 04 14 00 09 00 08 00,09的第二位只要是奇数都代表加密),最好把文件中的这样的十六进制串都改一改。然后找50 4B 01 02,一般在末尾,在它后面4个字节的09改成00即可。
上面的方法也可以自己产生zip伪加密的包。

 
 
伪加密破开后,就可以拿到两个图片如下:


hint

好看的小姐姐

拿到hint.png里面的信息(难)

hint图片是一个png图片,我一般拿到图片没有其他可用信息的时候,就大概可以这几个方面看一看:

  • binwalk hint.jpg看有没藏东西
  • 看图片的其他详细信息comment等等,这些地方可以藏一些提示。
  • pngcheck -v hint.jpg看png具体的信息以及各个IADT
  • stegsolve打开看看,可以extract大部分信息,以及不同的alpha通道查看图片。
     
     

这个题我比赛的时候看出来这个hint.pngde IDAT块有点问题了(但是方向错了也仅限于此)


pngcheck后的hint信息

IDAT块的分布是连续的,并且一般只有填满之后才会继续填下一块,图中第三个IADT块长度为2308,明显没有填满,怀疑是人为隐写进去的信息,类似的题是2018全国信息安全大赛的一道png隐写,idat块内隐写了一个二维码。所以比赛的时候方向都是围着这个长2308的IDAT块来做的。但是这个块不是zlib,也不是其他什么文件头。(就卡住了)
 
 
比赛结束看到一个writeup说删去第一个IDAT块就能得到hint.png的第二张图片。(所以删去后得到了一张不明所以的图,暂时搁这里,应该不能直接删,还要改CRC校验什么的,后面再说)

好家伙,是我理解有偏差了,之前的想法是对的,那个2308的块明显异常,所以这是有两个图片,长2308的IDAT块是第一个图片的结束处,后面再插上其他图片的IDAT块,就可以隐写了(只会显示第一个图片)。所以直接把前面四个IDAT块删去,就能拿到隐写的第二张图片。直接上脚本,或者在HxD里面删。

1
2
3
4
5
6
7
import zlib
f = open('hint.png', 'rb')
f_out = open('hint1.png', 'wb')
data=f.read(0x25)
f.seek(0x6959,0)
data=data+f.read()
f_out.write(data)

正确的图得到信息是

you can guess out where is flag with 89504E
 
 

outguess 提取flag.jpg的隐写信息

后面基本就没难度了

1
$ outguess -k 89504E -r flag.jpg -t output.txt

得到一串字符,明显就是base64编码(看到这个要么是可恢复成一连串字符串,恢复不了看16进制找文件头,或者直接转图片)。

MUY4QjA4MDg5MTgwNzg1RTAwMDM2NjZDNjE2NzJFNzQ3ODc0MDA0QkNCNDk0Q0FGMzZCMDMwMzQ0RDM1NDlCNjRDMzMzNTMzMzRCMTQ4MzVCNzQ4NEEzNTMzNDg0OTMyMzU0QjRFMzUzMTQ5MzFCNUFDRTVFMjAyMDA0NjhCMjIzRjI4MDAwMDAw

转成16进制看看(自己写python脚本或者去在线网站,这里推荐CyberChef)

这里直接是16进制字符串,不能直接转可打印字符,搜一下文件头,发现是7z压缩包。直接转文件:

1
2
3
4
data='1F8B08089180785E0003666C61672E747874004BCB494CAF36B030344D3549B64C33353334B14835B7484A3533484932354B4E35314931B5ACE5E20200468B223F28000000'
wr=bytes.fromhex(data)
f=open('1.7z','wb')
f=f.write(wr)

解压得到最后的flag
flag{0815e4c9f56148e78be60db56ce44d59}
 
 

参考链接

DASCTF-2021-MAR明御攻防赛
PNG的IDAT块隐写

  • CTF
  • writeup
  • CTF

扫一扫,分享到微信

多项式拟合
USTC OS 2021 Spring HW1
  1. 1. zip 伪加密
  2. 2. 拿到hint.png里面的信息(难)
  3. 3. outguess 提取flag.jpg的隐写信息
  4. 4. 参考链接
© 2021-2025 tl2cents
GitHub:hexo-theme-yilia-plus by Litten
  • Toc
  • Friends
  • About me

tag:

  • CTF
  • writeup
  • crypto
  • solidity
  • PQC
  • MPKC
  • Backdoor
  • Dual EC
  • FHE
  • BFV
  • USTC
  • Machine Learning
  • TFHE
  • fibonacci
  • 教程
  • 0S2021
  • Zcash
  • Cryptocurrency
  • Code
  • Lattice
  • ISD
  • Matrix Group
  • Discrete Logarithm

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • NeSE
  • USTC-Life
  • Xuzzz

Hi, this is tl2cents
Currently Ph.D at IIE of UCAS
Graduated from USTC (2018-2022)

CTFer
Focus on blockchain, crypto and reversing
Team member of NeSE and Nebula

Research
Blockchain | ETH | FHE
PQC | Cryptography | Android

Contact Me
echo Y2F4dWxhc2FlbGFAb3V0bG9vay5jb20K | base64 -d

Thanks for JoeyBling and Litten