天天看点

BUUCTF MISC刷题笔记(六)Misc

BUUOJ

  • Misc
    • [DDCTF2018]第四扩展FS
    • [INSHack2018]42.tar.xz
    • 大流量分析(一)
    • 大流量分析(二)
    • 大流量分析(三)
    • [NPUCTF2020]碰上彩虹,吃定彩虹!
    • [INSHack2017]10-cl0v3rf13ld-lane-signal
    • [INSHack2018] (not) so deep
    • [羊城杯 2020]逃离东南亚

Misc

[DDCTF2018]第四扩展FS

图片exif信息中有提示:

Pactera

BUUCTF MISC刷题笔记(六)Misc

foremost分离出一个加密的压缩包,使用上面得到的密码解压,得到一个文本

BUUCTF MISC刷题笔记(六)Misc

词频统计:

f = open("file.txt","r")
txt=f.read().replace(" ","")
f.close()
d={}
for i in txt:
    d[i] = d.get(i,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse =True)
for i in ls:
    print(i[0],end="")
           

跑一下就出flag

[INSHack2018]42.tar.xz

好多压缩包,每一个打开也都是一堆压缩包

BUUCTF MISC刷题笔记(六)Misc

一般来说写个py脚本重复解压就行,不过网上看到一个利用bash命令的,好像很方便

BUUCTF MISC刷题笔记(六)Misc

flag{04ebb0d6a87f9771f2eea4dce5b91a85e7623c13301a8007914085a91b3ca6d9}

大流量分析(一)

某黑客对A公司发动了攻击,以下是一段时间内我们获取到的流量包,那黑客的攻击ip是多少?(答案加上flag{})

附件太多了…先下载一个看一下

BUUCTF MISC刷题笔记(六)Misc

一打开,映入眼帘的就是

183.129.152.140

BUUCTF MISC刷题笔记(六)Misc

试一下,对了…

flag{183.129.152.140}

这题正规做的话,借助这里的统计功能

BUUCTF MISC刷题笔记(六)Misc

次数最多是就是这个

BUUCTF MISC刷题笔记(六)Misc

大流量分析(二)

黑客对A公司发动了攻击,以下是一段时间内获取到的流量包,那黑客使用了哪个邮箱给员工发送了钓鱼邮件?(答案加上flag{})

仍然是上题那个流量包,这题要找

邮箱

,所以筛选

smtp

BUUCTF MISC刷题笔记(六)Misc

flag{[email protected]}

大流量分析(三)

某黑客对A公司发动了攻击,以下是一段时间内我们获取到的流量包,那黑客预留的后门的文件名是什么?(答案加上flag{})

这里要找文件名,因为是后门文件,一般是

.php

BUUCTF MISC刷题笔记(六)Misc

文件很多,慢慢翻,最后得到

flag{admin.bak.php}

[NPUCTF2020]碰上彩虹,吃定彩虹!

先看

maybehint.txt

,winhex打开,发现很多0宽字符

BUUCTF MISC刷题笔记(六)Misc

在线网站解密,直接解会乱码,因为默认勾选的是下面几种,linux系统下用

vim

打开这个文本,会发现它是由

<200b>、<200c>、<200d>

这三种字符组成

BUUCTF MISC刷题笔记(六)Misc
BUUCTF MISC刷题笔记(六)Misc

把这三种勾选上去,再次解密得到提示:

do u know NTFS?

BUUCTF MISC刷题笔记(六)Misc

NtfsStreamsEditor2

把隐藏的信息提取出来,结果如下

=wwZlZ=8W=cndwljcdcG8wdj8W8Z8dZllGjZc=8lWjnlWd8WwZ5j=l8ccWZcZGjd5ZwZ5WZ8d=Zcwjwl5Gnn=WdwcwlnWd5lGnZWlnnwdnjnw8ndnc58d5cndl=njZl=WddjwWWwZllj5c5jGwZnZ5W=cZljdwd8c=85ndGGljcl5ccwd=W=l8w=5lwWn8WnwnWlGZwdcnGGl5G=8W==cnnWZnWjZ=wWcGwZcWc8ncWW=5jnWwcZl8W=8cdwWldlnwW5ddwlnlwncWlcwGZddj5djZWc5jcWdn5jdjwnj85GWGjnjwGd=jZGj5j==jwjlw8dlwWj5Wjn5n8dwwdjZlc5lZwdWldZlnGwl85cWnjd=WcWlwj8WGdlGncnZWGGd5ZncW5d55nW5wl=Wj8jGWnWj8jwZ=ZwWZ88nWG5nn5WlWnGdWw5Zn8jdl=nGcnll8WncZjnGn=dlwn5W8wlWjlnl5ccnGWGnnnc58WnjlGnG55Zwdn5cZdjdZZ5WljG5G5wcldd=Wlc8Z=8nGj=jWd8w8Wd=w8nccc8wZdjcnGdljZnnj5ww8885=lcWW8W8j5dG8jZZwG55GjnwZ=W5Z8G5ZlGc5ZZncZ5cd8j85GW5nj=WWncn55Gj5nj5nwnW58jG8GcnjZdWcl8wj8n=cj=8l8cn5jjcjn8lldn=Gjw8=cjcdWWjGddZljdjdZnG8djnZccZldlWllw5ZZ8wj5Gn==5w8Z=j55n=ZZ5wdww8lndwd8Wlj8WGjnl=nncZ=W8ZZWZnjjlwWGZZlZc5c==d8Zl855wZn=W=w8wWjZ85cGc==5Z8ccjdw5GnZWnGjcdGGnZ5wwwWGG5d=W5ldjwGZZdZwdG5cGGnZGlGc=W5ccWZ8=cGljdGcdld=8cj8jwn=lj88ZZ5jn5lcZ=Gdw=Zl58WZZl5ccwccwG5d5w8Z5wllj5ddnn=5=w8588WwGj=l5G55dWG8cl=GcjWwlwG=lWWnZ=dZG85Gcjc5=wnw=j==Gndnddjwn5c=c5W5wwdWlG5nWZwnGw8=lcWldcwnG5Wcjj=cWlGZc8Gn58ZWjZ85ljlncZj5cc=dZWGjd=d8ncZ8www55=cw=GWZn5ZZlnWld=cWcnclWlZG5djGW=cl8=ZG8cZwwc8wl=88W5ZwZ=jwZGGlcWcWnZZ5Zj5w5ZdZclZZWnccGw==cG8W8ZWlc8wcZ555Z85ljWG5jZ=8=wllWjWjlZc5lG8cwWlnjlGlW=l5=n=lGwnjGGjGdwj85ddW5ZwZ=ddjWldj=cjljjGwndZjWWZGcdWcZW5cdldj8WZjGljlWncZ5=8jnZWjl8wjZG5Zwlcl5dd
           

不像是某种编码,直接词频分析吧

f = open("out.txt","r")
txt=f.read().replace(" ","")
f.close()
d={}
for i in txt:
    d[i] = d.get(i,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1],reverse =True)
for i in ls:
    print(i[0],end="")
           

结果:

ZW5jcnlwdG8=

,base64解码得到

encrypto

,百度一下会发现这是一个加密软件,下载,使用之前需要先把文件后缀改成.crypto,试了一下发现要把

secret

改后缀,放进去解密,得到提示:

小写

BUUCTF MISC刷题笔记(六)Misc

但是仍然需要密码来进行解密,想起还有一个

lookatme.txt

没有看

BUUCTF MISC刷题笔记(六)Misc

tab换成-

,

空格换成.

,然后解摩斯密码得到hint:

autokey

BUUCTF MISC刷题笔记(六)Misc

关于autokey的题解我另一篇博客里写过,跑一下得到IAMTHEPASSWD,因为hint说要小写,所以密码:

iamthepasswd

BUUCTF MISC刷题笔记(六)Misc

拿去解密,但是跑了很久没结果…winhex看一下,发现这里有东西,把它删了,重新解密

BUUCTF MISC刷题笔记(六)Misc

解出彩虹.png,foremost分离出一个压缩包,里面是加密的

弗拉格.docx

BUUCTF MISC刷题笔记(六)Misc

这里和之前做过的题:

很好的色彩呃?

类似,这六块黄色其实有细微的差别,用ps提取颜色,得到

ffff70
ffff40
ffff73
ffff73
ffff57
ffff64
           

最后两位连起来得到

704073735764

,转字符得到

[email protected]

,拿去解压压缩包

上面那一串字符,把大小写字母分开

BUUCTF MISC刷题笔记(六)Misc

得到

ALPHUCK

eeeeeeeeeepaeaeeeaeeeeeeeaeeeeeeeeeeccccisaaaaeejeeeeeejiiiiiiiiiiijeeeeeejeeeeeeeeeeeeeeeeeeeejcceeeeeeeeeeeeeeeeeeejaaiiiiiiijcciiiiiiiiiijaaijiiiiiiiiiiiiiiiiiiiijeeeeeeeeeeeeeeeeeeeeeeejcceeeeeeeeeeeejaaiiiijeeeeeeejceeeeeeeeeeeeeeeeeeeeeeeeejceeeeeeeeeeeeeeeeejaeeeeeejciiiiiiiiiiiiiiiiiiijaeeeejceeeeeeeeeeeeeeeeeejajciiiiiiiiiiiiiiiiiiijaaiiiijiijeeeeeeeeeeejcciiiiiiiiiiiiiiijaaij

在线解密

BUUCTF MISC刷题笔记(六)Misc

[INSHack2017]10-cl0v3rf13ld-lane-signal

文件后缀改为

.jpg

BUUCTF MISC刷题笔记(六)Misc

foremost分离出一个图片,但是这里没有有用的线索

BUUCTF MISC刷题笔记(六)Misc

再回头看jpg文件,发现png图片尾后面还有数据

BUUCTF MISC刷题笔记(六)Misc

百度得知这个是ogg文件,类似mp3的音乐格式,提取出来,Audacity打开,很明显是摩斯电码

BUUCTF MISC刷题笔记(六)Misc

拿去解密得到

flag{M0R53_W1LL_N3V3R_4G3!}

[INSHack2018] (not) so deep

下载得到一个wav文件,查看频谱图,只能看到下半截,

把最高频率调高

,看到部分flag

BUUCTF MISC刷题笔记(六)Misc

前半截flag:

flag{Aud1o_st3G4n

另一半flag肯定不在这里了,尝试音频隐写,mp3stego没反应,结合题目名,使用

DeepSound

需要密码

BUUCTF MISC刷题笔记(六)Misc

这里借助大佬的脚本获取这个wav文件的

hash

#!/usr/bin/env python3
'''
deepsound2john extracts password hashes from audio files containing encrypted
data steganographically embedded by DeepSound (http://jpinsoft.net/deepsound/).
This method is known to work with files created by DeepSound 2.0.
Input files should be in .wav format. Hashes can be recovered from audio files
even after conversion from other formats, e.g.,
    ffmpeg -i input output.wav
Usage:
    python3 deepsound2john.py carrier.wav > hashes.txt
    john hashes.txt
This software is copyright (c) 2018 Ryan Govostes <[email protected]>, and
it is hereby released to the general public under the following terms:
Redistribution and use in source and binary forms, with or without
modification, are permitted.
'''

import logging
import os
import sys
import textwrap


def decode_data_low(buf):
  return buf[::2]

def decode_data_normal(buf):
  out = bytearray()
  for i in range(0, len(buf), 4):
    out.append((buf[i] & 15) << 4 | (buf[i + 2] & 15))
  return out

def decode_data_high(buf):
  out = bytearray()
  for i in range(0, len(buf), 8):
    out.append((buf[i] & 3) << 6     | (buf[i + 2] & 3) << 4 \
             | (buf[i + 4] & 3) << 2 | (buf[i + 6] & 3))
  return out


def is_magic(buf):
  # This is a more efficient way of testing for the `DSCF` magic header without
  # decoding the whole buffer
  return (buf[0] & 15)  == (68 >> 4) and (buf[2]  & 15) == (68 & 15) \
     and (buf[4] & 15)  == (83 >> 4) and (buf[6]  & 15) == (83 & 15) \
     and (buf[8] & 15)  == (67 >> 4) and (buf[10] & 15) == (67 & 15) \
     and (buf[12] & 15) == (70 >> 4) and (buf[14] & 15) == (70 & 15)


def is_wave(buf):
  return buf[0:4] == b'RIFF' and buf[8:12] == b'WAVE'


def process_deepsound_file(f):
  bname = os.path.basename(f.name)
  logger = logging.getLogger(bname)

  # Check if it's a .wav file
  buf = f.read(12)
  if not is_wave(buf):
    global convert_warn
    logger.error('file not in .wav format')
    convert_warn = True
    return
  f.seek(0, os.SEEK_SET)

  # Scan for the marker...
  hdrsz = 104
  hdr = None

  while True:
    off = f.tell()
    buf = f.read(hdrsz)
    if len(buf) < hdrsz: break

    if is_magic(buf):
          hdr = decode_data_normal(buf)
          logger.info('found DeepSound header at offset %i', off)
          break

    f.seek(-hdrsz + 1, os.SEEK_CUR)

  if hdr is None:
    logger.warn('does not appear to be a DeepSound file')
    return

  # Check some header fields
  mode = hdr[4]
  encrypted = hdr[5]

  modes = {2: 'low', 4: 'normal', 8: 'high'}
  if mode in modes:
    logger.info('data is encoded in %s-quality mode', modes[mode])
  else:
    logger.error('unexpected data encoding mode %i', modes[mode])
    return

  if encrypted == 0:
    logger.warn('file is not encrypted')
    return
  elif encrypted != 1:
    logger.error('unexpected encryption flag %i', encrypted)
    return

  sha1 = hdr[6:6+20]
  print('%s:$dynamic_1529$%s' % (bname, sha1.hex()))


if __name__ == '__main__':
  import argparse

  parser = argparse.ArgumentParser()
  parser.add_argument('--verbose', '-v', action='store_true')
  parser.add_argument('files', nargs='+', metavar='file',
    type=argparse.FileType('rb', bufsize=4096))
  args = parser.parse_args()

  if args.verbose:
    logging.basicConfig(level=logging.INFO)
  else:
    logging.basicConfig(level=logging.WARN)

  convert_warn = False

  for f in args.files:
    process_deepsound_file(f)

  if convert_warn:
    print(textwrap.dedent('''
    ---------------------------------------------------------------
    Some files were not in .wav format. Try converting them to .wav
    and try again. You can use: ffmpeg -i input output.wav
    ---------------------------------------------------------------
    '''.rstrip()), file=sys.stderr)
           

再使用john爆破密码

BUUCTF MISC刷题笔记(六)Misc

得到密码

azerty

,解密得到后一半flag:

0_1s_4lwayS_Th3_S4me}

