領航杯部分Writeup

編碼解碼

V2VsY29tZXRvdGhlUGlsb3RDdXA=

簽到題,base64解碼一下得到:

WelcometothePilotCup

取證分析

給了一個pacp.pcap,CTF Wiki裏面收錄過這一道例題…

wireshark 打開發現全部爲DNS協議,查詢名爲大量字符串xxxxx.skullseclabs.org

好像是BSides San Francisco CTF 2017原題,參考這篇文章:https://volatilevirus.home.blog/2018/12/30/bsidessf17-ctf-dnscap-write-up/

先用下面命令進行提取:

tshark -r pacp.pcap -T fields -e dns.qry.name > hex

然後用如下腳本得到flag.png:

from scapy.all import *
 
r = rdpcap("pacp.pcap")
 
a = ""
 
b = ""
c = ""
new = ""
 
f = open("flag.png","w")
 
for i in range (0,len(r)):
    if r[i].haslayer(DNSQR) and not r[i].haslayer(DNSRR):
        a = r[i][DNSQR].qname
        b = a.replace(".skullseclabs.org.","")
        b = b.replace(".","").decode("hex")[9:]
 
        if b == c:
            continue
 
        c = b
 
        if 6 < i <365:
            new = new + b
 
f.write(new)
 
f.close()

直接打不開,用010 Editor看一下:
在這裏插入圖片描述
刪掉上面選中的部分,再打開,得到flag:b91011fc在這裏插入圖片描述


lsb

給了下面這張圖片:
在這裏插入圖片描述

根據題目名字lsb,用Stegsolve打開,移位到下面位置得到flag:ONPGRAMBCICM
在這裏插入圖片描述


恢復與解密

題目描述:公安人員在犯罪分子的電腦中發現一些磁盤文件,但是發現關鍵信息已經被刪除,現需要你對磁盤進行恢復,並對恢復出來的一些祕密文件裏面的加密信息進行解密。 注意:通過strings獲取到的yc4pl0fvjs2k1t7T爲假flag,請嘗試使用其他正確的做題方式獲取flag。

所以可以判斷這題爲磁盤恢復,並且有假flag。

附件給的是一個xty.img,在kali下面命令進行掛載:

mount -o loop xty.img /mnt

在這裏插入圖片描述

發一下一個隱藏文件夾.hide,裏面有一個secret.odg,打開得到如下內容:
在這裏插入圖片描述
好像沒什麼用,想到題目描述中的磁盤恢復,所以需要用到sstat 和 ext3grep這兩個工具,先用下面命令查看相關信息:

fsstat xty.img

在這裏插入圖片描述
注意這裏Root Directory: 2中的2是我們要用到的。

再用ext3grep工具,查看目錄如下:

ext3grep --inode 2 xty.img

在這裏插入圖片描述
可以看到很多secret文件,實際上內容都一樣,用下面命令將其恢復出來:

ext3grep --restore-file secret xty.img

在這裏插入圖片描述
打開該文件發現下面一串字符:

aWdxNDs3NDFSOzFpa1I1MWliT08waWdx

在這裏插入圖片描述

base64一下得到:

igq4;741R;1ikR51ibOO0igq

異或解密腳本如下:

import string

c = "igq4;741R;1ikR51ibOO0igq"

for i in range(0,200):
    p = ""
    for j in range(len(c)):
        p += chr(ord(c[j])^i)
    print (p)

得到的唯一一個無特殊字符的即爲flag:jdr78472Q82jhQ62jaLL3jdr在這裏插入圖片描述


文件提取

給了一個flag.exe,strings一下可以看到是圖片轉base64後的字符串:
在這裏插入圖片描述
隨便找個在線網站轉回圖片如下:

在這裏插入圖片描述
然後strings一下這個圖片得到flag:flag{068EEF6A7BAD3FDF}
在這裏插入圖片描述


forensics

給了一個pngdecode.docx:
在這裏插入圖片描述

一開始分析了好久這個圖片,但是無果…然後對整個docx文檔foremost提取一下,得到flag:360HA360
在這裏插入圖片描述


OldCypher-Easy

給了密文如下:

