Статья CTF "Bsides London 2017"

DefWolf

DefWolf

Mod. Cryptography
Red Team
24.10.2017
313
781
Привет, codeby !
Первоисточник:
Перевод: выполнен от команды Codeby
Примечание от команды форума:
  • Статья является переводом.
Привет! Сегодня мы рассмотрим еще один CTF, который проходил в Лондоне на конференции Bsides London в 2017. Главной задачей является получение root привилегий на ВМ.
Виртуальную машину можно .

Начнем с того, что нам нужно узнать IP виртуальной машины (здесь я использую 192.168.0.7, но вам нужно указать свой).
Запустим сканер nmap, чтобы найти открытые порты и команду –sV, чтобы определить версии сервисов установленных на портах.

nmap -p- -sV 192.168.0.7

1572355463457.png


Мы видим, что на машине открыт 80 порт, на котором находится наш сервер.
Откроем в браузере 192.168.0.7

1572355512075.png


На главной странице мы находим подсказку и с помощью программы dirb и команды raft-large-directory перечесляем директории и узнаем дополнительную информации о них.

dirb http://192.168.0.7 raft-large-directories

1572355608757.png


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

dirb http://192.168.0.7 –w

1572355714604.png


dirb http://192.168.0.7/cgi-bin/ -N 403

1572355783685.png


Одна из ссылок, которые нашла программа содержит страницу идентификации.

1572355819500.png


Давайте посмотрим код страницы и попытаемся найти шестнадцатеричную строку.

1572355855899.png


1572355879780.png


После того как мы ее нашли, приведем ее в читабельный вид с помощью xxd. После дешифровки мы обнаруживаем, что строка base64 начинается с Y, и находим еще одну шестнадцатеричную строку внутри флага. Расшифровав ее получаем строку для входа на страницу идентификации.

1572355941589.png


После того как мы залогинились, мы видим, что полезной информации здесь нет и возвращаемся к результатам сканирования программы dirb.

Переходя по ссылкам, мы видим пустые страницы, но если посмотрим исходный код, то увидим, что некоторые страницы содержат XML (xml based page) и могут быть уязвимыми для XML инъекции (XML Entity Injection(XXE)).

1572356009084.png


1572356025443.png


Воспользуемся программой burpsuite для перехвата запросов страницы, после чего мы воспользуемся XXE уязвимостью для выполнения системных команд.

1572356064550.png


Видим, что все файлы кроме /etc/passwd зашифрованы с помощью base64, чтобы привести их в читабельный вид нам будет нужен php base64. Далее мы переходим к файлу apache.conf, чтобы получить больше информации о системе.

1572356120295.png


Дешифруем строку base64 и сохраняем ее в файле ‘bsides-apache.conf’.

1572356158100.png


Открываем файл и получаем нужную нам информацию о конфигурации.

1572356185575.png


Снова используем ХХЕ уязвимость для получения оставшихся файлов конфигурации.

1572356211234.png


Дешифруем строку из base64 и сохраняем ее как bsides-default.conf.

1572356244902.png


Теперь посмотрим файлы конфигурации.

1572356273467.png


Здесь мы также используем ХХЕ уязвимость, чтобы получить файлы для CGI.

1572356302166.png


Дешифруем строку в кодировке base64 и сохраняем ее как bsides-cgi.conf.

1572356355069.png


Теперь открыв конфигурационный файл cgi мы видим, где находится загрузочный файл.

1572356375840.png


Чтобы узнать больше информации скачаем загрузочный файл, используя всю ту же XXE.

1572356395401.png


Дешифруем строку в кодировке base64 и сохраняем ее как bsides-load.

1572356414699.png


Проверяем тип файла и обнаруживаем, что он является исполняемым.

file bsides-load

1572356452939.png


Узнаем, что он сжат при помощи UPX.

strings bsides-load

1572356485924.png


Распаковываем файл.

upx -d bsides-load

1572356517542.png


И видим, что он читает и расшифровывает файл используя шестнадцатеричное значение «WannaCry?».

1572356540330.png


С помощью radare реверсим файл и обнаруживаем, что он может запускать файлы зашифрованные с тем же значением .

1572356573594.png


