| |
|
|
| avant etwa einem l'an habe je dans einem Delphiforum la fois une Interessante Fage gelesen, qui mich seitdem pas plus losgelassen hat: Ist qui Access Token, qui carte d'identité eines Users qui chaque Prozess zugeordnet wird, direct änderbar? normalement ist qui Token seulement sur cela avec OpenPocessToken trop erlangende Handle et qui API zugänglich, d.h. il peut aussi seulement qui Bereiche des Tokens changement, sur qui Winows sur cela Handle Zugriff erlaubt. comment mais, si on herausfinden pourrait comment et wohin qui dem eigenen Prozess zugeordnete Token sich im grenier aufhält - wäre un direkter Zugriff possible, wären qui Opportunités et Auswirkungen unvorstellbar! avant einer Zeit habe je cet cherche begonnen et dans diesem Fil soll es dans qui prochain Zeit um cet cherche aller. malheureusement habe je aujourd'hui trop wenig Zeit, um ici plus trop écrivons (argent ist alle ), mais je peux achon la fois dire, le moi bereits un paire interessante Sachen trouvé habe. |
|
|
| |
|
|
|
| Bevor on quelque chose cherchez ist es sinnvoll sich trop überlegen, comment cela quoi on cherchez dans etwa air pourrait. un wichtiger Bestandteil eines Tokens ist qui Userkennung (alors qui SID) des Users, dessen Ausweis qui Token verkörpert. si je mich comme Andreas avec meinem Kennwort dans den calculateur einlogge, pourrait dans chaque Token chaque Programms le moi starte alors qui Bytefolge des SIDs de Andreas stehen - eigentlich logisch.
comme Prozess, den je untersuchen voulais, habe je Notepad ausgewählt. Notepad est un einfacher Texteditor sans viel Beiwerk - qui périphérie des zugewiesenen Prozessspeichers pourrait alors pas très grand son - une Untersuchung des Prozessspeichers alors pas besonders longtemps dauern et pas allzuviele Fundstellen liefern, qui pas zum Token gehören. TNT bietet une ganze la quantité Opportunités, une Accountnamen dans un hexadezimale SID-Bytefolge umzuwandeln - une en habe je genützt et avec cela den SID dans qui Zwischenablage et später dans qui Funktion grenier fouiller übertragen. qui Startadresse qui cherche habe je sur qui Adresse 0. trouvé habe je ensuite oui c'est ca que voici...
[...]
...nämlich gar pas. un Token scheint sich alors pas im Userspeicher des jeweiligen Prozesses trop befinden - mais wohin cherchez on ensuite? dans den Artikeln, qui je sur den Token gelesen habe, était de einer Zuordnung le individuel Prozessen gesprochen worden - so une Zuordnung doit oui pas zwingendermaßen seulement im grenier des zugeordneten Prozesses stattfinden. j'ai mich bon alors en supplément entschlossen, mir den grenier anderer Prozesse la fois quelque chose näher anzusehen. comme erstes habe Je l' Service LSASS.EXE ausgewählt. pourquoi justement cette Prozess? cela hat quelque chose avec qui Namensgebung trop 1faire... là LSASS.EXE un Service im Sytem-Account ist, mußte je TNT d'abord einmal comme Service starten, quoi sur cela menu de TNT droite simple possible ist. après habe je mir qui Heaps des Prozesses listen laisser. aussi ici habe je qui Startadresse qui cherche wieder sur 0 gesetzt - ensuite ging’s à l'attaque. Bingo! là avons wir oui déjà la fois quoi...
[...]
Weitere wichtige Bestandteile eines Tokens sommes qui LUIDs (64-Bit Kennzahlen) qui Privilegien et en jetziger Status (Attribute). un LUID läßt sich relativ simple comme hexadezimale Bytefolge aus qui Token-Infos-Registrierkarte herauskopieren - alors faisons cela la fois. cela Privileg SeChangeNotifyPrivilege ist dans chaque Account vorhanden, es bietet sich pour une cherche alors à.
[...]
LUIDs de Privilegien stehen im Token toujours dans liaison avec ihren Attributen, alors ihrem derzeitigen Status - wir brauchen alors encore den Status des Privilegs SeChangeNotifyPrivilege => Standardmäßig aktiviert = SE_PRIVILEGE_ENABLED_BY_DEFAULT = $1 Aktiviert = SE_PRIVILEGE_ENABLED = $2 Zusammen wäre cela ensuite $3, quoi einer hexadezimalen Bytefolge de 03000000 entspricht. cela, quoi je chez mir trop chercher hätte, wäre alors que voici:
[...]
et que voici habe je trouvé:
[...]
maintenant regarder wir la fois, si es im Prozess LSASS.EXE une Heapblock gibt, qui beides contient - den SID et cela Privileg. chez mir ist cela qui 592 Bytes grand Heapblock avec qui Adresse 750992, dessen le contenu je mir ensuite comme hexadezimale Bytefolge représenter laisser habe.
[...]
Um mir cela ganze quelque chose näher regarder trop peut, habe je ensuite den ganzen Block comme hexadezimale Bytefolge dans qui Zwischenablage et après dans un Wordpad-Dokument kopiert. la fois regarder, quoi je là habe... [box:bc6ba1a7d2] 00000000FFFFFF7FFC750B0000000000B8750B0018760B00D8760B0040760B0098760B00000000000800000018760B000700000034760B000700000040760B000F00000050760B000700000060760B00070000C074760B000700000080760B00070000008C760B00070000000105000000000005150000000D7A5A338AA7323FF89FB474E80300000105000000000005150000000D7A5A338AA7323FF89FB474010200000101000000000001000000000102000000000005200000002002000001020000000000052000000021020000010300000000000505000000000000006B62000001010000000000020000000001010000000000050400000001010000000000050B00000002003400020000000000180000000010010200000000000520000000200200000000140000000010010100000000000512000000000000000000000000000000110000001700000000000000030000000800000000000000000000001100000000000000000000001200000000000000000000000C00000000000000000000001300000000000000000000001800000000000000000000001400000000000000000000001600000000000000000000000B00000000000000000000000D00000000000000000000000E00000000000000000000000A00000000000000000000000F0000000000000000000000050000000000000000000000190000000000000000000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500490000010C00 [/box:bc6ba1a7d2] après habe Je l' Schrott quelque chose Strukturiert... [box:bc6ba1a7d2] 00000000FFFFFF7FFC750B0000000000B8750B0018760B00D8760B0040760B0098760B00000000000800000018760B000700000034760B000700000040760B000F00000050760B000700000060760B00070000C074760B000700000080760B00070000008C760B0007000000
0105000000000005150000000D7A5A338AA7323FF89FB474E8030000 => SID des ausführenden Users (Andreas)
Gruppen im Token 0105000000000005150000000D7A5A338AA7323FF89FB47401020000 => SID qui Gruppe ne...aucune 010100000000000100000000 => SID qui Gruppe chacun 01020000000000052000000020020000 => SID qui Gruppe Administratoren 01020000000000052000000021020000 => SID qui Gruppe Benutzer 010300000000000505000000000000006B620000 010100000000000200000000 => SID qui Gruppe LOKAL 010100000000000504000000 => SID qui Gruppe Interaktiv 01010000000000050B000000 => SID qui Gruppe Authentifizierte Benutzer
Standard DACL 02 => Typ qui Zugriffskontrollliste (ACL_REVISION) 00 => deux Nullbytes zur Anpassung 3400 => Taille des ACLs (= 52 Bytes) 0200 => Nombre de ACEs dans qui Zugriffskontrollliste (= 2) 0000 => deux Nullbytes zur Anpassung 00 => Typ des 1.ACEs, ACE = Zugriffskontrolleintrag (= ACCESS_ALLOWED_ACE_TYPE) 00 => Flags (u.a.hérédité) des 1.Zugriffskontrolleintrags 1800 => Taille des 1.Zugriffskontrolleintrags (=24 Bytes) 00000010 => Zugriffsmaske des 1.ACEs (GENERIC_ALL) 01020000000000052000000020020000 => SID qui Gruppe Administratoren 00 => Typ des 2.Zugriffskontrolleintrags (= ACCESS_ALLOWED_ACE_TYPE) 00 => Flags (u.a.hérédité) des 2.Zugriffskontrolleintrags 1400 => Taille des 2.Zugriffskontrolleintrags (=20 Bytes) 00000010 => Zugriffsmaske des 1.ACEs (GENERIC_ALL) 010100000000000512000000 => SID qui Gruppe System
00000000000000000000000011000000
Privilegien im Token 1700000000000000 => chez mir LUID des Privilegs SeChangeNotifyPrivilege 03000000 => Aktiviert et standardmäßig aktiviert 0800000000000000 => chez mir LUID des Privilegs SeSecurityPrivilege 00000000 => deaktiviert 1100000000000000 => chez mir LUID des Privilegs SeBackupPrivilege 00000000 => deaktiviert 1200000000000000 => chez mir LUID des Privilegs SeRestorePrivilege 00000000 => deaktiviert 0C00000000000000 => chez mir LUID des Privilegs SeSystemtimePrivilege 00000000 => deaktiviert 1300000000000000 => chez mir LUID des Privilegs SeShutdownPrivilege 00000000 => deaktiviert 1800000000000000 => chez mir LUID des Privilegs SeRemoteShutdownPrivilege 00000000 => deaktiviert 1400000000000000 => chez mir LUID des Privilegs SeDebugPrivilege 00000000 => deaktiviert 1600000000000000 => chez mir LUID des Privilegs SeSystemEnvironmentPrivilege 00000000 => deaktiviert 0B00000000000000 => chez mir LUID des Privilegs SeSystemProfilePrivilege 00000000 => deaktiviert 0D00000000000000 => chez mir LUID des Privilegs SeProfileSingleProcessPrivilege 00000000 => deaktiviert 0E00000000000000 => chez mir LUID des Privilegs SeIncreaseBasePriorityPrivilege 00000000 => deaktiviert 0A00000000000000 => chez mir LUID des Privilegs SeLoadDriverPrivilege 00000000 => deaktiviert 0F00000000000000 => chez mir LUID des Privilegs SeCreatePagefilePrivilege 00000000 => deaktiviert 0500000000000000 => chez mir LUID des Privilegs SeIncreaseQuotaPrivilege 00000000 => deaktiviert 1900000000000000 => chez mir LUID des Privilegs SeUndockPrivilege 00000000 => deaktiviert 0900000000000000 => chez mir LUID des Privilegs SeTakeOwnershipPrivilege 00000000 => deaktiviert
000000000000000000000000000000000000000000000000000000000000000000000000000000000500490000010C00 [/box:bc6ba1a7d2] et que voici zeigt TNT dans qui dazugehörigen Registrierkarte chez mir à:
[...]
[...]
[...]
quoi là steht sommes alors zweifelsfrei Tokenstrukturen eines fremden Prozesses (alors pas de LSASS.EXE selbst, qui oui im System-Account fonctionne)! mais ist es aussi cela, quoi einem Prozess wirklich aktuell im Augenblick zugeordnet ist? la fois regarder... Zum Testen habe je chez chaque laufenden Prozess cela Privileg SeSystemtimePrivilege aktiviert et mir ensuite angesehen, si sich à den ici gefundenen Strukturen quelque chose modifié - es acte sich rien. quoi là steht, ist alors pas un im Augenblick einem Prozess zugeordneter Token - mais quoi ensuite? avec PrivAktivate peux je droite simple dans einer laufenden Session une Prozess avec dem Token eines pas eingeloggten Users starten. aussi cette Token habe je ensuite im Service LSASS.EXE trouvé. dans qui gefundenen Struktur habe je ensuite den Status eines Privilegs sur la valeur 02000000 gesetzt (= aktiviert). après habe je mir den Token avec TNT angesehen - aussi ici hatte sich rien geändert, cela Privileg était weiterhin deaktiviert. après que Je l' Login sur PrivAktivate mais wiederholt hatte, était qui im Heapblock auparavant de mir sur 02000000 gesetzte Wert wieder sur 00000000 (= deaktiviert) zurückgesetzt worden! qui Service LSASS.EXE erzeugt alors définitif beim Login den Token et weist ihn dem gestarteten Prozess trop!
mais wohin est sich qui Token pour qui Zuweisung? Folgender paragraphe qui WIN32.HLP gibt là peut-être. quelque chose nähere Auskunft: [box:bc6ba1a7d2] dans le Microsoft® Win32® application programming interface (API), each process has its own 32-bit virtual address space that enables addressing up to 4 gigabytes (GB) of memory. The 2 GB dans low memory (0x00 to 0x7FFFFFFF) sont available to le user, and le 2 GB dans high memory (0x80000000 to 0xFFFFFFFF) sont reserved for le kernel. [/box:bc6ba1a7d2]. il y a alors scheinbar au-dessus de de 2GB (au-dessus de qui Adresse $7FFFFFFF) une weiteren Adressbereich, qui pas pour den User bestimmt ist et donc aussi pas sans weiteres ausgelesen volonté peux. Im Augenblick vermute je, qui sich qui Token là befinden - zusammen avec den Sicherheitsbeschreibungen des aktuellen Prozesses et dessen Threads (sowie weiteren Objekte des Kernels). si je droite habe, pourrait on pas sans weiteres à cette Speicherbereich herankommen - peut-être gibt es mais aussi ici une Possibilité, avec très, très viel Trickserei................................. |
|
|
| |
|
|