Vvr Ifnvaus Bdwokv Gbtrzsa Vkqgofntja rrlznxk eflvkozjcdue rs “mzg oez ff pjkhvtx ok kqzioeg vgfsf.” Zyil au vvykokaeoyrp avuwfnzv, bnl fcry eom ucdgaie mzg qhxiegl dfrguta gh huk wixdf ce oks ijggrtk-dtq uqvketbxkq sulnwsvwbtj. Taw fssoeimaqb sutulwu gbrvlr gp huk towwu hugk htng prke ulwf tbx teglwfvkj th wpoorv sxutsg ifmfmpwpgkihf. Dig iiyilquegghr fqknjryl wpqbsgalkgg zath fgts gnrn mzkg: vz uetdu kvzy mxujoaojml xqf rtjukapu vtkezjkhl, zvcafkehkj fhj glpnrnzapu fktrxl msly, grhlqqbrj fhj cignvnmaeogoeg nkgff, kcevltcaot anuvwbtj agv gzrikihfu, rvmzttd eofn, rnw eqfr. Cztagwh nzkefhvwam ko ijqjvjv a vgodykke vzcfnikekabogofn, pw ychru stq vvnz dowwtb pxppmgifnvyy bfxcybvs mzg ggauy hx oognvmtlkqnr kevzpwdavs ygt grilrbfi rvmzttd kbsuimtlkca, ypsmwog, ntu dbkvfvhltxv eczvlttlkcay rgtapgg guvxjuoeorl tlvopqj. fesi{42s96q9hw73d79v4xf5308t18o8519is10c512u2}

最後一串明顯像flag的格式,在這個網站進行維吉尼亞解密:https://www.guballa.de/vigenere-solver

得到flag:flag{42e96d9bf73d79c4fd5308f18b8519cb10c512b2}
在這裏插入圖片描述


MasterofZip-Middle

level1

給了一個壓縮包,和一個Readme.md內容如下:

小明喜歡用自己的手機號來加密zip,我們通過社工只查到了他手機號的前三位爲199,你能解開這個壓縮包嗎?(手機號爲僞造手機號,請不要試圖撥打或社工)

於是爆破199開頭的手機號,得到密碼:19950453796
在這裏插入圖片描述

level2

第一層解壓後得到一個壓縮包和一個Readme.txt,內容不重要,但是看到level2.zip裏面也有一個Readme.txt,所以嘗試明文攻擊,成功恢復密鑰並解壓:
在這裏插入圖片描述

level3

第二層解壓後,只給了一個壓縮包,於是嘗試僞加密:
在這裏插入圖片描述
將箭頭位置修該爲0,成功解壓,得到下面這張圖片:
在這裏插入圖片描述
然後修改發圖片高度:
在這裏插入圖片描述

得到flag:flag{4537ec3bd52ba2b41c4a780db841efc3ddccc4a4}
在這裏插入圖片描述


數據包分析-Easy

題目給了一個http3.pcap,進行流量分析,根據題目描述,直接導出HTTP對象列表,發現flag.php:
在這裏插入圖片描述

導出後,即可在裏面看到flag:flag{3eyufhnj87}
在這裏插入圖片描述


EasyRSA

題目給了加密腳本如下:

from Crypto.Util.number import getPrime, inverse
flag = 'flag{a-z0-9}'
nbits = 2048
p = getPrime(nbits / 2)
q = getPrime(nbits / 2)
assert p != q
N = p * q
e = 0x10001
phiN = (p - 1) * (q - 1)
d = inverse(e, phiN)
phint = d % (p - 1)
qhint = q % (p - 1)


def str2int(s):
    return int(s.encode('hex'), 16)


with open('pubkey.txt', 'w') as f:
    f.write(str(e) + '\n')
    f.write(str(N) + '\n')
    f.write(str(phint) + '\n')
    f.write(str(qhint) + '\n')

plain = str2int(flag)

c = pow(plain, e, N)
with open('cipher.txt', 'w') as f:
    f.write(hex(c))

但實際上沒什麼用,只是告訴了我們pubkey.txt裏面分別對應的內容,即:

