viernes, 26 de septiembre de 2014

Shellshock y los User-Agent

Alguna vez ya os he hablado de los user-agent y de la posibilidad de engañar al servidor web indicándole que se está utilizando un cliente web distinto al real.

¿Qué más se puede hacer?

Bueno. Se puede explotar la vulnerabilidad que ha recibido el nombre de shellshock.

Esta se encuentra en la conocida shell: bash.

Así es como funciona: defines una variable que contendrá una función anónima (no me acordaba que se llamaban así) y además, cuando la cierras, más código. El problema está en que al llamar a dicha variable, no detecta el fin de la función y continua ejecutando el resto del código.

Desde el blog de @jordi_prats, Systemadmin, nos cuenta cómo se puede hacer. (Escrita la URL a mano).

También hay otro ejemplo desde el blog de Eleven Paths. Aquí se puede ver más el alcance de esta vulnerabilidad.

miércoles, 10 de septiembre de 2014

Leak de 5.000.000 cuentas gmail

Esta semana parece que tengo mucho que contar.

A lo largo de la tarde/noche he podido saber que se ha producido un filtrado de prácticamente cinco millones de cuentas de correo de gmail. ¡5.000.000! ¡5*10^6!

Según se comentaba en las listas de correo de la Rooted y NoConName y similares, se tratan de cuentas antiguas. En ForoSpyware comentan que tienen más de cinco años. Y así lo confirman desde las listas, que algunos reconocen contraseñas que hacia casi 10 años que no utilizaban.

De todas formas, localizando la lista, que aquí no se va a publicar, se podrá saber si esta vez nos han publicado los datos, o no. Por supuesto, por nada del mundo introducir la contraseña en sitios que te indiquen si estás en el leak.

Cambiar la hora en Windows con NTP por consola: PowerShell

¡¡Hola!!

Ultimamente estoy viendo que la hora de mi equipo se va retrasando poco a poco. Además, me doy cuenta cuando ya lleva unas cuantas horas de retraso. Y me da que es cuestión de la pila de la BIOS, cosa que me da una pereza enorme cambiarla.

Ya sé que desde la interfaz gráfica de Windows se puede cambiar la hora, e, incluso, forzar a que se sincronice contra un servidor NTP para que esté perfecta.

Cambiar la hora en Windows utilizando NTP - GUI
Cambiar la hora en Windows utilizando NTP - GUI
Ahora bien, quería ir más allá. Quería conseguir cambiar la hora utilizando powershell y tirando, a su vez, de un servidor NTP.

En mi búsqueda localicé algún enlace que otro que permitía obtener un montón de datos de comparativas de la hora del sistema contra el servidor indicado. Es el cmlet llamado Get-NtpTime. Una vez importado, podríamos obtener los datos que se muestran por pantalla:

Cmlet Get-NtpTime, por Chris J. Warwick, @cjwarwickps
Aún así, le faltaba algo muy, muy importante. ¿De qué me sirve ver todos estos datos si no puedo ponerle al sistema la hora que me ha indicado el servidor? Por lo tanto, busqué la forma de cambiarla. ¿Cómo lo he hecho? Fusilando el script para adecuarlo a mis necesidades. Algunos datos no sé para qué los quiere, o si supondrán una gran diferencia. Como por ejemplo, el tiempo que tarda en conectarse y desconectarse utiliza dos variables de tiempo inicial y final. 

Por lo tanto, después de hacer varias pruebas, algunas con más éxito que otras, ya tengo un cmlet que permite cambiarte la hora utilizando la que te devuelve el servidor NTP pasado como parámetro. El script se llama Set-NtpTimeV2 (por las distintas pruebas y esas cosas), y tiene un resultado como el siguiente:

Cmlet Set-NtpTimeV2, por Agux

Y el código fuente, tal cual lo he dejado, eliminando las cosas que no hacían falta del original y poniendo las necesarias (las que menos, la verdad):

Function Set-NtpTimeV2 {
#Parametros
[CmdletBinding()]
Param (
[String]$Server = 'pool.ntp.org',
[Int]$MaxOffset = 10000     # (Milliseconds) Throw if network time offset is larger
)
# Construct a 48-byte client NTP time packet to send to the specified server
# (Request Header: [00=No Leap Warning; 011=Version 3; 011=Client Mode]; 00011011 = 0x1B)
[Byte[]]$NtpData = ,0 * 48
$NtpData[0] = 0x1B    # NTP Request header in first byte
# NTP Transaction -------------------------------------------------------
$Socket = New-Object Net.Sockets.Socket([Net.Sockets.AddressFamily]::InterNetwork,
[Net.Sockets.SocketType]::Dgram,
[Net.Sockets.ProtocolType]::Udp)
Try {
$Socket.Connect($Server,123)
}
Catch {
Write-Error $_
Throw "Failed to connect to server $Server"
}
$t1 = Get-Date    # Start of transaction... the clock is ticking...
Try {
[Void]$Socket.Send($NtpData)
[Void]$Socket.Receive($NtpData)  
}
Catch {
Write-Error $_
Throw "Failed to communicate with server $Server"
}
$t4 = Get-Date    # End of transaction time
$Socket.Close()
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
# Check the Leap Indicator (LI) flag for an alarm condition - extract the flag
# from the first byte in the packet by masking and shifting (dividing)
$LI = ($NtpData[0] -band 0xC0)/64    # Leap Second indicator
If ($LI -eq 3) {
Throw 'Alarm condition from server (clock not synchronized)'
}
# We now have the 64-bit NTP times, t3 is in the last 8 bytes of the received data.
# The NTP time is the number of seconds since 1/1/1900 and is split into an 
# integer part (top 32 bits) and a fractional part, multipled by 2^32, in the 
# bottom 32 bits.
# Convert Integer and Fractional parts of the (64-bit) t3 NTP time from the byte array
# $IntPart=0;  Foreach ($Byte in $NtpData[40..43]) {$IntPart  = $IntPart  * 256 + $Byte} 
# $FracPart=0; Foreach ($Byte in $NtpData[44..47]) {$FracPart = $FracPart * 256 + $Byte} 
$IntPart = [BitConverter]::ToUInt32($NtpData[43..40],0)
$FracPart = [BitConverter]::ToUInt32($NtpData[47..44],0)
# Convert to Millseconds (convert fractional part by dividing value by 2^32)
$t3ms = $IntPart * 1000 + ($FracPart * 1000 / 0x100000000)
# Make sure the result looks sane...
If ([Math]::Abs($Offset) -gt $MaxOffset) {
# Network time is too different from server time
Throw "Network time offset exceeds maximum ($($MaxOffset)ms)"
}
# Create Output object and return
echo "Cogiendo hora y fecha presente en el equipo..."
$currentDate = Get-Date
echo "La fecha y hora actual del sistema es: $currentDate"
echo "Obteniedo la fecha y hora real del servidor NTP..."
echo "Configurando la fecha y hora real..."
$nuevaFechaHora=New-Object DateTime(1900,1,1,0,0,0,[DateTimeKind]::Utc)   
$nuevaFechaHora = $nuevaFechaHora.AddMilliseconds($t3ms).ToLocalTime()
$nuevaFecha = Set-Date -Date $nuevaFechaHora
echo "La hora y fecha configurada es... $nuevaFecha"
}

Segunda Edición: Héroes Digitales

¡¡Hola a todos!!

Resulta que hace poco, Roberto aka @1gbdeinfo, nos comunicó que participaba en la segunda edición de Héroes Digitales, llevada a cabo por Eset. Y que le votásemos. ¡¡Y resulta que yo también me he apuntado!! No voy a negar que lo dudé un instante. Nos pedía una votación para luego, coger, y apuntarme, quitándole votos (ya que nuestros blogs son similares en tipo de contenido).

De hecho, prácticamente hemos puesto la misma descripción de nuestros blogs.

Por lo tanto, por favooor... ¡Votadme! Además, dicen que a partir del día 15, se quedarán sólo las 10 candidaturas más votadas. ¡Y he perdido mucho tiempo! Por lo tanto, ya sabéis: en el enlace podréis votaaaar por mí, pero, como dicen en las bases, no se podrá votar por más de una candidatura por sección.

lunes, 8 de septiembre de 2014

¡Navajas Negras están ya muy cerca!

¡¡Hola a todos!!

Hacía tiempo que no sacaba tiempo para escribir. Además, que mucho material para poder mostrar no es que tuviera, pero bueno. Ya os iré enseñando más cosas que recientemente he conseguido hacer.

Simplemente anunciar que hace dos meses, cuando aún estaban abiertos los CFP (Call For Papers), postulé para poder enseñar alguna que otra idea que tenía. Alguno me ha dicho que se lo imaginaba, y no iba mal encaminado: Firmar las llamadas. Realmente la grabación de las mismas. Desde aquí, quería dar mi enhorabuena a los seleccionados y a la organización por el magnífico trabajo realizado.

