WinPE: Token Impersonation (Potato Attack)

TLDR; What is Token?

Ketika kita Login ke dalam sistem, baik itu secara lokal ataupun melalui jaringan, bertindak sebagai Service, atau bahkan langsung memanggil fungsi API LogonUser. Saat itu, paket otentikasi akan membuat sesi Login dan kemudian Local Security Authority (LSA) membuat token akses untuk pengguna tersebut.

Token ini merepresentasikan berisi informasi:

  • ID sesi Login
  • User dan Group SID
  • Integrity Level
  • Privilege yang dipegang oleh pengguna atau grup di tempat pengguna berada

Kenapa “Impersonation” ada?

Impersonation adalah kemampuan untuk menjalankan sebuah tugas menggunakan hak istimewa atau identitas pengguna lain. Kita ambil contoh Service IIS (Web Server), ketika User yang menjalankan service IIS bukanlah NT AUTHORITY\SYSTEM (Local System), maka proses yang dijalankan oleh service tersebut mungkin tidak memiliki privilege yang cukup untuk mengakses beberapa sumber daya di sistem. Namun, dengan menggunakan Impersonation, layanan IIS masih dapat menjalankan tugas tertentu dengan hak istimewa tanpa role khusus dan layanan masih dapat melanjutkan tugasnya tanpa harus terhenti hanya karena user IIS tidak memiliki Role yang setara dengan Local System.


Impersonate Privileges

Mari kita bahas sedikit teknis terkait privilege SeImpersonatePrivilege dan SeAssignPrimaryTokenPrivilege.

SeImpersonatePrivilege adalah hak istimewa di Windows yang memungkinkan kita untuk menyamar sebagai User lain (Impersonation) untuk menjalankan sebuah tugas di bawah naungan User tersebut, begitu juga dengan SeAssignPrimaryTokenPrivilege. Jika kita memiliki SeImpersonatePrivilege, kita dapat menggunakan fungsi CreateProcessWithTokenW() untuk membuat proses baru dengan token yang kita miliki. Sebagai alternatifnya, SeAssignPrimaryTokenPrivilege memungkinkan kita untuk menggunakan fungsi CreateProcessAsUserA(), yang memiliki fungsi serupa.

Windows API Functions:

  • CreateProcessWithTokenW (SeImpersonatePrivilege needed) adalah fungsi dalam pemrograman Windows API yang digunakan untuk membuat proses baru menggunakan token keamanan (security token) dari pengguna atau sesi tertentu.
  • CreateProcessAsUserA (SeAssignPrimaryTokenPrivilege needed) adalah fungsi dalam Windows API yang mirip dengan CreateProcessWithTokenW. Namun, CreateProcessAsUserA digunakan untuk membuat proses baru sebagai pengguna tertentu.


Check privilege using CMD:

whoami /priv


Impersonation Exploit to Privilege Escalation

Potato Exploit

Potato / Impersonation Exploits: