Terminos, Definiciones Exploit, Shell, Bof, Ruby

Iniciado por Krau[Z]ereth, Junio 17, 2012, 01:28:46 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 17, 2012, 01:28:46 AM Ultima modificación: Diciembre 19, 2015, 09:36:15 PM por Cl0udswX
Bueno aca pongo algunas definiciones, de algunas palabras que algunos no saben su significado
empezemos...


Que es una Shell

-Basicamente y Brevemente el término Shell se emplea para referirse a programas que proveen una interfaz de usuario para acceder a los servicios del sistema operativo. Estos pueden ser gráficos o de texto simple como la famosa CMD (Linea de comandos), dependiendo del tipo de interfaz que empleen. ...


Que es metasploit

- El Metasploit Framework, como sus iniciales MSF es una herramienta para desarrollar y ejecutar exploits contra una máquina remota. Fue creado utilizando el lenguaje de programación de scripting Perl, aunque actualmente el Metasploit Framework ha sido escrito de nuevo completamente en el lenguaje Ruby.

El Metasploit Framework, tiene varios componentes y utilidades entre las cuales destacan:
● Msfcli (Cliente de Metasploit)
● Msfconsole (Consola de Metasploit)
● Msfweb (Servidor e Interfaz web de Metasploit)
● Msfgui (Interfaz gráfica de Metasploit)
● Msfopcode (Cliente de la base de datos de OPCODES de Metasploit)


Que es RUBY

- Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una sintaxis inspirada en Python y Perl con características de programación orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre.




Sobre buffer overflow - Exploits


- C/C++


- Es un lenguaje de programación muy extendido, multiplataforma, y fácil. Es la
base de nuestros sistemas operativos(salvo cosas en ensamblador como rutinas de
boot) y es tremendamente potente y optimizado. Sus archivos básicos son *.c y
*.cpp (para los C++). Es el lenguaje más recomendable para aprender, el más
útil.

Ensamblador (ASM)


- Es el lenguaje más "básico" que permite al programador interactuar con el CPU.
Las instrucciones en ASM se pasan a binario, que es lo que "entiende" la CPU, es
decir, 1s y 0s (aunque se agrupan en cadenas hexadecimales para mayor claridad).
Realmente, un compilador ASM lo único que hace es calcularte las etiquetas, los
saltos y los calls, y "encapsular" el ejecutable. Todos los lenguajes de
programación, a la hora de compilar (obviamente, los lenguajes de script no),
convierten su código en instrucciones ASM.

Instrucciones en ASM (Intel) son por ejemplo mov, push, pop, etc....(En AT&T,
seria popl, movl, pushl, etc..) Es un lenguaje de programación difícil de
aprender, solo para cosas puntuales o que requieran una gran optimización, pero
saberlo te dará muchas alegrías :) Cualquier informático debería poder entender
y dominar las instrucciones básicas.

Debugger (Depurador)


- Un debugger es un programa que permite ir "paso a paso", instrucción a
instrucción a otro programa. Al ir instrucción a instrucción, podemos ver
completamente que esta pasando, los registros, la memoria, etc, así como muchas
mas funciones muy interesantes. Su función principal es la de auditar código, y
ver el porque falla (o simplemente porque no realiza lo que queremos que haga),
es una herramienta imprescindible para cualquier programador. Lo que pasa que
también puede servir para otras cosas :)

Dissasembler (Desamblador)


- Un desamblador es un programa que te muestra el código de un programa, una dll,
lo que sea que este hecho de código que el desamblador entienda. Normalmente, te
muestra su código en ASM (por ejemplo, un programa codeado en C, te muestra la
conversión de dichas instrucciones C en ASM), aunque hay desambladores que
permiten ver su código (o parte de el) de programas hechos en JAVA o VBasic, por
ejemplo.

Normalmente, debugger y dissasembler van en el mismo programa, los mas usados
son el Ollydbg (el que usare aquí), Softice, IDA, Win32dasm...

Hex Editor (Editor Hexadecimal)


- No hay que confundir un dissasembler con un hex editor. El primero te muestra el
código de un programa, el hex editor simplemente te muestra el contenido de un
archivo, del tipo que sea, como un dumpeo hexadecimal y/o binario, así como la
posibilidad de modificar y guardar dicho archivo. Se usa para rastrear y
modificar archivos que usan programas, tanto para fines "de programación" (el
porque al cargar el archivo falla, el porque no se escribe bien, etc...) como de
"hacking" o "cracking".