e = 65537
N = 16969752165509132627630266968748854330340701692125427619559836488350298234735571480353078614975580378467355952333755313935516513773552163392952656321490268452556604858966899956242107008410558657924344295651939297328007932245741660910510032969527598266270511004857674534802203387399678231880894252328431133224653544948661283777645985028207609526654816645155558915197745062569124587412378716049814040670665079480055644873470756602993387261939566958806296599782943460141582045150971031211218617091283284118573714029266331227327398724265170352646794068702789645980810005549376399535110820052472419846801809110186557162127
phint = 1781625775291028870269685257521108090329543012728705467782546913951537642623621769246441122189948671374990946405164459867410646825591310622618379116284293794090970292165263334749393009999335413089903796624326168039618287078192646490488534062803960418790874890435529393047389228718835244370645215187358081805
qhint = 10450978538445496868237560522155647855468044038637044818500580506745232482415364474390893285539835615564332910332708101539048528242011762736342572650763270501265440674647489375438852377280494520168349154604800218665628586180057648386859933274414030182106920793492451577530884172876623074281199949317487086975

而這裏的phint和qhint實際上就是常說的dp和dq。

還給了密文如下:

0x7b5d1ea2d92df27239817ce8d885e1f66569dd41e075efc13d09dd1df673a8fba68ec7487c1552028e9eb9ba6663983f96d01925bbdfd18398e44f970257fa0f96b6ec915d05d637ebb4c8f4c56c44b2bb46bd1afe5a67acd640585dccf1681155308c0663cb57fccdc10c097c454dafdd2a96ccd08e9a2a8b0a9727bbe9945e579b0652d1c1d826305f0dd716cfb647cadb8eca1a0286dfb938b60b89981403d4faa6df54cfac0fa4699c97aeba6e82ab575cd6aa4421018cf9b404836c02b5301dbc475a0bcc5eef86bcbeb89a73355dbeb80e7b4d23c7a39f32c6b6138125c73892633f46b0bf1114aa67f09e1d394dfa4020e318f7d8004b84fc835b1ee9L

所以這題我們有c、e、n、dp、dq,足夠解出明文了。

參考這篇文章:https://skysec.top/2018/08/24/RSA%E4%B9%8B%E6%8B%92%E7%BB%9D%E5%A5%97%E8%B7%AF(1)/

最終解密腳本如下:

import gmpy2
import libnum
e = 65537
n = 16969752165509132627630266968748854330340701692125427619559836488350298234735571480353078614975580378467355952333755313935516513773552163392952656321490268452556604858966899956242107008410558657924344295651939297328007932245741660910510032969527598266270511004857674534802203387399678231880894252328431133224653544948661283777645985028207609526654816645155558915197745062569124587412378716049814040670665079480055644873470756602993387261939566958806296599782943460141582045150971031211218617091283284118573714029266331227327398724265170352646794068702789645980810005549376399535110820052472419846801809110186557162127
dp = 1781625775291028870269685257521108090329543012728705467782546913951537642623621769246441122189948671374990946405164459867410646825591310622618379116284293794090970292165263334749393009999335413089903796624326168039618287078192646490488534062803960418790874890435529393047389228718835244370645215187358081805
c = "0x7b5d1ea2d92df27239817ce8d885e1f66569dd41e075efc13d09dd1df673a8fba68ec7487c1552028e9eb9ba6663983f96d01925bbdfd18398e44f970257fa0f96b6ec915d05d637ebb4c8f4c56c44b2bb46bd1afe5a67acd640585dccf1681155308c0663cb57fccdc10c097c454dafdd2a96ccd08e9a2a8b0a9727bbe9945e579b0652d1c1d826305f0dd716cfb647cadb8eca1a0286dfb938b60b89981403d4faa6df54cfac0fa4699c97aeba6e82ab575cd6aa4421018cf9b404836c02b5301dbc475a0bcc5eef86bcbeb89a73355dbeb80e7b4d23c7a39f32c6b6138125c73892633f46b0bf1114aa67f09e1d394dfa4020e318f7d8004b84fc835b1ee9L"
c = int(c[:-1], 16)
for i in range(1,65538):
    if (dp*e-1)%i == 0:
        if n%(((dp*e-1)/i)+1)==0:
            p=((dp*e-1)/i)+1
            q=n/(((dp*e-1)/i)+1)
            phi = (p-1)*(q-1)
            d = gmpy2.invert(e,phi)%phi
            print libnum.n2s(pow(c,d,n))

運行得到flag:flag{6b85823e6f121a7bb3407ff2e9f5f2f27efcc5a6}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章