Как бы я использовал переполнение буфера на веб-сервере, отправив http-запрос на веб-сервер из командной строки? - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь использовать уязвимость переполнения буфера на веб-сервере, написанном (не мной) на языке c. Для этого я должен отправить HTML-запрос на веб-сервер из командной строки, который вызывает переполнение буфера и приводит к сбою сервера. Я знаю, как использовать curl для отправки HTML-запроса на веб-сервер, но все, что я смог с ним успешно сделать, - это запрос файла index.html. Для этого я использую команду

curl http://<host-name>:<port>/index.html

То, что я не знаю, как это сделать, - использовать эту команду, чтобы делать что-то большее, чем извлечение страниц, как указано выше.

Я понимаю, что мне нужно сделать запрос, который содержит больше байтов, чем может удержать буфер, но я не знаю, как это сделать с помощью HTTP-запроса.

Вот код для веб-сервера, который я прокомментировал рядом, где я считаю, что уязвимость, связанная с переполнением буфера, находится вокруг строки 218. (Файл длинный, но я думаю, что если что-то упустить, это может затруднить ответ, я вставляю все вещь на https://pastebin.com/yQwn97xY)

Вот та часть, где я думаю, что уязвимость переполнения буфера:

char *status(int statcode) {
  if (statcode == 200)  return "200 OK";
  else if (statcode == 304) return "304 Not Modified";
  else if (statcode == 400) return "400 Bad Request";
  else if (statcode == 403) return "403 Forbidden";
  else if (statcode == 404) return "404 Not Found";
  else if (statcode == 500) return "500 Internal Server Error";
  else if (statcode == 501) return "501 Not Implemented";
  else return "";
}

int send_response(int sockfd, httpreq_t *req, int statcode) {
//BUFFER OVERFLOW VULNERABILITY BELOW
//
  int urifd;
  const int BUFSIZE = 1024;
  char sendmessage[BUFSIZE];
  char *path = req->uri;

  if (req->uri == NULL || req->method == NULL || 
      req->headers == NULL || req->version == NULL) {
    return 0;
  }

Чтобы запустить сервер через порт 8081, я просто набираю: ./webserver 8081

Затем я хотел бы с другого терминала отправить HTTP-запрос, который использует уязвимость переполнения буфера, чтобы вызвать сбой сервера.

EDIT: Что-то еще, что я только что попробовал, увидев другую возможную уязвимость (около строки 79), было добавить что-то в заголовок, сделав его длиннее 1024 байта. Используя команду:

curl -v -H "Other:<about 2000 characters>" <hostname>:<port>/index.html

Это по-прежнему не приводило к краху сервера, поэтому я не думаю, что эксплойт находится рядом со строкой 79, но это может быть, и это просто неправильный способ использовать его.

...