sp_addsrvrolemember Stored Prosedürü ile Güvenilir Olarak Yapılandırılmamış Olan MS SQL Veritabanında TRUSTWORTHY Özelliğini Kötüye Kullanarak Hak Yükseltilmesi

Sızma testleri sırasında, standart uygulama kullanıcısına ait yetkiler ile elde edilen MS SQL veritabanı uygulamasında hak yükseltilerek erişim sağlanamayan kaynaklara erişilmeye çalışılır. Bu yazıda bir sp_addsrvrolemember Stored Prosedür kullanılarak, TRUSTWORTHY özelliği etkinleştirilmiş ve güvenilir olarak yapılandırılmamış olan MS SQL veritabanınında standart kullanıcı hakları, sysadmin rolü haklarına yükseltilecektir.

Mevcut ortamda MS SQL veritabanının IP adresi 172.22.71.247; bu sunucudaki MUSTERILER ve HESAPLAR veritabanları için TRUSTWORTHY özelliği etkin; “test” kullanıcısı ise sunucu üzerinde standart bir kullanıcı olsun. Ayrıca MUSTERILER veritabanında “sa” ve “test” hesapları db_owner rolünde olsun.

Mevcut durumda, MSSQL sunucuda bir veritabanı TRUSTWORTHY olarak ayarlanmış iken, bu veritabanının sahibi (“sa”) yüksek yetkili (veritabanı sunucusu üzerinde yetkili) ve MS SQL Server üzerindeki standart yetkilere sahip bir kullanıcı hesabı (web uygulamasına ait bir veritabanı kullanıcısı veya test amaçlı oluşturulmuş olan “test” hesabı gibi) da bu veritabanında tam yetkili (“db_owner” rolüne sahip) olduğundan; standart yetkilere sahip olan hesap (“test”), veritabanının sahibinin yetkisi (“sa”) ile komut çalıştırılabilir. Örneğin, MSSQL sunucuda standart haklara sahip “test” kullanıcı, kendisine MSSQL sunucusu üzerinde “sysadmin” rolü verebilir. Böylece MSSQL sunucusu üzerinde hak yükseltme işlemi gerçekleştirmiş olur.

Hak yükseltme işlemi, MSSQL Management Studio üzerinde veya sqlplus gibi komut satırı üzerinden gerçekleştirilebilir. Bu amaçla, MUSTERILER veritabanının altında bir Stored Procedure oluşturulabilir. Bu Stored Prosedür, “test” hesabına sysadmin rolünü verecek şekilde hazırlanabilir. Daha sonra da, Stored Prosedür ilgili veritabanı sahibinin (“sysadmin” rolündeki “sa” hesabının) hakkı ile çalıştırılabilir.

SELECT is_srvrolemember(‘sysadmin’)
GO

USE MUSTERILER
GO
CREATE PROCEDURE sysadmin_rolune_ekle WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember ‘test’,’sysadmin’
GO

USE MUSTERILER
EXEC sysadmin_rolune_ekle

SELECT is_srvrolemember(‘sysadmin’)
GO

escalating-privileges-on-a-misconfigured-ms-sql-database-by-exploiting-trustworthy-option-using-sp-addsrvrolemember-stored-procedure-01

 

Böylece, “test” hesabı “sysadmin” rolüne sahip olmuştur.

 

Kaynaklar:

http://www.siberportal.org/blue-team/securing-ms-sql-database/enabling-and-security-risks-of-trustworthy-option-of-a-database-on-a-misconfigured-ms-sql-server/
https://blog.netspi.com/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/

 

 

Yazarın Bilgileri

Ertuğrul BAŞARANOĞLU
Ertuğrul BAŞARANOĞLU

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kullanabileceğiniz HTLM etiketleri ve özellikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Bu sayfada incelenen konulardan doğacak sorunlar kişinin kendi sorumluluğundadır.