攻防世界 MISC篇

天涯浪子 提交于 2019-12-05 15:38:04

Excaliflag

  一张图片,winhex打开没什么发现,分值不高,应该属于常见的图片隐写题目。如果对于图片的格式有详细的了解,应该很容易就能够知道了属于最低有效位(LSB)隐写,下面是通过photoshop来处理得到的flag.

签到题

  Base64、栅栏、凯撒;可以直接通过在线网站解密了,在这里使用python来求解(纯属练习练习下代码)

import base64

# base64解密
def b64Decode():
    s="Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ=="
    temp=str(base64.b64decode(s),encoding = "utf-8")
    return temp

# 栅栏密码
def zhalan(s):
    #确定可能的栏数
    s_len = len(s)
    field=[]
    for i in range(2,s_len):
        if(s_len%i==0):
            field.append(i)
    mingwen=""
    for j in field:
        k=int(s_len/j)
        for a in range(j):
            for m in range(k):
                mingwen=mingwen+s[a]
                a=a+j
    # 分割字符串
    n=0
    list=[]
    for i in range(int(len(mingwen)/s_len)):
        list.append(mingwen[n:n+s_len])
        n=n+s_len
    return list

# 凯撒密码
# coding:utf-8
def kaisa(args):
    for j in range(26):
        for i in range(len(args)):
            if(ord(args[i])<65 or ord(args[i])>122):
                print(args[i],end="")
            elif(ord(args[i])>90 and ord(args[i])<97):
                print(args[i],end="")
            else:
                temp=ord(args[i])+j
                if(ord(args[i])>=97):
                    if(temp>122):
                        print(chr(temp-26),end="")
                    else:
                        print(chr(temp),end="")
                else:
                    if(temp>90):
                        print(chr(temp-26),end="")
                    else:
                        print(chr(temp),end="")
        print()

#编程能力和算法都太菜了,写的有些复杂了
if __name__ == '__main__':
    s = b64Decode()
    args=zhalan(s)
    print(args)
    for i in args:
        kaisa(i)

Avatar

就知道下outguess

outguess -r 1.jpg out

得到:We should blow up the bridge at midnight

What-is-this

得到两张图片通过StegSolve异或得到:

Training-Stegano-1

easycap

追踪TCP流得到:FLAG:385b87afc8671dee07550290d16a8071

Get-the-key.txt

通过file命令查看了下文件类型:Linux rev 1.0 ext2 filesystem data (mounted or unclean), UUID=0b92a753-7ec9-4b20-8c0b-79c1fa140869

通过mout挂载:

mount -o loop /root/forensic100 /root/mnt/misc

更具标题需要查找key.txt

grep -r key.txt

# 匹配到二进制文件 1

1: gzip compressed data, was "key.txt", last modified: Wed Oct 1 06:00:52 2014, from Unix, original size 30

gunzip < 1

# SECCON{@]NL7n+-s75FrET]vU=7Z}

embarrass

直接Ctrl+F查找一波就有了

肥宅快乐题

题目描述:

真正的快乐的游戏题,打通就给flag哦,与肥宅快乐水搭配更佳。 Flash游戏,通关后,注意与NPC的对话哦;)

下载是一个swf文件, 百度得知:SWF是一种基于矢量的Flash动画文件, SWF格式文件广泛用于创建吸引人的应用程序,它们包含丰富的视频、声音、图形和动画。

打通关游戏或者通过potplayer定位到57帧

小小的PDF

binwalk分析下发现存在三张图片

直接通过foremost工具提取就得到flag再第三张图片里面

Test-flag-please-ignore

十六进制

glance-50

把每一帧提取出来拼接就可以了

# 图片拼接
import PIL.Image as Image
import os, sys
Temp=Image.open('Frame0.jpg')
w,h=Temp.size
toImage = Image.new('RGB', (w*201, h))
for y in range(201):
    fname = "Frame%d.jpg" %y
    fromImage = Image.open(fname)
    toImage.paste(fromImage, (y * w, 0))
toImage.save('mage.jpg')

4-2

古典替换密码,通过 https://quipqiup.com/ 网站跑一下得到:

In cryptography a substitution cipher is a ?ethod of encoding by which units of plaintext are replaced with ciphertext If you know the way of encoding u will get the flag which is classical-cipher_is_not_security_hs

misc1

d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd

hex编码,解码后不是可见字符的范围,然后模128之后,得到flag

