Привет, codeby !
Первоисточник:
Перевод: выполнен от команды Codeby
Примечание от команды форума:
Виртуальную машину можно
Начнем с того, что нам нужно узнать IP виртуальной машины (здесь я использую 192.168.0.7, но вам нужно указать свой).
Запустим сканер nmap, чтобы найти открытые порты и команду –sV, чтобы определить версии сервисов установленных на портах.
Мы видим, что на машине открыт 80 порт, на котором находится наш сервер.
Откроем в браузере 192.168.0.7
На главной странице мы находим подсказку и с помощью программы dirb и команды raft-large-directory перечесляем директории и узнаем дополнительную информации о них.
Далее еще раз запустим dirb для полного сканирования и видим, что программа выдала ошибку в cgi-bin. Теперь нам нужно просмотреть какие файлы в ней находятся.
Одна из ссылок, которые нашла программа содержит страницу идентификации.
Давайте посмотрим код страницы и попытаемся найти шестнадцатеричную строку.
После того как мы ее нашли, приведем ее в читабельный вид с помощью xxd. После дешифровки мы обнаруживаем, что строка base64 начинается с Y, и находим еще одну шестнадцатеричную строку внутри флага. Расшифровав ее получаем строку для входа на страницу идентификации.
После того как мы залогинились, мы видим, что полезной информации здесь нет и возвращаемся к результатам сканирования программы dirb.
Переходя по ссылкам, мы видим пустые страницы, но если посмотрим исходный код, то увидим, что некоторые страницы содержат XML (xml based page) и могут быть уязвимыми для XML инъекции (XML Entity Injection(XXE)).
Воспользуемся программой burpsuite для перехвата запросов страницы, после чего мы воспользуемся XXE уязвимостью для выполнения системных команд.
Видим, что все файлы кроме /etc/passwd зашифрованы с помощью base64, чтобы привести их в читабельный вид нам будет нужен php base64. Далее мы переходим к файлу apache.conf, чтобы получить больше информации о системе.
Дешифруем строку base64 и сохраняем ее в файле ‘bsides-apache.conf’.
Открываем файл и получаем нужную нам информацию о конфигурации.
Снова используем ХХЕ уязвимость для получения оставшихся файлов конфигурации.
Дешифруем строку из base64 и сохраняем ее как bsides-default.conf.
Теперь посмотрим файлы конфигурации.
Здесь мы также используем ХХЕ уязвимость, чтобы получить файлы для CGI.
Дешифруем строку в кодировке base64 и сохраняем ее как bsides-cgi.conf.
Теперь открыв конфигурационный файл cgi мы видим, где находится загрузочный файл.
Чтобы узнать больше информации скачаем загрузочный файл, используя всю ту же XXE.
Дешифруем строку в кодировке base64 и сохраняем ее как bsides-load.
Проверяем тип файла и обнаруживаем, что он является исполняемым.
Узнаем, что он сжат при помощи UPX.
Распаковываем файл.
И видим, что он читает и расшифровывает файл используя шестнадцатеричное значение «WannaCry?».
С помощью radare реверсим файл и обнаруживаем, что он может запускать файлы зашифрованные с тем же значением .
Теперь создадим шестнадцатеричное значение «WannaCry?». Мы используем od, чтобы преобразовать значение и sed, чтобы удалить пробелы.
Сначала мы создаем реверс шелл, чтобы выполнять системные команды.
Теперь создаем 32-битный файл, используя gcc, и преобразуем его в двоичный файл с использованием шестнадцатеричного значения «WannaCry?» Результат сканирования dirb показал нам директорию,в которой хранятся файлы после загрузки, загружаем файл в эту директорию и не забываем, что файл после загрузки меняет название.
Копируем новое имя и используем загрузочный файл для запуска нашего шелла.
Ставим netcat в режим прослушки и получаем реверс шелл.
Теперь нам надо найти файлы с suid bit. Один из таких файлов находится в директории /home/level1 и носит название shisu.
Переходим в директорию где лежит файл и видим, что он является исполняемым.
Когда мы запускаем файл, то выясняем, что он в свою очередь запускает команду ps.
Мы не можем прочесть символы отладки в gdb, поэтому используем objdump для реверса и обнаруживаем, что файл копирует строки, после чего удаляет первые 10 байтов в стеке.
Теперь используем gdb, чтобы добавить контрольную точку, прежде чем она удалит память из стека. С помощью python печатаем 500 символов ‘A’, проверяем стек и обнаруживаем, что он перезаписан.
Теперь с помощью этого мы можем реализовать переполнение буфера (buffer overflow). После нескольких проверок мы обнаруживаем, что при 516 байтах данных мы можем перезаписать EIP и получить ошибку сегментации.
Воспользуемся этим, чтобы получить шелл с root правами.
Запускаем файл вместе с 516 байтом шеллкода и получаем нужный нам шелл.
Выполняем команду id и видим, что у нас root права.
Автор: Саянтан Бера – технический автор хакерских статей и специалист в сфере кибербезопасности.
Связаться с ним можно
Первоисточник:
Ссылка скрыта от гостей
Перевод: выполнен от команды Codeby
Примечание от команды форума:
- Статья является переводом.
Виртуальную машину можно
Ссылка скрыта от гостей
.Начнем с того, что нам нужно узнать IP виртуальной машины (здесь я использую 192.168.0.7, но вам нужно указать свой).
Запустим сканер nmap, чтобы найти открытые порты и команду –sV, чтобы определить версии сервисов установленных на портах.
nmap -p- -sV 192.168.0.7
Мы видим, что на машине открыт 80 порт, на котором находится наш сервер.
Откроем в браузере 192.168.0.7
На главной странице мы находим подсказку и с помощью программы dirb и команды raft-large-directory перечесляем директории и узнаем дополнительную информации о них.
dirb http://192.168.0.7 raft-large-directories
Далее еще раз запустим dirb для полного сканирования и видим, что программа выдала ошибку в cgi-bin. Теперь нам нужно просмотреть какие файлы в ней находятся.
dirb http://192.168.0.7 –w
dirb http://192.168.0.7/cgi-bin/ -N 403
Одна из ссылок, которые нашла программа содержит страницу идентификации.
Давайте посмотрим код страницы и попытаемся найти шестнадцатеричную строку.
После того как мы ее нашли, приведем ее в читабельный вид с помощью xxd. После дешифровки мы обнаруживаем, что строка base64 начинается с Y, и находим еще одну шестнадцатеричную строку внутри флага. Расшифровав ее получаем строку для входа на страницу идентификации.
После того как мы залогинились, мы видим, что полезной информации здесь нет и возвращаемся к результатам сканирования программы dirb.
Переходя по ссылкам, мы видим пустые страницы, но если посмотрим исходный код, то увидим, что некоторые страницы содержат XML (xml based page) и могут быть уязвимыми для XML инъекции (XML Entity Injection(XXE)).
Воспользуемся программой burpsuite для перехвата запросов страницы, после чего мы воспользуемся XXE уязвимостью для выполнения системных команд.
Видим, что все файлы кроме /etc/passwd зашифрованы с помощью base64, чтобы привести их в читабельный вид нам будет нужен php base64. Далее мы переходим к файлу apache.conf, чтобы получить больше информации о системе.
Дешифруем строку base64 и сохраняем ее в файле ‘bsides-apache.conf’.
Открываем файл и получаем нужную нам информацию о конфигурации.
Снова используем ХХЕ уязвимость для получения оставшихся файлов конфигурации.
Дешифруем строку из base64 и сохраняем ее как bsides-default.conf.
Теперь посмотрим файлы конфигурации.
Здесь мы также используем ХХЕ уязвимость, чтобы получить файлы для CGI.
Дешифруем строку в кодировке base64 и сохраняем ее как bsides-cgi.conf.
Теперь открыв конфигурационный файл cgi мы видим, где находится загрузочный файл.
Чтобы узнать больше информации скачаем загрузочный файл, используя всю ту же XXE.
Дешифруем строку в кодировке base64 и сохраняем ее как bsides-load.
Проверяем тип файла и обнаруживаем, что он является исполняемым.
file bsides-load
Узнаем, что он сжат при помощи UPX.
strings bsides-load
Распаковываем файл.
upx -d bsides-load
И видим, что он читает и расшифровывает файл используя шестнадцатеричное значение «WannaCry?».
С помощью radare реверсим файл и обнаруживаем, что он может запускать файлы зашифрованные с тем же значением .
Теперь создадим шестнадцатеричное значение «WannaCry?». Мы используем od, чтобы преобразовать значение и sed, чтобы удалить пробелы.
echo -n "WannaCry?" | od -A n -t x1 |sed 's/ *//g’
Сначала мы создаем реверс шелл, чтобы выполнять системные команды.
Теперь создаем 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
Копируем новое имя и используем загрузочный файл для запуска нашего шелла.
Ставим netcat в режим прослушки и получаем реверс шелл.
Теперь нам надо найти файлы с suid bit. Один из таких файлов находится в директории /home/level1 и носит название shisu.
find / -perm -4000 2>/dev/null
Переходим в директорию где лежит файл и видим, что он является исполняемым.
Когда мы запускаем файл, то выясняем, что он в свою очередь запускает команду ps.
Мы не можем прочесть символы отладки в gdb, поэтому используем objdump для реверса и обнаруживаем, что файл копирует строки, после чего удаляет первые 10 байтов в стеке.
objdump -M intel -d shisu
Теперь используем gdb, чтобы добавить контрольную точку, прежде чем она удалит память из стека. С помощью python печатаем 500 символов ‘A’, проверяем стек и обнаруживаем, что он перезаписан.
Теперь с помощью этого мы можем реализовать переполнение буфера (buffer overflow). После нескольких проверок мы обнаруживаем, что при 516 байтах данных мы можем перезаписать EIP и получить ошибку сегментации.
Воспользуемся этим, чтобы получить шелл с root правами.
Запускаем файл вместе с 516 байтом шеллкода и получаем нужный нам шелл.
Выполняем команду id и видим, что у нас root права.
Автор: Саянтан Бера – технический автор хакерских статей и специалист в сфере кибербезопасности.
Связаться с ним можно
Ссылка скрыта от гостей
.