Теперь создадим шестнадцатеричное значение «WannaCry?». Мы используем od, чтобы преобразовать значение и sed, чтобы удалить пробелы.

echo -n "WannaCry?" | od -A n -t x1 |sed 's/ *//g’

1572356607083.png


Сначала мы создаем реверс шелл, чтобы выполнять системные команды.

1572356624992.png


Теперь создаем 32-битный файл, используя gcc, и преобразуем его в двоичный файл с использованием шестнадцатеричного значения «WannaCry?» Результат сканирования dirb показал нам директорию,в которой хранятся файлы после загрузки, загружаем файл в эту директорию и не забываем, что файл после загрузки меняет название.
Код:
gcc -m32 -shared -fPIC -o exploit.so exploit.c
openssl aes-128-cbc -K 'key’ -iv 0 -e -in exploit.so -out exploit.bin
1572356693500.png


Копируем новое имя и используем загрузочный файл для запуска нашего шелла.

1572356729059.png


Ставим netcat в режим прослушки и получаем реверс шелл.

1572356762798.png


Теперь нам надо найти файлы с suid bit. Один из таких файлов находится в директории /home/level1 и носит название shisu.

find / -perm -4000 2>/dev/null

1572356802024.png


Переходим в директорию где лежит файл и видим, что он является исполняемым.

1572356824691.png


Когда мы запускаем файл, то выясняем, что он в свою очередь запускает команду ps.

1572356859383.png


Мы не можем прочесть символы отладки в gdb, поэтому используем objdump для реверса и обнаруживаем, что файл копирует строки, после чего удаляет первые 10 байтов в стеке.

objdump -M intel -d shisu

1572356899226.png


Теперь используем gdb, чтобы добавить контрольную точку, прежде чем она удалит память из стека. С помощью python печатаем 500 символов ‘A’, проверяем стек и обнаруживаем, что он перезаписан.

1572357019153.png


Теперь с помощью этого мы можем реализовать переполнение буфера (buffer overflow). После нескольких проверок мы обнаруживаем, что при 516 байтах данных мы можем перезаписать EIP и получить ошибку сегментации.

1572357186797.png


Воспользуемся этим, чтобы получить шелл с root правами.
Запускаем файл вместе с 516 байтом шеллкода и получаем нужный нам шелл.

1572357216353.png


Выполняем команду id и видим, что у нас root права.

1572357234000.png


Автор: Саянтан Бера – технический автор хакерских статей и специалист в сфере кибербезопасности.
Связаться с ним можно .
 
S

Salivan

Active member
24.06.2019
25
9
На форуме есть раздел перевод, так это туда. Что этот забыло в общем разделе?
 
S

Salivan

Active member
24.06.2019
25
9
Вот реально полезный комментарий. Дайте пожалуйста ссылку на раздел.
Есть ENGLISH ZONE, думал там есть раздел для переводов, нэт такого.
Наверно есть смысл создать, хотя кто я такой что бы советовать, вы и сами все знаете, что нужно и как по правилам жить, как комменты тереть)
 
The Codeby

The Codeby

ООО Кодебай
30.12.2015
3 593
5 038
  • Нравится
Реакции: DefWolf
SooLFaa

SooLFaa

Администратор
15.07.2016
858
1 419
Не вижу смысла дробить статьи на форуме на переводы и оригинальный контент. Так как перевод ХОРОШЕЙ статьи - это тоже уникальный контент. А вот хорошая статья или нет решаете вы, уважаемые участники форума. Мы стараемся отбирать интересный материал для перевода, но бывает, что промахиваемся и выбираем не совсем удачный материал, поэтому нам важна обратная связь о каждой переведенной статье, чтобы мы могли лучше корректировать контент.
 
  • Нравится
Реакции: DefWolf
alfabuster

alfabuster

Well-known member
04.11.2019
115
7
Так как перевод ХОРОШЕЙ статьи - это тоже уникальный контент
Это так, да и правильно и корректно перевести на русский язык бывает ой как непросто. Только непонятно одно, зачем наносить водяные знаки на скриншоты, которые вы заимствовали? За такое можно санкции получить...
 
Мы в соцсетях: