lunes, 5 de diciembre de 2016

lo principal para desproteger un Excel con contraseña PU

Desde que soy consultor de seguridad una de las herramientas que más utilizo de mi arsenal de hacking es... Excel ... y cómo este blog va de lo que va... pues vamos a mostraros un pequeño "how-to" para romper las principales protecciones de nuestras hojas de cálculo favoritas.

Cifrar con contraseña

Algo muy común es proteger el acceso total al fichero con una contraseña:



Lo que hace Excel por debajo para proteger la hoja de cálculo de esta manera es cifrar el archivo con AES y una clave de 128 bits (ojo porque hay un pequeño truquito para aumentarla a 256 bits modificando el registro). Para romperlo, lo mejor en este caso es utilizar un ataque de diccionario con John the Ripper o cualquier otra herramienta que gustéis.... 

Primero obtenemos el hash de la contraseña del documento con office2john incluido en la versión jumbo 1.7.9 compilada por Robert Harris:

D:\Hacking\john-1.7.9-jumbo-7-Win-32\run>office2john.exe /cygdrive/d/Libro1.xlsx  > hash_excel.txt

/cygdrive/d/Libro1.xlsx:$office$*2010*100000*128*16*507e4f65f0c73a48077b22ce5473ccec*50946a93488c091f536b4063eb3ae667*799528a214fb108b73f91ef5806222ebf9049d87e963238ac5a1acf82f9eb9db
 
Ahora un poquito de benchmarking para comprobar la capacidad de mi patata de PC: 
D:\Hacking\john-1.7.9-jumbo-7-Win-32\run>john --test --format=office
Benchmarking: Office 2007/2010 SHA-1/AES [32/32]... DONE
Raw:    30.1 c/s real, 30.3 c/s virtual
 
Después iniciamos el ataque de fuerza bruta con el diccionario elegido: 
D:\Hacking\john-1.7.9-jumbo-7-Win-32\run>john -w:dicio.txt hash_excel.txt
Loaded 1 password hash (Office 2007/2010 SHA-1/AES [32/32])
123456           (/cygdrive/d/Libro1.xlsx)
guesses: 1  time: 0:00:00:00 DONE (Fri Mar 28 00:27:47 2014)  c/s: 14.83  trying
: 123456
Use the "--show" option to display all of the cracked passwords reliably
  
Y en menos de 5 segundos tenemos acceso al mismo, gracias en parte a que el dueño del documento utilizó una de las peores contraseñas posibles

Finalmente guardamos el fichero como Libro2.xlsm, pero antes en el desplegable 'Herramientas' seleccionamos 'Opciones generales' y eliminamos la contraseña de apertura:

  

Ojo que office2john sólo funciona con versiones 2007-2010, no con las versiones viejas que usan RC4 (office 97, 2000, XP, 2003). Por lo que tendrás que utilizar por ejemplo Free Password Recovery Softwarehashcat u otra herramienta.

Bloquear el proyecto VBA

Otra opción es establecer una contraseña para ver las propiedades o incluso visualizar el proyecto VBA (las macros). 




Sin embargo esta *irrisoria* protección es para el UI y básicamente añade unas pocas líneas al form:

CMG="0604AB00EA009E049E049A089A08"
DPB="C6B41DD07A30374D374DC8B3384DDC63D35C51C89D809616E325E4129493EEFDBC48EE77D47B79"
GC="6664CAA0CBE07BE17BE17B"

Estos campos corresponden a ProjectProtectionState, ProjectPassword y ProjectVisibilityState respectivamente. Por lo que si borramos esos campos (reemplazando el texto con espacios en blanco) Excel no nos pedirá una contraseña para ver el código del proyecto...

Para ello descomprimimos el fichero Libro2.xlsm como si de un zip se trataba, editamos el fichero xl\vbaProject.bin con notepad++ (u otro editor hexadecimal) y cambiamos DPB= por DBx=.

Luego guardamos el archivo con la misma extensión .BIN y agregamos al zip sustituyendo el mismo archivo.

Al abrir de nuevo el fichero Excel nos dirá que contiene una clave 'DPx' no válida:


Simplemente continuamos cargando el proyecto, ignoramos el error, asignamos una nueva contraseña en las propiedades de VBAProject y salvamos...

Al volver a abrirlo tendremos acceso al código de la macro:


Proteger hoja actual y estructura del libro

Otra opción que normalmente se utiliza es la de proteger la hoja actual y la estructura del libro para que otros usuarios no realicen cambios:


Sin embargo, quitar esta protección también es bastante trivial. Simplemente añade al proyecto VBA la siguiente macro: 


Sub PasswordBreaker()
    'Breaks worksheet password protection.
    Dim i As Integer, j As Integer, k As Integer
    Dim l As Integer, m As Integer, n As Integer
    Dim i1 As Integer, i2 As Integer, i3 As Integer
    Dim i4 As Integer, i5 As Integer, i6 As Integer
    On Error Resume Next
    For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
    For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
    For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
    For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
        Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
        Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
    If ActiveSheet.ProtectContents = False Then
        MsgBox "One usable password is " & Chr(i) & Chr(j) & _
            Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
            Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
         Exit Sub
    End If
    Next: Next: Next: Next: Next: Next
    Next: Next: Next: Next: Next: Next
End Sub

Ejecutalá y se mostrará la clave de respaldo que ocupa internamente el código de Excel en dicha hoja:   

A partir de ahora ya podremos editar la hoja excel e incluso desproteger el fichero:


Fuente: 
http://www.hackplayers.com/2014/03/como-desproteger-un-excel-con-password.html