NepNep Winter-CAMP
1.GIF圖片隱寫

提示此檔案為gif圖片,用010editor打開,發現檔案頭不對,

應為47 49 46 38,添加檔案頭,保存,得到GIF圖片,GIF圖片中有“password is ·········”格式閃過

用stegslove工具打開,analyse->frame browser,查看每一幀,frame 3-8:






字母重疊的圖片,再用stegsolve工具單獨打開,切換通道查看,


得到一些字母和數字:Y2F0Y2hfd GhlX2R5bm FtaWNfZm xhZ19pc19 xdW10ZV9z aW1wbGU=,
觀察特點,為base64編碼,解碼得catch_the_dynamic_flag_is_qumte_simple,則flag為:flag{catch_the_dynamic_flag_is_qumte_simple},提交,發現flag錯誤,翻譯下flag內容,wt?將qumte換成quite,
2.音頻頻譜隱寫
得到一個ohh.wav檔案,使用Audacity工具打開,Audacity工具使用
點擊倒三角標識,切換頻譜圖,找到flag

按住ctrl,滾動滑鼠滑輪,放大圖片,查看flag:fbctf{This_1s_a_massage}

3.流量分析(一)
直接查找flag無果,發現這是FTP的流量包,追蹤一下tcp流,用戶test,密碼test

則flag資訊可能存在于ftp傳輸資料中,搜索ftp-data,追蹤一下tcp流,發現曾執行郭過ls命令,flag可能存在于txt或者png檔案中

搜索flag.txt,并逐個追蹤tcp流,發現可疑字串,猜測是base64編碼,拿去解碼

假的,,,,,,

再搜索一下universe.png檔案,追蹤一下tcp流,

猜測可能想將flag資訊藏在圖片中

發現傳輸過png檔案,復制原始資料,用010editor打開,保存為png檔案,

使用了各種方法,無果,轉向流量分析,查找ftp-data,搜索其它可能傳輸的資料,

發現又保存了一個png檔案,再追蹤一下tcp流,得到該檔案的原始資料,同上操作,得到一張看上去與前一張沒區別的圖片,試著使用stegsolve工具

發現flag:flag{Plate_err_klaus_Mail_Life}
4.zip口令爆破
使用zip口令爆破工具,得到解壓密碼1658967,得到flag

5.LSB音頻隱寫
使用Silenteye 工具,decode,得到flag

6.音頻波形隱寫
用Audacity工具打開,發現音頻開頭又一段可疑的波形圖,猜測是高位代表1,低位代表0,然后二進制轉ASCII碼

則表示的字串為:110011011011001100001110011111110111010111011000010101110101010110011011101011101110110111011110011111101
總共是105位,應該是每7位轉,

得到flag
7.pyc反編譯
- 在線網站反編譯
- 使用命令反編譯
反編譯得到 : #python2
#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
print 'Your input1 is your flag~'
l = len(input1)
code = []
for i in range(l):
num = ((ord(input1[i]) + i) % 128 + 128) % 128
code += chr(num)
for i in range(l - 1):
code[i] = chr(ord(code[i]) ^ ord(code[i + 1]))
print code
code = [
'\x0b',
'\x0e',
'\t',
'\x15',
'0',
'4',
'\x01',
'\x06',
'\x14',
'4',
',',
'\x1b',
'U',
'?',
'o',
'6',
'*',
':',
'\x01',
'D',
';',
'%',
'\x13']
re得
code = [
'\x1f',
'\x12',
'\x1d',
'(',
'0',
'4',
'\x01',
'\x06',
'\x14',
'4',
',',
'\x1b',
'U',
'?',
'o',
'6',
'*',
':',
'\x01',
'D',
';',
'%',
'\x13']
flag = ''
for i in range(len(code) - 2,-1,-1):
code[i] = chr(ord(code[i]) ^ ord(code[i + 1]))
for i in range(len(code)):
code[i] = chr((ord(code[i])-i)%128)
flag+=code[i]
print flag
運行得flag

提交,flag錯誤,wt?多次嘗試,將GWHT換成flag即可
8.MP3 隱寫
附件無法播放,用010打開,

發現是jpg檔案頭,修改擴展名,得到一張圖片

并且在末尾發現藏有zip檔案,復制到kali,使用binwalk命令,得到一個加密的壓縮包

在這里插入圖片描述

然后根據圖片提示使用Mp3stego工具,下載,用法見該工具檔案中的readme.txt,
將得到的圖片放入Decode.exe所在的檔案夾中,當前目錄輸入cmd回車,輸入命令
谷歌翻譯:Gourd Little King Kong,沒用,,,,
在網上查了查,試了一下,發現是Gourd Small Diamond

解壓密碼

解壓,得到flag

輸入flag,提示錯誤,經過多次嘗試,wt?,梅開二度,,,flag為flag{MSTSEC_DINGANN_KEY_IS_GSD}
9.Affine_task
附件py:
from string import digits, ascii_lowercase
from secret import numbers, A, B
assert min([i in digits for i in numbers])
flag = "flag{"+"".join([ascii_lowercase[int(i)] for i in numbers])+"}"
assert numbers == "".join([str(ascii_lowercase.find(i)) for i in flag[5:-1]])
Ciphertext = ""
for i in flag:
if i not in ascii_lowercase:
Ciphertext += i
else:
Ciphertext += ascii_lowercase[(ascii_lowercase.find(i)*A+B) % 26]
print("Ciphertext =", Ciphertext)
# Ciphertext = vjsg{dckvzksr}
exp:
from Crypto.Util.number import *
from string import ascii_lowercase
table = ascii_lowercase
Ciphertext = "vjsg{dckvzksr}"
MOD = len(table)
def crack():
for a in range(MOD):
for b in range(MOD):
if (a*table.find("f")+b) % MOD == table.find(Ciphertext[0]):
if (a*table.find("l")+b) % MOD == table.find(Ciphertext[1]):
if (a*table.find("a")+b) % MOD == table.find(Ciphertext[2]):
if (a*table.find("g")+b) % MOD == table.find(Ciphertext[3]):
print("a, b = {}, {}".format(a, b))
return (a, b)
flag = ""
A, B = crack()
for i in Ciphertext:
if i not in table:
flag += i
else:
flag += table[inverse(A, MOD)*(table.find(i)-B) % MOD]
print(flag)
print("".join([str(ascii_lowercase.find(i)) for i in flag[5:-1]]))
10.明文攻擊
附件為一個zip壓縮包,里面是加密的兩個檔案,flag.doc和readme.txt
明文攻擊介紹

根據提示,再創建一個readme.txt檔案,將提示內容粘貼保存,保證加密的和創建的readme.txt檔案的CRC32值和檔案大小相同,然后以zip壓縮



然后使用ARCHPR工具進行明文攻擊,

點擊開始,等待,,,,,,

點擊下方保存,得到一個zip3_decrypted.zip檔案,里面即是已解密的檔案,
打開flag.doc,是小說片段,其中藏在flag

11.python腳本使用(一)
附件為一張圖片,名為misc.jpg

根據提示,應該是用python腳本解決圖片隱寫
使用binwalk命令分析一下,發現zlib壓縮

并在生成的extracted檔案夾中發現一堆總共625位二進制字串,emm…25*25=625,

將這些二進制字串使用python腳本轉圖片
from PIL import Image
MAX = 25
pic = Image.new("RGB",(MAX, MAX))
str = "得到的二進制數字"
i=0
for y in range (0,MAX):
for x in range (0,MAX):
if(str[i] == '1'):
pic.putpixel([x,y],(0, 0, 0))
else:
pic.putpixel([x,y],(255,255,255))
i = i+1
pic.show()
pic.save("flag.png")
得到一張二維碼,解碼得flag

或者用010找到zlib壓縮部分,檔案頭78 9C

使用zlib解壓腳本:
import zlib
s = '''
78 9C 5D 91 01 12 80 40 08 02 BF 04 FF FF 5C 75
29 4B 55 37 73 8A 21 A2 7D 1E 49 CF D1 7D B3 93
7A 92 E7 E6 03 88 0A 6D 48 51 00 90 1F B0 41 01
53 35 0D E8 31 12 EA 2D 51 C5 4C E2 E5 85 B1 5A
2F C7 8E 88 72 F5 1C 6F C1 88 18 82 F9 3D 37 2D
EF 78 E6 65 B0 C3 6C 52 96 22 A0 A4 55 88 13 88
33 A1 70 A2 07 1D DC D1 82 19 DB 8C 0D 46 5D 8B
69 89 71 96 45 ED 9C 11 C3 6A E3 AB DA EF CF C0
AC F0 23 E7 7C 17 C7 89 76 67 D9 CF A5 A8 00 00
00 00 49 45 4E 44 AE 42 60 82
'''
s = s.replace(' ','').replace('\n','')
b = bytes.fromhex(s)
flag = zlib.decompress(b)
print(flag)
同樣得到一堆二進制字串
12.數字水印隱寫
用010打開,點擊模板尾,發現還藏有無檔案頭的png檔案

可以直接用010新建檔案,將隱藏的png檔案資料復制到新建檔案中,并添加上png檔案頭,89 50 4E 47 0D 0A 1A 0A 00 00 00 0D,保存



得到一張與原圖一樣的圖片,猜測是雙圖隱寫
使用BlindWaterMark工具,將兩張圖片復制到該工具下,并在當前目錄cmd回車,輸入命令python3 bwmforpy3.py decode half.png 123.png 333.png,然后什么事也沒發生,不知道是什么原因,難道是python庫的版本不對????

無果,,,,
這題解題思路可參見南京大學:數字水印隱寫writeup
13.流量分析(二)-hard?????
14.流量分析(三)?????
15.記憶體取證(一)
解題思路見記憶體取證
16.python腳本使用(二)?????
17.流量分析-hard???????
18.記憶體取證(二)????????
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263715.html
標籤:其他
