編碼解碼
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}