日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

攻防世界———MISC 高手区题解

發(fā)布時(shí)間:2024/9/30 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 攻防世界———MISC 高手区题解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

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,?肥宅快樂(lè)題

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/? 做了一定的修改)

(簡(jiǎn)要原理,ascii碼是用8位二進(jìn)制表示一個(gè)字符的,而base64是用6位二進(jìn)制表示一個(gè)字符,將明文字符轉(zhuǎn)化為二進(jìn)制后再每6位劃分成 一個(gè) “字節(jié)”,然后將每個(gè)字節(jié)轉(zhuǎn)化為一個(gè)字符,就變成了base64密文,而在base64的密文中加密是利用,每一段密文的最后4位二進(jìn)制是不影響明文的,可以將flag轉(zhuǎn)化為二進(jìn)制后拆分隱藏在每一段的最后4位二進(jìn)制中)

?

復(fù)習(xí)一下 Base64 吧

BASE64 是一種編碼方式, 是一種可逆的編碼方式.
編碼后的數(shù)據(jù)是一個(gè)字符串, 包含的字符為: A-Za-z0-9+/
共 64 個(gè)字符:26 + 26 + 10 + 1 + 1 = 64
其實(shí)是 65 個(gè)字符, “=”是填充字符.

64 個(gè)字符需要 6 位二進(jìn)制來(lái)表示, 表示成數(shù)值為 0~63.

這樣, 長(zhǎng)度為 3 個(gè)字節(jié)的數(shù)據(jù)經(jīng)過(guò) Base64 編碼后就變?yōu)?4 個(gè)字節(jié)

編碼

比如, 字符串”Tr0”經(jīng)過(guò) Base64 編碼后變?yōu)椤盫HIw”

上面說(shuō)的字符串長(zhǎng)度為 3 個(gè)字節(jié)的數(shù)據(jù)位數(shù)是 8x3=24, 可以精確地分成 6x4.
如果字節(jié)數(shù)不是 3 的倍數(shù), 則位數(shù)就不是 6 的倍數(shù), 那么就不能精確地劃分成 6 位的塊.
此時(shí), 需在原數(shù)據(jù)二進(jìn)制值后面添加零, 使其字節(jié)數(shù)是 6 的倍數(shù).
然后, 在編碼后的字符串后面添加 1 個(gè)或 2 個(gè)等號(hào)”=”, 表示所添加的零值字節(jié)數(shù).
比如, 字符串”Tr0y”經(jīng)過(guò) Base64 編碼后變?yōu)椤盫HIweQ==”

橙色底紋就是添加的 0.
這是 Base64 編碼的方式.

解碼

解碼就是編碼的逆過(guò)程.

  • 把 Base64 字符串去掉等號(hào), 轉(zhuǎn)為二進(jìn)制數(shù)(VHIweQ== -> VHIweQ -> 010101000111001000110000011110010000).
  • 從左到右, 8 個(gè)位一組, 多余位的扔掉, 轉(zhuǎn)為對(duì)應(yīng)的 ASCII 碼(01010100 01110010 00110000 01111001 0000 -> 扔掉最后 4 位 -> 01010100 01110010 00110000 01111001 -> Tr0y)
  • base64密文中隱寫原理

    注意紅色的 0, 我們?cè)诮獯a的時(shí)候?qū)⑵鋪G棄了, 所以這里的值不會(huì)影響解碼. 所以我們可以在這進(jìn)行隱寫.
    為什么等號(hào)的那部分 0 不能用于隱寫? 因?yàn)樾薷哪抢锏亩M(jìn)制值會(huì)導(dǎo)致等號(hào)數(shù)量變化, 解碼的第 1 步會(huì)受影響. 自然也就破壞了源字符串.
    而紅色部分的 0 是作為最后一個(gè)字符二進(jìn)制的組成部分, 還原時(shí)只用到了最后一個(gè)字符二進(jìn)制的前部分, 后面的部分就不會(huì)影響還原.
    唯一的影響就是最后一個(gè)字符會(huì)變化. 如下圖

    如果你直接解密’VHIweQ==’與’VHIweR==’, 得到的結(jié)果都是’Tr0y’.

    當(dāng)然, 一行 base64 頂多能有 2 個(gè)等號(hào), 也就是有 2*2 位的可隱寫位. 所以我們得弄很多行, 才能隱藏一個(gè)字符串, 這也是為什么題目給了一大段 base64 的原因.
    接下來(lái), 把要隱藏的 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')

    解密:
    ?

    import base64b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' with open('stego.txt', 'rb') as f: #stego.txt 為在base64密文中加密后的密文flag = ''bin_str = ''for line in f.readlines():stegb64 = str(line, "utf-8").strip("\n")rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")offset = abs(b64chars.index(stegb64.replace('=', '')[-1]) - b64chars.index(rowb64.replace('=', '')[-1]))equalnum = stegb64.count('=') # no equalnum no offsetif equalnum:bin_str += bin(offset)[2:].zfill(equalnum * 2) for i in range(0, len(bin_str), 8):print(chr(int(bin_str[i:i + 8], 2)),end='')

    給出加密腳本執(zhí)行結(jié)果

    flag{Base_sixty_four_point_five}

    2,easycap

    下載下來(lái)是一個(gè)截取的流量包,用wireshark打開(kāi),先追蹤流,沒(méi)想到直接得到了flag:

    3,Avatar

    是一張圖片,先用formost分離一下,沒(méi)有什么東西,用stegsolve看一下也沒(méi)發(fā)現(xiàn)什么,再放進(jìn)winhex中看一下,依舊沒(méi)收獲,

    再試其他工具,……在用outguess時(shí)分離出來(lái)了隱藏信息:

    We should blow up the bridge at midnight
    直接提交

    4,What-is-this

    解壓文件,是一個(gè)沒(méi)有后綴的文件,放進(jìn)winhex中審查一下,發(fā)現(xiàn)有幾個(gè)文件名,目測(cè)這是一個(gè)壓縮包,把后綴給為zip后解壓,

    兩張圖片,正常思路:1,圖片拼接 2,盲水印 3,各有一部分flag

    先試一下 圖片拼接,用stegsolve把兩張圖片合成一下:

    直接提交

    5,簽到題

    (本以為很簡(jiǎn)單,實(shí)際……)

    將Z2dRQGdRMWZxaDBvaHRqcHRfc3d7Z2ZoZ3MjfQ==? base64解密一下:ggQ@gQ1fqh0ohtjpt_sw{gfhgs#}

    你以為這就結(jié)束了?提交錯(cuò)誤

    猜測(cè){}的位置不對(duì),進(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個(gè)都提交一下試試,結(jié)果全都不對(duì),,,,

    用 ggqht{ggQht_gsQ10jsf#@fopwh}? ? 再試一下 凱撒密碼:

    看到一個(gè)ctf直接提交:

    ssctf{ssctf_sec10ver#@rabit}

    6,Training-Stegano-1

    好小的一張圖片,第一反應(yīng)是用winhex修改寬和高,沒(méi)想到打開(kāi)直接發(fā)現(xiàn)了flag:

    提交:

    steganoI

    7,Excaliflag

    用foremost分離沒(méi)發(fā)現(xiàn)東西,用stegsolve看一下:

    8,Get-the-key.txt

    解壓文件 得到一個(gè) 沒(méi)有后綴的 文件??forensic100,看這個(gè)名字 我還以為是一個(gè) 截取的流量包,后綴改為 pcap 看了一下,沒(méi)發(fā)現(xiàn)什么的,用winhex看一下,猜測(cè)是一個(gè)壓縮包,后綴改為 zip

    解壓得到 key.txt:

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

    9,glance-50

    ?

    打開(kāi)是一個(gè)極窄的git圖片,那還還用想嗎?思路肯定是,先把動(dòng)態(tài)圖的每一幀分離出來(lái),再拼接起來(lá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 = [] #存儲(chǔ)所有的圖像的名稱 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

    得到一段看起來(lái)毫無(wú)規(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

    打開(kāi)是一段密文:

    d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd

    以為是base64,發(fā)現(xiàn)解不出來(lái),再回頭仔細(xì)看,發(fā)現(xiàn)只有 0~9 a~f? 十六進(jìn)制

    但是,直接 用 16進(jìn)制=》ascii? 發(fā)現(xiàn)是一堆亂碼 ,

    常識(shí) ascii 只有 到128? ,而發(fā)現(xiàn)這一串16進(jìn)制每?jī)晌换?十進(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

    下載下來(lái)是一個(gè) 流量包,在linux中 搜索一下 flag 字符串 看會(huì)不會(huì)有意外收獲:

    沒(méi)想到直接出來(lái)了

    flag{Good_b0y_W3ll_Done}

    13,?肥宅快樂(lè)題

    a.這個(gè)題目下載到手是一個(gè).swf后綴的文件
    b.用到一個(gè)特殊的工具,叫做potplayer
    c.把這個(gè).swf文件使用這個(gè)工具打開(kāi)
    d.根據(jù)提示注意對(duì)話就好

    點(diǎn)擊 右下角的 開(kāi)始? ?就會(huì) 自動(dòng)播放? 在 放到? 57 幀 的時(shí)候, 出現(xiàn)了 下面的對(duì)話 有一段 base64 :

    狗日的? ?不能復(fù)

    ?提取出來(lái):U1lDe0YzaVpoYWlfa3U0aWxlX1QxMTF9

    base64解碼得flag:SYC{F3iZhai_ku4ile_T111}

    14,小小的PDF

    下載下來(lái)是一個(gè) pdf文件 ,不管有沒(méi)有隱藏文件,先用formost 分離一下,沒(méi)想到直接 分離出來(lái)了三張圖片,包含一張flag圖片:

    至此 我在攻防世界中已經(jīng) 遇到 三種 pdf 的隱寫方式:

    ?

    1,新手區(qū) :?pdf? :將flag隱藏在圖片的下面? ? ? 》? 需要 先將格式轉(zhuǎn)為 word? 再將圖片拖開(kāi) 就能看到 flag

    2,新手區(qū) :stegano? :利用類似水印的方法將flag隱藏在大量文字下面(不清粗具體方法) 》 全選復(fù)制 到 txt文件中就能 顯示出密文

    3,高手區(qū): 小小的pdf: 嵌入文件? 》 直接用 formost 分析 或用? binwalk分離

    ?

    15,Cephalopod

    打開(kāi)數(shù)據(jù)包,嘗試性 在分組字節(jié)流中 搜索字符串 flag? 然后就看到了有一張 flag.png:

    然后 追蹤流 (還原原始數(shù)據(jù)包)發(fā)現(xiàn)flag.png 的數(shù)據(jù)并不在 75 這個(gè)包里:

    看下一個(gè)流:發(fā)現(xiàn)了 png 的數(shù)據(jù)文件:選擇 原始數(shù)據(jù)流 =》save as? ?flag.png (直接保存的話,部分?jǐn)?shù)據(jù)會(huì)丟失)

    然后用 winhex 打開(kāi),刪除 圖片頭前面的 無(wú)關(guān)數(shù)據(jù):

    然后就看到了flag.png:

    HITB{95700d8aefdc1648b90a92f3a8460a2c}

    16,hit-the-core

    下載下來(lái)是一個(gè) core文件:

    小知識(shí)點(diǎn) core:

    core 文件:核心文件(core file),也稱核心轉(zhuǎn)儲(chǔ)(core dump),是操作系統(tǒng)在進(jìn)程收到某些信號(hào)而終止運(yùn)行時(shí),將此時(shí)進(jìn)程地址空間的內(nèi)容以及有關(guān)進(jìn)程狀態(tài)的其他信息寫出的一個(gè)磁盤文件。這種信息往往用于調(diào)試。

    核心文件通常在系統(tǒng)收到特定的信號(hào)時(shí)由操作系統(tǒng)生成。信號(hào)可以由程序執(zhí)行過(guò)程中的異常觸發(fā),也可以由外部程序發(fā)送。動(dòng)作的結(jié)果一般是生成一個(gè)某個(gè)進(jìn)程的內(nèi)存轉(zhuǎn)儲(chǔ)的文件,文件包含了此進(jìn)程當(dāng)前的運(yùn)行堆棧信息。有時(shí)程序并未經(jīng)過(guò)徹底測(cè)試,這使得它在執(zhí)行的時(shí)候一不小心就會(huì)遭到破壞。這可能會(huì)導(dǎo)致核心轉(zhuǎn)儲(chǔ)(core dump)。現(xiàn)在的UNIX系統(tǒng)極少會(huì)面臨這樣的問(wèn)題。即使遇到,程序員可以通過(guò)核心映像調(diào)試程序來(lái)找到錯(cuò)誤原因。

    ?

    不知如何下手 ,看別人的博客,發(fā)現(xiàn)是用 strings 命令 提取出 文件中的 字符串:

    strings 123.core

    竟然能 從這一段 字符串中 發(fā)現(xiàn) 幾個(gè) 大寫字母 之間的聯(lián)系: ALECTF 而且每個(gè)字母中間隔了 5個(gè)字符,

    提取這些字符:(真是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

    打開(kāi)是一張白色圖片 ,放進(jìn)stegsolve 中分析一下:

    flag{true_steganographers_doesnt_need_any_tools}

    18,2-1

    是一個(gè)png圖片 ,打不開(kāi) ,文件損壞,用 winhex 打開(kāi)發(fā)現(xiàn)? 文件頭 是錯(cuò)的 ,把文件頭修改為 89 50 4E 47

    保存后發(fā)現(xiàn)還是打不開(kāi),用 tweakpng 打開(kāi) 有報(bào)錯(cuò):

    把文件 IHDR 的crc校驗(yàn)值 修改為? 55 d5 f6 4f 后發(fā)現(xiàn) 還是打不開(kāi),

    再仔細(xì)看 發(fā)現(xiàn) 圖片的 寬是 0?

    根據(jù) crc校驗(yàn)值 算寬是多少:

    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

    解壓后得到一個(gè) 沒(méi)有后綴的文件 放進(jìn)winhex中發(fā)現(xiàn)是一個(gè)? 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ù)個(gè)數(shù)字,發(fā)現(xiàn)如果兩個(gè) 字符一組的話,最大的數(shù)字的 31,

    剛好是日歷中最大的數(shù)字,然后就在日歷上 一個(gè)數(shù)字一個(gè)數(shù)字地 連,然后就畫出了 下面的字符:?

    flag:

    HITB{CTFFUN}

    21, 4-1

    解壓得到一張圖片,用formost分離出來(lái)一個(gè) 壓縮包,解壓得到

    得到 兩張 “一樣”? 的圖片,和一個(gè) tips.txt? ?大意是 指 day2.png? 中比 day1.png? 多了點(diǎn) “東西”

    這一看肯定是 水印啊 ,盲水印啊,

    直接提取盲水印:

    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è)備通信通過(guò)串口EIA-485物理層進(jìn)行

    用wireshark 打開(kāi)流量包,直接在 分組字節(jié)流 中 搜索 sctf 字符串? 直接出來(lái):

    但是 sctf{Easy_Mdbus} 竟然不是 正確答案

    正確答案 :sctf{Easy_Modbus}??

    23,5-1

    是一個(gè) 不知道文件類型的 文件? ,用 file 分析一下? 顯示是類型 為? data? ,

    看別人的博客,大意是需要用? xortool 工具?

    先嘗試出 key:GoodLuckToYou

    其中-l就是指定密鑰長(zhǎng)度,-c表示出現(xiàn)頻率最高的字符。這個(gè)需要根據(jù)經(jīng)驗(yàn),比如文本內(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)

    ?

    小知識(shí)點(diǎn):

    xortool 工具,

    xortool.py是基于python的腳本,用于完成一些xor分析,包括:

    • 猜想key的長(zhǎng)度
    • 猜想key的值
    • 解密一些經(jīng)過(guò)xoe加密的文件

    24,can_has_stdio?

    打開(kāi)文件是一大串brainfuck密文,在線解碼得到flag

    :http://tool.bugku.com/brainfuck/?wafcloud=2

    25,MISCall

    不知道是什么文件,用kali看一下,發(fā)現(xiàn)是bzip2文件,重命名為 123.bzip2

    解壓:

    發(fā)現(xiàn)了一個(gè)falg.txt文件和 .git文件夾,flag.txt中沒(méi)有flag

    嘗試用 git stash 進(jìn)行恢復(fù)以前修改/刪除的文件

    查看git 記錄,給出了一個(gè)最近上傳的文件,但這個(gè)文件并不存在

    查看修改列表,儲(chǔ)存列表中有一條記錄

    校驗(yàn)一下列表中的存儲(chǔ)文件

    把上面的文件恢復(fù)

    直接執(zhí)行 git stash apply 時(shí),會(huì) 提示文件覆蓋 自動(dòng)終止,可以先把flag.txt刪除再執(zhí)行

    運(yùn)行s.py 得到flag:

    NCN4dd992213ae6b76f27d7340f0dde1222888df4d3


    26,3-1

    文件用winhex打開(kāi)發(fā)現(xiàn)是rar文件頭,后綴改為rar,解壓發(fā)現(xiàn)有有個(gè)文件名為 ++_++的文件,用記事本打開(kāi),發(fā)現(xiàn)這是一個(gè)流量包,后綴改為 .pcap,用wireshark打開(kāi),

    在分組字節(jié)流 中搜索字符串 flag,

    找到了一個(gè) flag.rar文件,

    文件 》導(dǎo)出分組字節(jié)流? 保存為 flag.rar,里面有一個(gè) flag.txt文件

    解壓發(fā)現(xiàn)需要密碼,暴力破解無(wú)果

    會(huì)過(guò)頭來(lái)找密碼,發(fā)現(xiàn)在下一個(gè)字節(jié)流中(第6個(gè))中,看到了一些管道命令,和一段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,適合作為桌面

    是一張圖片,二話不說(shuō)先用foremost分離一下,沒(méi)分離出來(lái)東西

    放進(jìn)stegsolve 里看一下,

    發(fā)現(xiàn)了一張二維碼:

    掃描得到一段 16進(jìn)制:

    復(fù)制到winhex中,發(fā)現(xiàn)了 有1.py字符串:

    知道這是一個(gè) pyc文件,另存為 1.pyc? 放進(jìn)kali中進(jìn)行反編譯,得到1.py文件:

    uncompyle6 1.pyc >1.py

    查看1.py文件:

    發(fā)現(xiàn)是一個(gè)函數(shù),用vim在腳本后面加一個(gè) flag()調(diào)用這個(gè)函數(shù),然后執(zhí)行這個(gè)腳本就得到flag:

    flag{38a57032085441e7}

    ?

    28, banmabanma

    是一張斑馬圖片,身上是一段 條形碼,用畫圖拉長(zhǎng)后再在線解碼

    的得到:FLAG IS TENSHINE

    flag: flag{TENSHINE}

    ?

    29,我們的秘密是綠色的

    這題還是比較難的,需要好多步才能解出來(lái)flag

    (1)首先得知道有 oursecret這個(gè)圖片解密軟件,然后還得找到解密的密碼,

    密碼經(jīng)過(guò)一番嘗試后,發(fā)現(xiàn)是 圖片中的 綠色的數(shù)字 連起來(lái)?0405111218192526 ,然后得到一個(gè) try.zip文件

    (2)解壓try.zip發(fā)現(xiàn)需要密碼,不過(guò)給了點(diǎn)提示:

    coffee的生日, 別查生日了,直接爆破,純數(shù)字 爆破得到密碼:19950822

    (3)解壓后得到 兩個(gè)文件 flag.zip需要密碼,用明文爆破,得到密碼:Y29mZmVl

    (4)又得到兩個(gè) 文件,flag.zip 又需要密碼

    用 ARCHPR爆破時(shí),提示文件沒(méi)有加密,那應(yīng)該是 zip偽加密

    將 01 改為 00 保存,解壓得到flag.txt

    qddpqwnpcplen%prqwn_{_zz*d@gq}

    (4)直接提交,不正確,加flag{}后也不正確,

    猜想可能是 柵欄密碼? 先經(jīng)過(guò)柵欄爆破? 得到:?qwlr{ddneq_@dpnwzgpc%nzqqpp_*}

    (5)再進(jìn)行 凱撒爆破 得到flag:

    flag{ssctf_@seclover%coffee_*}

    ?

    30,simple_transfer

    得到一個(gè)流量包,打開(kāi),前面的包好像是在進(jìn)行端口掃描,全是握手包

    直接 在分組字節(jié)流中搜索 字符串flag ,找到了一個(gè)包,追蹤流,沒(méi)發(fā)現(xiàn)有用信息

    回過(guò)頭來(lái),再看,往下倒非紅色包的部分,發(fā)現(xiàn)有 NFS 協(xié)議,覺(jué)得有點(diǎn)可疑,

    過(guò)濾看看

    發(fā)現(xiàn) 在分組列表中 有 file.pdf

    導(dǎo)出分組字節(jié)流? ?保存為 file.pdf

    但是我打不開(kāi) 這個(gè)破文件,可能是我導(dǎo)出是姿勢(shì)有問(wèn)題,

    算了直接 用 foremost 分離 流量包,分離得到 了一個(gè)pdf文件:(ma的,下次我直接分解)

    HITB{b3d0e380e9c39352c667307d010775ca} 直接提交

    ?

    31,Just-No-One

    這題我也是服了,這沒(méi)有點(diǎn)耐心還真找不到

    下載得到一個(gè) 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

      但實(shí)際上并沒(méi)有什么用,程序安裝完打開(kāi)是這個(gè)樣子的

     提示我們已經(jīng)看到了flag

    最騷的來(lái)了,沒(méi)有任何提示的情況下,能在 安裝協(xié)議里面找到 正確 flag 的人是真的大佬,反正我做不來(lái)

    ?

    誰(shuí)能想到 這就是flag: 也沒(méi)個(gè)格式,真想罵這個(gè)出題人,

    ILOVEREADINGEULAS

    32, warmup

    考察,明文爆破,盲水印

    先將 open_forum.png 壓縮為 open_forum.zip,然后明文破解(這里我死活破不開(kāi),不知道是怎么回事,我醉了)

    然后得到,兩張圖片,用盲水印提取水印:(腳本自己去github里面找)

    python bwm.py encode fuli.png fuli2.png res.png

    flag{bWm_Are_W0nderfu1}

    ?

    33,Erik-Baleog-and-Olaf

    是png頭,后綴改為 .png

    用 stegsolve 打開(kāi) 發(fā)現(xiàn)在中間的小人的手中,有一個(gè)很小的二維碼,不斷切換找到一張最清的二維碼:

    用 截圖工具截個(gè)圖:

    直接掃,掃不出來(lái),

    再把這張圖放進(jìn) stegsolve中 ,找到一張更清的圖片,保存下來(lái)

    掃描得到flag:flag{#justdiffit}

    ?

    34,Py-Py-Py

    只能說(shuō)花里胡哨,第一次見(jiàn)到 在 pyc/pyo文件中? 隱藏信息的

    開(kāi)始的時(shí)候把 pyc文件? 放進(jìn)? ?kali中 反編譯為 py文件

    uncompyle6 123.pyc > 123.py

    然后看到一個(gè)加密腳本:

    太長(zhǎng)了,選出有用的一部分,

    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, 直接提交不對(duì),加flag{}提交仍然不對(duì)

    這句話的意思是 挑戰(zhàn)是隱寫,

    去網(wǎng)上搜了一下,還可以在 pyc文件的字節(jié)碼中 隱藏 信息的隱寫方式,

    需要用到?stegosaurus 這個(gè)工具,github中有,

    python3 stegosaurus.py -x 123.pyc

    Flag{HiD3_Pal0ad_1n_Python}

    ?

    35, reverse_it

    放進(jìn) winhex中發(fā)現(xiàn)是 文件 png 的數(shù)據(jù)進(jìn)行了 逆置,(這里的逆置是指,字節(jié)的逆置)

    數(shù)據(jù)逆置回來(lái)保存為 png, 得到一張逆置的圖片:

    再把圖片逆置過(guò)來(lái):

    文件逆置:

    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

    提示:我們?cè)贛ysql數(shù)據(jù)庫(kù)中存放了flag,但是黑客已經(jīng)把它刪除了。你能找回來(lái)flag嗎?

    考點(diǎn) ,用?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 命令 安裝

    (這里我也是第一次見(jiàn)這種題,我盡量詳細(xì)記錄一下)

    現(xiàn)在確認(rèn)一下數(shù)據(jù)恢復(fù)的必要條件:一份ibdata1數(shù)據(jù)文件,一份要恢復(fù)的數(shù)據(jù)庫(kù)的表結(jié)構(gòu)

    在structure.sql中看到了表的結(jié)構(gòu):

    在 mysql文件夾中有 數(shù)據(jù)空間文件ibdata1文件,現(xiàn)在兩個(gè)需要的文件都有了
    ?

    這里我新建了一個(gè) 文件夾,backup,然后把需要用到的幾個(gè)文件復(fù)制進(jìn)去

    c_parser , dictionary ??, stream_parser? ,structure.sql,ibdata1

    (1)解析數(shù)據(jù)文件

    首先,由于mysql將Innodb驅(qū)動(dòng)的數(shù)據(jù)使用B+tree索引在了數(shù)據(jù)空間文件ibdata1中,所以需要使用stream_parser工具進(jìn)行解析:

    ./stream_parser -f ibdata1

    解析完成后,可以看到同目錄下生成一個(gè)pages-ibdata1目錄,其中包含兩個(gè)子目錄,一個(gè)是包含按索引排序的數(shù)據(jù)頁(yè)目錄,另一個(gè)是包含相關(guān)類型的數(shù)據(jù)目錄:

    我們下面將主要關(guān)注的是第一個(gè)子目錄即索引好的數(shù)據(jù)頁(yè)目錄,因?yàn)槲覀円謴?fù)的數(shù)據(jù)就在里面,其中第一個(gè)頁(yè)文件(0000000000000001.page)里包含所有數(shù)據(jù)庫(kù)的表信息和相關(guān)的表索引信息,類似一個(gè)數(shù)據(jù)字典,可以使用項(xiàng)目提供的一個(gè)腳本recover_dictionary.sh將其內(nèi)容放到一個(gè)test數(shù)據(jù)庫(kù)里詳細(xì)的查看,這里就不做演示了。

    (2)解析頁(yè)文件

    既然第一個(gè)頁(yè)文件包含所有數(shù)據(jù)庫(kù)表的索引信息,我們就需要先解析它,以模擬mysql查詢數(shù)據(jù)的過(guò)程,最終才能找到要恢復(fù)的數(shù)據(jù)。c_parser工具可以用來(lái)解析頁(yè)文件,不過(guò)需要提供該頁(yè)文件的一個(gè)內(nèi)部結(jié)構(gòu)(表結(jié)構(gòu))。

    項(xiàng)目根目錄下有個(gè)dictionary目錄,里面就包含數(shù)據(jù)字典用到相關(guān)表結(jié)構(gòu),如用來(lái)解析第一個(gè)頁(yè)文件的表結(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ù)庫(kù)表索引信息并過(guò)濾出我們想要恢復(fù)的有關(guān)ctf的文件

    我們看到 user這個(gè)表的索引值為? 13,通過(guò)這個(gè)索引值,再到另外一張表去查詢?cè)搖ser表所有的索引信息

    該表的結(jié)構(gòu)在"dictionary/SYS_INDEXES.sql"文件中可以看到,而此表對(duì)應(yīng)的數(shù)據(jù)頁(yè)文件是第三個(gè)數(shù)據(jù)頁(yè)0000000000000003.page

    ./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000003.page -t dictionary/SYS_INDEXES.sql | grep 13

    這里找到一條user 的索引信息,其在mysql 存儲(chǔ)中的索引值為 15,此索引值編號(hào)對(duì)應(yīng)的數(shù)據(jù)頁(yè)文件中,即存儲(chǔ)了該索引的全部數(shù)據(jù)

    此處我們選擇的是主鍵索引對(duì)應(yīng)的數(shù)據(jù)頁(yè)文件進(jìn)行解析(另外一個(gè)索引鍵應(yīng)該也可以,只不過(guò)方法可能需要有所區(qū)別),終于順利解析見(jiàn)到了激動(dòng)人心的數(shù)據(jù):

    ./c_parser -5f pages-ibdata1/FIL_PAGE_INDEX/0000000000000015.page -t structure.sql | more

    得到flag:

    71e55075163d5c6410c0d9eae499c977

    ?

    ?

    寫在最后:(上面的很多題,我也是第一次遇到,也是邊刷邊學(xué)習(xí))

    我也是一個(gè)剛學(xué)習(xí)的web安全的小白,也是通過(guò)刷題寫writeup來(lái)提升自己,寫的不好的地方勿噴,轉(zhuǎn)身離開(kāi)就好,如果覺(jué)得有幫助到你,就點(diǎn)個(gè)贊就好

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的攻防世界———MISC 高手区题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。