攻防世界———MISC 高手区题解
目錄
1,base64stego
2,easycap
3,Avatar
4,What-is-this
5,簽到題
6,Training-Stegano-1
7,Excaliflag
8,Get-the-key.txt
9,glance-50
10,4-2
11,misc1
12,embarrass
13,?肥宅快樂題
14,小小的PDF
至此 我在攻防世界中已經(jīng) 遇到 三種 pdf 的隱寫方式:
15,Cephalopod
16,hit-the-core
17,pure_color
18,2-1
19,János-the-Ripper
20,2017_Dating_in_Singapore
21, 4-1
22,?神奇的Modbus
23,5-1
24,can_has_stdio?
25,MISCall
26,3-1
27,適合作為桌面
28, banmabanma
29,我們的秘密是綠色的
30,simple_transfer
31,Just-No-One
32, warmup
33,Erik-Baleog-and-Olaf
34,Py-Py-Py
35, reverse_it
36,mysql
1,base64stego
很神奇的base 64 加密 (在base 64 的密文中加密,還不影響原明文)
(轉(zhuǎn)載于: https://www.tr0y.wang/2017/06/14/Base64steg/? 做了一定的修改)
(簡要原理,ascii碼是用8位二進(jìn)制表示一個字符的,而base64是用6位二進(jìn)制表示一個字符,將明文字符轉(zhuǎn)化為二進(jìn)制后再每6位劃分成 一個 “字節(jié)”,然后將每個字節(jié)轉(zhuǎn)化為一個字符,就變成了base64密文,而在base64的密文中加密是利用,每一段密文的最后4位二進(jìn)制是不影響明文的,可以將flag轉(zhuǎn)化為二進(jìn)制后拆分隱藏在每一段的最后4位二進(jìn)制中)
?
復(fù)習(xí)一下 Base64 吧
BASE64 是一種編碼方式, 是一種可逆的編碼方式.
編碼后的數(shù)據(jù)是一個字符串, 包含的字符為: A-Za-z0-9+/
共 64 個字符:26 + 26 + 10 + 1 + 1 = 64
其實是 65 個字符, “=”是填充字符.
64 個字符需要 6 位二進(jìn)制來表示, 表示成數(shù)值為 0~63.
這樣, 長度為 3 個字節(jié)的數(shù)據(jù)經(jīng)過 Base64 編碼后就變?yōu)?4 個字節(jié)
編碼
比如, 字符串”Tr0”經(jīng)過 Base64 編碼后變?yōu)椤盫HIw”
上面說的字符串長度為 3 個字節(jié)的數(shù)據(jù)位數(shù)是 8x3=24, 可以精確地分成 6x4.
如果字節(jié)數(shù)不是 3 的倍數(shù), 則位數(shù)就不是 6 的倍數(shù), 那么就不能精確地劃分成 6 位的塊.
此時, 需在原數(shù)據(jù)二進(jìn)制值后面添加零, 使其字節(jié)數(shù)是 6 的倍數(shù).
然后, 在編碼后的字符串后面添加 1 個或 2 個等號”=”, 表示所添加的零值字節(jié)數(shù).
比如, 字符串”Tr0y”經(jīng)過 Base64 編碼后變?yōu)椤盫HIweQ==”
橙色底紋就是添加的 0.
這是 Base64 編碼的方式.
解碼
解碼就是編碼的逆過程.
base64密文中隱寫原理
注意紅色的 0, 我們在解碼的時候?qū)⑵鋪G棄了, 所以這里的值不會影響解碼. 所以我們可以在這進(jìn)行隱寫.
為什么等號的那部分 0 不能用于隱寫? 因為修改那里的二進(jìn)制值會導(dǎo)致等號數(shù)量變化, 解碼的第 1 步會受影響. 自然也就破壞了源字符串.
而紅色部分的 0 是作為最后一個字符二進(jìn)制的組成部分, 還原時只用到了最后一個字符二進(jìn)制的前部分, 后面的部分就不會影響還原.
唯一的影響就是最后一個字符會變化. 如下圖
如果你直接解密’VHIweQ==’與’VHIweR==’, 得到的結(jié)果都是’Tr0y’.
當(dāng)然, 一行 base64 頂多能有 2 個等號, 也就是有 2*2 位的可隱寫位. 所以我們得弄很多行, 才能隱藏一個字符串, 這也是為什么題目給了一大段 base64 的原因.
接下來, 把要隱藏的 flag 轉(zhuǎn)為 8 位二進(jìn)制, 塞進(jìn)去就行了.
?
加密:
轉(zhuǎn)載自:https://www.tr0y.wang/2017/06/14/Base64steg/ import base64 flag = 'Tr0y{Base64isF4n}' #flag bin_str = ''.join([bin(ord(c)).replace('0b', '').zfill(8) for c in flag]) base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' with open('0.txt', 'rb') as f0, open('1.txt', 'wb') as f1: #'0.txt'是明文, '1.txt'用于存放隱寫后的 base64for line in f0.readlines():rowstr = base64.b64encode(line.replace('\n', ''))equalnum = rowstr.count('=')if equalnum and len(bin_str):offset = int('0b'+bin_str[:equalnum * 2], 2)char = rowstr[len(rowstr) - equalnum - 1]rowstr = rowstr.replace(char, base64chars[base64chars.index(char) + offset])bin_str = bin_str[equalnum*2:]f1.write(rowstr + '\n')解密:
?
給出加密腳本執(zhí)行結(jié)果
flag{Base_sixty_four_point_five}
2,easycap
下載下來是一個截取的流量包,用wireshark打開,先追蹤流,沒想到直接得到了flag:
3,Avatar
是一張圖片,先用formost分離一下,沒有什么東西,用stegsolve看一下也沒發(fā)現(xiàn)什么,再放進(jìn)winhex中看一下,依舊沒收獲,
再試其他工具,……在用outguess時分離出來了隱藏信息:
We should blow up the bridge at midnight
直接提交
4,What-is-this
解壓文件,是一個沒有后綴的文件,放進(jìn)winhex中審查一下,發(fā)現(xiàn)有幾個文件名,目測這是一個壓縮包,把后綴給為zip后解壓,
兩張圖片,正常思路:1,圖片拼接 2,盲水印 3,各有一部分flag
先試一下 圖片拼接,用stegsolve把兩張圖片合成一下:
直接提交
5,簽到題
(本以為很簡單,實際……)
將Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==? base64解密一下:ggQ@gQ1fqh0ohtjpt_sw{gfhgs#}
你以為這就結(jié)束了?提交錯誤
猜測{}的位置不對,進(jìn)行一下柵欄密碼:ggQ@gQ1fqh0ohtjpt_sw{gfhgs#}
2字一欄:gQg1q0hjts{fg#g@Qfhotp_wghs}
4字一欄:ggqht{ggQht_gsQ10jsf#@fopwh}
7字一欄:gfjggqpfQhth@0_ggossQhw#1t{}
14字一欄:gjgpQt@_gsQw1{fgqfhh0gosh#t}
就4個都提交一下試試,結(jié)果全都不對,,,,
用 ggqht{ggQht_gsQ10jsf#@fopwh}? ? 再試一下 凱撒密碼:
看到一個ctf直接提交:
ssctf{ssctf_sec10ver#@rabit}
6,Training-Stegano-1
好小的一張圖片,第一反應(yīng)是用winhex修改寬和高,沒想到打開直接發(fā)現(xiàn)了flag:
提交:
steganoI
7,Excaliflag
用foremost分離沒發(fā)現(xiàn)東西,用stegsolve看一下:
8,Get-the-key.txt
解壓文件 得到一個 沒有后綴的 文件??forensic100,看這個名字 我還以為是一個 截取的流量包,后綴改為 pcap 看了一下,沒發(fā)現(xiàn)什么的,用winhex看一下,猜測是一個壓縮包,后綴改為 zip
解壓得到 key.txt:
SECCON{@]NL7n+-s75FrET]vU=7Z}
9,glance-50
?
打開是一個極窄的git圖片,那還還用想嗎?思路肯定是,先把動態(tài)圖的每一幀分離出來,再拼接起來
上腳本:
分離:
import os from PIL import Imagedef seoaration_gif(gif_file):png_dir = gif_file[:-4] + '/'os.mkdir(png_dir)img = Image.open(gif_file)try:while True:current = img.tell()img.save(png_dir+str(current)+'.png')img.seek(current+1)except:passif __name__=='__main__':gif_file = '123.gif'seoaration_gif(gif_file)拼接:
#拼接圖像.py from PIL import Image path = "C:\\Users\\HP\\Desktop\\文檔\\Python\\text\\123\\" save_path = 'C:\\Users\\HP\\Desktop\\文檔\\Python\\text\\'im = Image.new('RGBA',(2*201,600)) #創(chuàng)建新照片imagefile = [] #存儲所有的圖像的名稱 width = 0 for i in range(0,201):imagefile.append(Image.open(path+str(i)+'.png')) #遍歷,將圖像名稱存入imagfilefor image in imagefile:im.paste(image,(width,0,2+width,600)) #將圖片張貼到另一張圖片上width = width +2 im.save(save_path+'result.png') im.show()得到圖片:
?
10,4-2
得到一段看起來毫無規(guī)律的密文:
Eg qnlyjtcnzydl z umaujejmjetg qeydsn eu z bsjdtx tw sgqtxegc al kdeqd mgeju tw yrzegjsoj zns nsyrzqsx kejd qeydsnjsoj Ew ltm fgtk jds kzl tw sgqtxegc m kerr csj jds wrzc kdeqd eu qrzuueqzr-qeydsn_eu_gtj_usqmnejl_du不知道從何下手,看了一下別人的writeup,發(fā)現(xiàn)是 詞頻分析
https://quipqiup.com/
?
flag{classical-cipher_is_not_security_hs}
?
11,misc1
打開是一段密文:
d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd以為是base64,發(fā)現(xiàn)解不出來,再回頭仔細(xì)看,發(fā)現(xiàn)只有 0~9 a~f? 十六進(jìn)制
但是,直接 用 16進(jìn)制=》ascii? 發(fā)現(xiàn)是一堆亂碼 ,
常識 ascii 只有 到128? ,而發(fā)現(xiàn)這一串16進(jìn)制每兩位化成 十進(jìn)制 后都大于 128
肯定得減去128后再 轉(zhuǎn)成 ascii:
?直接上代碼:
char = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd" for i in range(0,len(char),2):print(chr(int(char[i:i+2],16)-128),end="")That was fast! The flag is: DDCTF{9af3c9d377b61d269b11337f330c935f}
12,embarrass
下載下來是一個 流量包,在linux中 搜索一下 flag 字符串 看會不會有意外收獲:
沒想到直接出來了
flag{Good_b0y_W3ll_Done}
13,?肥宅快樂題
a.這個題目下載到手是一個.swf后綴的文件
b.用到一個特殊的工具,叫做potplayer
c.把這個.swf文件使用這個工具打開
d.根據(jù)提示注意對話就好
點擊 右下角的 開始? ?就會 自動播放? 在 放到? 57 幀 的時候, 出現(xiàn)了 下面的對話 有一段 base64 :
狗日的? ?不能復(fù)
?提取出來:U1lDe0YzaVpoYWlfa3U0aWxlX1QxMTF9
base64解碼得flag:SYC{F3iZhai_ku4ile_T111}
14,小小的PDF
下載下來是一個 pdf文件 ,不管有沒有隱藏文件,先用formost 分離一下,沒想到直接 分離出來了三張圖片,包含一張flag圖片:
至此 我在攻防世界中已經(jīng) 遇到 三種 pdf 的隱寫方式:
?
1,新手區(qū) :?pdf? :將flag隱藏在圖片的下面? ? ? 》? 需要 先將格式轉(zhuǎn)為 word? 再將圖片拖開 就能看到 flag
2,新手區(qū) :stegano? :利用類似水印的方法將flag隱藏在大量文字下面(不清粗具體方法) 》 全選復(fù)制 到 txt文件中就能 顯示出密文
3,高手區(qū): 小小的pdf: 嵌入文件? 》 直接用 formost 分析 或用? binwalk分離
?
15,Cephalopod
打開數(shù)據(jù)包,嘗試性 在分組字節(jié)流中 搜索字符串 flag? 然后就看到了有一張 flag.png:
然后 追蹤流 (還原原始數(shù)據(jù)包)發(fā)現(xiàn)flag.png 的數(shù)據(jù)并不在 75 這個包里:
看下一個流:發(fā)現(xiàn)了 png 的數(shù)據(jù)文件:選擇 原始數(shù)據(jù)流 =》save as? ?flag.png (直接保存的話,部分?jǐn)?shù)據(jù)會丟失)
然后用 winhex 打開,刪除 圖片頭前面的 無關(guān)數(shù)據(jù):
然后就看到了flag.png:
HITB{95700d8aefdc1648b90a92f3a8460a2c}
16,hit-the-core
下載下來是一個 core文件:
小知識點 core:
core 文件:核心文件(core file),也稱核心轉(zhuǎn)儲(core dump),是操作系統(tǒng)在進(jìn)程收到某些信號而終止運行時,將此時進(jìn)程地址空間的內(nèi)容以及有關(guān)進(jìn)程狀態(tài)的其他信息寫出的一個磁盤文件。這種信息往往用于調(diào)試。
核心文件通常在系統(tǒng)收到特定的信號時由操作系統(tǒng)生成。信號可以由程序執(zhí)行過程中的異常觸發(fā),也可以由外部程序發(fā)送。動作的結(jié)果一般是生成一個某個進(jìn)程的內(nèi)存轉(zhuǎn)儲的文件,文件包含了此進(jìn)程當(dāng)前的運行堆棧信息。有時程序并未經(jīng)過徹底測試,這使得它在執(zhí)行的時候一不小心就會遭到破壞。這可能會導(dǎo)致核心轉(zhuǎn)儲(core dump)。現(xiàn)在的UNIX系統(tǒng)極少會面臨這樣的問題。即使遇到,程序員可以通過核心映像調(diào)試程序來找到錯誤原因。
?
不知如何下手 ,看別人的博客,發(fā)現(xiàn)是用 strings 命令 提取出 文件中的 字符串:
strings 123.core竟然能 從這一段 字符串中 發(fā)現(xiàn) 幾個 大寫字母 之間的聯(lián)系: ALECTF 而且每個字母中間隔了 5個字符,
提取這些字符:(真是TM服了,這題都能出)
data = 'cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}' flag = '' for i in range(3, len(data), 5):flag += data[i]print(flag)得到flag:?ALEXCTF{K33P_7H3_g00D_w0rk_up}
17,pure_color
打開是一張白色圖片 ,放進(jìn)stegsolve 中分析一下:
flag{true_steganographers_doesnt_need_any_tools}
18,2-1
是一個png圖片 ,打不開 ,文件損壞,用 winhex 打開發(fā)現(xiàn)? 文件頭 是錯的 ,把文件頭修改為 89 50 4E 47
保存后發(fā)現(xiàn)還是打不開,用 tweakpng 打開 有報錯:
把文件 IHDR 的crc校驗值 修改為? 55 d5 f6 4f 后發(fā)現(xiàn) 還是打不開,
再仔細(xì)看 發(fā)現(xiàn) 圖片的 寬是 0?
根據(jù) crc校驗值 算寬是多少:
import struct import binascii import osm = open("misc4.png","rb").read() for i in range(1024):c = m[12:16] + struct.pack('>i', i) + m[20:29]crc = binascii.crc32(c) & 0xffffffffif crc == 0x932f8a6b: #自己根據(jù)情況改print(i)得到寬度為709,修改寬度為709換算為16進(jìn)制為? ?02 c5
得flag
wdflag{Png_C2c_u_kn0W}
19,János-the-Ripper
解壓后得到一個 沒有后綴的文件 放進(jìn)winhex中發(fā)現(xiàn)是一個? zip包,后綴改為 zip
解壓發(fā)現(xiàn)需要密碼,直接爆破得到密碼 :fish
解壓得到flag:
flag{ev3n::y0u::bru7us?!}
20,2017_Dating_in_Singapore
01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625腦洞是真尼瑪大!
12段 數(shù)字,每一段都是 有偶數(shù)個數(shù)字,發(fā)現(xiàn)如果兩個 字符一組的話,最大的數(shù)字的 31,
剛好是日歷中最大的數(shù)字,然后就在日歷上 一個數(shù)字一個數(shù)字地 連,然后就畫出了 下面的字符:?
flag:
HITB{CTFFUN}
21, 4-1
解壓得到一張圖片,用formost分離出來一個 壓縮包,解壓得到
得到 兩張 “一樣”? 的圖片,和一個 tips.txt? ?大意是 指 day2.png? 中比 day1.png? 多了點 “東西”
這一看肯定是 水印啊 ,盲水印啊,
直接提取盲水印:
python2 bwm.py decode day1.png day2.png flag.png?
?
得到水印:
22,?神奇的Modbus
Modbus是一種串行通信協(xié)議,
Modbus協(xié)議當(dāng)前存在用于串口、以太網(wǎng)以及其他支持互聯(lián)網(wǎng)協(xié)議的網(wǎng)絡(luò)的版本。
大多數(shù)Modbus設(shè)備通信通過串口EIA-485物理層進(jìn)行
用wireshark 打開流量包,直接在 分組字節(jié)流 中 搜索 sctf 字符串? 直接出來:
但是 sctf{Easy_Mdbus} 竟然不是 正確答案
正確答案 :sctf{Easy_Modbus}??
23,5-1
是一個 不知道文件類型的 文件? ,用 file 分析一下? 顯示是類型 為? data? ,
看別人的博客,大意是需要用? xortool 工具?
先嘗試出 key:GoodLuckToYou
其中-l就是指定密鑰長度,-c表示出現(xiàn)頻率最高的字符。這個需要根據(jù)經(jīng)驗,比如文本內(nèi)容一般是空格(20),二進(jìn)制文件一般是00
?
然后用 腳本進(jìn)行 解密:
import osc = open("123",'rb').read() key = "GoodLuckToYou" def xor(c,k):keylen = len(k)res = ""for pos,c in enumerate(c):res +=chr(ord(c) ^ ord(k[pos % keylen]))return res print xor(c,key)?
小知識點:
xortool 工具,
xortool.py是基于python的腳本,用于完成一些xor分析,包括:
- 猜想key的長度
- 猜想key的值
- 解密一些經(jīng)過xoe加密的文件
24,can_has_stdio?
打開文件是一大串brainfuck密文,在線解碼得到flag
:http://tool.bugku.com/brainfuck/?wafcloud=2
25,MISCall
不知道是什么文件,用kali看一下,發(fā)現(xiàn)是bzip2文件,重命名為 123.bzip2
解壓:
發(fā)現(xiàn)了一個falg.txt文件和 .git文件夾,flag.txt中沒有flag
嘗試用 git stash 進(jìn)行恢復(fù)以前修改/刪除的文件
查看git 記錄,給出了一個最近上傳的文件,但這個文件并不存在
查看修改列表,儲存列表中有一條記錄
校驗一下列表中的存儲文件
把上面的文件恢復(fù)
直接執(zhí)行 git stash apply 時,會 提示文件覆蓋 自動終止,可以先把flag.txt刪除再執(zhí)行
運行s.py 得到flag:
NCN4dd992213ae6b76f27d7340f0dde1222888df4d3
26,3-1
文件用winhex打開發(fā)現(xiàn)是rar文件頭,后綴改為rar,解壓發(fā)現(xiàn)有有個文件名為 ++_++的文件,用記事本打開,發(fā)現(xiàn)這是一個流量包,后綴改為 .pcap,用wireshark打開,
在分組字節(jié)流 中搜索字符串 flag,
找到了一個 flag.rar文件,
文件 》導(dǎo)出分組字節(jié)流? 保存為 flag.rar,里面有一個 flag.txt文件
解壓發(fā)現(xiàn)需要密碼,暴力破解無果
會過頭來找密碼,發(fā)現(xiàn)在下一個字節(jié)流中(第6個)中,看到了一些管道命令,和一段python加密腳本
from Crypto import Random from Crypto.Cipher import AES import sys import base64IV = 'QWERTYUIOPASDFGH'def decrypt(encrypted):aes = AES.new(IV, AES.MODE_CBC, IV)return aes.decrypt(encrypted)def encrypt(message):length = 16count = len(message)padding = length - (count % length)message = message + '\0' * paddingaes = AES.new(IV, AES.MODE_CBC, IV)return aes.encrypt(message)str = 'this is a test' example = encrypt(str) print(decrypt(example))這是一段加密腳本,密文是19aaFYsQQKr+hVX6hl2smAUQ5a767TsULEUebWSajEo=
寫出解密腳本,解密得到:?
passwd={No_One_Can_Decrypt_Me}
解密 flag.rar得到 flag:
WDCTF{Seclab_CTF_2017}
27,適合作為桌面
是一張圖片,二話不說先用foremost分離一下,沒分離出來東西
放進(jìn)stegsolve 里看一下,
發(fā)現(xiàn)了一張二維碼:
掃描得到一段 16進(jìn)制:
復(fù)制到winhex中,發(fā)現(xiàn)了 有1.py字符串:
知道這是一個 pyc文件,另存為 1.pyc? 放進(jìn)kali中進(jìn)行反編譯,得到1.py文件:
uncompyle6 1.pyc >1.py查看1.py文件:
發(fā)現(xiàn)是一個函數(shù),用vim在腳本后面加一個 flag()調(diào)用這個函數(shù),然后執(zhí)行這個腳本就得到flag:
flag{38a57032085441e7}
?
28, banmabanma
是一張斑馬圖片,身上是一段 條形碼,用畫圖拉長后再在線解碼
的得到:FLAG IS TENSHINE
flag: flag{TENSHINE}
?
29,我們的秘密是綠色的
這題還是比較難的,需要好多步才能解出來flag
(1)首先得知道有 oursecret這個圖片解密軟件,然后還得找到解密的密碼,
密碼經(jīng)過一番嘗試后,發(fā)現(xiàn)是 圖片中的 綠色的數(shù)字 連起來?0405111218192526 ,然后得到一個 try.zip文件
(2)解壓try.zip發(fā)現(xiàn)需要密碼,不過給了點提示:
coffee的生日, 別查生日了,直接爆破,純數(shù)字 爆破得到密碼:19950822(3)解壓后得到 兩個文件 flag.zip需要密碼,用明文爆破,得到密碼:Y29mZmVl
(4)又得到兩個 文件,flag.zip 又需要密碼
用 ARCHPR爆破時,提示文件沒有加密,那應(yīng)該是 zip偽加密
將 01 改為 00 保存,解壓得到flag.txt
qddpqwnpcplen%prqwn_{_zz*d@gq}
(4)直接提交,不正確,加flag{}后也不正確,
猜想可能是 柵欄密碼? 先經(jīng)過柵欄爆破? 得到:?qwlr{ddneq_@dpnwzgpc%nzqqpp_*}
(5)再進(jìn)行 凱撒爆破 得到flag:
flag{ssctf_@seclover%coffee_*}
?
30,simple_transfer
得到一個流量包,打開,前面的包好像是在進(jìn)行端口掃描,全是握手包
直接 在分組字節(jié)流中搜索 字符串flag ,找到了一個包,追蹤流,沒發(fā)現(xiàn)有用信息
回過頭來,再看,往下倒非紅色包的部分,發(fā)現(xiàn)有 NFS 協(xié)議,覺得有點可疑,
過濾看看
發(fā)現(xiàn) 在分組列表中 有 file.pdf
導(dǎo)出分組字節(jié)流? ?保存為 file.pdf
但是我打不開 這個破文件,可能是我導(dǎo)出是姿勢有問題,
算了直接 用 foremost 分離 流量包,分離得到 了一個pdf文件:(ma的,下次我直接分解)
HITB{b3d0e380e9c39352c667307d010775ca} 直接提交
?
31,Just-No-One
這題我也是服了,這沒有點耐心還真找不到
下載得到一個 exe文件,那就安裝唄,還能咋地,但發(fā)現(xiàn)需要password:
找密碼:
嘗試使用innounp工具解壓壓縮包。
innounp的官網(wǎng)地址:?http://innounp.sourceforge.net??
innounp.exe -x setup.exe
?
在解壓出的install_script.iss中發(fā)現(xiàn)密碼信息
; PasswordHash=888e209e5d76a3135d04b8baccabd7936a0dd376
; PasswordSalt=0e559522ecf62077
使用hashcat解密得到密碼為:1234567
但實際上并沒有什么用,程序安裝完打開是這個樣子的
提示我們已經(jīng)看到了flag
最騷的來了,沒有任何提示的情況下,能在 安裝協(xié)議里面找到 正確 flag 的人是真的大佬,反正我做不來
?
誰能想到 這就是flag: 也沒個格式,真想罵這個出題人,
ILOVEREADINGEULAS
32, warmup
考察,明文爆破,盲水印
先將 open_forum.png 壓縮為 open_forum.zip,然后明文破解(這里我死活破不開,不知道是怎么回事,我醉了)
然后得到,兩張圖片,用盲水印提取水印:(腳本自己去github里面找)
python bwm.py encode fuli.png fuli2.png res.pngflag{bWm_Are_W0nderfu1}
?
33,Erik-Baleog-and-Olaf
是png頭,后綴改為 .png
用 stegsolve 打開 發(fā)現(xiàn)在中間的小人的手中,有一個很小的二維碼,不斷切換找到一張最清的二維碼:
用 截圖工具截個圖:
直接掃,掃不出來,
再把這張圖放進(jìn) stegsolve中 ,找到一張更清的圖片,保存下來
掃描得到flag:flag{#justdiffit}
?
34,Py-Py-Py
只能說花里胡哨,第一次見到 在 pyc/pyo文件中? 隱藏信息的
開始的時候把 pyc文件? 放進(jìn)? ?kali中 反編譯為 py文件
uncompyle6 123.pyc > 123.py然后看到一個加密腳本:
太長了,選出有用的一部分,
if __name__ == '__main__':while True:flag = raw_input('Please input your flag:')if flag == crypto(fllag, 'decode'):print('Success')breakelse:continue看到,flag == crypto(fllag,'decode')
直接把這一段 代碼刪除了? ?添加一句 print crypto(fllag,'decode')
然后就得大 flag 的值?The challenge is Steganography, 直接提交不對,加flag{}提交仍然不對
這句話的意思是 挑戰(zhàn)是隱寫,
去網(wǎng)上搜了一下,還可以在 pyc文件的字節(jié)碼中 隱藏 信息的隱寫方式,
需要用到?stegosaurus 這個工具,github中有,
python3 stegosaurus.py -x 123.pycFlag{HiD3_Pal0ad_1n_Python}
?
35, reverse_it
放進(jìn) winhex中發(fā)現(xiàn)是 文件 png 的數(shù)據(jù)進(jìn)行了 逆置,(這里的逆置是指,字節(jié)的逆置)
數(shù)據(jù)逆置回來保存為 png, 得到一張逆置的圖片:
再把圖片逆置過來:
文件逆置:
def swap_nibbles(byte):return ((byte << 4) | (byte >> 4)) & 0xffi = open('1234', 'rb') o = open('1234.txt', 'wb') o.write(''.join(map(chr, map(swap_nibbles, map(ord, i.read()[::-1]))))) i.close() o.close()圖片翻轉(zhuǎn):
import sys from PIL import Imagei = Image.open('1234.jpg') o = Image.new(i.mode, i.size) idata, odata = i.load(), o.load()for y in range(i.size[1]):for x in range(i.size[0]):odata[x, y] = idata[i.size[0] - x - 1, y]o.save('qwe' + '.jpg')36,mysql
提示:我們在Mysql數(shù)據(jù)庫中存放了flag,但是黑客已經(jīng)把它刪除了。你能找回來flag嗎?
考點 ,用?undrop-for-innodb 恢復(fù) mysql被刪的數(shù)據(jù)
undrop-for-innodb 在github上有,
git clone?https://github.com/twindb/undrop-for-innodbcd updrop-for-innodbmake如果提示 make : bison 命令未找到,則需要安裝 bisonapt install -y bison然后再執(zhí)行 make 命令 安裝(這里我也是第一次見這種題,我盡量詳細(xì)記錄一下)
現(xiàn)在確認(rèn)一下數(shù)據(jù)恢復(fù)的必要條件:一份ibdata1數(shù)據(jù)文件,一份要恢復(fù)的數(shù)據(jù)庫的表結(jié)構(gòu)
在structure.sql中看到了表的結(jié)構(gòu):
在 mysql文件夾中有 數(shù)據(jù)空間文件ibdata1文件,現(xiàn)在兩個需要的文件都有了
?
這里我新建了一個 文件夾,backup,然后把需要用到的幾個文件復(fù)制進(jìn)去
c_parser , dictionary ??, stream_parser? ,structure.sql,ibdata1
(1)解析數(shù)據(jù)文件
首先,由于mysql將Innodb驅(qū)動的數(shù)據(jù)使用B+tree索引在了數(shù)據(jù)空間文件ibdata1中,所以需要使用stream_parser工具進(jìn)行解析:
./stream_parser -f ibdata1解析完成后,可以看到同目錄下生成一個pages-ibdata1目錄,其中包含兩個子目錄,一個是包含按索引排序的數(shù)據(jù)頁目錄,另一個是包含相關(guān)類型的數(shù)據(jù)目錄:
我們下面將主要關(guān)注的是第一個子目錄即索引好的數(shù)據(jù)頁目錄,因為我們要恢復(fù)的數(shù)據(jù)就在里面,其中第一個頁文件(0000000000000001.page)里包含所有數(shù)據(jù)庫的表信息和相關(guān)的表索引信息,類似一個數(shù)據(jù)字典,可以使用項目提供的一個腳本recover_dictionary.sh將其內(nèi)容放到一個test數(shù)據(jù)庫里詳細(xì)的查看,這里就不做演示了。
(2)解析頁文件
既然第一個頁文件包含所有數(shù)據(jù)庫表的索引信息,我們就需要先解析它,以模擬mysql查詢數(shù)據(jù)的過程,最終才能找到要恢復(fù)的數(shù)據(jù)。c_parser工具可以用來解析頁文件,不過需要提供該頁文件的一個內(nèi)部結(jié)構(gòu)(表結(jié)構(gòu))。
項目根目錄下有個dictionary目錄,里面就包含數(shù)據(jù)字典用到相關(guān)表結(jié)構(gòu),如用來解析第一個頁文件的表結(jié)構(gòu)在SYS_TABLES.sql文件
./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page -t dictionary/SYS_TABLES.sql | grep ctf該命令使用c_parser工具解析數(shù)據(jù)庫表索引信息并過濾出我們想要恢復(fù)的有關(guān)ctf的文件
我們看到 user這個表的索引值為? 13,通過這個索引值,再到另外一張表去查詢該user表所有的索引信息
該表的結(jié)構(gòu)在"dictionary/SYS_INDEXES.sql"文件中可以看到,而此表對應(yīng)的數(shù)據(jù)頁文件是第三個數(shù)據(jù)頁0000000000000003.page
./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000003.page -t dictionary/SYS_INDEXES.sql | grep 13這里找到一條user 的索引信息,其在mysql 存儲中的索引值為 15,此索引值編號對應(yīng)的數(shù)據(jù)頁文件中,即存儲了該索引的全部數(shù)據(jù)
此處我們選擇的是主鍵索引對應(yīng)的數(shù)據(jù)頁文件進(jìn)行解析(另外一個索引鍵應(yīng)該也可以,只不過方法可能需要有所區(qū)別),終于順利解析見到了激動人心的數(shù)據(jù):
./c_parser -5f pages-ibdata1/FIL_PAGE_INDEX/0000000000000015.page -t structure.sql | more得到flag:
71e55075163d5c6410c0d9eae499c977
?
?
寫在最后:(上面的很多題,我也是第一次遇到,也是邊刷邊學(xué)習(xí))
我也是一個剛學(xué)習(xí)的web安全的小白,也是通過刷題寫writeup來提升自己,寫的不好的地方勿噴,轉(zhuǎn)身離開就好,如果覺得有幫助到你,就點個贊就好
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的攻防世界———MISC 高手区题解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SMB漏洞
- 下一篇: bugku ——杂项