攻防世界 MISC篇


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM