unix4fun

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 9 juin 2010

Le crochetage SSL avec ton serpent

Pour un premier post, désolé, c'est sur du win32 :). Je lisais dernièrement "GrayHat Python" et je découvre Pydbg (un debugger écrit en python) que je ne connaissais pas (bon je ne connais pas grand chose non plus, du coup c'est plus facile d'être émerveillé) et dans le chapitre sur le hooking je tombe sur un exemple de "soft-hooking" (le hooking avec un breakpoint soft (INT3) sur la fonction qui t'intéresse) pour "sniffer" les connections SSL dans firefox (hook sur une fontion specifique de firefox).

Ca me rappelle des discussions avec eau qui avait déjà commence a bosser dessus, en voyant comment le truc est tout con ca m'a donne envie de voir si hooker les "CryptoAPI"s de MS que IE utilise est tout aussi simple.

Donc une fois recup Pydbg, un petit "import pydbg" et on peut instancier un object debugger mydbg=pybdg.pydbg().
Et voila! maintenant qu'on a notre debugger instancié, on peut s'attacher a des process, mettre des breakpoints, lire l'etats des registres etc.. Un peu comme scripter a l'interieur d'IDA ou ImmunityDebugger.

Du coup c'est vrai que le soft hooking comme ca c'est tout bidon. Un petit breakpoint dans la fonction qui nous intéresse, une callback fonction pour effectuer des opérations sur cette fonction et on release le breakpoint pour que le process continue normalement.

Bon, c'est pas efficace du tout côté perf, c'est clair...
Mais pour un ptit hooking rapido histoire de tester/fuzzer un truc ca peut etre sympa et utile.

Alors voila j'ai matte les CryptoAPI de MS et j'ai pense d'abord hooker "CryptEncrypt()" et "CryptDecrypt()" exportées par "Advapi32.dll".

Ok finalement en cherchant un peu, il y a eut pleins de présentations sur le hooking de ces 2 fonctions (par exemple celle-ci) et en effet c'est tout bon mais pour sniffer uniquement.

Si on veut modifier les requêtes envoyées par exemple, alors la on voit qu'on tombe sur un os, en tracant les appels un certain "CryptHashData()" est appelé avant "CryptEncrypt()" et donc dommage.. Difficile de modifier un truc hashe préalablement sans que ca se voit! Et la ce cher eau me dit qu'il avait regarde "EncryptMessage()" et "DecryptMessage()" et il avait raison le bougre!

En effet "EncryptMessage()" prend la requête, appele "CryptHashData()" puis "CryptEncrypt()" et balance tout ca hashé/chiffré ensuite au fonctions résal(réseaux). Du coup hooker "EncryptMessage()" est bien plus intéressant puisqu'avant le hash donc possible de modifier la requête.

Je n'ai pas encore réussi a faire tout ce que je voulais sur "EncryptMessage()", modifier la requête...ok, mais uniquement si sa nouvelle taille est <= a l'originale. Pour en générer une de taille > a la requête originale, je coince.

J'ai essaye de mettre a jour la taille a plusieurs endroits, re-ecrire la requête en allouant assez de place ailleurs et updater les pointeurs/références sur ma nouvelle requête mais niet... je dois merder, quelque chose m'échappe.

Voyant que des fonctions appelées avant "EncryptMessage()" manipulaient aussi la requête HTTP et utilisaient la taille pour différents trucs que je n'ai pas exploré je me suis résigné a hooker la dedans et c'est passé. Enfin, j'ai finalement hooke une fonction qui se trouve dans "Wininet.dll" mais elle semble tres specifique a IE donc pas super fonctionnel pour autre chose qu'IE... (i.e. Thick Client)...

Pour ceux que ca intéresse, voila un petit bout de code tout bidon (et pas beau je sais :)..) mais c'est juste pour tester et voir comment jouer avec pydbg et le soft-hooking:

hook_ssl_pydbg.py

J'ai teste ca sur XP SP2 en anglais avec IE7.

Un petit print screen aussi pour voir ce que ca donne:

hook_ssl_pydbg.png

