Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Temas - WHK

Páginas: [1]
1
Otros lenguajes / Consultoría - Cómo solucionar un XSS
« en: Noviembre 01, 2021, 05:29:54 pm »
Bienvenidos Underc0ders!. Para dedicarse a la seguridad de manera profesional no solamente basta con saber encontrar un XSS sino también es necesario saber porque se produce y como darle una solución, ya que en muchas ocaciones nos toca hablar con el dueño de la aplicación WEB y nos pide consejos y estos no pueden estar fundados en la ignorancia. Por eso quiero comentarles como aconsejar a alguien sobre como solucionar un XSS y como darle su importancia.

Estructura

Cuando encuentras un XSS es importante saber que el dueño de la aplicación no es el experto en seguridad sino tu mismo, por lo cual el dueño puede que entienda menos de la mitad de lo que le digas, por eso es importante ser muy claro y estructurado al momento de detallar un XSS:

  • Resumen del hallazgo
  • Cómo replicar el problema (PoC) (ojo, no te están pidiendo mostrar un alert, sino replicar un impacto real)
  • Porqué es un riesgo de seguridad (impacto)
  • Cuales son las mejores recomendciones

Generalmente en el resumen del hallazgo debes incluir el tipo de vulnerabilidad, normalmente categorizado junto al nivel de riesgo y esto lo puedes obtener a traves de diferentes estándares tales como la CVSS ( You are not allowed to view links. Register or Login ) y la CWE ( You are not allowed to view links. Register or Login ) ya que será tu palabra contra el dueño de la aplicación, por lo cual siempre es buena idea apegarse a los estándares.

Recomendaciones

Acá va el problema: el cliente tiene un sitio WEB que cuenta con una vulnerabilidad de tipo XSS Reflejado ( CWE 80 You are not allowed to view links. Register or Login ) y el cliente necesita una recomendación. He escuchado a muchas personas recomendar lo siguiente de manera equivocada:

  • Impedir el ingreso de caracteres especiales en los campos
  • Filtrar los caracteres especiales evitando que en el input se ingresen etiquetas HTML
  • Crear una regla en el WAF para evitar los XSS

Pero, ¿Porqué están errados?: Para comenzar, impedir o filtrar el ingreso de caracteres especiales en los campos es una recomendación demasiado genérica y va a depender del tamaño y de la arquitectura de la aplicación. Como podemos observar, el CWE es 80 ( You are not allowed to view links. Register or Login ) y no 79 ( You are not allowed to view links. Register or Login ), hay una gran diferencia ya que el CWE-79 indica que es un problema de caracteres de entrada y el CWE-80 indica que es un problema de salida.

Cuando ingresas contenido HTML en un campo y este se refleja en el código fuente resolutante de la respuesta del sitio WEB (response) entonces tenemos un problema de datos de salida y no de entrada, pero ¿porqué no filtrar los caracteres en la entrada para evitar tener problemas en los datos de salida?: porque no todas las aplicaciones funcionan igual y esto dependerá de su arquitectura, por ejemplo: Supongamos que nuestro sistema tiene una versión WEB y una version movil, si filtro los caracteres especiales en la entrada de datos para convertirlos en entidades HTML para que se guarde en la base de datos entonces cuando la aplicación móvil vaya a solicitar estos datos vendrán con escapes HTML pero las aplicaciones móviles nativas no usan HTML asi que se verán caracteres extraños basura en el contenido. No todo lo que esté en una base de datos significa que se desplegará en una aplicación WEB o móvil o de escritorio, sea nativa o híbrida, por esto es muy importante tener en mente el siguiente concepto:

Ningún dato de entrada debe ser filtrado a menos que sea un filtro de datos por concepto de definición de capa de negocio y datos, o sea, si mi valor a ingresar debe ser siempre un número positivo entonces eso si se puede filtrar, si el nombre debe tener una longitud máxima entonces esto debe ser controlado y filtrado, pero si no hay nada que impida que alguien ingrese un caracter especial en una caja de descripción entonces para que filtrar, por lo contrario, un buen desarrollo debe poder funcionar de manera segura con cualquier tipo de caracter especial, por ejemplo, este foro permite caracteres especiales para el nombre de usuario o la caja del contenido del post y no quiere decir que se deban eliminar todos los caracteres especiales para hacerlo mas seguro.

Si eres un profesional y encontraste un buen XSS pero aconsejas filtrar los campos de entrada te puede hacer quedar como ignorante en el campo del desarrollo de la solución y puede que pierdan la confianza en ti y sin que te lo digan.

¿Porqué no es bueno recomendar que se solucione del lado del WAF creando reglas que impidan los XSS?: Porque un WAF es solamente un agente mitigante pero no un solucionador de problemas, puede que para alguien sea mas dificil llegar al XSS pero el agujero de seguridad con el riesgo aun van a seguir existiendo, los riesgos se reducen pero no se eliminan, por lo cual no se considera una solución sino una mitigación y esto es parte de dos planes de trabajo: La mitigación al corto plazo y la solución al mediano/largo plazo.

Entonces, ¿cual es la mejor recomendación?:

Crear un plan de mitigación al corto plazo sonde se mitigue a traves de diferentes agentes dependiendo los que tenga el dueño de la aplicación WEB (Web Application Firewall), por ejemplo, el WAF para mitigar los ataques WEB, un Firewall para evitar la llegada de paquetes maliciosos a la infraestructura, evitar pivoting y esas cosas.

Crear un plan de solución al mediano/largo plazo que incluya corrección de código fuente del lado del desarrollo y acá entra algo de conocimiento de Arquitectura aplicativa:

En el caso de ser una aplicatión WEB monolítica ( You are not allowed to view links. Register or Login ) se debe recomendar crear un escapado de datos de salida en el punto vulnerable y ojo, existen varias maneras de hacerlo según sea el caso ya que va a depender en que lugar del código resultante se realiza la impresión de la variable vulnerable con el XSS, pero antes de explicar esto es necesario entender otra cosa: ¿Qué es una secuencia de escape de caracteres?.

Pues bien, digamos que tenemos un String entre comillas dobles así:

Código: You are not allowed to view links. Register or Login
"Palabra acá"
¿Que sucede si el valor de esta palabra contiene una comilla doble?

Código: You are not allowed to view links. Register or Login
"Palabra " acá"
Pues, lo que sucede es que se rompe la cadena de texto ya que las comillas dobles declaran el valor, todo lo que esté dentro es parte del texto, pero cuando le pones una comilla doble lo estás interrumpiendo indicando que se está cerrando la declaración, o sea, que la palabra ya ha terminado, entonces, que sucede con el texto restante, en este caso podrías hacer dos textos o inyectar algo entremedio, por ejemplo usando la frase: Palabra" + algo + "acá

Código: You are not allowed to view links. Register or Login
"Palabra" + algo + "acá"
Y bueno, se produce una inyección de código malicioso entre una declaración de tipo texto. Esto mismo sucede en muchos lugares, como verán, no estoy hablando de un lenguaje de programación en particular ya que cada lenguaje utiliza su propia sintaxis y su propia manera de escapar los caracteres.

Entonces, para evitar que suceda una inyección se creó algo universal llamado "Secuencia de escape de caracteres" los cuales se añaden al caracter especial para que este forme parte de la cadena de texto y no que lo rompa, por ejemplo, en javascript es el backslash "\", por ejemplo:

Código: You are not allowed to view links. Register or Login
"Palabra \" acá"
Esto le indica al motor interpretador de Javascript que el caracter que sigue después del backslash será parte del texto en ves de interpretarse como un quiebre del string. En batch el caracter de escape es el "^" y el "%%", en bash es el backslash, en SQL es el backslash, en Javascript es el backslash y en HTML es la Entidad HTML! ( You are not allowed to view links. Register or Login ).

Asi que, en nuestro XSS pueden haber dos situaciones muy comunes, que el código esté imprimiendose dentro de una etiqueta Javascript o dentro del mismo HTML y en cambos casos se necesitarán usar diferentes tipos de secuencia de escape, por ejemplo:

Código: You are not allowed to view links. Register or Login
<script>var x = '$valor_escapado';</script>
Donde $valor_escapado será igual al texto de salida escapado, esto quiere decir que cada caracter especial podrá ser reemplazado por valores de escape unicode o hexadecimal (definido por el estandar de Javascript ES6), por ejemplo:

Código: You are not allowed to view links. Register or Login
"Palabra \x22 ac\xc3\xa1"
Pero, ¿con que función se escapa?: Eso dependerá del lenguaje de programación o del framework que estés utilizando, cada lenguaje o framework tiene distintas maneras de aplicar este filtrado y de ahi la importancia de entender de desarrollo de software, comprender lo que estás analizando, mas allá de ver un simple XSS.

Ahora vamos con el código HTML, su secuencia de escape está definido por el estandar mismo de la W3C: You are not allowed to view links. Register or Login , por lo cual enocntramos las siguientes equivalencias:

Valor/Entidad que lo reemplaza
<&lt;
>&gt;
'&apos;
"&quot;

Entonces, si el problema estuviera en código HTML debería ser escapado de la siguiente manera:

Código: You are not allowed to view links. Register or Login
<input type="text" value="Palabra &quot; acá" />
Hay personas que aplican un filtro html para todo el código, pero esto no escapa contenido Javascript, por ejemplo, en javascrpt puedes inyectar código con un backslash, pero HTML no tiene un escape para backslash porque para HTML ese caracter no es peligroso pero para Javascript si, lo mismo sucede cuando intentas romper una secuencia con un salto de línea, por otro lado un tag html en javascript no le pasa nada pero a HTML si. Asi que, cada lenguaje en cada trozo de código debe llevar su propia secuencia de escape de caracteres o podrás terminar abriendo una vulnerabilidad donde antes no lo había.

Pero, en aplicaciones con separación de capas (no monolíoticas) hay que indicar que esto se debe hacer del lado del código que expone la información, o sea la capa de presentación ( You are not allowed to view links. Register or Login ), y ojo, no se les vaya a ocurrir decirle a alguien que debe escapar absolutamente todo, ya que va a depender de muchas cosas, por ejemplo, un servicio REST que expone datos a traves de código Json tiene su propia secuencia de escape de caracteres y esto generalmente se maneja de manera automática dependiendo del lenguaje y framework de programación.

Asi que, ahora si estamos medianamente listos para dar una buena recomendación:

Citar
A modo de solución al mediano/largo plazo se recomienda aplicar la secuencia de escape de caracteres utilizando el estandar de Entidades HTML declarado por W3C en capa de presentación, únicamente sobre el parámetro afectado.

Como verán, la recomendación es corta, pero va al grano y con todo el tecnicismo que necesita el dueño de la aplicación, es muy diferente a decir "hay que filtrar los datos de entrada" y ya.

A modo de conocimiento general, en algunas ocaciones, a demás de recomendar solucionar el XSS también se le recomienda sobre migrar de tecnología a una mas segura, por ejemplo, si el desarrollo WEB no utiliza un framework, sino que está hecho a mano con archivos php o jsp tirados en el servidor, entonces se le dice que al largo plazo va a ser mejor migrar a un framework de desarrollo mas seguro como Codeigniter, Laravel o Spring boot ya que estos frameworks manejan de manera automática los problemas de tipo inyección como los XSS o Inyección SQL debido a que nunca programas código a mano, sino que te apoyas en clases y templates, donde las consultas SQL ya no se realizan directamente sino que usas clases y el framework traduce esas clases a consultas SQL parametrizadas y ya no programas variables directamente sobre HTML sino que programas sobre un sistema de plantillas que traduce tu código a código escapado de manera automática como es el caso de Jinja para Django de Python, Thymeleaf para Spring Boot de Java y Razor para MVC de .NET.

Como ya habrán notado, esto no solo aplica para los XSS sino para cualquier tipo de vulnerabilidad de tipo inyección, esto incluye Inyecciones SQL e Inyección de Comandos, Inyección XML, Inyección LDAP y similares.

Cuando el dueño de una aplicación pregunta como solucionar un problema, por lo general no se lo pregunta a la persona de al lado, sino que se lo pregunta al que encontró el problema y estará esperando a que entiendas como ayudarlo pero si no sabes en que lenguaje está hecho o no tienes los fundamentos básicos de desarrollo entonces va a ser dificil dar una recomendación certera, incluso puede que estés dando una recomendación erronea y que en el futuro tengan problemas aun mas graves y les hagas perder el tiempo, me ha tocado ver esos casos y no es muy agradable decirle a una persona que lo que hizo a modo de corrección realmente no sirve y que va a tener que volver a programar sus soluciones.

Espero les pueda ayudar un poco a ampliar el vocabulario se seguridad informática. Saludos.

2
Zona Webmaster / [software] Módulo de Jinja2 para Apache Server
« en: Julio 02, 2021, 01:36:55 am »
You are not allowed to view links. Register or Login

Hola, muy buenas noches a todos, les traigo un proyecto que acabo de finalizar, se trata de un módulo escrito puramente en c para Apache Server que permite interpretar plantillas para Jinja2.

Los que no sepan que es Jinja2, es un sistema de templates ampliamente utilizado en proyectos sobre Python como por ejemplo, Django y Flask. La gran ventaja es que ya no necesitas utilizar ningún framework o hacer deploy de ningún servicio de python para publicar tus plantillas, gracias a este módulo las plantillas se cargan y se interpretan en memoria a bajo nivel sin utilizar ningún proyecto en python.

El proyecto se encuentra en este lugar: You are not allowed to view links. Register or Login