所以:

flag{Aud1o_st3G4n0_1s_4lwayS_Th3_S4me}

[羊城杯 2020]逃离东南亚

先看日记1.zip里的图片,修改高度得到第二个压缩包的密码

wdnmd

BUUCTF MISC刷题笔记(六)Misc

test文件里是

brainfuck

字符,直接拿去解密得到一堆乱码

BUUCTF MISC刷题笔记(六)Misc

因为缺东西了,可以随便拿一个字符去加密,会发现出来的结果总是以

+++++

开头

BUUCTF MISC刷题笔记(六)Misc

在开头补上

++++++++

,再次解密

BUUCTF MISC刷题笔记(六)Misc

得到的结果拿去base64解码,得到elf文件数据

BUUCTF MISC刷题笔记(六)Misc

保存下来,拿去运行,好像又被调戏了

BUUCTF MISC刷题笔记(六)Misc

去看

打架.wav

,试着看波形、频谱图、音频隐写,都没结果,最后发现要用

silenteye

解密

BUUCTF MISC刷题笔记(六)Misc

得到最后一个压缩包的密码

This1sThe3rdZIPpwd

,这次的日记里就有有用的提示了:flag在源代码里

文件很多,慢慢翻,最后在

elf文件下的rtld.c

malloc文件夹下的malloc.c

malloc文件夹下的arena.c

发现有

空格和tab

组成的信息

BUUCTF MISC刷题笔记(六)Misc

把这三个文件放到同一文件夹下,写脚本提取

def f_read(name):
    f=open(name,"r")
    flag=""
    useless=r"abcdefghijklmnopqrstuvw\xyz;,)"
    for line in f.readlines():
        line=line.replace("\n","")
        if "}" in line:
            t = line.split("}")
            if len(t[1]) != 0:
                x = 1
                for i in useless:
                    if i in t[1]:
                        x = 0
                        break
                if x:
                    for s in t[1]:
                        if s == '\t':
                            flag += "1"
                        else:
                            flag += "0"
    f.close()      
    print(flag)
    print("*****")
f_read("rtld.c")
f_read("arena.c")
f_read("malloc.c")
           

跑出来的最后一串二进制,转字符即可得到flag