ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

SQL injection UNION attack, retrieving multiple values in a single column

はじめに

SQL injection UNION attack, retrieving multiple values in a single column」のWriteupです。

portswigger.net

Summary

  • usersテーブルからusernameとpasswordを取り出さなければならないのに、アプリケーションが利用する文字列型の列が1つしかない場合、 単純に'+UNION+SELECT+username,password+FROM+users+ …などとすることはできない(文字列型の列が、usernameとpasswordの2列ぶん必要だから)
  • このような場合、文字列結合を使って、1つしかない文字列型に押し込む
    • 例えば username||'-'||password のようにする

Writeup

目的は、usersテーブルからusername=administratorのpasswordを取得してログインすることです。

まずは ORDER BY 句を使って列数確認。2列です。

f:id:befs_anne:20210425000833p:plain

次に、文字列型の列の位置確認。2列目が文字列型のようです。

f:id:befs_anne:20210425000853p:plain

最後に、 trackingId の末尾に 'UNION+SELECT+NULL,username||'-'||password+FROM+users+WHERE+username+=+'administrator'-- を付加して送信すると、- で連結されたusernameとpasswordがレスポンスされます。

f:id:befs_anne:20210425000955p:plain

これを使ってログインできました。

f:id:befs_anne:20210425001033p:plain