A mi, personalmente, me gusta mucho el Hackman, pero se que hay mucho mejores :P
Cuestión de buscar.

La CPU (microprocesador)


- La CPU es el "corazón" de un ordenador. Es la unidad de hardware encargada de
ejecutar las instrucciones de un programa o sistema operativo, instrucción a
instrucción, que estén en una determinada área de memoria. Se ayuda de registros
donde almacena variables, datos o direcciones. Una explicación completa sobre el
tema, requeriría uno o varios libros, aunque googleando se encuentra muchísima
información.

Registros de la CPU.


- La cpu (microprocesador) contiene una serie de registros, donde almacena
variables, datos o direcciones de las operaciones que esta realizando en este
momento. El lenguaje ASM se sirve de dichos registros como variables de los
programas y rutinas, haciendo posible cualquier programa (de longitudes
considerables, claro). Los más interesantes son:

EIP Extended Instruction Pointer.

El registro EIP siempre apunta a la siguiente dirección de memoria que el
procesador debe ejecutar. La CPU se basa en secuencias de instrucciones, una
detrás de la otra, salvo que dicha instrucción requiera un salto, una
llamada...al producirse por ejemplo un "salto", EIP apuntara al valor del salto,
ejecutando las instrucciones en la dirección que especificaba el salto. Si
logramos que EIP contenga la dirección de memoria que queramos, podremos
controlar la ejecución del programa, si también controlamos lo que haya en esa
dirección.

EAX, EBX... ESI, EDI...

Son registros multipropósito para usarlo según el programa, se pueden usar de
cualquier forma y para alojar cualquier dirección, variable o valor, aunque cada
uno tiene funciones "especificas" según las instrucciones ASM del programa:

EAX:
Registro acumulador. Cualquier instrucción de retorno, almacenara dicho valor en
EAX. También se usa para sumar valores a otros registros en funciones de suma,
etc....

EBX

Registro base. Se usa como "manejador" o "handler" de ficheros, de direcciones
de memoria (para luego sumarles un offset) etc...

ECX

Registro contador. Se usa, por ejemplo, en instrucciones ASM loop como contador,
cuando ECX llega a cero, el loop se acaba.

EDX

Registro dirección o puntero. Se usa para referenciar a direcciones de memoria
mas el offset, combinado con registros de segmento (CS, SS, etc..)

ESI y EDI

Son registros análogos a EDX, se pueden usar para guardar direcciones de
memoria, offsets, etc..

CS, SS, ES y DS

Son registros de segmento, suelen apuntar a una cierta sección de la memoria. Se
suelen usar Registro+Offset para direccionar a una dirección concreta de
memoria. Los mas usados son CS, que apunta al segmento actual de direcciones que
esta ejecutando EIP, SS, que apunta a la pila y DS, que apunta al segmento de
datos actual. ES es "multipropósito", para lo mismo, referenciar direcciones de
memoria, y un largo etc...

ESP EBP

Extended Stack Pointer y Extender Base Pointer. Ambos los veremos más en
profundidad cuando explique la pila.
Sirven para manejar la pila, referenciando la "cima" (ESP) y la "base" (EBP).
ESP siempre contiene la dirección del inicio de la pila (la cima) que esta
usando el programa o hilo (thread) en ese momento. Cada programa usara un
espacio de la pila distinto, y cada hilo del programa también. EBP señala la
dirección del final de la pila de ese programa o hilo.

¿Que es una vulnerabilidad?


- Una vulnerabilidad es un fallo que compromete la seguridad del programa o
sistema. Aunque se le asocia también a "bug" (fallo), pero no es lo mismo. Un
bug es un fallo de cualquier tipo, desde que un juego no funcione bien porque
vaya lento, a un programa que funciona mal al intentar hacer una división por 0.
Las vulnerabilidades son bugs de seguridad, que pueden comprometer el sistema o
el programa, permitiendo al "hacker" ejecutar código arbitrario, detener el
sistema o aprovecharse del mismo para sacar cualquier tipo de beneficio.

¿Que es un exploit?


- Un exploit es un código, un "método", un programa, que realiza una acción contra
un sistema o programa que tiene una vulnerabilidad, "explotándola", y sacando un
beneficio de la misma. Dicho beneficio normalmente es la ejecución de código
(dentro de ese programa, con los privilegios del mismo) que nos beneficia,
dándonos por ejemplo una contraseña, o dándonos una shell de comandos, añadir un
usuario administrador al sistema, o incluso lo único que hacen es detener el
servicio o el sistema, según nuestros propósitos.

Habría que distinguir entre exploits "completos" (los que están completamente
funcionales) y los POCs (proof of concept) que son exploits que demuestran que
dicha vulnerabilidad existe y que es explotable, pero que no dan ningún
beneficio o el beneficio es mínimo. Normalmente se usan estos últimos para
evitar el uso de los mismos por niñatos (script kiddies) o para evitar gusanos
(supongo que se acuerdan del blaster o del sasser, se liberaron los exploits
completamente funcionales)

¿Que es una shellcode?


- Una shellcode es un código básico en ASM, muy corto generalmente, que ejecuta
los comandos que queremos, como system("cmd.exe") (ejecuta una shell msdos en
windows); o execv("/bin/sh") (ejecuta una shell sh en Linux/Unix), o sirve
para añadir un usuario a la cuenta del sistema, para descargar un troyano y
ejecutarlo, para dejar abierto un puerto conectado a una shell, etc.... Es el
código que ejecutara el programa vulnerable una vez tengamos su control. No es
nada difícil de programar sabiendo ASM básico y como funciona tu SO.

Una vez programada en ASM (para testearla, por ejemplo, además de que es mas
fácil programarla en ASM que directamente con opcodes :P), se pasa a un string,
compuesto por los opcodes (codigos de operacion, en hexadecimal) de dichas
instrucciones ASM. Lo veremos mas adelante :)

¿Que es un overflow?


- Un overflow es, básicamente, cuando resguardamos espacio de memoria insuficiente
para una variable (allocate), y le introducimos más datos a dicha variable de
los que puede soportar. La variable "desborda", y los datos que no caben
sobrescriben memoria continua a dicha variable. Si declaramos una variable que
solo debe soportar 8bytes, si le movemos 10bytes, los 2bytes restantes no se
pierden, sino que sobrescriben la memoria contigua a dicha variable.

Hay distintos tipos de overflow, stack overflow (el que veremos aquí, también
llamado buffer overflow, o desbordamiento de buffer, etc...), heap overflow (ya
lo veremos en algún otro texto, se refiere a desbordar una variable declarada en
el heap en vez de en la pila...), format string overflow (bugs de formato de las
cadenas de texto), integer overflow (debidos a declaraciones de variables con un
espacio mínimo o negativo que proveemos nosotros...), etc...

¿Porque se le llama Stack Overflow?


- La pila (stack) es una estructura tipo LIFO, Last In, First Out, ultimo en
entrar, primero en salir. Pensad en una pila de libros, solo puedes añadir y
quitar libros por la "cima" de la pila, por donde los añades. El libro de mas
"abajo", será el ultimo en salir, cuando se vacíe la pila. Si tratas de quitar
uno del medio, se puede desmoronar.

Bien, pues el SO (tanto Windows como Linux, como los Unix o los Macs) se basa en
una pila para manejar las variables locales de un programa, los retornos (rets)
de las llamadas a una función (calls), las estructuras de excepciones (SEH,
en Windows), argumentos, variables de entorno, etc...

Por ejemplo, para llamar a una función cualquiera, que necesite dos argumentos,
se mete primero el argumento 2 en la pila del sistema, luego el argumento 1, y
luego se llama a la función.

Si el sistema quiere hacer una suma (5+2), primero introduce el 2º argumento en
la pila (el 2), luego el 1º argumento (el 5) y luego llama a la función suma.

Bien, una "llamada" a una función o dirección de memoria, se hace con la
instrucción ASM Call. Call dirección (llamar a la dirección) ó call registro
(llama a lo que contenga ese registro). El registro EIP recoge dicha dirección,
y la siguiente instrucción a ejecutar esta en dicha dirección, hemos "saltado" a
esa dirección.

Pero antes, el sistema debe saber que hacer cuando termine la función, por donde
debe seguir ejecutando código.
El programa puede llamara  la función suma, pero con el resultado, hacer una
multiplicación, o simplemente mostrarlo por pantalla. Es decir, la CPU debe
saber por donde seguir la ejecución una vez terminada la función suma.

Para eso sirve la pila :) Justo al ejecutar el call, se GUARDA la dirección de
la siguiente instrucción en la pila.
Esa instrucción se denomina normalmente RET o RET ADDRESS, dirección de
"retorno" al programa principal (o a lo que sea).

