はまやんはまやんはまやん

hamayanhamayan's blog

urlcheck v2 [TokyoWesterns CTF 6th 2020]

urlcheck v2
find the flag
http://urlcheck2.chal.ctf.westerns.tokyo/
urlcheck2.tar

前問ではIPのチェックが甘かったようで、ipaddressライブラリでチェックしている。
ライブラリを攻撃するのはきついので、別の方針を考えるが、違いとして、FQDNが指定可能になっている。 valid_fqdnをかいくぐりつつ、localhostにアクセスさせる方法はないだろうか。

…まあ、さっぱり分からんかったんですが。

Writeupを見る

TokyoWesterns CTF 2020 | writeups by @terjanq
あー、これはやったことあるやつやん…

DNS Rebinding

ソースコードを見ると、ドメインの評価は2回行われる。

  1. valid_fqdn内部で名前解決される
  2. get内部でrequests.get時に使用される

ここで1回目はpublid ipかどうかをチェックするのに使用されて、2回目は実際に持ってくるときに使われる。
つまり、「1回目ではpublid ip, 2回目では127.0.0.1」にしてやればいい。
これはDNS Rebindingを使えばできる。

DNS Rebindingをやるときはrequestrepo.comを使うのがオススメ。
これでDNSを立ち上げて、Aレコードを作って、適当なurlを付けて、Value
[適当なpublid ip]%127.0.0.1と入れる。
A%Bのように書いておくと、リクエスト毎にA→B→A→Bみたいに返してくれるので、
DNS Rebindingみたいに使用可能。