Пример авторизации на роутере рассмотрено в предыдущей записи. Теперь получаю страницу статуса роутера, в которой есть вся основная необходимая информация.
Для получени страницы статуса используя программу SmartSniff, захожу с браузера на страницу статуса, она же главная. Получаю запрос / ответ такого плана:
GET /status.htm HTTP/1.1
Host: 192.168.1.1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: SessionID=43 // ID сессии
HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Server: Virtual Web 0.9
Content-Length: 10269
Далее страница HTML...
Из первой строки понятно, что используется уже не POST запрос, а GET и обращение к "status.htm". С помощью команд cURL PHP создаю аналогичный запрос, и все той же программой отслеживаю правильность. Сценарии=>Связь=>Router_IP.
Но в ответ получаю не HTML страницу, а перенаправление на ввод логина "login.htm". Наступило разочарование...
Что не так? Мучал вопрос несколько дней.
Ответ оказался прост, с моим созданым запросом не отправлялся ID сессии.
Следующей задачей стало получение этого ID из первого запроса авторизации. И использовать его в GET запросе. Реализация его такая:
// Получаем ID сессии
preg_match('/SessionID=/', $result, $matches);
if (!empty($matches[0]))
{
$cookie = strstr($result, 'SessionID=');
$cookie = strstr($cookie, ';', true);
$cookie = ltrim($cookie, 'SessionID=');
}
//print_r($cookie);
//print_r($result);
// Закрываем соединение
curl_close($ch);
Дописываю код GET PHP и чудо свершилось, получил в ответ HTML страницу. Прям ХАКЕРОМ себя почувствовал. GET запрос такой:
// STEP 2 -- GET DATA
$url = "http://192.168.1.1/status.htm";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Cookie: SessionID='.$cookie));
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
//print_r($output);
curl_close($ch);
Запрос/ответ выглядит так:
GET /status.htm HTTP/1.1
Host: 192.168.1.1
Accept: */*
Cookie: SessionID=279
HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Server: Virtual Web 0.9
Content-Length: 10255
Далее страница HTML...
Остается теперь достать нужную информацию и дальше реализовывать задуманное.
Пока создавалось понятие как все желания связать воедино, рисовал алгоритм на бумаге.
Реализовал перезагрузку роутера не методом атаки, с авторизацией через GET запрос. Сценарии=>Связь=>Router_reboot.
Продолжение следует...
Малоярославец, Россия
На форуме: ahelper