Archivo

Archivo para la Categoría "Programacion"

Bind a puertos reservados utilizando usuarios sin privilegios de Root

octubre 7, 2011 14 comentarios

Una de las tareas mas comunes de un administrador de sistemas consiste principalmente en la correcta configuración y arranque de diversos servicios tales como servidores web, servidores de correo, servidores DNS, etc. En todos los casos, alguien consciente de que la seguridad en los servicios expuestos al publico tendrá como referencia determinadas políticas de seguridad entre las cuales, sin lugar a dudas, se debe incluir la ejecución de dichos servicios con un usuario con privilegios limitados, es decir, el usuario ROOT no debería iniciar servicios como Apache o SendMail, ya que si existe algún problema con dichos servicios, como por ejemplo una vulnerabilidad que le permita al atacante acceder de forma remota (como por ejemplo el aprovechamiento de una vulnerabilidad de Buffer Overflow) este automáticamente tendrá privilegios de ROOT sobre el sistema, no hace falta indicar las nefastas consecuencias que conllevan incidencias como estas.

Leer más…

Utilizando IRB desde Meterpreter, Explorando RailGun

octubre 5, 2011 Dejar un comentario

Railgun es una extensión de Metepreter diseñada específicamente para maquinas comprometidas bajo plataformas windows y permite realizar invocaciones directas a la API de windows así como cargar librerías DDL a la maquina comprometida y ejecutar posteriormente el código contenido en ellas. El uso de Railgun facilita mucho algunas actividades que con Meterpreter por si solo pueden ser un poco complejas o requerir privilegios de administrador, con Railgun muchos de los scripts ejecutados no necesitan que se cuente con privilegios administrativos sobre la maquina comprometida.

Leer más…

Utilizando IRB desde Meterpreter y ejecutando código sobre una máquina comprometida

octubre 3, 2011 Dejar un comentario

Tal como se ha visto en la entrada anterior, el uso de IRB es bastante parecido a Python en modo interactivo, donde se permite entre otras cosas, la inclusión de código linea por linea y la ejecución de scripts Ruby, todas estas características pueden ser utilizadas en MetaSploit justo en el paso de post-explotación, Meterpreter permite utilizar IRB para manipular procesos, memoria, claves del registro, etc.  sobre la maquina comprometida

meterpreter > irb
[*] Starting IRB shell
[*] The ‘client’ variable holds the meterpreter client

>>

Leer más…

Conceptos Básicos sobre Ruby y el interprete IRB

septiembre 30, 2011 Dejar un comentario

IRB es un interprete interactivo de Ruby que le permite a un desarrollador ingresar comandos y bloques de código que posteriormente serán ejecutados por Ruby, se trata de una forma bastante sencilla de integrar lógica computacional en un interprete de linea de comandos. Estos conceptos básicos se indican en esta entrada con un único objetivo:  Comprender las bases del funcionamiento de IRB de Ruby para poder ejecutar funciones de Scripting en MetaSploit Framework sobre maquinas comprometidas y con una sesión meterpreter.

Leer más…

Herramientas para Hacking en Entornos de Red – Hacking con SSH – Parte XVII

septiembre 9, 2011 4 comentarios

Anteriormente se ha visto como “enjaular” usuarios en una chrootjail (ver dicha entrada en este blog desde aquí) en donde cada usuario solamente contará con determinadas herramientas y en ningún caso podrá acceder de forma directa a otros directorios que se encuentren fuera de la extensión de la jaula. Así como en la entrada anterior se definió el mecanismo para crear dicho “cerrojo” en esta ocasión se indica como soltarlo y navegar libremente en la estructura real del servidor sin ningún tipo de restricción Aunque cabe aclarar que este es solamente una forma de hacerlo, en realidad es un estudio complejo y pueden existir muchas formas de conseguir el mismo objetivo, pero dependerá de forma directa de la creatividad del atacante.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte IX – FINAL

abril 22, 2011 Dejar un comentario

USANDO STACK PARA ENVIAR PARAMETROS A FUNCIONES

Para usar la Stack y enviar argumentos a una función, es necesario conocer el funcionamiento de los registers ESP y EBP que se encargan de apuntar a la posición actual de la Stack y apuntar a los datos almacenados respectivamente.

Como se ha indicado anteriormente, la Stack en un segmento de ejecución que contiene valores de memoria Alta y Baja que se van apilando en base a una pila FIFO, cuando se almacenan valores en dicha pila, necesariamente el valor de memoria del register ESP se actualiza para apuntar a la nueva posición del ultimo elemento almacenado en la pila, de esta forma se mantiene la consistencia de la misma y se puede invocar a operaciones PUSH y POP sobre la pila de forma segura, es decir, sin tener la preocupación de que se vayan a recuperar o almacenar valores en posiciones de memoria inconsistentes.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte VIII

abril 21, 2011 Dejar un comentario

FUNCIONES EN ASSEMBLY

En Assembly es posible utilizar funciones del mismo modo que se utilizan en cualquier lenguaje estructurado como C/C++ o Pascal, su funcionamiento es simple, solamente basta con definir el nombre de la función y posteriormente invocarla con la instrucción call. En este sentido es bastante similar al concepto de segmento de ejecución, sin embargo, tiene la diferencia de que se ejecuta de forma independiente del flujo principal del programa (a diferencia de un segmento de ejecución que se define en algún punto del flujo principal) por esta razón, el uso de funciones resulta conveniente para separar instrucciones del flujo de ejecución e invocarlas solamente cuando resulte conveniente.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte VII

abril 20, 2011 Dejar un comentario

