tag:blogger.com,1999:blog-5190877782491799334.post2159125498276326818..comments2020-01-09T01:25:06.259-08:00Comments on 0vercl0k's blog.: How to pwn lilxam's toolz :).0vercl0khttp://www.blogger.com/profile/04851747716024429465noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-5190877782491799334.post-1143991293995432872008-09-25T16:21:00.000-07:002008-09-25T16:21:00.000-07:00Hi, merci pour tes encouragements. J'ai finalement...Hi, merci pour tes encouragements. J'ai finalement changé d'adresse pour tuxfamily. Tu mettras à jour quand t'auras le temps: http://l33ckma.tuxfamily.org<BR/>A très bientotl33ckmahttps://www.blogger.com/profile/05739906340103657880noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-39984405518429696782008-09-19T10:51:00.000-07:002008-09-19T10:51:00.000-07:00Salut,Encore merci pour le post c'est vraiment gen...Salut,<BR/>Encore merci pour le post c'est vraiment gentil ; cependant le seul bémol tu as mal orthographié mon pseudo :))) (chieur hein :)), mon pseudo c'est "0vercl0k" et non "0vercl0ck" ou "overclock".<BR/>Encore merci et à plus tard j'espere, bon week end à toi, cordialement 0vercl0k.0vercl0khttps://www.blogger.com/profile/04851747716024429465noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-34099281115776233792008-09-19T07:53:00.000-07:002008-09-19T07:53:00.000-07:00J'ai pris la liberté de poster ton code (un tout p...J'ai pris la liberté de poster ton code (un tout petit peu modifé) à la suite du post de Diablo sur sysinternals... Histoire de référencer ton blog dans la cours des "grands" et de pwned notre ami russe ;)<BR/><BR/>Bon weekend!Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-91030479203535621602008-09-18T08:29:00.000-07:002008-09-18T08:29:00.000-07:00Héhé super,je te remercie beaucoup :) bonne soirée...Héhé super,<BR/>je te remercie beaucoup :) bonne soirée à toi !.<BR/>Cordialement, 0vercl0k.0vercl0khttps://www.blogger.com/profile/04851747716024429465noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-64283739360665205402008-09-18T08:22:00.000-07:002008-09-18T08:22:00.000-07:00:)Tu peux trouver la même version de CsrWalker sur...:)<BR/><BR/>Tu peux trouver la même version de CsrWalker sur http://forum.sysinternals.com/forum_posts.asp?TID=15457&KW<BR/><BR/>Pour bypasser son scan sur les CSR_THREAD tu peux faire quelque chose du style (en me basant sur ton implémentation... sauf que je passe le PID du process à unlinker et pas son nom):<BR/><BR/> for( i = 0 ; i < (int)pImgExportDirectory->NumberOfFunctions ; i++)<BR/> {<BR/> if( strcmp("CsrLockThreadByClientId" , (const char *)imgBaseCsrsrv + rvaNameTable[i]) == 0 )<BR/> {<BR/> CsrLockThreadByClientId = imgBaseCsrsrv + rvaAdressTable[i];<BR/> break;<BR/> }<BR/> }<BR/><BR/> if( CsrLockThreadByClientId == NULL )<BR/> {<BR/> KeUnstackDetachProcess( &kApcState );<BR/> return 0;<BR/> }<BR/><BR/> <BR/> for( i = 0 ; i < 50 ; i++ )<BR/> {<BR/> if( (*(CsrLockThreadByClientId+i) == 0x8D) && (*(CsrLockThreadByClientId+i+2) == 0xC5))<BR/> {<BR/> CsrThreadHashTable = (PUCHAR)(*(PULONG)(CsrLockThreadByClientId+i+3));<BR/> break;<BR/> }<BR/> }<BR/><BR/><BR/> for(i = 0; i < 256; i++)<BR/> {<BR/> PLIST_ENTRY ListHead, NextEntry;<BR/><BR/> ListHead = (PLIST_ENTRY)(CsrThreadHashTable + (8 * i));<BR/><BR/> NextEntry = ListHead->Flink;<BR/> <BR/> while (NextEntry != ListHead)<BR/> {<BR/> pCsrHashThread = CONTAINING_RECORD(NextEntry, CSR_THREAD, HashLinks);<BR/> if(pCsrHashThread)<BR/> {<BR/> if((ULONG)pCsrHashThread->Process->ClientId.UniqueProcess == Pid)<BR/> {<BR/> *(PULONG)(NextEntry->Blink) = (ULONG) NextEntry->Flink;<BR/> *(PULONG)((PUCHAR)NextEntry->Flink + 4) = (ULONG)NextEntry->Blink;<BR/> }<BR/> }<BR/> NextEntry = NextEntry->Flink;<BR/> } <BR/> }<BR/><BR/>sous Vista, il faut répéter l'opération pour chaque instance de csrss.exe...<BR/><BR/>Mais bon, comme le dit l'auteur, ce style de détection est un peu inutile... c'est juste pour le sport ;)<BR/><BR/>A+Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-81961916965755617712008-09-18T08:11:00.000-07:002008-09-18T08:11:00.000-07:00Salut Orkblutt,Humm en effet on ne doit posséder l...Salut Orkblutt,<BR/>Humm en effet on ne doit posséder les mêmes versions ..!<BR/>Comme quoi les technologies/techniques sont toujours en marche :)).<BR/>Merci pour tes commentaires, et pour l'iut :).<BR/>Bonne soirée cordialement, 0vercl0k.0vercl0khttps://www.blogger.com/profile/04851747716024429465noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-2782876103800550872008-09-17T15:15:00.000-07:002008-09-17T15:15:00.000-07:00Salut,désolé pour le anonyme...Je ne suis pas sure...Salut,<BR/><BR/>désolé pour le anonyme...<BR/>Je ne suis pas sure que nous ayons la même version de cwalker.<BR/>Dans la version que j'ai, lorsque je regarde la fonction implémentée à l'adresse 4019F4h, je vois que l'auteur récupère l'adresse de CsrLockThreadByClientId puis scan la fonction pour trouver CsrHashThread.<BR/>Une fois CsrHashThread en poche, l'auteur parcours le tableau de 256 LIST_ENTRY qu'il va également parcourir. Chaque élément de ces LIST_ENTRY pointe sur une structure CSR_THREAD... Je ne suis pas aller plus loin dans l'étude de son code mais j'imagine qu'il va ensuite s'interesser à l'élément Process de cette structure.<BR/><BR/>Dans la version de cwalker que j'ai récupéré sur le forum de sysinternals, si tu unlink uniquement du CSR_PROCESS, tu verra que cwalker trouve ton process en le mettant à la fin de la liste... Ce détail en dit long sur la façon de travailler de cwalker.<BR/><BR/>Sinon, bon courage pour l'IUT ;-)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-86207412120903360922008-09-17T11:12:00.000-07:002008-09-17T11:12:00.000-07:00Salut à toi "Anonyme",Tout d'abord merci, ensuite ...Salut à toi "Anonyme",<BR/>Tout d'abord merci, ensuite chez moi CsrWalker est belle est bien bypassé ; en lisant son advisory d'ailleurs on comprend qu'il existe aussi un autre moyen ; celui dont auquel tu fais références ; mais il ne l'implente pas dans son outil.<BR/><BR/>Cordialement, bonne soirée 0vercl0k.0vercl0khttps://www.blogger.com/profile/04851747716024429465noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-69022301409711839342008-09-15T00:49:00.000-07:002008-09-15T00:49:00.000-07:00Salut à toi!J'étais en train d'essayer de reimplem...Salut à toi!<BR/><BR/>J'étais en train d'essayer de reimplementer csrwalker en r0 lorsque je suis tombé sur ton code pour unliker. Sympa...<BR/>Par contre tu ne bypasse pas csrwalker... il manque la partie unlink sur la liste des threads stockée dans csrss (CsrHashThread). Apparement l'auteur, <B>EP_X0FF</B>, enfin je crois que c'est lui, retrouve des PID en parsant cette liste.<BR/><BR/>A+Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-75554202918148873112008-09-13T04:22:00.000-07:002008-09-13T04:22:00.000-07:00Salut "Shadow",Alors tout d'abord tu peux me retro...Salut "Shadow",<BR/>Alors tout d'abord tu peux me retrouver sur IRC sur le channel #carib0u du serveur irc.worldnet.net.<BR/><BR/>Ensuite concernant le champs "self pointer", j'aurais tendance à dire que j'en sais pas plus que toi, je ne vois pas vraiment son utilité..promis je vais me renseigner et sonder quelques de mes amis.<BR/><BR/>Concernant ton code j'ai bien peur que tu te casses la tête pour rien.<BR/>Je te fais le plan de mon code ci dessous en espérant que ca puisse t'aider :).<BR/><BR/>1)Je charge ntdll.dll et csrsrv.dll.<BR/>2)Je récupère la fonction CsrGetProcessId exporté par ntdll.dll ; celle-ci nous renvoit directement le PID du processus csrss.exe (bien que tu puisses sauter cette étape en retrouvant son PID avec un simple snapshot).<BR/>3)Je récupère aussi l'adresse de la fonction CsrLockProcessByClientId exporté par csrsrv.dll (c'est cette fonction qu'on va scanner).<BR/>4)J'active le DebugPrivilege ; j'ouvre un handle sur le csrss.<BR/>5)Je scan "manuellement" la fonction CsrLockProcessByClientId à la recherche d'une suite d'octet annonçant l'adresse de la liste doublement chainée.<BR/>Une fois cette suite trouvé, il nous suffit de lire dans la mémoire du processus son adresse.<BR/>6)A présent il nous reste juste a la parcourir ; et cela simplement basé sur les apis [Read/Write]ProcessMemory.<BR/><BR/>Voilà en gros, le plan que j'ai choisis de suivre.<BR/>Mon implémentation pour te donner une idée fais environ 200lignes.<BR/><BR/>En espérant avoir répondu à tes question, cordialement 0vercl0k.0vercl0khttps://www.blogger.com/profile/04851747716024429465noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-77339139604523284922008-09-13T04:00:00.000-07:002008-09-13T04:00:00.000-07:00Merci beaucoup !J'ai avancé et j'ai encore 3 quest...Merci beaucoup !<BR/>J'ai avancé et j'ai encore 3 questions ^^ :<BR/>- A quoi sert le "self pointer" du TEB, puisque l'adresse du TEB est celle de FS ?<BR/>- Où puis-je te trouver sur IRC ?<BR/>- J'ai réussi à lire dans csrss.exe l'adresse de csrsrv.dll . Il faut maintenant que je trouve l'adresse de la fonction CsrLockProcessByClientId ! Je sais que je peux le faire comme toi en parcourant l'eat de la DLL, mais je me demandais si je ne pouvais pas utiliser la champs loadedImports de LDR_DATA_TABLE_ENTRY ! Tu sais à quoi il correspond ?<BR/><BR/>Merci :)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-23451167122120140362008-09-12T14:15:00.000-07:002008-09-12T14:15:00.000-07:00Salut à toi "Shadow",je m'excuse tout d'abord pour...Salut à toi "Shadow",<BR/>je m'excuse tout d'abord pour le retard ; en semaine je suis loin de mon "chez moi" et donc je n'ai (pour l'instant?) pas de connexion à ma disposition, bref.<BR/><BR/>Alors tout d'abord, d'après ce que j'ai compris de la technique, la liste se trouverait dans la mémoire du processus en question et non dans la dll ; en effet sinan j'aurais fais un tout simple LoadLibrary ; une autre technique serait d'injecter une dll dans le processus si tu préfères, à toi de voir.<BR/><BR/>Ensuite, concernant les appels des fonctions ZwXXX, il n'y a aucun "avantage" dans ce cas-ci à les utiliser en userland ; les apis tels que OpenProcess, WriteProcessMemory te faciliteront bien plus la tâche que d'appeler directement les apis natifs.<BR/><BR/>Concernant le changement de token, il est chez moi obligatoire ; autrement mon programme ne marche pas.<BR/>Pour moi le token est nécessaire pour lire/écrire des données dans le subsystem csrss.<BR/><BR/>Et finalement si tu ne parviens pas à implémenter la fonction en userland n'hésite pas à me contacter par irc par exemple ; je pourrais te montrer mon - crade - portage de la fonction en ring3 :).<BR/><BR/>Bonne soirée à toi, et encore merci.<BR/>Cordialement 0vercl0k.0vercl0khttps://www.blogger.com/profile/04851747716024429465noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-79427705623592686332008-09-12T06:57:00.000-07:002008-09-12T06:57:00.000-07:00Salut à tous !J'aimerais réagir sur la technique r...Salut à tous !<BR/>J'aimerais réagir sur la technique relative à crswalker. Je voudrais implémenter le tout en user land, et je me pose plusieurs questions :<BR/>- Lorsqu'on déclare une variable dans une DLL, celle-ci n'est pas globale ? Est-ce qu'on ne pourrait pas tout simplement charger la DLL csrss.dll en mémoire dans le processus courant afin de retrouver CsrRootProcess ? Ou serait-ce un CsrRootProcess différent de celui maintenu par csrss.exe ?<BR/>- Dans son executable, l'auteur du post sur sysinternals appelle les fonctions ZwXxX (par exemple ZwOpenProcess ou ZwAllocateVirtualMemory) pour dialoguer avec csrss.exe . Quel avantage par rapport aux fonctions "classiques", comme OpenProcess ou VirtualAlloc ?<BR/>- Enfin, comment faire cela sans le SeDebugPrivilege ? Pour moi, ce token est nécessaire rien que pour OpenProcess... Pourtant, l'executable de sysinternals fonctionne même sans ce token, seul un message d'avertissement apparaît disant que ce n'est pas grave... pourquoi chercher à l'obtenir si ce n'est pas utile ?<BR/><BR/>Merci d'avance !Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-65472912602030389452008-09-06T09:55:00.000-07:002008-09-06T09:55:00.000-07:00Salut à vous deux, tout d'abord bien joué pour cet...Salut à vous deux, <BR/>tout d'abord bien joué pour cet article et ces deux techniques qui sont pas facile à mettre en place donc félicitation pour les codes :)<BR/><BR/>Taron ouai j'avais vu ton commentaire sur mon blog c'est pour ça que j'ai voulu me repencher sur le sujet. Et en effet on peut lister les processus avec cette techniques (cf mon nouvel <A HREF="http://lilxam.blogspot.com/2008/09/overclok-owned-p.html" REL="nofollow">article</A>), c'est ce que j'avais prévu en réponse à cet article :p.<BR/><BR/>Sinon aussi j'ai entendu parlé d'une technique avec la table KiWaitListHead mais comme dis dans mon article je n'arrive pas à trier les infos qu'elle contient.<BR/><BR/>Donc voilà il reste encore pas mal de choses à éclaircir.<BR/><BR/>A quand le hide de driver :p ?<BR/><BR/>Bonne continuation à tous les deux.<BR/>Lilxam.<BR/><BR/>PS : En me baladant sur rootkit.com je viens de trouver une traduction d'un paper sur le sujet, <A HREF="http://www.rootkit.com/newsread.php?newsid=434" REL="nofollow">ici</A>. Cependant tout n'est pas très clair...lilxamhttps://www.blogger.com/profile/02979790990312743060noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-10563978791054415662008-09-05T14:05:00.000-07:002008-09-05T14:05:00.000-07:00Tout d'abord merci Taron pour ce commentaire ça fa...Tout d'abord merci Taron pour ce commentaire ça fait toujours plaisir :).<BR/><BR/>Ensuite, oui justement avec lilxam on essait de mettre en place plusieurs techniques pouvant être potentiellement utilisées par RkUnhooker pour remonter aux processus.<BR/><BR/>Donc j'ai pour l'instant 5/6 techniques combinées..mais RkUnhooker reste toujours vainqueur.<BR/>Peut être pas/plus pour longtemps ?:D<BR/>Si c'est le cas je m'empresserais d'écrire un petit post avec une description des techniques utilisées.<BR/><BR/>Et oui la rentrée approche à grand pas (Lundi), et en effet je vais tenter d'être dans la "tête" de classe..merci pour tes encouragements pis fais moi signe dès ton retour (sur irc par exemple).<BR/>Bonne continuation Taron et merci !<BR/>Cordialement, 0vercl0k.0vercl0khttps://www.blogger.com/profile/04851747716024429465noreply@blogger.comtag:blogger.com,1999:blog-5190877782491799334.post-17795865835416684082008-09-05T13:03:00.000-07:002008-09-05T13:03:00.000-07:00Salut, à la visite de ton blog ça m'a fait sourire...Salut, à la visite de ton blog ça m'a fait sourire en regardant le titre du dernier article.. en effet j'avais posté un commentaire sur le blog de lilxam y'a quelques mois pour l'article qui retrouvait les process cachés par les unlink eprocess.. je vois que t'en ai arrivé aux memes conclusions que les miennes.. en effet on passe par PsLookupProcessById.. donc pwned.<BR/><BR/>Concernant peut-être les méthodes qu'utilise RkUnhooker pour retrouver ces process cachés, tu peux aussi voir du côté des OBJECT_TABLE (table handle dans chaque EPROCESS), qui sont linkés (simple) entre elles, donc théoriquement, si les passes toutes, tu peux retrouver les process, à part si encore une fois tu unlink.. à tester (je te laisse le tester moi j'ai la flemme ;-)<BR/><BR/>Et finalement concernant CrsWalker j'avais en effet vu ça y'a quelques temps, intéressant que tu l'aies implémenté ! ce qui faudrait faire c'est un mix de toutes ces techniques pour planquer un process.<BR/><BR/>bonne continuation, moi je vais devoir faire une pause dans le reverse (études obligents), je sais que tu rentres en iut info, cartonne pour finir major !<BR/><BR/>A+Anonymousnoreply@blogger.com