Poco más os puedo contar. Espero que hayáis pasado un buen verano. Pronto seguiré escribiendo cosas.

jueves, 7 de agosto de 2014

Imágenes transparentes en RSS

Es curioso lo que acabo de ver mientras estaba leyendo los feeds que tengo (muy) retrasados.

La cosa es que en Flu nos estaban hablando de spoofing de e-mails y las imágenes que se mostraban tenían un aspecto muy raro. Sólo se veían letras verdes a modo de leyenda.

Sin embargo, al hacer un tap (un sólo "click", pero en el móvil) para mostrarla mejor y poderla ampliar... Voila. La imagen se mostraba correctamente.

Sin más pruebas, da la sensación de que se esta usando algún tipo de transparencia. ¿Qué os parece a vosotros?

Como desde el móvil no hay tanto control, no tengo ni idea de cómo mostrará las capturas. Pero ahí las pongo y ya se verá si tocará editar.

lunes, 14 de julio de 2014

Cómo saltarse la contraseña del router Comtrend

Recordemos el típico disclaimer: Hacer este tipo de cosas sin permiso del usuario propietario es un delito muy grave. Yo no me hago responsable de los perjuicios que se puedan producir al seguir estas instrucciones. Hazlo bajo tu responsabilidad.

Como todos sabemos, cuando contratamos un ADSL o pon aquí la conexión a internet que proceda nos traen un router que lo tienen configurado de forma muy genérica. Entre otras cosas, el acceso al mismo suele estar restringido por unas credenciales por defecto que suelen pasar por los pares usuario/contraseña como:


  • admin/admin
  • 1234/1234
  • 123456/123456
  • admin/1234
  • 1234/admin
  • /1234
  • /123456
  • /admin
  • admin/
  • 1234/
  • etc,
  • etc,
  • etc...
Eso siempre y cuando se tenga acceso a la interfaz web directamente desde la red donde éste se encuentra. Porque si se trata como el de telefónica, tienes que haber quitado la configuración desde su portal Aleandra.

Resulta que he llegado a un router que estaba en esa situación: se quitó la configuración de ese portal para poderlo administrar desde dentro de la red. Sobretodo porque es más versátil así que no el portal que tiene muchas cosas capadas. 

El problema está en que se ha perdido la contraseña. Se sabe más o menos gran parte de la misma, pero aún así, al principio no ha habido forma de entrar. Y ha hecho falta buscar la manera de intentar saltarla de alguna forma. 


En una de las búsquedas, he encontrado este ejemplo para poderlo explotar. Es la base de datos de exploits Exploit-DB. Ya os hablé de ella cuando estuve haciendo la formación de Metasploit en la ahora desaparecida Informática 64. Dicho ejemplo, al principio, no he pillado del todo qué querían decir. Vamos a ver.

Como directamente es un texto con un ejemplo, no me parecía que pudiera ser lanzado. He querido probar a tirar de telnet contra el servidor web, pero se me cerraba la sesión (posiblemente por la solicitud de autenticación). Eso sí, me ha dado una pista:

http://IP_ROUTER/password.cgi

He podido acceder a esta URL y me ha dicho que el usuario que creía que tenía no era tal. En vez de admin era 1234.

Con esto, y una de las pocas combinaciones que tenía que aplicar, después de varios intentos he conseguido entrar... sin apuntar cuál de ellas eran. ¡Genial! ¡Ahora tengo acceso durante este rato...! Pero cuando se termine la sesión, el usuario volverá a estar perdido. Por lo que he vuelto a mirar el eploit. Y he caído en la cuenta.

En el momento en el que tienes acceso a la página password.cgi, te muestran en claro, como mínimo, tres contraseñas. Entre otras,

pwdAdmin = 'passwordPerdida';
pwdSupport = 'password02';
pwdUser = 'password03';

Además, ahora mismo, y mientras que lo estoy escribiendo, estoy viendo otra posibilidad: utilizar algún tipo de tamper data, firebug o cualquiera de estos que permita cambiar el código fuente al vuelo, de tal forma que pasaría el filtro de la igualdad entre la contraseña actual del sistema y la solicitada para corroborar que se puede hacer el cambio.

Total, que ya hemos recuperado el control sobre el router.

Me pregunto si qué otros routers entregados tienen algo parecido. ¿Alguien se apunta al carro?