Platform bağımsız MSSQL sorguları yapabileceğiniz ufak bir script hazırlamıştım. Temel amacım güvenlik denetimlerinde zayıf şifreye sahip Microsoft SQL veritabanlarında, Linux üzerinden belirli sorgular çalıştırabilmekti.
SQL Query Analyzer vb yazılımların bulunmadığı durumlarda basit bir osql, isql alternatifi olarak da kullanılabilir.

Microsoft SQL query yazılımına buradan ulaşabilirsiniz. Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.

Örnek kullanım:

$ ./mssqlquery.py -s 192.168.0.14 -u sa
Enter password for sa:
Connected to 192.168.0.14!
mssqlquery> select name from sysdatabases
master
tempdb
model
msdb
HR
CRM
mssqlquery> select @@version
Microsoft SQL Server 2008 (SP2) – 10.0.4000.0 (Intel X86)
Sep 16 2010 20:09:22
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Evaluation Edition on Windows NT 6.0 (Build 6002: Service Pack 2)
mssqlquery>

Bahaneyle mssqlcmd yazılımını da güncelledim. Microsoft SQL brute-force yazılımı yeni pymssql kütüphanesiyle çalışmıyor. Zaten bu işi gayet iyi yapan birden fazla yazılım olduğu için pek ihtiyaç duyulmayacağını tahmin ediyorum.

Daha önceden yayınladığım Microsoft SQL kullanarak komut çalıştırma script’inde bazı ufak düzenlemeler yaptım.
İşlevini yerine getirmek için xp_cmdshell stored procedure’ını kullandığını iletmiştim. Peki ya xp_cmdshell devre dışı bırakıldıysa veya hedef sunucu Microsoft SQL Server 2005 sürümüyse?

Bu durumda xp_cmdshell’i yeniden devreye alabilmek için aşağıdaki yöntemleri izleyebiliriz:

  1. Microsoft SQL Server 2005 sürümünde, güvenlik nedeniyle xp_cmdshell devre dışı olarak gelmektedir. Aktif hale getirebilmek için aşağıdaki sorgunun çalıştırılması yeterlidir:

    USE master
    GO
    EXEC sp_configure ‘show advanced options’, 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    EXEC sp_configure ‘xp_cmdshell’, 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    EXEC sp_configure ‘show advanced options’, 0
    GO

  2. Bir güvenlik önlemi olarak, xp_cmdshell stored procedure’ı veritabanı yöneticisi tarafından kaldırıldıysa (ki Microsoft’un bunu pek de önerdiği söylenemez), tanımlamak için xpsql70.dll dosyasının sistemde bulunması yeterli. Bunun için aşağıdaki SQL sorgusunun çalıştırılması gerekir:

    EXEC sp_addextendedproc ‘xp_cmdshell’, ‘xpsql70.dll’

mssqlcmd‘nin yeni sürümünü yine aynı yerden indirebilirsiniz.

Not: mssqlcmd.py dosyasında bu komutlar comment olarak gerekli yerlere eklenmiştir. Gerektiğinde satır başlarındaki # karakteri silinerek çalışmaları sağlanabilir.
Uyarı: Yukarıda yazan SQL sorgularının çalıştırılması ile ilgili sorumluluk kabul edilmemektedir. Gerçek sistemler üzerinde çalışmadan önce, test sistemlerinde denemeler yapın.

Hazır konu Microsoft SQL’den açılmışken, yine güvenlik denetimlerinde zayıf veritabanı şifrelerini tespit etmede kullanılabilecek bir script hazırladım.

Basit bir şekilde, username ve password wordlist kullanarak, şifre deneme-yanılma (brute force) saldırısı yapabiliyor.
Daha sonradan kullanabilmek için, bulduğu kullanıcı adı ve şifreleri bir metin dosyasında arşivliyor.
Threading desteği sayesinde aynı anda birden fazla kullanıcı adı/şifre kombinasyonu deneyerek işlemi büyük oranda hızlandırabilir. Varsayılan maksimum thread sayısını 5 olarak ayarladım. Script içerisinden kolayca değiştirilebilir.

Microsoft SQL Brute Force yazılımına buradan ulaşabilirsiniz.
Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.

Güvenlik denetimlerinde kullanmak üzere hazırladığım bu basit script, Microsoft SQL sunucusu çalışan bir sunucu üzerinde komut çalıştırmaya yarıyor.
Bu işlevi yerine getirmek için xp_cmdshell stored procedure’ını kullanıyor. Zayıf veritabanı yöneticisi şifresi tespit edildiğinde kullanılabilir. (Örneğin ‘sa’ hesabı ve boş şifre)

mssqlcmd.py dosyasına buradan ulaşabilirsiniz.
Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.

Symantec AntiVirus Corporate Edition yazilimin 10.1 surumune, web tabanli bir raporlama ozelligi eklenmis.

Uygulama PHP ile yazilmis, verilerini MSSQL’de tutuyor. Kurulum icin IIS ve MSSQL gerektiriyor. PHP ile ilgili ek bir kurulum veya ayar yapmak gerekmiyor. Kendisini kurarken PHP’yi de /Reporting/ klasorunde calisacak sekilde ayarliyor. Varolan bir MSSQL kullanilmazsa veya urunun kurulacagi makina uzerinde MSSQL yoksa MSDE kuruyor olabilir. Ona dikkat etmemisim.

Urunu kurdugunuz makinanin bolgesel ayarlari (regional settings) Ingilizce olmazsa problem cikartiyor. Bunun disinda yaptigim bir kurulumda, veritabaninin collation ayarinin turkce olmasindan dolayi da problem ciktigini gordum. Yani yaratilan veritabaninin da collation ayarlarinin standart olmasi gerekiyor (Sanirim Latin1_General, code page 1252 olarak geciyordu).

Reporting web arabiriminden belirli raporlar alabildiginiz gibi, belirli olaylar karsisinda alarm uretilecek sekilde ayar yapabiliyorsunuz(alerts bolumunden). Bu alarmlar veritabanina yazilabilir, mail ile gelebilir veya alarm uretildiginde alert agent icerisinde ayarlamis oldugunuz bat dosyasi calistirilabilir.

Neyse, aslinda soyleyecegim bu degildi. Reporting’i kurdugum bir yerde, urunun MSSQL ‘e baglandigi sifreyi degistirmem gerekti. Sifreyi 3 farkli yerde degistirmek gerektigi icin, ihtiyaci olanlar aramasin diye dusunerek aktarmak istedim.

  1. ODBC ayarlari: Makinanin ODBC ayarlarinda “Reporting” DSN ayarini degistirmek gerekiyor (Start > Programs > Administrative Tools > Data Sources (ODBC) icerisinde System DSN bolumunde)
  2. “C:\Program Files\Symantec\Reporting Server\Web\Resources” klasoru icerisindeki “Reporter.php” dosyasini acarak, buradaki “dbpasswd” degiskenini degistirmek gerekiyor
  3. “C:\Program Files\Common Files\Symantec Shared\Reporting Agents\Win32” klasoru icerisindeki “Reporter.conf” dosyasinda bulunan “DBPWD” degiskenini degistirmek gerekiyor

Tum bu islemler yapildiktan sonra “Reporting Agents” servisi yeniden baslatilarak, urunun problemsiz calistigi web arabirimi uzerinden kontrol edilebilir.

Google olsa da, sikca sorulan sorulardan bir tanesi. Elinizde bir Microsoft SQL veritabani sunucusu var ve SQL surum numarasindan patch seviyesini ogrenmek istiyorsunuz. SQL Query Analyzer’i kullanarak “SELECT @@version” ciktisini aliyorsunuz ve Google imdadiniza yetisiyor.

Bir cok sitede surum numarasina gore service pack seviyesini hizlica belirleyebileceginiz tablolar yeraliyor. Ancak burada bulunan SQL Server 2000 Build Chart oldukca detayli.

SQL Server 2000
Version Service Pack
8.00.2039 SQL Server 2000 Service Pack 4 (SP4)
8.00.760 SQL Server 2000 Service Pack 3 (SP3)
8.00.534 SQL Server 2000 Service Pack 2 (SP2)
8.00.384 SQL Server 2000 Service Pack 1 (SP1)
8.00.194 SQL Server 2000 RTM (Release To Manufacturing)
SQL Server 7.0
Version Service Pack
7.00.1063 SQL Server 7.0 Service Pack 4 (SP4)
7.00.961 SQL Server 7.0 Service Pack 3 (SP3)
7.00.842 SQL Server 7.0 Service Pack 2 (SP2)
7.00.699 SQL Server 7.0 Service Pack 1 (SP1)
7.00.623 SQL Server 7.0 RTM (Release To Manufacturing)
SQL Server 6.5
Version Service Pack
6.50.479 SQL Server 6.5 Service Pack 5a (SP5a) Update
6.50.416 SQL Server 6.5 Service Pack 5a (SP5a)
6.50.415 SQL Server 6.5 Service Pack 5 (SP5)
6.50.281 SQL Server 6.5 Service Pack 4 (SP4)
6.50.258 SQL Server 6.5 Service Pack 3 (SP3)
6.50.240 SQL Server 6.5 Service Pack 2 (SP2)
6.50.213 SQL Server 6.5 Service Pack 1 (SP1)
6.50.201 SQL Server 6.5 RTM (Release To Manufacturing)

SQL 2000’de “SELECT SERVERPROPERTY(‘productversion’), SERVERPROPERTY (‘productlevel’), SERVERPROPERTY (‘edition’)” sorgusu kullanilarak da ozet bilgi alinabilir.

Kaynaklar
How to identify your SQL Server version and edition
SQL Server 2000 Build Chart