2022春秋杯-春季赛 勇者山峰 writeup(misc全部+web签到)

admin 2022年11月18日14:13:372022春秋杯-春季赛 勇者山峰 writeup(misc全部+web签到)已关闭评论98 views字数 5514阅读18分22秒阅读模式

改改比赛wp发上来

本文来自csdn的⭐️shu天⭐️,平时会记录ctf、取证和渗透相关的文章,欢迎大家来我的主页:shu天_CSDN博客-ctf,取证,web领域博主:https://blog.csdn.net/weixin_46081055 看看ヾ(@ ˘ω˘ @)ノ!!

一、 解题情况

img

二、 解题过程

1 Capture Radiate Chart

操作内容:

1.rar提取

用TweakPNG(工具地址cloud.tencent.com/developer/article/1808156)查看图片,发现每个IDAT块的crc值最后两位,正好是rar的文件头(52 61 72 21→R a r !)

img

利用010editor导出crc,在csv和excel中处理

img

img

img

整理一下写成新的rar文件

img

2.pdf分析

way1

解压得到一个pdf,打开看是空空的。

对pdf的结构分析,其中有一个78 9C开头的stream数据段,应该是里面有一张图片,所以对pdf进行strings(pdf结构解析可以看这位师傅的文章www.jianshu.com/p/f48cc9077c10)

对象的内容应该是包含在<< 和>>之间的,最后以关键字endobj结束.

Stream说明一个流对象的开始。
Endstream为流对象的结束标志

……
7 0 obj
<</BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter /FlateDecode /Height 1403 /Length 12538 /Subtype /Image /Type /XObject /Width 992>>
stream
……

根据上面这段对象内容属性的说明,我们知道图片的长度/Height 1403 和宽度/Width 992,以及IDAT段的长度/Length 12538,流则是提取Stream和Endstream之间的部分。(快速提取直接用binwalk,1F9.zlib即是我们需要的,要把最后多出来的Endstream等等删除),我这里一共12538字节,多点少点都没事(和/Length 12538对应啦

image-20220508210320590

然后我们开始构造png文件头以及IDAT块的头

1) png文件头

png文件头分析参考David.Turing师傅:www.blogjava.net/security/archive/2006/06/08/51292.html

image-20220508210700918

如下图,前面几段是固定值,图片的长度/Height 1403 =57B和宽度/Width 992=057B,再计算一下crc(不算乱填也可)

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000000   89 50 4E 47 0D 0A 1A 0A  00 00 00 0D 49 48 44 52   塒NG        IHDR
00000010   00 00 03 E0 00 00 05 7B  08 02 00 00 00 29 34 52      ?  {     )4R
00000020   90                                                  

image-20220508213511274

2) IDAT段

IDAT结构根据这位师傅的文章juejin.cn/post/6844903983258173454

img

IDAT段的长度/Length 12538=30FA(我不知道有没有写反……我一直分不清小端序大端序,感觉回到了学存储原理时候……)

image-20220508213116032

即可正常显示

image-20220508213557304

不过我赛后复盘时候猜,这张图片应该是放在word里,然后把写着flag的地方移到展示页面之外,所以转换为pdf之后我们看不见,于是有了第二种解法

way2

利用pythonfitz 库对pdf操作提取图片(代码参考刘早起师傅cloud.tencent.com/developer/article/1785670)

import fitz
import re
import os

file_path = r'flag.pdf' 
dir_path = r'./1/' 

def pdf2image1(path, pic_path):
    checkIM = r"/Subtype(?= */Image)"
    pdf = fitz.open(path)
    lenXREF = pdf.xref_length()
    count = 1
    for i in range(1, lenXREF):
        text = pdf.xref_object(i)
        isImage = re.search(checkIM, text)
        if not isImage:
            continue
        pix = fitz.Pixmap(pdf, i)
        new_name = f"img_{count}.png"
        pix.save(os.path.join(pic_path, new_name))
        count += 1
        pix = None

pdf2image1(file_path, dir_path)

也可以得到(ps我也试了网上一些pdf转换工具,基本上不行,可能他们是基于可见元素分析pdf并转换的,并没有分析pdf的zlib块,所以得不到完整图片)

image-20220508213950832

pps补个png的phys数据块知识点www.cnblogs.com/mqxs/p/3552658.html

image-20220508214240450

我觉得出这题的师傅真的很厉害,对pdf和png的文件结构一定烂熟于心,复盘时候学到了很多,谢谢师傅们出了这么好的题目!

flag值:

flag{Create_Remarkable_Ctf}

2 RecoverMe

操作内容:

根据提示用Passware字典爆破vc加密容器密码aaaAAA111

img

(ps.vc加密容器是有outer容器和隐藏容器的区别,不过这题没有考)

image-20220508214454038

挂载容器,然后用x-way查看磁盘,发现之前存在一个流量包,恢复该流量包

img

流量包中都是icmp协议的流量,data段的长度(十进制转ascii 80 75 →PK)正好可以构成一个压缩包

xz.aliyun.com/t/4527参考这篇文章

首先筛选ip.src_host==192.168.43.186

img

tshark -r 1.pcapng -Y "icmp" -T fields -e data.len | tr "\n" ","

img

然后对得到的十进制数字就行简单替换,逗号之间补充0

img

py脚本写文件

import struct