El proyecto es una mezcla de módulo para apache junto a la utilización de la API para C de Python, por lo cual el performance podría llegar a ser mucho mejor que la de php. Una ves instalado puedes crear plantillas utilizando archivos con extensión .j2 y olvidarte de utilizar Wordpress u otros sistemas CMS de alto coste en hardware, por ejemplo, un sitio meramente informativo con un puñado de módulos de slides y editores pesados te puede costar mas de 2GB de memoria RAM y la alta disponibilidad disminuye considerablemente, por otro lado, crear un sitio WEB únicamente utilizando archivos HTML te dará problemas como por ejemplo la redundancia de código ya que tendrás que escribir la cabecera, el footer, los menús, en cada archivo y se pierde escalabilidad ya que hacer una pequeña modificación en el diseño podría significar tener que modificar muchos archivos, pero con el módulo de Jinja2 es el intermedio entre versatilidad y eficiencia ya que creas archivos estáticos y a la ves con comportamiento dinámico ya que puedes hacer includes o realizar una única plantilla para todos tus demás archivos escritos puramente en HTML.

Acá les dejo un repositorio de ejemplo de un sitio WEB que utiliza este módulo: You are not allowed to view links. Register or Login

Su uso es totalmente libre, se aceptan sugerencias, la documentación aun no está 100% finalizada, aun debo documentar los módulos de python disponibles desde Jinja2, formato de extensiones, rutas de layouts, etc, pero si tienen alguna duda me la pueden ir haciendo en este mismo post. El módulo es 100% estable, probado, testeado y puesto en producción en alguno de mis servidores, comenzaré a migrar algunos sitios que tengo a puro html dinámico con este módulo.

Saludos.

3
Desde hace mucho tiempo que he visto gente utilizando kali y anteriormente la gente tendía a usar backtrack.

Creo que Kali es una distribucion corporativa destinada a vender los productos de offensivesecurity, por ejemplo, en sus certificaciones te exijen utilizar kali, pero ¿realmente es tan necesario o tan bueno como dicen?

Quiero contar mi breve experiencia personal al respecto. Yo probé Backtrack desde sus inicios, era una distribución de GNU/Linux basada en Ubuntu bastante novedosa ya que incluía muchas herramientas de seguridad de todo tipo, debemos recordar que distribuciones de seguridad existen muchas, como por ejemplo gnu radio, wifislacks, etc (muchas de ellas recomendadas desde el sitio web de fydor, insecure.org), pero esta distribución en particular ya tenía muchas de las herramientas más conocidas en el mundo del hacking. Con el tiempo apareció su reemplazo llamado Kali que al final es un backtrack con otro nombre y otro fondo de escritorio destinado más que nada a hacer crecer la imagen de offensivesecurity y hacerlo tan rentable económicamente como fuese posible.

Yo personalmente si he utilizado kali, pero no de manera constante, hay personas que incluso prefieren instalarlo en sus notebooks, pero kali no fue diseñado para ser instalado, de hecho la recomendación oficial es utilizarlo desde un medio extraible como sistema booteable para hacer hacking cuando lo necesites, kali no es un sistema estable con el que puedas trabajar o hacer tareas cotidianas, kali fue diseñado para situaciones muy específicas.

Ahora, Kali viene con cientos de herramientas de hacking, desde algunas para redes, otros para intercepción de tráfico, monitoreo, frameworks de explotación, reconocimiento, etc, pero ¿realmente usas o necesitas todas las herramientas?, la respuesta es clara y es un rotundo "no" y esto no quiere decir que kali sea una mala distribución, Kali fue diseñado para que cuando necesites hackear algo no te haga falta nada y tengas todo en un pendrive, pero esto también causa que Kali no sea un sistema escalable donde puedas tener tus herramientas personalizadas ya que al no ser un sistema diseñado para ser utilizado de manera instalado no podrás mantener en persistencia tus herramientas o archivos, necesitarás otros discos donde si puedas escribir.

¿Eres siempre root?, Kali, al no ser diseñado para uso cotidiano no hace uso de usuarios sin privilegios que puedan asegurar el sistema, la instalación por defecto te fuerza a utilizar siempre el usuario root, una pésima práctica para cualquier sistema basado en Linux, de hecho kali se deshace de casi todos los sistemas de seguridad gestionados por el kernel para que ninguna herramienta tenga problemas de privilegios, pero al mismo tiempo kali se transforma en una bomba de tiempo siendo un sistema muy vulnerable, ya que tenemos que entender que Kali debe ser utilizado unicamente para situaciones muy específicas.

Entonces, ¿conviene usar kali?, en mi experiencia personal "no". Hay dos opciones, o usas tu sistema preferido en tu notebook o equipo de escritorio y enchufas kali por el usb y lo arrancas solo para hacer hacking o usas otra distribución de GNU/Linux que te permita tener exactamente las mismas herramientas pero a traves de un sistema totalmente estable y diseñado para el trabajo diario y uso cotidiano. En mi opinion personal creo que es mas conveniente contar con un sistema fijo el cual ya contenga únicamente las herramientas que necesitas, ya que no existe ninguna distribución de Gnu/Linux que no puedas tener las mismas herramientas que kali.

Vamos, el que usa Kali no es un usuario básico, por lo general son personas que por lo menos saben utilizar apt-get o yum. En mi situación personal uso Ubuntu (pero no es lo que recomiendo), tanto en mi desktop como en mi notebook, siempre utilizo una versión estable LTS con soporte de largo plazo y a demás, cuento con mis herramientas de desarrollo de software y pentesting, asi que si, tengo instalado wireshark, docker, msf, nmap, mitmdump, etc. Llevo muchos años dedicandome al pentesting y jamás he necesitado backtrack o kali, por ejemplo, cuando te llevan a una empresa a hacer una revisión o llegas a una red corporativa que has hackeado necesitarás una buena cantidad de configuraciones de red para protocolos de autenticación corporativos, generalmente estos conectores no los trae Kali a pesar de que venga con gnome y esté basado en ubuntu, en kali tendrás que configurar todo manualmente, en cambio en ubuntu puedo dejar que el sistema se encargue de toda la configuración y si necesito hacer uso de una vpn la instalo para gonme3 y ya.

Ahora, ¿que recomiendo?. Lo que yo recomiendo para pentesting son Arch, Manjaro, Fedora o Ubuntu (a demás de todas las distribuciones estables como suse o freebsd). A mi me gusta la comodidad, un buen diseño y todo el poder de Linux, asi que prefiero Ubuntu, Fedora también es una muy buena opción, un poco más incómodo que ubuntu pero más estable y con mejores paquetes de conectividad, recordemos que un pentetsing no solo requiere de nmap o herramientas de hacking, también requerirá herramientas de clientes como conectores oracle, ibm websphere, clientes para Switches con puertos seriales, etc, sino como te vas a conectar a esos sistemas y Fedora es el rey en ese tipo de aplicaciones. Pero para usuarios mas avanzados pueden optar por Arch, es mucho mas complicado de usar que ubuntu o fedora pero es mucho más flexible al momento de hacer hacking y la documentación es mucho mejor, pero tocará hacer muchas cosas de manera manual, pero de todas maneras sigue siendo un sistema muy estable de uso cotidiano que te apoyará para todo, no solo para hacer pentesting. Manjaro es un Arch pero más bonito y fácil de usar xD.

En resumen, no necesitas un tanque para cruzar la calle y menos aun si es uno que arroja humo negro y está hecho de lata, mejor usa una buena bicicleta con una buena suspensión y llantas profesionales y te va a servir igual o más eficiente que el tanque.

¿Que opinan al respecto?, yo he usado Kali porque en algunos lugares me pedían utilizarlo pero realmente no creo que su uso sea necesario o bueno, por lo contrario, para mi, esa distribución hace que el usuario aprenda malas prácticas.

Ya haré otro post dedicado a burpsuite ya que tampoco lo uso (pero lo he usado y se como funciona) y lo encuentro una herramienta totalmente innecesaria que muchos lo tienen como herramienta primordial siendo engañados por una compañía que solo se dedica a vender sus softwares, cuando en la práctica hay muchas alternativas. Muchas veces he enseñado a otros a hacer pentesting full web y movil sin burpsuite utilizando mitmproxy o scripts en javascript o python directamente y los resultados son mucho mejores. Algo similar a utilizar sqlmap o hacer las inyecciones SQL a mano, pero ya haré otro post con eso.

Saludos.

4
Hola, como están todos!, acabo de crear un script bien simple para extraer información de los archivos APK, por ejemplo en que Framework está hecho o que sistemas de protección contiene. Con el tiempo agregaré más sistemas de protección a detectar.

Acá les va la URL del repositorio para su descarga: You are not allowed to view links. Register or Login , está hecha en Python 3 y no necesita tener Java o SDK instalado, sólo necesita la ejecución del script en python nada más, todas las validaciones las realiza a nivel binario sin la necesidad de extraer nada en archivos sueltos.

Acá va un ejemplo de la salida del script:

Código: You are not allowed to view links. Register or Login
$ python3 apd.py test/pinning.apk
~ APK Package Detector v0.1.1-b - [email protected] ~
+ Framework used: Native or unknown Framework.
+ Protection systems :
  - Appcelerator Assets Obfuscation   : No
  - OkHttp3 Certificate Pinning       : Yes
  - Root and Virtual Machine detector : Yes

El script nos ahorra tiempo al momento de realizar revisiones de seguridad a las aplicaciones móviles ya que muchas veces debemos descompilar para saber en que está hecho o nos encontramos con sorpresas si el APK no funciona en máquinas virtuales o no se puede interceptar el tráfico HTTPS.

El script no elimina los sistemas de protección, sólo avisa de lo que contiene para saber de que manera proceder a una revisión.

Saludos.

5
Corte suprema de Chile avala la entrega de todos los dominios registrados .cl al que lo pida

Noviembre de 2019, en Chile, un abogado conocido como Jorge Enrique Delgado Gunckel solicitó de manera legal al registrante de dominios .cl un archivo Excel con todos los registros realziados desde el inicio de los tiempos junto a sus respectivas fechas de expiración.


¿Qué sucedió?

El problema principal en Chile es que los registros de dominio .cl se encuentran centralizados por una única entidad registradora que es nic.cl el cual tiene la gran mayoría de todos los dominios .cl registrados hasta el momento.

Un correo llegó de manera masiva a todos los clientes de dominios .cl indicando la situación:

Citar
Notificamos que NIC Chile ha recibido una solicitud de información en el marco de la Ley de Acceso a la Información Pública (N° 20,285), presentada por el señor JORGE DELGADO, mediante la cual se nos pide entregar:
"Una lista de todos los nombres de dominio comprados a través del portal nic.cl y actualmente en vigor. No necesito ningún dato privado, solo nombres de dominio en formato Excel, con su fecha de vencimiento"

De conformidad con la Ley, usted tiene DERECHO A OPONERSE de manera fundada a la entrega de la información, en caso que usted estime que se afecta su seguridad, privacidad, derechos económicos o comerciales u otra causa que deberá exponer.

A pesar de que es posible declinar la solicitud, es necesario argumentar muy bien el hecho de porqué no entregar dicha información por cada dominio registrado, a demás, el que no respondiera de manera directa a nic.cl a traves del correo enviado se declararía que los dominios reclamanos pueden ser publicados en dicha lista.

El reclamo legal se puede observar en la siguiente dirección URL: You are not allowed to view links. Register or Login

Este abogado ya ha estado involucrado en la solicitud y revocación de otros dominios .cl, quitando así la propiedad del que lo registró a favor de si mismo: You are not allowed to view links. Register or Login a demás, también ha participado de otros procesos donde su misma información personal tales como dirección comercial y correo electrónico están publicados de manera totalmente abierta en documentos públicos como por ejemplo You are not allowed to view links. Register or Login

Otro gran problema es que nic.cl no tiene poder suficiente para rechazar dicha solicitud, desde la corte suprema se avaló la entrega de dicha información por lo que todos los dominios .cl quedarán expuestos no solo a la solicitud de este abogado sino también a todos los que en un futuro quieran solicitarlo quedando clara la vulnerabilidad de la privacidad de la información sobre dominios chilenos .cl hoy y en el futuro.


La oposición

Tal como se puede presentir utilizando el sentido común, solicitar todos los dominios registrados no es una situación normal o común y se puede prestar para la realización de fraudes, aparcamiento adelantado de dominios para su reventa, entre otras situaciones, afectando así el normal uso de internet y nombres dominios. Así lo dejó notar la ONG de Derechos digitales indicando los puntos claves legales sobre esta situación y el derecho a oponerse: You are not allowed to view links. Register or Login


¿Cuál es el estado actual de este caso?

Frente a la publicación en los medios sociales y la presión sobre esta situación, el día Viernes 29, abogado Jorge Enrique Delgado Gunckel ha declinado esta solicitud, reflejado en el siguiente comunicado por parte de nic.cl :

Citar
En relación a la solicitud de acceso a la información presentada por el señor JORGE DELGADO por la entrega del listado de los dominios inscritos en .CL, informamos lo siguiente:

Con esta fecha hemos tomado conocimiento de la declaración de DESISTIMIENTO de dicha petición de acceso por parte del interesado.

Expresamos a nuestra comunidad de clientes y usuarios nuestro agradecimiento por la acogida que ha tenido la información que les hemos entregado para hacer ejercicio de su derecho legal a oponerse a la entrega de la información.

Hacemos presente que deberemos enviar otras comunicaciones similares frente a nuevas peticiones de acceso al listado de dominios que se han presentado, por lo que solicitamos anticipadamente que nos disculpen por las molestias que se pueda ocasionar con los mensajes que deberemos volver a enviar.

Consecuentemente, NIC Chile desea reiterar que hará uso de todos los medios legales a su alcance para evitar esta y cualquiera otra entrega masiva de datos de los dominios inscritos.

Está claro que Chile se ha salvado por hoy de esta solicitud, pero queda claro que existen otras solicitudes del mismo calibre.

En mi opinión personal como experto en seguridad de la información recomiendo que para servicios críticos y de bajo perfil no se haga el uso de dominios .cl debido a que este tipo de situaciones escapan de las manos del registrador nic.cl y de la propia ICANN.


Fuentes:
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

6
Hacking / [Herramienta] Escaneador de subdominios
« en: Junio 23, 2019, 01:15:01 am »
Hola, como están todos, hoy he publicado una herramienta que había hecho hace ya un par de años, se trata de un escaneador de subdominios hecho en python3.

Acá va la URL: You are not allowed to view links. Register or Login

Cualquier sugerencia es bienvenida :)

saludos.

7
Seguridad web y en servidores / Mi WebShell
« en: Febrero 10, 2018, 10:41:20 pm »
WHK hShell

Hola, les comparto mi WebShell hecha en php: You are not allowed to view links. Register or Login

La había hecho hace muchos años pero comenzaré a publicar algunos de mis proyectos.

Algunas ventajas

  • El núcleo de todo el código está en el cliente y no en el servidor.
  • No deja rastros de la ejecución en el servidor ya que el código no se guarda.
  • No necesita actualizaciones del lado del servidor o intervenir el código en cada cambio.
  • El código es transportado y no almacenado previniendo la detección de los antivirus.
  • El transporte del código está ofuscado evadiendo la detección de los WAF.
  • El transporte de datos se realiza vía HTTP / POST previniendo dejar rastros en los logs de accesos del servidor WEB.
  • Utilización de payloads al azar en el transporte del código para la prevención de la detección de los WAF.
  • Soporta grandes transferencias de datos utilizando el transporte multipart/form-data sin almacenamiento del buffer en memoria por más de 1024 bytes del lado del cliente y del servidor.


¿Cómo se usa?

Igual que cualquier Shell WEB, subes el servidor.php al servidor y luego te conectas utilizando cliente.php desde el terminal así:
Código: You are not allowed to view links. Register or Login
php cliente.php

Comandos disponibles

Código: You are not allowed to view links. Register or Login
hShell:/> help
      Command             | Description
     ──────────────────────────────────────────────────────────────
      connect [url]       : Connect to Server WebShell script.
      help                : Show help of the client.
      cat                 : Show the content of remote file.
      tail [file path]    : Read the last lines of specific file.
      cd [directory]      : Navigate to specific remote directory.
      shell [command]     : Execute a simple command in remote server using the           current remote path. Detect automatic available method on the server. See the call-exec command. Alias of exec and system commands.
      force-shell [method] [command] : Force execute a simple command in remote server using an specific php method in current path. Alias of force-exec and force-system commands. Available methods: system, exec, shell_exec, passthru, popen, proc_open, explicit (using double quotes `).
      edit [editor command] [file path] : Edit remote file with specific local command edtor, example: edit vi /etc/shadow
      nano [file path]    : Edit remote file with nano editor on the local system.
      vi [file path]      : Edit remote file with vi editor on the local system.
      vim [file path]     : Edit remote file with vim editor on the local system.
      gedit [file path]   : Edit remote file with gedit editor on the local system.
      notepad [file path] : Edit remote file with notepad editor on the local system.
      sublime [file path] : Edit remote file with sublime text editor on the local system.
      uninstall           : Uninstall the current WebShell on the server.
      install [file path] : Install the WebShell on the specific remote parh.
      mysql [host] [port] [user] [password] : Start an interative MySQL shell connection on the remote server.
      mysqldump [host] [port] [user] [password] [local file] : Make a dump from remote database to local file .sql
      download [remote path] [local path] : Download a backup of file or directory from server to local path.
      upload [local path] [remote path] : Upload a local file or directory to remote directory (maintains the same permits)
      rm [path]           : Delete the specific file or directory path.
      mkdir [path]        : Make a directory on the server.
      phpinfo             : Show the full info of the php, libraries and enviroments of the server.
      id                  : Show the full info of the current user and group on the server.
      ls                  : List files and folders of the current path on the server. Alias of ll and dir commands.
      shellpath           : Show the current local path of the WebShell server.
      pwd                 : Show the current local path on the server.
      uname               : Show the full info of the System Operative of the server.
      exit                : Exit of the client but not remove the WebShell on the server. See uninstall.  Alias of quit command.

Algunos comandos no están disponibles porque están en construcción continua.

Saludos.

8
Hacking / [Aporte] Generador de diccionarios para fuerza bruta
« en: Enero 25, 2016, 03:01:25 pm »
Hola, hice un generador de diccionarios en python, lo pueden descargar desde acá:
You are not allowed to view links. Register or Login

Uso:

Código: You are not allowed to view links. Register or Login
[email protected]:~/$ python whk-dict-maker.py
- WHK Dictionary Maker 1.0, for pentesting purposes.
- Enter max longitude of word [4]        :
- Use letters?                [Y/n]      :
- Use lowercase?              [Y/n]      :
- Use uppercase?              [y/N]      :
- Use numbers?                [Y/n]      :
- Use special chars?          [y/N]      :
- Filename of dictionary      [dict.txt] :

  Summary                                             
  -----------------------------------------------------
- Max longitude of word                  : 4
- Total number of characters to use      : 36
- Total of words                         : 1,727,604
- Use letters                            : Yes
- Use lowercase letters                  : Yes
- Use uppercase letters                  : No
- Use numbers                            : Yes
- Use special chars                      : No
- Filename of dictionary                 : dict.txt
- File size estimated of dictionary      : 8.19MB
  -----------------------------------------------------
- You want to proceed?        [Y/n]      :
- End!                                                 

[email protected]:~/$ ls -lah
total 8,3M
drwxrwxr-x 3 whk whk 4,0K ene 24 20:24 .
drwxrwxr-x 4 whk whk 4,0K ene 24 20:09 ..
-rw-rw-r-- 1 whk whk 8,2M ene 24 20:24 dict.txt
-rw-rw-r-- 1 whk whk 7,0K ene 24 20:09 whk-dict-maker.py
[email protected]:~/$

Código:

Código: (python) You are not allowed to view links. Register or Login
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import math

class MainCLS:

    total_of_words      = 0
    total_of_characters = 0
    current             = 0
    user_longitude      = 0
    user_use_letters    = False
    user_use_lowercase  = False
    user_use_uppercase  = False
    user_use_numbers    = False
    user_use_specials   = False
    user_filename       = ''
    list_string         = ''


    def processWord(self, str):
        self.current = self.current + 1
        self.file_handler.write("%s\n" % str)
        sys.stdout.write("\r- Progress: %d/%d (%s)                " % (self.current, self.total_of_words, str))
        sys.stdout.flush()


    def loop(self, prefix, loops):
        if loops == 0:
            return
       
        last_list = []
        for id_letter in range(0, len(self.list_string)):
            final_str = prefix + self.list_string[id_letter]
            last_list.append(final_str)
            self.processWord(final_str)

        for id_array in range(0, len(last_list)):
            self.loop(last_list[id_array], loops - 1)


    def getInput(self, message, type_inp, default_value):
        inp = raw_input(message)
        inp = inp.strip()

        if inp == '':
            inp = default_value

        if type_inp == 'int':
            try:
                val = int(inp)
                if val > -1:
                    return val
                else:
                    print '- That\'s not an number. Try again.'
                    return self.getInput(message, type_inp, default_value)

            except ValueError:
                print '- That\'s not an number. Try again.'
                return self.getInput(message, type_inp, default_value)

        elif type_inp == 'bool':
            if inp.lower() == 'y':
                return True
            elif inp.lower() == 'n':
                return False
            else:
                print '- Please, respond with yes (y) or not (n). Try again.'
                return self.getInput(message, type_inp, default_value)

        elif type_inp == 'file':
            if os.path.isfile(inp):
                respond = self.getInput('- The file exists.You want to replace it? [y/N] : ', 'bool', 'n')
                if respond == False:
                    return self.getInput(message, type_inp, default_value)
                else:
                    return inp
            else:
                return inp

        else:
            return inp

    def printSummary(self):
        print '                                                       '
        print '  Summary                                              '
        print '  -----------------------------------------------------'
        print '- Max longitude of word                  : ' + '{0:,}'.format(self.user_max_longitude)
        print '- Total number of characters to use      : ' + '{0:,}'.format(len(self.list_string))
        print '- Total of words                         : ' + '{0:,}'.format(self.total_of_words)

        if self.user_use_letters == True:
            print '- Use letters                            : Yes'
            print '- Use lowercase letters                  : ' + ('Yes' if self.user_use_lowercase  else 'No')
            print '- Use uppercase letters                  : ' + ('Yes' if self.user_use_uppercase  else 'No')
        else:
            print '- Use letters                            : No'


        print '- Use numbers                            : ' + ('Yes' if self.user_use_numbers  else 'No')
        print '- Use special chars                      : ' + ('Yes' if self.user_use_specials else 'No')
        if os.path.isfile(self.user_filename):
            print '- Filename of dictionary                 : ' + self.user_filename + ' (override)'
        else:
            print '- Filename of dictionary                 : ' + self.user_filename

        print '- File size estimated of dictionary      : ' + self.convertSize(self.total_of_characters)
           
        print '  -----------------------------------------------------'
        return self.getInput('- You want to proceed?        [Y/n]      : ', 'bool', 'y')


    def convertSize(self, size, precision=2):
        # size = size + 0.0
        suffixes=['B','KB','MB','GB','TB','PB']
        suffixIndex = 0
        while size > 1024 and suffixIndex < 4:
            suffixIndex += 1 #increment the index of the suffix
            size = size/1024.0 #apply the division
        return ("%.*f%s" % (precision, size, suffixes[suffixIndex]))


    def __init__(self):

        print '- WHK Dictionary Maker 1.0, for pentesting purposes.';
        # self.user_min_longitude = self.getInput('- Enter min longitude of word [0]        : ', 'int',  '0')
        self.user_max_longitude = self.getInput('- Enter max longitude of word [4]        : ', 'int',  '4')

        self.user_use_letters   = self.getInput('- Use letters?                [Y/n]      : ', 'bool', 'y')
        if self.user_use_letters == True:
            self.user_use_lowercase   = self.getInput('- Use lowercase?              [Y/n]      : ', 'bool', 'y')
            self.user_use_uppercase   = self.getInput('- Use uppercase?              [y/N]      : ', 'bool', 'n')

        self.user_use_numbers   = self.getInput('- Use numbers?                [Y/n]      : ', 'bool', 'y')
        self.user_use_specials  = self.getInput('- Use special chars?          [y/N]      : ', 'bool', 'n')
        self.user_filename      = self.getInput('- Filename of dictionary      [dict.txt] : ', 'file', 'dict.txt')

        self.list_string = ''

        if self.user_use_letters == True:

            if self.user_use_lowercase == True:
                self.list_string = self.list_string + 'abcdefghijklmnopqrstuvwxyz'

            if self.user_use_uppercase == True:
                self.list_string = self.list_string + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

        if self.user_use_numbers == True:
            self.list_string = self.list_string + '0123456789'
       
        if self.user_use_specials == True:
            self.list_string = self.list_string + '\\/\'"@#$%&/()=?¿!¡+-*_.:,;'


        self.total_of_words      = 0
        self.total_of_characters = 0
        for n in range(0, self.user_max_longitude):
            total = (len(self.list_string)**(n + 1))
            self.total_of_words      = self.total_of_words + total
            # (word length * count words) + \n
            self.total_of_characters = self.total_of_characters + (total * (n + 1)) + total

        # Summary
        response = self.printSummary()
        if response == False:
            return

        # Load file
        if os.path.isfile(self.user_filename):
            os.remove(self.user_filename)
        self.file_handler = open(self.user_filename, 'w')

        # Execute all
        self.loop('', self.user_max_longitude)

        # End
        self.file_handler.close()
        print "\r                                                       \r- End!"
   
if __name__ == '__main__':
    mainCLS = MainCLS()

Enjoy.

9
Llegó WHK Conversor Version 4.0 !

Soy WHK de la comunidad de elhacker.net y vengo a compartir con toda la comunidad de Underc0de mi herramienta personal para transformar textos en múltiples algoritmos.

Descarga: You are not allowed to view links. Register or Login
Código fuente: You are not allowed to view links. Register or Login

Y lo mejor de todo es que la descarga es gratis y sin publicidad! :D

WHK Conversor es la herramienta mas completa que te ayudará a la transformación de textos y archivos a múltiples tipos de algoritmos.

Características:
· Es gratis y no tiene publicidad!, ya no debes preocuparte por un funcionamiento no deseado a cambio de una aplicación de excelencia.
· Envía tus resultados a través del botón "Compartir".
· Opción de autorecortar tus textos (ya no necesitas editarlos antes de procesarlos).
· Múltiples formatos de salida (prefijos, sufijos, entre otros).

Transformaciones soportadas:
· MD5 checksum of files
· SHA1 checksum of files
· Ascii a MD5
· Ascii a RC4
· Ascii a SHA
· Ascii a SHA256
· Ascii a SHA512
· Ascii a Decimal
· Decimal a Ascii
· Ascii a Octal
· Octal a Ascii
· Ascii a Hexadecimal
· Hexadecimal a Ascii
· Ascii a Binario
· Binario a Ascii
· Ascii a Base64
· Base64 a Ascii
· Ascii a Htmlentities
· Ascii a Urlencode
· Ascii a Inyección SQL en Dword
· Y mucho más!

Aun se esperan muchas mejoras adicionales como la opción de cifrar y descifrar mensajes sms, correos, mensajes de watsapp, más algoritmos, traducciones en mas idiomas y mucho más.

Algunas capturas de pantalla de la nueva versión:


10
Zona Webmaster / [CSS][MEDIO] LessCSS
« en: Julio 31, 2013, 03:16:17 pm »
Hoy por hoy está de moda programar en NodeJS, ¿porque?...

NodeJS es un lenguaje de programación Asyncrónica (en hilos o threads) orientado al JavaScript pero ejecutado desde el lado del servidor.

Este lenguaje de programación ha resultado tan revolucionario que han aparecido una cantidad enorme de productos libres que están asociados a este, desde hostings que duran solamente su ejecución en node como Heroku, bases de datos no SQL de alto rendimiento como MongoDB pero también han aparecido frameworks y softwares que nos hacen la vida mas fácil delo lado del navegador.

Uno de estos se llama LessCSS y se trata de una tecnología creada en JavaScript la cual interpreta hojas de estilo a lo puro SCSS (You are not allowed to view links. Register or Login) pero sin tener que ser compilado por el lado del servidor.

Por ejemplo, nos descargamos el archivo JavaScript de CSSLess y lo incluimos en nuestro proyecto, ahora creamos una hoja de estilo con extensión .less y tendremos todo el poder de una hoja CSS pero dinámica con opción de crear funciones, variables y modelos.

Código: (css) You are not allowed to view links. Register or Login
// LESS

.rounded-corners (@radius: 5px) {
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
  -ms-border-radius: @radius;
  -o-border-radius: @radius;
  border-radius: @radius;
}

#header {
  .rounded-corners;
}
#footer {
  .rounded-corners(10px);
}

Este código .less se puede compilar utilizando lessc desde el npm de nodeJS pero ahora podemos utilizarlo directamente desde el navegador utilizando esta librería en JavaScript.

El mismo código en CSS:

Código: (Css) You are not allowed to view links. Register or Login
/* Compiled CSS */

#header {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
}
#footer {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  -ms-border-radius: 10px;
  -o-border-radius: 10px;
  border-radius: 10px;
}

Si a alguien le interesa esta maravilla digital puede pasar por su web oficial: You are not allowed to view links. Register or Login

Saludos.

11
Hacking / Trolleando en Yahoo Query Languaje (YQL)
« en: Junio 27, 2013, 11:54:26 am »
Vamos a convertirnos en trolls por un par de minutos y vamos a darle un vistazo a la consola QL de Yahoo la cual permite realizar multiples consultas a distintas apis de Yahoo pero a modo de SQL.

Ejemplo de una simple query:
You are not allowed to view links. Register or Login

Esto nos devolverá todas las tablas (servicios, apis).

Ahora probaremos utilizar la api HTML de la siguiente manera:
You are not allowed to view links. Register or Login

Esto nos devolverá el contenido HTML parseado en XML.

Ahora que ya entendimos un poco sobre el funcionamiento de YQL vamos a trollear un poco:
You are not allowed to view links. Register or Login

Nos retornará:
Código: (xml) You are not allowed to view links. Register or Login
<url ... http-status-code="502" http-status-message="Network is unreachable">http://192.168.1.1/</url>
Pero si intentamos entrar a la subred local 0.1: You are not allowed to view links. Register or Login
Código: (xml) You are not allowed to view links. Register or Login
<url ... http-status-code="403" http-status-message="Forbidden">http://192.168.0.1/</url>
Esto nos demuestra una cosa: que la api de peticiones HTTP no filtra ips ni dominios :D asi que podemos pasearnos por toda la red local si queremos ya que al intentar entrar a la puerta predeterminada de enlace (router o switch o lo que sea) nos arrojó un error 403 que probablemente haya retornado el panel de administración del router ya que cuando probamos con otras ips locales simplemente nos dice que es imposible conectarse (error 502 Cannot find server).

Probamos otras urls sensibles:
You are not allowed to view links. Register or Login : 502 - Cannot find server
You are not allowed to view links. Register or Login : 200 Empty
You are not allowed to view links. Register or Login : 403 (necesita autorización, ¿como?: buena pregunta)
You are not allowed to view links. Register or Login : 502 - Network is unreachable
You are not allowed to view links. Register or Login : 502 - Cannot find server
You are not allowed to view links. Register or Login : 400 - Bad Request
You are not allowed to view links. Register or Login : 502 - Cannot find server
You are not allowed to view links. Register or Login : 400 - Bad Request
You are not allowed to view links. Register or Login : 502 - Cannot find server
You are not allowed to view links. Register or Login : Timed out waiting for operation - failing node: memcache4.yql.bf1.yahoo.com/68.142.224.71:11211
You are not allowed to view links. Register or Login : 502 - Connection refused
You are not allowed to view links. Register or Login : 404 - Not Found Tenemos acceso a un servidor WEB local!
You are not allowed to view links. Register or Login : 404 - Not Found on Accelerator Tenemos acceso a un servidor WEB local!
You are not allowed to view links. Register or Login : 404 - Not Found on Accelerator Tenemos acceso a un servidor WEB local!
You are not allowed to view links. Register or Login : 400 - Bad Request
You are not allowed to view links. Register or Login : 400 - Bad Request

Información útil para comenzar a husmear dentro de los servidores locales de yahoo :)

Saludos.

12
Front-end / [JQuery][HERRAMIENTA] Sandbox para jQuery (jsfiddle)
« en: Junio 18, 2013, 10:19:29 am »
Para todos aquellos que deseen realizar pruebas con jquery existe un sitio WEB donde puedes crear tu código y ejecutarlo en linea con la versión de jQuery que desees:

You are not allowed to view links. Register or Login

Primero creas tu código, luego le das en run, si queda algo mal lo modificas y vuelves a presionar run, cuando quede listo presionas en "save" y te dará un enlace para que lo puedas publicar.

Espero que les sirva. Saludos.

13
Hacking / Evadir el inspecionador de Internet Explorer
« en: Junio 11, 2013, 12:08:19 pm »
Revisando las funcionalidades de internet explorer 10 encontre que el inspeccionador no trabaja adecuadamente y es posible crear un codigo para prevenir que modifiquen el DOM de tu pagina.

En si este es un bug que encontré, me hubiera gustado reportarlo pero me pasearon por un sin fin de formularios hasta llegar a una sección donde solo hablan ingles y nadie toma en cuenta ningun comentario. Asi que pensé que si lo publicaba en ese lugar nadie ganaba, ni microsoft, ni yo ni los usuarios finales, asi que decidí publicarlo acá, mas probecho lo sacarán ustedes.

El bug está cuando escribes una etiqueta HTML desde javascript, al hacerlo se hace totalmente imposible editarlo desde el inspeccionador de elementos, por eso podemos crear un código muy simple para modificar el body por completo agregandole unicamente un espacio en blanco al final para que sea imposible su edición por parte de internet explorer 10:

Código: (html5) You are not allowed to view links. Register or Login
<html>
<head>
<script type="text/javascript">
function b(){
document.body.innerHTML += ' ';
}
</script>
</head>
<body onload="b();">a</body>
</html>

Si lo prueban verán que donde dice texto del nodo es imposible modificar su valor con la letra "a", si comentan el onload verán que si se puede editar.
También es posible modificar el head, de esa manera los usuarios de internet explorer no podrán modificar sus documentos.

Saludos.

14
Back-end / Utilizando RAW Sockets en PHP
« en: Junio 03, 2013, 11:13:25 am »
La gran ventaja de utilizar sockets v/s raw sockets es que puedes construir paquetes personalizados adaptados al protocolo que desees, por ejemplo puedes realizar no solo conecciones TCP o UDP sino también ICMP y PUP.

Recordemos que en todos los sistemas menos Windows necesitamos permisos de root por asuntos de seguridad.

Ejemplo de un paquete ICMP haciendo Ping:
Código: (php) You are not allowed to view links. Register or Login
<?php
/* Paquete ICMP */
$package "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
$socket socket_create(AF_INETSOCK_RAW1);
socket_set_option($socketSOL_SOCKETSO_RCVTIMEO, array('sec' => $timeout'usec' => 0));
socket_connect($socket'173.194.42.63'null);
$ts microtime(true);
socket_send($socket$packagestrLen($package), 0);
if (
socket_read($socket255))
$demora microtime(true) - $ts;
else
$demora false;
socket_close($socket);

var_dump($demora);

También podemos crear nuestros propios Cliente/Servidor basados en protocolos creados por nosotros y evadir firewalls, cifrar información, enviar datos extras en las cabeceras, etc, entre otras cosas.


15
Back-end / Robot interpretador de php en el IRC de Underc0de
« en: Abril 26, 2013, 04:23:50 pm »
Hoy ingresé al irc de underc0de y pensé que nunca habia hecho un robot para irc a pesar de lo facil que era el protocolo de comunicación, asi que me decidí a hacer uno :) e interpreta código php :D de cualquier persona que le escriba:

[php] codigo_aca();

Por ejemplo
[php] echo 'hola';

Citar
[15:44] <@ANTRAX> [php] $a="C"; $b="X"; if ($a<$b) { echo $a."is smaller than".$b; }
[15:44] <Robot_PHP> Interpretando ...
[15:45] <Robot_PHP> cis smaller thanx
[15:45] <@ANTRAX> nice!

Acá les dejo el código fuente, está hecho en php :)
Pueden modificarlo para crear sus propias respuestas automatizadas.

Enjoy.

Código: (php) You are not allowed to view links. Register or Login
<plaintext><?php
set_time_limit
(0);

$nick 'Robot_PHP';
$canal '#Underc0de';
$isLogged false;

$fp fsockopen('irc.freenode.net'8000);

$buffer '';

while (!
feof($fp)){
$buffer trim((string)fgets($fp2048));

if((!$isLogged) and (substr($buffer01) === ':')){
$isLogged true;
fwrite($fp'USER '.$nick.' '.$nick.' '.$nick.' '.$nick."\n");
fwrite($fp'NICK '.$nick."\n");
fwrite($fp'JOIN '.$canal."\n");

fwrite($fp'PRIVMSG '.$canal.' :.                                 .'."\n");
fwrite($fp'PRIVMSG '.$canal.' :            ,-,,-,   __             '."\n");
fwrite($fp'PRIVMSG '.$canal.' :     ______/     /_,\'  |           '."\n");
fwrite($fp'PRIVMSG '.$canal.' :     \______WHK_______/            '."\n");
fwrite($fp'PRIVMSG '.$canal.' :          |\) (/ |                 '."\n");
fwrite($fp'PRIVMSG '.$canal.' :       (  | oo   |                 '."\n");
fwrite($fp'PRIVMSG '.$canal.' :        ) `|  |--\'                 '."\n");
fwrite($fp'PRIVMSG '.$canal.' :       (___^^^^|                   '."\n");
fwrite($fp'PRIVMSG '.$canal.' :          (____\'                   '."\n");
fwrite($fp'PRIVMSG '.$canal.' :.                                 .'."\n");
  
fwrite($fp'PRIVMSG '.$canal.' :Hola soy el robot de WHK, tengo la capacidad de interpretar código php :)'."\n");
fwrite($fp'PRIVMSG '.$canal.' :ejemplo: [php] micodigo();'."\n");
fwrite($fp'PRIVMSG '.$canal.' :Recuerda escribir todo en una sola linea.'."\n");
}

$f explode(strtolower(' PRIVMSG '.$canal.' :'), strtolower($buffer));
if(count($f) === 2){
$msg trim($f[1]);

if(substr($msg06) === '[php] '){
fwrite($fp'PRIVMSG '.$canal.' :Interpretando ...'."\n");

$code file_get_contents('http://codepad.org/'falsestream_context_create(array(
'http' =>
array(
'method'  => 'POST',
'header'  => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query(
array(
'lang' => 'PHP',
'run' => 'True',
'submit' => 'Submit',
'code' => '<'.'?php '.substr($msg6)
)
)
)
)));

$code explode('<a name="output">'$code);
$code explode('<td width="100%" style="vertical-align: top">'$code[1]);
$code explode('<div class="highlight">'$code[1]);
$code explode('<pre>'$code[1]);
$code explode('</pre>'$code[1]);
$code str_replace(array("\n""\r""\b""\x00"), ' 'trim(htmlspecialchars_decode(strip_tags($code[0]), ENT_QUOTES)));
fwrite($fp'PRIVMSG '.$canal.' :'.$code."\n");
}

unset($msg);
}
unset($f);

// echo $buffer."\n";

/* PING */
if(strtolower(substr($buffer06)) === 'PING :'){
$host explode(':'$buffer);
$host trim($host[1]);
fwrite($fp'PONG :'.$host."\n");
unset($host);
}

}
fclose($fp);

16
Underc0de / Necesito un tema de este foro por favor
« en: Diciembre 27, 2012, 09:57:52 am »
Hola como estan todos :)
soy parte de la comunidad de whk security y cada cierta cantidad de tiempo ponemos en la parte inferior un tema destacado de alguna comunidad, la semana pasada le tocó a dragonjar y su entrevista con captain crunch y ahora quiero poner un tema destacado de esta comunidad.

Lo que necesito es un buen tema, un tema destacado que valga la pena poner en portada y que sea relativamente nuevo. Tendrán alguno por ahi para que podamos comenzar con el diseño.

me gusta que las personas se relacionen los unos a los otros y que de mi comunidad puedan venir por estos lados a aprender tambien, encuentro que es un buen lugar.

Saludos.

17
Presentaciones y cumpleaños / Buenas a todos :)
« en: Diciembre 17, 2012, 12:20:16 pm »
Hola, soy WHK y espero poder ayudarlos y compartir entre todos los temas que mas nos apasionan y sin limites!!!!! :D :D :D

Páginas: [1]