FLUJO CONDICIONAL DE UN PROGRAMA EN ASSEMBLY

Existen una serie de instrucciones que consisten en la ejecución de una determinada rutina dependiendo de que se cumplan ciertas condiciones para su ejecución. En Assembly, algunas de estas instrucciones están relacionadas con las Flags contenidas en el register EFLAGS, de este modo cada una de estas instrucciones verifican si dicho register tiene establecida una determinada bandera y en función de dicha verificación, ejecutar o no una rutina de código, lo que en lenguajes como Pascal, C/C++ o Java se conoce como una instrucción IF, pero aquí es un poco mas compleja.

Las instrucciones de flujo condicional basadas en las banderas del register EFLAGS son:

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte VI

abril 18, 2011 Dejar un comentario

FLUJO INCONDICIONAL DE UN PROGRAMA EN ASSEMBLY

Las instrucciones que se encuentran en esta categoría corresponden a aquellas que no se encuentran limitadas por instrucciones condicionales para que se su ejecución se lleve a cabo.

El siguiente es el programa de ejemplo que se usará para la demostración de los tópicos relacionados con el flujo incondicional de un programa en assembly, que como en casos anteriores se depurará paso a paso para su correcto entendimiento.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte V

abril 17, 2011 1 comentario

USANDO STRINGS EN ASSEMBLY

Para manipular Strings en assembly, el programador dispone de los comandos MOV(X) para desplazar segmentos de memoria y valores en direcciones de memoria, sin embargo, para manipulación de Strings se cuenta con comandos MOVS(x) adicionales diseñados específicamente para el tratamiento de cadenas en Assembly, estos comandos adiciones son:

MOVSB: Mueve un byte (8 bits)
MOVSW: Mueve una palabra (16 bits)
MOVSL: Mueve una palabra doble (32 bits)

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte IV

abril 16, 2011 Dejar un comentario

MANIPULAR POSICIONES DE MEMORIA EN UN PROGRAMA ASSSEMBLY

En assembly podemos mover valores de una posición de memoria origen a una posición de memoria destino, siendo esta, una de las actividades mas frecuentes en un programa assembly. Para mover valores de memoria de un register a otro, usamos la instrucción MOV(x) existen 3 variables de este comando dependiendo del tamaño del origen y del destino, estas son:

  • MOVL : Mueve un valor de 32 bits. movl %eax, %ebx
  • MOVW: Mueve un valor de 16 bits. movw %ax, %bx
  • MOVB: Mueve un valor de 8 bits. movb %ah, %bh

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte III

abril 15, 2011 Dejar un comentario

ESTRUCTURA DE UN PROGRAMA EN ASSEMBLY

La estructura de un programa en assemby esta determinada por diferentes zonas en las cuales se declarán variables, se inicializan y posteriormente se utilizan por diferentes rutinas que realizan una función definida, las zonas principales en un programa en assembly son las siguientes:

.data: Segmento de inicialización de datos, como cadenas o valores numéricos

.bss: Segmento donde se indican las variables sin inicializar

.text: Segmento donde se realizará la ejecución propiamente dicha del programa, las instrucciones en este segmento están diferenciadas en diferentes subsegmentos dentro del segmento .text, el más importante que es donde se inicia la ejecución del programa es el subsegmento _start, este subsegmento puede compararse como la rutina main en un programa escrito en C/C++, por otro lado también se encuentra el segmento .globl _start, donde se ejecutaran funciones externas, aquí se definen invocaciones a librerías externas y demás dependencias del programa.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte II

abril 12, 2011 1 comentario

ORGANIZACION DE MEMORIA VIRTUAL

SEGMENTO STACK

Este segmento es un LIFO (Last In First Out), que va aumentando partiendo desde el valor mas alto de memoria, hasta el valor mas bajo en la medida que se van ingresando valores en dicha pila, el Register ESP siempre estará apuntando al valor actual de la pila. Esta pila solamente soporta dos operaciones, las cuales son push y pop que consisten básicamente en “poner” valores y “quitar” valores desde la cima de la pila, estas operaciones determinan la posición del ESP, independiente de la función que se ejecute, siempre apuntará a la ultima posición de la pila.

Leer más…

Assembly en GNU/Linux para Hackers Newbies, Parte I

abril 10, 2011 Dejar un comentario

BASES DE LA ORGANIZACION DEL SISTEMA

En cualquier sistema contamos con 3 elementos vitales que interactuan entre si para obtener algún tipo de resultado o procesamiento, estos elementos son: CPU, dispositivos de Entrada y Memoria. Estos 3 elementos se comunican por medio de lo que se conoce como el bus del sistema (system bus) que permite que estos elementos interactuen entre ellos.

BASES DE LA CPU:

La unidad de procesamiento central, cuenta con 3 elementos vitales en su funcionamiento, estos son:
Unidad de control: Recibe y decodifica las instrucciones enviadas por la unidad de ejecución, y también se encarga de recibir y almacenar datos en memoria

Unidad de ejecución: La ejecución actual de instrucciones es efectuada aquí, esta unidad es la encargada de recibir variables y banderas que determinan el comportamiento de un programa en un momento determinado.

Registers: Se trata localizaciones internas de memoria utilizadas como variables que son posteriormente enviadas a la unidad de ejecución para su uso y/o procesamiento.

Banderas/Flags: Se encarga de controlar y transmitir los eventos que ocurren mientras la ejecución se esta llevando a cabo, los registers son muy importantes para comprender assembly y se desglosan en las siguientes categorías:

Leer más…

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 590 seguidores

%d bloggers like this: