Я пытаюсь использовать уязвимость переполнения буфера на веб-сервере, написанном (не мной) на языке 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, но это может быть, и это просто неправильный способ использовать его.