Documentos de Académico
Documentos de Profesional
Documentos de Cultura
por OccupyTheWeb
San Francisco
Machine Translated by Google
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
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
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
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
CONTENIDOS BREVES
Expresiones de gratitud
Introducción
Capítulo 15: Administrar el kernel de Linux y los módulos del kernel cargables
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
1
COMENZANDO CON LO BÁSICO
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
4
AGREGAR Y ELIMINAR SOFTWARE
5
CONTROL DE PERMISOS DE ARCHIVOS Y DIRECTORIOS
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
8
BASH SCRIPTING
Un curso intensivo en Bash
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
10
ADMINISTRACIÓN DE SISTEMAS DE ARCHIVOS Y DISPOSITIVOS DE ALMACENAMIENTO
11
EL SISTEMA DE REGISTRO
Ejercicios
12
USO Y ABUSO DE SERVICIOS
13
SER SEGURO Y ANÓNIMO
Servidores proxy
Configuración de proxies en el archivo de configuración
Resumen
Ejercicios
14
COMPRENSIÓN E INSPECCIÓN INALÁMBRICA
REDES
redes wifi
Comandos inalámbricos básicos
15
GESTIÓN DEL KERNEL DE LINUX Y CARGABLE
MÓDULOS DEL NÚCLEO
¿Qué es un módulo del kernel?
dieciséis
ejercicios
17
CONCEPTOS BÁSICOS DE SCRIPTING DE PYTHON PARA HACKERS
Bucles
Mejorando nuestros scripts de piratería
Machine Translated by Google
ÍNDICE
Machine Translated by Google
EXPRESIONES DE GRATITUD
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
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.
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.
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 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 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.
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.
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?
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
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.
Haga clic en Siguiente y debería recibir la pantalla Configuración personalizada, como se muestra en la
Figura 3.
Machine Translated by Google
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.
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
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).
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!
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).
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).
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
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!
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.
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.
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
parecen confusos al principio, pero serán más fáciles de diferenciar una vez que te
acostumbres a 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:
ejecutables en
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.
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.
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
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 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:
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:
Entonces, por ejemplo, para subir dos niveles, ingrese cd seguido de dos conjuntos
de puntos dobles con un espacio en medio:
kali > cd .. ..
kali>ls
bin initrd.img boot media donde
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
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
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
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.
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:
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?
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
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:
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
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:
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:
Cuando ejecuto este comando, encuentro dos archivos que comienzan con apache2 en
el directorio /etc, incluido el archivo apache2.conf.
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.
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.
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
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.
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.
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:
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:
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í:
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.
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.
para crear un directorio en Linux es mkdir, una contracción de make directory. Para
crear un directorio llamado newdirectory, ingrese el siguiente comando:
Copiando un Archivo
Cuando navegamos a newdirectory, vemos que hay una copia exacta de oldfile
llamada newfile:
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
Si ahora hace una lista larga en el directorio, puede confirmar que el archivo se ha
eliminado.
Eliminación de un directorio
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
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.
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
Visualización de
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--
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:
--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.
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.
Ahora podemos ver casi todas las líneas de inclusión de los archivos de reglas en una
pantalla.
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.
Cada línea ahora tiene un número, lo que hace que la referencia sea mucho más fácil.
snort.conf, podría usar cat y pedirle que muestre solo esas líneas (vea el Listado
2-5).
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
Paso 1
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
############################################## #
# 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.
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.
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
Listado 2-6: Usar sed para buscar y reemplazar palabras clave o frases
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.
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).
Listado 2-8: Usar menos para mostrar la salida del terminal una página a la vez y filtrar los resultados
#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
# syslog
# salida alert_syslog: LOG_AUTH LOG_ALERT
:
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:
3
ANÁLISIS Y GESTIÓN DE REDES
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
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.).
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
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
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.
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:
Ahora, cuando verifique su configuración con ifconfig, ¡debería ver que HWaddr
ha cambiado a su nueva dirección IP falsificada!
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:
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
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.
;; 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.
;; SECCIÓN DE AUTORIDAD:
hackers-arise.com. 5 EN SOA ns6.wixdns.net. soporte.wix.com 2016052216
Machine Translated by Google
Listado 3-4: Uso de dig y su opción mx para obtener información sobre un servidor de intercambio de correo de dominio
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:
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
localhost
127.0.0.1 veces 127.0.1.1
192.168.181.131
bankofamerica.com
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:
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
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!
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
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á.
software, utilice apt-get con la opción de eliminación , seguido del nombre del software que desea
eliminar (consulte el Listado 4-3).
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
Listado 4-4: Eliminando Snort y los archivos de configuración que lo acompañan con apt-get purge
Actualización de paquetes
Listado 4-5: Actualización de todos los paquetes desactualizados con apt-get update
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.
Listado 4-6: Actualizando todos los paquetes desactualizados con apt-get upgrade
ingrese Y si desea continuar y tiene suficiente espacio en el disco duro para la actualización.
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.
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
Muchas distribuciones de Linux dividen los repositorios en categorías separadas. Por ejemplo,
Ubuntu desglosa sus categorías de repositorio de la siguiente manera:
comunidad Contiene software restringido por derechos de autor u otros problemas legales
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:
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
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
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
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--
Resumen En
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:
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.
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.
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
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í.
Listado 5-1: Verificando los permisos de un archivo con el comando de listado largo
ÿ El tipo de archivo
ÿ El número de enlaces (Este tema está más allá del alcance de este libro).
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.
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
BinaryOctalrwx
000 0 ---
001 1 --X
010 2 -En
011 3 -wx
100 4 r--
101 5 receta
110 6 rw
111 7 rwx
rwx
4--
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.
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:
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.
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
- Elimina un permiso
+ Agrega un permiso
= Establece un permiso
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
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.
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.
--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).
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 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.
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 .
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 .
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.
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 :
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--
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.
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.
6
GESTIÓN DE PROCESO
Visualización de procesos
Machine Translated by Google
kali> pd
PID TTY HORA CMD
39659 puntos/0 00:00:01 golpe
39665 puntos/0 00:00:00 p.d.
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,
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:
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
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!
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--
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.
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
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
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
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.
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.
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.
a las 19:20 Programado para ejecutarse a las 7:20 p . m. del día actual a las 7:20
en este momento + 5 días Programado para ejecutarse en cinco días a partir de la fecha actual
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:
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
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.
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
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
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.
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.
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.
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.
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:
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:
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í:
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
root@kali:directorio_actual
\h El nombre de host
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.
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í:
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.
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
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.
kali >PATH=/root/
nuevaherramientahackingkali >echo
$RUTA/root/nuevaherramientahacking
Machine Translated by Google
kali >cd
bash: cd: comando no encontrado
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.
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:
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.
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:
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.
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.
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.
#!
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
#! /bin/bash
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 # .
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:
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--
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!
ÿ #! /bin/bash
leer nombre
leer capítulo
ÿ echo "Bienvenido" $nombre "al Capítulo" $capítulo "de Linux Basics for Hackers!"
¡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
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.
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:
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
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.
ÿ #! /bin/bash
ÿ # Este script está diseñado para encontrar hosts con MySQL instalado
gato mysqlscan2
veces >./MySQLscanner.sh
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.
Echemos un vistazo a cómo podría usar variables para hacer que este script sea
más flexible y eficiente.
#! /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
ÿ gato MySQLscan2
NOTA
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
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
función de comando
: Devuelve 0 o verdadero
exportar Hace que una variable o función esté disponible para otros programas
función de comando
colocar
Lista todas las variables
[
Realiza una prueba condicional.
desarmado
Elimina valores de una variable o función
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
¿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
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.
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
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:
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:
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.
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):
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--
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.
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.
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
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
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.
10
SISTEMA DE ARCHIVOS Y DISPOSITIVO DE ALMACENAMIENTO
ADMINISTRACIÓN
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
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.
Archivo de dispositivoDescripción
Particiones de disco
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
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
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.
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:
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.
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.
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:
Ese disco duro debería estar disponible para el acceso. Si desea montar la unidad
flash sdc1 en el directorio /media, ingrese esto:
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).
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
tiempos >df
Sistema de 1K-Bloques Usado Uso disponible% Montado en
archivos rootfs 19620732 17096196 1504788 92% /
udev --snip-- 10240 0 10240 0% /desarrollo
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
Mi unidad flash de 64 GB está designada como sdb1 y mi unidad externa como sdc1.
Comprobación de errores El
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:
Puedo agregar la opción -p para que fsck repare automáticamente cualquier problema con el
dispositivo, así:
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
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 .
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
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.
#################
Machine Translated by Google
##########################
#### DIRECTIVAS GLOBALES
#### #########################
##############
#### 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
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
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.
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.
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
*.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.
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.
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:
crear
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
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
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.
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:
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>
Una vez que haya triturado un archivo, verá que el contenido es un galimatías
indescifrable, como se muestra en la Figura 11-1.
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):
Los archivos
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:
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
Para iniciar el servicio apache2 (servidor web o servicio HTTP), debe ingresar lo
siguiente:
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.
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!
posición: relativa;
pantalla: mesa;
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.
<html>
<cuerpo>
</cuerpo>
</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.
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
Sin embargo, antes de hacer eso, inicie OpenSSH en su sistema Kali con el
comando ahora familiar:
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.
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.
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:
pi >ifconfig
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.
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.
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
¡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
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:
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.
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.
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:
Escriba 'ayuda;' o '\h' para obtener ayuda. Escriba '\c' para borrar la declaración de entrada
actual mysql>
Machine Translated by Google
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.
unión Se utiliza para combinar los resultados de dos o más operaciones de selección
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.
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 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 > actualizar la contraseña establecida por el usuario = CONTRASEÑA ("hackers-arise") donde usuario = 'root';
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.
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:
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.
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.
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:
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!
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:
El usuario
La contraseña
El anfitrión
Machine Translated by Google
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
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.
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
Preocupaciones de seguridad
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.
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í:
Los argumentos que proporcione pueden incluir una dirección IP. Para
Por ejemplo, si quisiera usar proxychains para escanear un sitio de forma nmap
--recorte--
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
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
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:
[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:
[ProxyList]
# añadir proxy aquí...
socks4 114.134.186.12 22020
Machine Translated by Google
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--
Encadenamiento
# 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 :)
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.
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.
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.
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
4. Explore los servicios VPN comerciales de algunos de los proveedores enumerados en este capítulo.
Elija uno y pruebe una prueba gratuita.
14
ENTENDIENDO E INSPECCIONANDO
REDES INALÁMBRICAS
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
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.
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.
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--
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:
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:
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).
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.
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
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í:
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:
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:
veces >iwconfig
no hay extensiones inalámbricas
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:
--recorte--
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--
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.
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.
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.
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
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
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.
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.
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/.
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--
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.
El Listado 14-4 me muestra usando sdptool para buscar servicios en uno de los
dispositivos detectados anteriormente en el Listado 14-2.
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:
--recorte--
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.
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?
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
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
kali >uname -a
Linux Kali 4.6.0-kalil-amd64 #1 Debian SMP 4.6.4-lkalil (2016-07-21) x86_64
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--
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:
#kernel.domainname = ejemplo.com
############################################## ############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
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.
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
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:
matar, crc16
Y
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):
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
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:
4. Edite su archivo /etc/sysctl.conf para habilitar el reenvío de IP. Ahora, deshabilite el reenvío de IP.
dieciséis
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.
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.
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
CONCHA=/bin/sh
RUTA=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Ahora, para configurar una nueva tarea programada regularmente, simplemente necesita ingresar
una nueva línea y guardar el archivo.
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:
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
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:
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
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
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í:
# 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
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:
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.
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
6 Reiniciar el sistema
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
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:
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!
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.
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.
17
CONCEPTOS BÁSICOS DE SCRIPTING DE PYTHON PARA HACKERS
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:
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
--recorte--
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> cd python-nmap-.03.4 /
Machine Translated by Google
--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.
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!")
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).
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
HackersAriseIntegerVariable = 12
HackersAriseFloatingPointVariable = 3.1415
HackersAriseList = [1,2,3,4,5,6]
imprimir (HackersAriseStringVariable)
imprimir (HackersAriseIntegerVariable)
imprimir (HackersAriseFloatingPointVariable)
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:
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'
kali >./secondpythonscript.py
Hackers-Arise es el mejor lugar para aprender a
hackear 12 3.1415
NOTA
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!")
kali >./hackers-arise_greetings.py
Saludos a OccupyTheWeb de parte de Hackers-Arise. ¡El mejor lugar para aprender a hackear!
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:
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
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.
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.
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.
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.
#! /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
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.
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
#! /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)
mientras que 1:
data=conn.recv(BUFFER_SIZE) si
no data:break print ("Datos
recibidos: ", data) conn.send(data)
#echo
conn.cerrar
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---
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.
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
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.
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
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 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í:
si intento == "230"
#! /usr/bin/python3
enchufe de importación
ÿ Puertos = [21,22,25,3306]
s = socket.socket()
ÿ Puertos = Puerto[i]
imprimir (Puertos)
imprimir (respuesta)
cerrar ()
Machine Translated by Google
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 ÿ.
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
#! /usr/bin/python3
importar ftplib
ÿ intente:
ÿ intente:
ftp = ftplib.FTP(servidor)
ftp.login(usuario, palabra)
'
ÿ imprimir (¡Éxito! La contraseña es + palabra)
ÿ excepto:
print('todavía intentando...')
excepto:
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.
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.
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--
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
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.
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
B
procesos en segundo plano, 68–69
tarea de programación de copia de
seguridad, 176–177 tabla de bloques
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
Bluetooth, 159–164
descripción general, 159–
160 escaneo, 160–164
Sitio Bluetooth SIG, 162
30 opción de comando de
transmisión , 32
Comando bzip2 , 97
C
distinción entre
mayúsculas y minúsculas, comando 2 cat (concatenación),
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
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
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
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
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
j
programación de trabajos, 173–178
comando de trabajos , 91
PARA
módulos del kernel cargables, 166, 169–171 Declaraciones KEY , 72 comando kill , 67–68
I
comando l2ping , 163–164
herramientas LAMP, 123
linux
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
suplantación de identidad, 32
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
PAGS
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
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
texto
tu
Machine Translated by Google
V
variables Ver también variables de entorno
149
caja virtual
de vulnerabilidad, xxiii
EN
comando de espera , 91
Machine Translated by Google
CON
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.
• 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
• 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.
www.nostarch.com