s='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd'
flag=""
for i in range(len(s)/2):
    flag+=chr(int(s[:2],16)%128)
    s=s[2:]
print flag

hit-the-core

通过strings命令,发现一个疑似字符串

cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}

然后可以得出规律:

cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}

那么通过python每个四个字符提取就得到了最后的flag:

s='cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
flag=''
for i in range(3,len(s),5):
    flag+=s[i]
print(flag)

Cephalopod

搜索关键字符串发现一个flag.png文件,导出来即得到了flag:

pure_color

借助工具StegSolve:

(之后尝试不用工具,自己写个脚本试试看)

2-1

png文件,发现文件头不对,修改后依旧无法打开,binwalk也没发现什么东西。然后发现宽度被修改为了0,那么很明显通过CRC爆破出宽度了

import struct
import binascii
import os
 
m = open("1.png","rb").read()
for i in range(1024):
    c = m[12:16] + struct.pack('>i', i) + m[20:29]
    crc = binascii.crc32(c) & 0xffffffff
    if crc == 0x932f8a6b:
        print(hex(i))

这里直接贴的师傅的代码:https://blog.csdn.net/zz_Caleb/article/details/89927673

(之后再好好研究下关于CRC的问题)

János-the-Ripper

爆破即可

神奇的Modbus

搜索字符串得到的是:sctf{Easy_Mdbus},但是得改成sctf{Easy_Modbus}提交

2017_Dating_in_Singapore

题目描述

01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625

脑洞······🙄🙄🙄

4-1

从png文件中提取出压缩文件,得到一个tips.txtday2's secret.zip

tips.txt内容

Although two days doing the same things, but day2 has a secret than day1
-。-

day2's secret.zip两张png文件,图像内容一样,文件大小不一样,猜想盲水印

github上找一个: https://github.com/chishaxie/BlindWaterMark

can_has_stdio?

txt文件,查看内容明显可知Brainfuck编码,地址: https://www.splitbrain.org/services/ook

5-1

没见过,没有思路,不知是啥,遂查看Writeup

了解到xortool: A tool to analyze multi-byte xor cipher

地址: https://github.com/hellman/xortool

其中-l就是指定密钥长度,-c表示出现频率最高的字符。这个需要根据经验,比如文本内容一般是空格20(十六进制),二进制文件一般是00(十六进制)

猜测key为:GoodLuckToYou

import os

flag = ""
key = "GoodLuckToYou"
with open ("1",'rb') as f:
    c = f.read()
for i,c in enumerate(c):
    flag += chr(ord(c) ^ ord(key[i % len(key)]))
print flag

MISCall

file命令查看发现是个bzip2压缩文件,解压出来发现有一个flag.txt文件和一个.git文件夹,考察git相关命令,可🥦🐓我还没有去学习使用过git,所以只能够···

常用命令:https://www.jianshu.com/p/93318220cdce

可以看到flag.txt文件被修改过,新增了一个s.py文件然后删除了

适合作为桌面

解压出来一张png图片,通过StegSolve分析得到一张二维码:

扫码得到一串应该时十六进制字符串,通过winhex新建文件保存

通过file命令得知时python2.7编译后的文件,直接修改文件后缀名为.pyc,通过在线网站或者是uncompyle反编译得到python文件

def flag():
    str = [102, 108, 97, 103, 123, 51, 56, 97, 53, 55, 48, 51, 50, 48, 56, 53, 52, 52, 49, 101, 55, 125]
    flag = ''
    for i in str:
        flag += chr(i)
    print flag

3-1

通过file命令最终得到一个pcap文件,搜索关键字符串发现一个rar的文件,导出来之后的rar文件是加密的,显然不是简单的爆破,继续寻找有用信息

可以得知1就是导出来的rar文件,2是一段字符串,3是一段python代码

# coding:utf-8
from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64
IV = 'QWERTYUIOPASDFGH'
def decrypt(encrypted):
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.decrypt(encrypted)

def encrypt(message):
    length = 16
    count = len(message)
    padding = length - (count % length)
    message = message + '\0' * padding
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.encrypt(message)
   
str = 'this is a test'
example = encrypt(str)
print(decrypt(example))

那么直接通过给出的代码解密即可:

from Crypto import Random
from Crypto.Cipher import AES
import sys
import base64
IV = 'QWERTYUIOPASDFGH'.encode("utf8")
def decrypt(encrypted):
    aes = AES.new(IV, AES.MODE_CBC, IV)
    return aes.decrypt(encrypted)

print(decrypt(base64.b64decode("19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo=")))

得到密码解密即可得到flag了

b'passwd={No_One_Can_Decrypt_Me}\x00\x00'

Banmabanma

我们的秘密是绿色的

需要用到一个OurSecret的软件,然后密码在图片中:0405111218192526

得到一个try.zip文件,发现是加密的,提示是:你知道coffee的生日是多少么?那马就直接爆破吧,得到密码19950822,解压出来一个readme.txt和一个flag.zip文件,然后很明显的明文攻击,获取到下一个flag.zip之后仍然是加密的,但没有提示,通过软件爆破发现是没有加密的,那应该就是zip伪加密了。

将第二个01 09改为00 09,就可以了,然后得到txt文件中的内容是:qddpqwnpcplen%prqwn_{_zz*d@gq}

更具flag{}的格式,应该是经过了栅栏加密,通过网站列举解密 https://www.ctftools.com/down/

解密得到:qwlr{ddneq_@dpnwzgpc%nzqqpp_*},显然这不是最后的flag,然后凯撒得到:flag{ssctf_@seclover%coffee_*}

simple_transfer

打开数据包可以看到很多的网络文件系统协议数据包(NFS),说明正在进行文件传输。通过追踪TCP流可以看到

这里的字符串%PDF-1.5是PDF文件头,说传输了PDF文件,那么就是尝试恢复出PDF文件,但是似乎没有这么容易的整出来还能够正常打开(或许只是我太🥦了),所以就只能通过foremost直接分离数据包看看了,结果是可以的

Just-No-One

不会,看过WriteUp后,还真是不会,放弃~

warmup

解压出来,首先熟悉的套路,明文攻击,成功解压,然后还是熟悉的套路,图像内容一样,大小不一样的两张PNG图片,盲水印。

Erik-Baleog-and-Olaf

通过Stegsolve分离可以发现一张二维码,但是这个二维码有点难搞,就反复的找到合适的通过photoshop调整能够扫出来flag

Reverse-it

打开发现不知道什么格式,但是看到文件的末尾结合题目

原始文件:

jpg文件:

没错,反转,直接上python

def read_content():
    data = []
    with open("re","rb") as f:
        #循环读取一张图片,一次性读取1024个字节
        while True:
            con = f.read(1)
            if con == b"":
                break
            data.append(con[0])  
    return data[::-1] 

def write_content(data):
    flag = []
    for i in data:
        temp = bin(i).replace('0b', '').zfill(8)
        flag.append(eval("0b"+temp[4:8]+temp[0:4]))
    with open("flag.jpg","wb") as fp:
        fp.write(bytes(flag))

得到的图片翻转一下就可以了

Py-Py-Py

反编译之后得到:

import sys, os, hashlib, time, base64
fllag = '9474yeUMWODKruX7OFzD9oekO28+EqYCZHrUjWNm92NSU+eYXOPsRPEFrNMs7J+4qautoqOrvq28pLU='

def crypto(string, op='encode', public_key='ddd', expirytime=0):
    ckey_lenth = 4
    public_key = public_key and public_key or ''
    key = hashlib.md5(public_key).hexdigest()
    keya = hashlib.md5(key[0:16]).hexdigest()
    keyb = hashlib.md5(key[16:32]).hexdigest()
    keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''
    cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()
    key_lenth = len(cryptkey)
    string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string
    string_lenth = len(string)
    result = ''
    box = list(range(256))
    randkey = []
    for i in xrange(255):
        randkey.append(ord(cryptkey[(i % key_lenth)]))

    for i in xrange(255):
        j = 0
        j = (j + box[i] + randkey[i]) % 256
        tmp = box[i]
        box[i] = box[j]
        box[j] = tmp

    for i in xrange(string_lenth):
        a = j = 0
        a = (a + 1) % 256
        j = (j + box[a]) % 256
        tmp = box[a]
        box[a] = box[j]
        box[j] = tmp
        result += chr(ord(string[i]) ^ box[((box[a] + box[j]) % 256)])

    if op == 'decode':
        if result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0:
            if result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:
                pass
            return result[26:]
        else:
            return
    else:
        return keyc + base64.b64encode(result)


if __name__ == '__main__':
    while True:
        flag = raw_input('Please input your flag:')
        if flag == crypto(fllag, 'decode'):
            print('Success')
            break
        else:
            continue
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!