ナビゲーターカップ部分Writeup
30750 ワード
コーディングデコード
問題に署名して、base 64は復号して得ます:
証拠分析
pacpをあげました.pcap,CTF Wikiにはこの例題が収録されています...
Wiresharkが開くと、DNSプロトコルがすべて検出され、クエリ名は大量の文字列
BSides San Francisco CTF 2017原題のようですが、この記事を参考にしてください.https://volatilevirus.home.blog/2018/12/30/bsidessf17-ctf-dnscap-write-up/
次のコマンドで抽出します.
次にflagを以下のスクリプトで得る.png:
直接開かないで、010 Editorで見てみます:上で選んだ部分を削除して、更に開いて、flag:b 91011 fc を得ます
lsb
次の写真をあげました:
タイトル名lsbにより、Stegsolveで開き、下の位置にシフトしてflag:ONPGRABCICM を得る
リカバリと復号化
公安员は犯罪者のコンピュータの中でいくつかのディスクのファイルを発见して、しかし肝心な情报がすでに削除されたことを発见して、今あなたがディスクに対して回复することを必要として、そして回复したいくつかの秘密のファイルの中の暗号化の情报に対して解読します.注意:stringsで取得したyc 4 pl 0 fvjs 2 k 1 t 7 Tは偽flagです.他の正しい問題方法でflagを取得してみてください.
ディスクリカバリという問題があり、偽のflagがあると判断できます.
添付ファイルはxtyです.img、kaliの下のコマンドでマウントします.
隠しフォルダ
ここでは
さらにext 3 grepツールを使用して、ディレクトリを次のように表示します.
は多くのsecretファイルを見ることができますが、実際には内容は同じで、次のコマンドで復元します.
ファイルを開くと、次の文字列が表示されます.
base 64は、次のようになります.
排他的または復号化スクリプトは次のとおりです.
得られた唯一の特殊文字なしflag:jdr 78472 Q 82 jhQ 62 jaLL 3 jdr
ファイル抽出
flagをあげました.exe、stringsはすぐに画像がbase 64を回転した後の文字列を見ることができます:勝手にオンラインサイトを探して画像を回転します以下の通りです:
それからstringsはこのピクチャーを得てflagを得ます:flag{068 EEF 6 A 7 BAD 3 FDF}
forensics
pngdecodeをあげました.docx:
最初は長い間この画像を分析していましたが、結果はありませんでした...docxドキュメント全体foremostを抽出してflag:360 HA 360 を得ました
OldCypher-Easy
密文は以下のように与えられた.
最後の一連の明示的なflagのフォーマットは、このサイトでバージニアの復号化を行います.https://www.guballa.de/vigenere-solver
flag:flag{42 e 96 d 9 bf 73 d 79 c 4 fd 5308 f 18 b 8519 cb 10 c 512 b 2}を得る
MasterofZip-Middle
level1
圧縮パッケージとReadmeをあげましたmdの内容は以下の通りです.
そこで199の最初の携帯電話番号を爆破し、パスワードを得た:199505453796
level2
第1層を解凍して圧縮パッケージとReadmeを得る.txt、内容は重要ではありませんが、level 2が表示されます.zipの中にもReadmeがあります.txt,だから明文攻撃を試みて、鍵を正常に回復して解凍します:
level3
第2層の解凍後、圧縮パケットが1つしか与えられなかったので、偽暗号化を試みた:矢印の位置を0に修正し、解凍に成功し、次の画像を得た:それから画像の高さを修正した:
flag:flag{4537 ec 3 bd 52 ba 2 b 41 c 4 a 780 db 841 efc 3 ddccc 4 a 4}を得る
パケット分析-EAsy
テーマはhttp 3にあげました.pcapは、流量分析を行い、テーマの説明に基づいて、直接HTTPの対象リストを導出し、flagを発見した.php:
エクスポート後、flag:flag{3 eyufhnj 87}が表示されます.
EasyRSA
タイトルは暗号化スクリプトに次のように与えられました.
でも実際は何の役にも立たないpubkey.txtの中でそれぞれ対応する内容、すなわち:
ここのphintとqhintは実際にはよく言われるdpとdqである.
密文は以下のように返された.
だからこの問題は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)/
最終的な復号スクリプトは次のとおりです.
運転してflag:flag{6 b 85823 e 6 f 121 a 7 bb 3407 ff 2 e 9 f 5 f 2 f 27 efcc 5 a 6}を得る
V2VsY29tZXRvdGhlUGlsb3RDdXA=
問題に署名して、base 64は復号して得ます:
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:b 91011 fc を得ます
lsb
次の写真をあげました:
タイトル名lsbにより、Stegsolveで開き、下の位置にシフトしてflag:ONPGRABCICM を得る
リカバリと復号化
公安员は犯罪者のコンピュータの中でいくつかのディスクのファイルを発见して、しかし肝心な情报がすでに削除されたことを発见して、今あなたがディスクに対して回复することを必要として、そして回复したいくつかの秘密のファイルの中の暗号化の情报に対して解読します.注意:stringsで取得したyc 4 pl 0 fvjs 2 k 1 t 7 Tは偽flagです.他の正しい問題方法でflagを取得してみてください.
ディスクリカバリという問題があり、偽のflagがあると判断できます.
添付ファイルはxtyです.img、kaliの下のコマンドでマウントします.
mount -o loop xty.img /mnt
隠しフォルダ
.hide
を送信します.中にはsecret.odg
があります.開くと、は何の役にも立たないようです.テーマの説明のディスクの復元を考えています.sstatとext 3 grepの2つのツールを使用する必要があります.まず、次のコマンドで関連情報を表示します.fsstat xty.img
ここでは
Root Directory: 2
の2が使用されることに注意してください.さらにext 3 grepツールを使用して、ディレクトリを次のように表示します.
ext3grep --inode 2 xty.img
は多くのsecretファイルを見ることができますが、実際には内容は同じで、次のコマンドで復元します.
ext3grep --restore-file secret xty.img
ファイルを開くと、次の文字列が表示されます.
aWdxNDs3NDFSOzFpa1I1MWliT08waWdx
base 64は、次のようになります.
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:jdr 78472 Q 82 jhQ 62 jaLL 3 jdr
ファイル抽出
flagをあげました.exe、stringsはすぐに画像がbase 64を回転した後の文字列を見ることができます:勝手にオンラインサイトを探して画像を回転します以下の通りです:
それからstringsはこのピクチャーを得てflagを得ます:flag{068 EEF 6 A 7 BAD 3 FDF}
forensics
pngdecodeをあげました.docx:
最初は長い間この画像を分析していましたが、結果はありませんでした...docxドキュメント全体foremostを抽出してflag:360 HA 360 を得ました
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{42 e 96 d 9 bf 73 d 79 c 4 fd 5308 f 18 b 8519 cb 10 c 512 b 2}を得る
MasterofZip-Middle
level1
圧縮パッケージとReadmeをあげましたmdの内容は以下の通りです.
zip, 199, ?( , )
そこで199の最初の携帯電話番号を爆破し、パスワードを得た:199505453796
level2
第1層を解凍して圧縮パッケージとReadmeを得る.txt、内容は重要ではありませんが、level 2が表示されます.zipの中にもReadmeがあります.txt,だから明文攻撃を試みて、鍵を正常に回復して解凍します:
level3
第2層の解凍後、圧縮パケットが1つしか与えられなかったので、偽暗号化を試みた:矢印の位置を0に修正し、解凍に成功し、次の画像を得た:それから画像の高さを修正した:
flag:flag{4537 ec 3 bd 52 ba 2 b 41 c 4 a 780 db 841 efc 3 ddccc 4 a 4}を得る
パケット分析-EAsy
テーマはhttp 3にあげました.pcapは、流量分析を行い、テーマの説明に基づいて、直接HTTPの対象リストを導出し、flagを発見した.php:
エクスポート後、flag:flag{3 eyufhnj 87}が表示されます.
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) + '
')
f.write(str(N) + '
')
f.write(str(phint) + '
')
f.write(str(qhint) + '
')
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{6 b 85823 e 6 f 121 a 7 bb 3407 ff 2 e 9 f 5 f 2 f 27 efcc 5 a 6}を得る