Telephony tapsrv Arbitrary DWORD Write to RCE (TAPI Server Mode)
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Wanneer die Windows Telephony service (TapiSrv, tapisrv.dll) gekonfigureer is as ’n TAPI server, openbaar dit die tapsrv MSRPC interface oor die \pipe\tapsrv named pipe aan geverifieerde SMB-kliente. ’n Ontwerpfout in die asynchrone gebeurtenisaflewering vir remote kliente laat ’n aanvaller toe om ’n mailslot-handle te omskep in ’n beheerde 4-byte skrywing na enige reeds-bestaande lêer wat deur NETWORK SERVICE geskryf kan word. Daardie primitief kan gekoppel word om die Telephony adminlys oor te skryf en ’n slegs-admin arbitrary DLL load te misbruik om kode as NETWORK SERVICE uit te voer.
Aanvalsoppervlakte
- Remote blootstelling slegs wanneer geaktiveer:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Server\DisableSharingmoet sharing toelaat (of gekonfigureer viaTapiMgmt.msc/tcmsetup /c <server>). Standaard istapsrvplaaslik-alleen. - Interface: MS-TRP (
tapsrv) oor SMB named pipe, so die aanvaller benodig geldige SMB-auth. - Service account:
NETWORK SERVICE(manual start, on-demand).
Primitief: Mailslot Path Confusion → Arbitrary DWORD Write
ClientAttach(pszDomainUser, pszMachine, ...)initialiseer asynchrone gebeurtenisaflewering. In pull-modus doen die service:
CreateFileW(pszDomainUser, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
sonder om te valideer dat pszDomainUser ’n mailslot-pad is (\\*\MAILSLOT\...). Enige bestaande filesystem-pad wat deur NETWORK SERVICE geskryf kan word, word aanvaar.
- Elke asynchrone gebeurtenisskrywing stoor ’n enkele
DWORD=InitContext(deur die aanvaller beheer in die daaropvolgendeInitializeversoek) na die geopende handle, wat ’n write-what/write-where (4 bytes) gee.
Forcering van Deterministiese Skrywings
- Open teikengileer:
ClientAttachmetpszDomainUser = <existing writable path>(bv.C:\Windows\TAPI\tsec.ini). - Vir elke
DWORDom te skryf, voer hierdie RPC-volgorde uit teenClientRequest:
Initialize(Req_Func 47): stelInitContext = <4-byte value>enpszModuleName = DIALER.EXE(of ’n ander boonste inskrywing in die per-user priority list).LRegisterRequestRecipient(Req_Func 61):dwRequestMode = LINEREQUESTMODE_MAKECALL,bEnable = 1(registreer die line app, herbereken hoogste prioriteitsontvanger).TRequestMakeCall(Req_Func 121): dwingNotifyHighestPriorityRequestRecipient, wat die asynchrone gebeurtenis genereer.GetAsyncEvents(Req_Func 0): ontknoop/voltooi die skrywing.LRegisterRequestRecipientweer metbEnable = 0(ontregistreer).Shutdown(Req_Func 86) om die line app af te breek.- Prioriteitsbeheer: die “hoogste prioriteit” ontvanger word gekies deur
pszModuleNamete vergelyk teenHKCU\Software\Microsoft\Windows\CurrentVersion\Telephony\HandoffPriorities\RequestMakeCall(gelees terwyl geïmpersonifieer as die klient). Indien nodig, voeg jou module-naam by viaLSetAppPriority(Req_Func 69). - Die lêer moet reeds bestaan omdat
OPEN_EXISTINGgebruik word. AlgemeneNETWORK SERVICE-skryfbare kandidaten:C:\Windows\System32\catroot2\dberr.txt,C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\MpCmdRun.log,...\MpSigStub.log.
From DWORD Write to RCE inside TapiSrv
- Gee jouself Telephony “admin”: teiken
C:\Windows\TAPI\tsec.inien voeg[TapiAdministrators]\r\n<DOMAIN\\user>=1by deur die 4-byte skrywings hierbo. Begin ’n nuwe sessie (ClientAttach) sodat die service die INI herlees enptClient->dwFlags |= 9vir jou rekening stel. - Admin-only DLL load: stuur
GetUIDllNamemetdwObjectType = TUISPIDLL_OBJECT_PROVIDERIDen voorsien ’n pad viadwProviderFilenameOffset. Vir admins doen die serviceLoadLibrary(path)en roep dan die exportTSPI_providerUIIdentifyaan:
- Werk met UNC-paaie na ’n regte Windows SMB share; sommige kwaadwillige SMB-bedieners faal met
ERROR_SMB_GUEST_LOGON_BLOCKED. - Alternatief: drop stadig ’n plaaslike DLL met dieselfde 4-byte skrywingprimitief, en laai dit dan.
- Payload: die export word uitgevoer onder
NETWORK SERVICE. ’n Minimale DLL kancmd.exe /c whoami /all > C:\Windows\Temp\poc.txtuitvoer en ’n nie-nul waarde teruggee (bv.0x1337) sodat die service die DLL unload, wat uitvoering bevestig.
Verharding / Opsporingsnotas
- Deaktiveer TAPI server-modus tensy dit nodig is; blokkeer remote toegang tot
\pipe\tapsrv. - Handhaaf mailslot namespace validasie (
\\*\MAILSLOT\) voordat client-verskafte paaie oopgemaak word. - Hardlock
C:\Windows\TAPI\tsec.iniACLs en monitor veranderings; waarschuw virGetUIDllNameoproepe wat nie-standaard paaie laai.
Verwysings
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