raw = [80,75,3,4,20,0,1,0,0,0,201,158,124,84,241,77,1,151,50,0,0,0,38,0,0,0,10,0,0,0,115,101,99,114,101,116,46,116,120,116,202,7,76,52,18,217,95,209,16,103,33,82,12,242,206,138,103,184,241,65,43,57,75,43,130,112,107,178,89,108,190,217,11,246,105,237,181,32,234,243,226,240,182,130,97,109,1,132,196,168,80,75,1,2,63,0,20,0,1,0,0,0,201,158,124,84,241,77,1,151,50,0,0,0,38,0,0,0,10,0,36,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,115,101,99,114,101,116,46,116,120,116,10,0,32,0,0,0,0,0,1,0,24,0,237,79,170,141,154,66,216,1,34,16,235,170,154,66,216,1,24,255,80,114,154,66,216,1,80,75,5,6,0,0,0,0,1,0,1,0,92,0,0,0,90,0,0,0,21,0,105,112,181,196,177,228,187,175,202,199,185,202,210,226,181,196,194,240,163,191,0,0]
m = [int(i) for i in raw]

with open('1.zip', 'wb') as fp:
  for i in m:
    s = struct.pack('B',i)
    fp.write(s)

img

提示ip的变化,ip.src==192.168.43.186筛选IP,导出为文本文档,然后导入excel,取出destination ip

img img

去掉换行,得到

011100000110000101110011011100110111011101101111011100100110010001101000001100110111001000110011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

www.rapidtables.org/zh-CN/convert/number/ascii-hex-bin-dec-converter.html转换为ascii,密码为passwordh3r3,解压得到flag

img

flag值:

flag{efaaf34db0bad8e1888e8f671f3cb7ab}

3 PINTU

操作内容:

观察图片规律,推测第六字节和第八字节是拼图的定位

img

搜搜Bmp文件头:www.cnblogs.com/l2rf/p/5643352.html,这两个位置是保留字节(所以可以做手脚

img

先写个脚本提取第六字节和第八字节

from PIL import Image

x_list=[]
y_list=[]

for i in range(0,14400):
  f = open(f'img/{i}.bmp', 'rb').read()
  x = f[6]
  y = f[8]
  x_list.append(x)
  y_list.append(y)

#print(x_list)
#print(y_list)
print(max(x_list))
print(max(y_list))

img

基本可以确认是根据第六字节和第八字节排序,x和y的最大值都是119,可以得到我们最终拼图的尺寸为(12032)x(12018),即3840x2160,再整个拼图脚本

from PIL import Image

flag = Image.new('RGB', (3840, 2160))
for i in range(0,14400):
  f = open(f'img/{i}.bmp', 'rb').read()
  x = f[6]
  y = f[8]
  raw = Image.open(f'img/{i}.bmp')
  flag.paste(raw, (x*32, y*18))

flag.save('flag.bmp')

得到flag

img

flag值:

flag{Bmp_index_PinTu}}

4 tiger

操作内容:

根据提示Rot47所以lsb密码是28a217fe

img

用工具github.com/livz/cloacked-pixel解密lsb得到71zr9H6jnXRHn64WBxMbCzz16saCZWiw,解密压缩包然后明文爆破

img

里面flag是个图片,是二维码

img

扫码后发现是零宽字符

img

f‍‎‍‏‍‏‏‌‍‍‍‌‎‏‏‌‌‎‏‏‌‎‎‏‌‏‏‏‌‍‏‍‌‍‏‍‌‌‍‌‍‍‏‏‌‏‌‌‍‏‍‏‌‍‍‍‍‌‏‏‌‎‍‎‌‌‍‏‏‌‎‍‏‏‍‌‏‏‌‏‏‎‎‎‏‍‌‏‏‌‍‌‌‌‏‏‌‏‏‍‏‏‏‍‎‏‏‌‌‍‌‏‍‏‏‌‍‍‍‍‍‏‎‏‏‌‍‏‌‏‏‌‏‏‌‎‏‎‏‏‌‌‌‏‎‎‍‍‏‏‌‍‌‍‎‎‎‏‏‌‌‌‌‏‏‌‏‍‍‌‏‍‎‏‏‌‏‍‏‏‌‏‎‍‏‏‌‍‍‌‍‏‏‌‍‌‍‏‏‌‏‍‌‏‏‌‍‎‎‏‌‌‍‌‏‏‌‎‌‎‌‍‌‎‏‌‏‎‌‎‍‌‎‍‏‎‍‏‌‎‏‌‎‍‌‏‏‏‎‌‎‍‏‏‌‏‌‏‎‍‏‎‌‎‌‏‎‏‏‍‌‍‌‎‌‎‌‎‎‏‌‏‏‏‍‌‏‌‌‏‌‏‏‎‎‎‏‍‏‏‌‍‌‌‌‏‍‌‏‏‌‌‏‏‌‍‍‏‏‍lag is not here

yuanfux.github.io/zero-width-web/网站解密零宽字符

img

www.guballa.de/vigenere-solver网站爆破出flag

img

You are a good CTFer because you can solve my challenge, next I will give you my secret, my secret is flag{866d3755-c358-5119-abeb-bda666a8099d}, have fun!

flag值:

flag{866d3755-c358-5119-abeb-bda666a8099d}

5 被带走的机密文件

操作内容:

取证大师进行自动化取证,在打印机缓存里面发现有打印图片的记录

img

flag值:

flag{1136d459-2885-409a-bc54-beea0739544b}

6 签到

操作内容:

弹钢琴,弹完之后自动跳转

img

7 Mercy-code

操作内容:

首先echo,发现前后都附加了header,构造命令并执行

cmd=echo(implode(apache_request_headers()));

img

传header
111:
……
cmd=system(strrev(implode(apache_request_headers())));

imgimg

看了别的师傅的wp:mp.weixin.qq.com/s/FGGceMvAZ9iRmIVIufBpBw ,发现可以用uniqid加上strrev函数随机取值,爆破出字符.,scandir+show_source直接读文件的

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月18日14:13:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   2022春秋杯-春季赛 勇者山峰 writeup(misc全部+web签到)http://cn-sec.com/archives/1416616.html