Entonces, el call se ejecuta, se guarda la dirección, coge los argumentos de la
suma, se produce la suma y, como esta guardada la dirección por donde iba el
programa, VUELVE (RETORNA) a la dirección de memoria que había guardada
en la pila (el ret), es decir, a la dirección siguiente del call.

Saludos, espero les sirva, si falta algun termino me dicen
a users que recien emiezan yo creo les servira :D

Bueno aca añado mas

Que es Spoofing

- Bueno, teoricamente y en pocas palabras se conoce spoffing a la creación de tramas TCP/IP utilizando una dirección IP falseada; la idea de este ataque - al menos la idea - es muy sencilla: desde su equipo, un pirata simula la identidad de otra máquina de la red para conseguir acceso a recursos de un tercer sistema que ha establecido algún tipo de confianza basada en el nombre o la dirección IP del host suplantado. Y como los anillos de confianza basados en estas características tan fácilmente falsificables son aún demasiado abundantes (no tenemos más que pensar en los comandos r-, los accesos NFS, o la protección de servicios de red mediante TCP Wrapper), el spoofing sigue siendo en la actualidad un ataque no trivial, pero factible contra cualquier tipo de organización.



Porque se le conoce como ARP Spoffing

- Bueno el ARP Spoofing, que bien tambien conocido como ARP Poisoning o ARP Poison Routing, es una técnica usada para infiltrarse en una red Ethernet conmutada (basada en switch y no en hubs), que puede permitir al atacante husmear paquetes de datos en la LAN (red de área local), modificar el tráfico, o incluso detener el tráfico (conocido como DoS: Denegación de Servicio).

El principio del ARP Spoofing es enviar mensajes ARP falsos (falsificados, o spoofed) a la Ethernet. Normalmente la finalidad es asociar la dirección MAC del atacante con la dirección IP de otro nodo (el nodo atacado), como por ejemplo la puerta de enlace predeterminada (gateway). Cualquier tráfico dirigido a la dirección IP de ese nodo, será erróneamente enviado al atacante, en lugar de a su destino real. El atacante, puede entonces elegir, entre reenviar el tráfico a la puerta de enlace predeterminada real (ataque pasivo o escucha), o modificar los datos antes de reenviarlos (ataque activo). El atacante puede incluso lanzar un ataque de tipo DoS (Denegación de Servicio) contra una víctima, asociando una dirección MAC inexistente con la dirección IP de la puerta de enlace predeterminada de la víctima.

EL ataque de ARP Spoofing puede ser ejecutado desde una máquina controlada (el atacante ha conseguido previamente hacerse con el control de la misma: intrusión), un Jack Box, o bien la máquina del atacante está conectada directamente a la LAN Ethernet.


Que es Xploit

- Primero que todo no confundan Xploit y Exploit, ok bueno la definicion de Xploit es: basicamente un fake mail o mas comunmente llamado xploit. Enviar correo electrónico falseando el remitente. Se trata de una técnica muy empleada en Ingeniería Social.

Como modo de obtener contraseñas de hotmail,yahoo o cualquier tipo de compania para los correos electronicos. Esta tecnica es considerada lammer para la comunidad de hackers o para quienes se interesan verdaderamente en el tema del hacking. y bueno le recomendacion que doy yo que da cualquiera es que no des tu contraseña a ninguna web que te pidaa amm en un correo, digamos, solo en las webs oficiales de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta,etc.

La esperanza es desear que algo suceda, la fe es creer que algo va a sucerder y la valentia es hacer que suceda


Gracias por las definiciones, me sirvieron bastante

Mew gustaria saber si el texto este lo escribiste vos o lo sacaste de algun lado :) saludos!

la verdad unos los saque de internet man, unos los escribi, un saludo ire agregando mas.

La esperanza es desear que algo suceda, la fe es creer que algo va a sucerder y la valentia es hacer que suceda

Excelentes definiciones, aclaran muchas dudas y complementan ideas y definiciones de otros sites.
La explicación del funcionamiento de la pila con el ejemplo :D  "mas claro echarle agua".

Saludos y gracias. (Y)


Buen aporte y gracias.
Esperaré las actualizaciones :)


Muy buen aporte!!! Hay definiciones que nonconocia

Desde mi troncomovil


Esta informacion me jizo comprender mas la informaticas