Pydbg fait parti du framework Paimei (du coup ca m'a donne envi de revoir kill bill2..):
Paimei

svn checkout http://paimei.googlecode.com/svn/trunk/pydbg paimei-read-only

CryptEncrypt(), CryptDecrypt(), EncryptMessage(), DecryptMessage()

Ca passe ok avec python 2.6 sur ma VM XP mais quelques posts disent que pydasm ne passe bien qu'avec python 2.5.

lundi 26 avril 2010

ASM reference

En ce moment je bricole des trucs en assembleur x86/x86-64 et MIPS (wouhouu j'ai un loongson 2f!), alors du coup j'ai qqes liens:

Et j'en profite pour dire que pour tester il y a:

Et il y a aussi qqes petits liens classiques:

vendredi 29 janvier 2010

mechante deadlock! vilaine! booouuu mechante! a la niche!

Un projet marrant et que je trouve super drole, j'ai a peine commence a lire et j ai pas poste depuis des lustres, allez hop c'est la fete :)

Un projet pour "eviter" les deadlock sans avoir a recompiler quoique ce soit, vais tester ca gentillement ce soir!

Le project:

Le paper:

Le code:

jeudi 17 décembre 2009

he HARP project: Have you ever wanted to build a CPU?

Un projet super poilu, qui a pour but de construire une machine entiere "au travers d'"/"via" un FPGA, alors que je commence a peine a comprendre les debut de bases de VHDL et a faire mes premiers debuts d'embryons de tests, de trucs tout moisis, on me souffle ce lien, je vois ca et la pouf, je bande....mais j'y comprends encore rien, je vous rassure..

Le lien erectile:

vendredi 6 novembre 2009

meme vieux on continue d'apprendre

Je rentre dans ma 65 eme annee et je continue encore d'apprendre de nouvelles choses.. Au cours d'une discussion avec un pote sur "l'intrawebz" (tm) j'ai appris l'existence des register_printf_functions.. comme decrit dans les liens suivants:

Et au passage qqqes docs sur les attributes GCC et des ptits examples:

Edit de poz:

  • on note au passage que dans le premier lien, l'auteur ne sait pas comment virer un warning gênant à la compilation (dû à -Wformat, lui-même inclu dans -Wall) ; pour s'en débarrasser, il suffit de passer l'option -Wno-format à gcc. Ceci dit, il faut faire attention, parce qu'il ne râlera plus quand vous utiliserez le mauvais /specifier/ (genre %s au lieu de %zu), donc méfiance...
  • bon alors bien sûr c'est quand on migre son code que la merde arrive par tombereaux entiers :). Alors, register_printf_function() est deprecated à partir de glibc 2.10, il faut donc utiliser register_printf_specifier() à la place. Un coup de #if __GLIBC_PREREQ(2,10) sous linux devrait faire l'affaire... je mets au conditionnel parce que chez moi le printf() segfault :)

jeudi 8 octobre 2009

*Real* High level languages are Un!X

Nous aimons tous le C, l'asm, Unix et Linux, c'est un fait. Mais voilà pourquoi on aime aussi le Python et le Perl qui sont aussi des *vrais* langages.

Vous en doutez encore ? Allez jeter un oeil ici et .

dimanche 27 septembre 2009

GDB et sa belle super conviviale nouveaute!

Eh ouiii, on m'a averti cette semaine GDB a une nouvelle super fonctionnalite conviviale qui permet de faire (grossierement) "marche-arriere" et donc et revenir a l'etat d'execution precedent et puis le precedent et puis le precedent en gros de runner le code a l'envers... voila c'est fait GDB fonctionne comme un magnetoscope VHS et ca se passe par ici.

mercredi 26 août 2009

Des états de branche dans ta couverture GCC

Ce billet:

  • parle en bien de sqlite
  • explique la différence entre un programme sure et fiable
  • digère la page d'explication de test de sqlite, a lire pour les passionés de TDD
  • explique les branches et les états de ton code et comment utiliser GCC pour évaluer le taux de couverture

Bref une bonne petite leçon d'analyse de code pour testage efficace.

Source

vendredi 21 août 2009

y a pas de driver, mgrlgmrlb que faire salete de $#@!$#@!

wai toujours pareil, un type (poilu) il s'ennuie et il a un clavier drole, mais qui ne marche que sous win32, alors il se dit bon je vais reverser ce $#@!$#@! de driver win32 et faire un driver open avec... gentil et poilu le monsieur, il explique ce qu il a fait ici:

comme quoi c'est accessible a n'importe qui, meme a des tubbes comme moi... nom de dieu!$#@!$@! :)

mercredi 12 août 2009

Une petite piqûre d'hér... de rappel.

Bon ben je sais pas pour vous, mais j'ai toujours fait des trucs moches genre :


void
sighandler_foo(int nsig)
{
   printf("Signal %d caught.  Exiting.\n", nsig);
   exit(EXIT_SUCCESS);
}

J'ai schématisé, mais l'idée est là. Bah en fait faut surtout pas écrire cette horreur. Là, normalement vous me pointez du doigt en riant très fort, et je deviens rouge de honte. Mais j'ai vaincu ma peur du ridicule, et je le clame : oui ! je suis une bille !

Sinon, pour ceux qui ne savent pas, en fait j'ai appris ça en lisant un post de Solar Designer sur nmap-dev, qui expliquait par le menu pourquoi c'est super crappy :

Après avoir vérifié, rien de tout ça n'est écrit dans signal(2) sur ma machine (Linux), mais c'est très clair dans le man OpenBSD, en revanche.

HTH.

mercredi 10 juin 2009

le code c'est comme une barbie ca s'entretient, ca se coiffe, on lui achete un mobilum, on la maquille, on lui trouve un boulet, etc...

Un peu de bla et une tres courte discussion sur "monitorer" la memoire d'un process et ca derive sur le profiling, les call-graphs etc... et de tout ca qqes liens interessants:

enjoy!

vendredi 22 mai 2009

RUMP non ca n'est PAS le nom des nouveaux batonnets findus!

Non, non et non, pas findus, c'est un nouveau (en tout cas pour moi) concept introduit dans NetBSD qui permet d' "externaliser" en userspace des elements kernelspace de maniere (dixit) "simple", en gros RUMP (c'est son nom) vous permet de "runner" certains des call/fonctions/syscalls kernelspace depuis la librump plutot que d'appeler le kernel, ca semble necessiter de recoder le dit appel dans la librump, rump semble donne un access plus direct a certaines partie du kernel vous laissant la liberte de traiter la majorite du code de controle en userland, je vais faire joujou et lire le code pour "tenter" de comprendre le fonctionnement, mais c'est interessant, je me demande si ca sent pas l'envie de faire un microkernel a long terme ca...

jeudi 7 mai 2009

DOS 1.0 et le reversing du dimanche matin!

Le soleil vient de se lever,

Encore une belle journée,

et il va bientôt arriver,

l'ami Ricoré !

Tuluuuuulululululutulutuut

Un joli debut de post d'un type sympa qui reverse des programmes "pour le plaisir" le dimanche!
Marrant a lire, sympa pour demarrer son p'tit bout d'OS dans son coin, c'est un peu comme deterrer des momies on apprends pleins de choses!

jeudi 9 avril 2009

base32 c'est bon comme la saucisse de george!

J'avais besoin d'un base32, alors hop une implementation "vite fait" (*bruit-de-sac-poubelle*) de base32.

Bordel j'ai galere comme un pouilleux pour faire ca!; un peu comme quand on pousse une crotte trop grosse.

C'est pourtant pas dur...bref la honte et je la partage avec vous.

base32.c

feedback, correction, bugs, welcome...

samedi 21 mars 2009

ruby, marrant ruby!

Apres m'etre instruit du post precedent, merci poz!

Voici un link super interessant d'un mec de chez yahoo qui s'est amuse a ecrire un petit moteur d'indexation ( je suis pas sur du mot, c'est ptet mon neologisme du jour) avec un web et un "crawler" aka "moteur de recherche".

Il a ecrit ca en ruby, en 200 lignes (wai il utilise des libs etc...) et il a tout documente proprement sur son blog, c'est interessant a lire.

le blog du monsieur

have fun!

lundi 9 mars 2009

Un peu d'auto-promo.

J'ai écrit vite fait une petite documentation relative aux tests unitaires en C. Feedbacks bienvenus.

C'est par ici

dimanche 8 février 2009

unbound le resolver DNS aux omega3!

Petite decouverte, moi qui ait toujours ete un habitue de bind (et de ses features et vulns :)) a ma periode BOFH, je viens par hasard de tomber sur unbound, un resolver DNS tout petit et qui semble tout convivial et tout bien fait! et qui en plus supporte DNSSEC...

sympa a suivre...

mercredi 14 janvier 2009

Dtrace le seul tool qui transforme tes testicules en boule a facettes! (c) bibi

J'ai decouvert Dtrace, alors pour partager mon bonheur et commencer avec dtrace, je conseille THE GUIDE, simple, rapide, clair, didactique, etanche! j'en suis au chapitre 12!!

Pour ceux qui sont curieux ou on envie de tester/voir/gratouiller et avoir une vision full poilue!

DTRACE la TORAH

Bonne lecture!!.


[...]

bordel... qu'est ce que... elfsign(1) ?!?!?!

$ elfsign 
elfsign: invalid number of arguments
usage:
        elfsign sign [-a] [-v] [-e <elf_object>] -c <certificate_file>
                [-F <format>] -k <private_key_file> [elf_object]...
        elfsign sign [-a] [-v] [-e <elf_object>] -c <certificate_file>
                [-F <format>] -T <token_label> [-P <pin_file>] [elf_object]...
...
*COMMUNICATION COUPEE*

mardi 13 janvier 2009

C'est dans les vieux pots...

Bon, pour le boulot, je dois coder pas mal de trucs relatifs aux réseaux. Et c'est suite à mes pérégrinations sur le web que je suis tombé sur ce lien. Un vieuuuux lien, de plus de 10 ans d'âge, mais mis à jour, et très intéressant. Il parle notamment des mesures de la qualité d'un réseau, des méthodes à employer, et renvoie vers plein d'autres documentations. Je me régale, personnellement.

Je mets le tag "code", parce que ça file plein d'idées de trucs à coder :-)

Youpla, c'est par ici

lundi 22 décembre 2008

ma machine d'etat a moi!

Bon ca fait genre le 3eme rewrite de mon bout de code, et c'est toujours PAS "comme-je-voudrais" (tm), grmlgmrlmgrl alors j'ai demande qqes conseils a gauche a droite et j'ai fait qqes google.

Comme j'imagine qu'il y a d'autres incompetents/boulets/ignorants dans mon genre, je leur propose les liens suivants pour matter:

bonne lecture!

- page 1 de 4