Как я могу отправить HTTP-запрос в файле?

Я изучаю компьютерную безопасность и у меня есть вопрос о командах. У меня есть уязвимый веб-сервер, на котором я могу использовать переполнение буфера, используя команду telnet, а затем отправляя http-получение с очень длинным URL-адресом. URL-адрес переполнит буфер. Я точно знаю, что это работает. Но теперь я хочу использовать netcat для автоматизации процесса. До сих пор у меня есть

netcat localhost 8080 < payload1

Я отправляю его на локальный хост, потому что я запускаю сервер и атаку на одном компьютере. Payload1 в настоящее время представляет собой искаженный оператор HTTP Get. Однако сервер не может этого понять, потому что он не может открыть файл, чтобы увидеть оператор HTTP Get. Поэтому мой вопрос: как я могу сделать оператор HTTP Get исполняемым или как заставить сервер распознавать HTTP Get в файле?

Спасибо!

редактировать: похоже, что req, который содержит uri, среди прочего, равен 0. Или, по крайней мере, когда я проверяю его с помощью GDB. Это строка кода, которая вызывает у меня проблему:

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

GDB говорит, что это ошибка сегментации здесь, в операторе if.

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

get /aaaaaaaaaaaaAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa http/1.1

Если бы я использовал telnet для его передачи, сервер действительно рухнул, поэтому я знаю, что это проблема с netcat. Было заявлено, что полезная нагрузка1 должна быть в формате DOS с конечными строками CRLF. Чтобы проверить это, я перенес файл на компьютер с Windows, и он отобразился правильно, однако мне было интересно, есть ли другой способ проверить это?


person tpar44    schedule 14.11.2011    source источник


Ответы (1)


Какую ошибку вы видите, из-за которой вы думаете, что сервер не может прочитать файл? В командной строке, которую вы использовали, «сервер» не читает файл, оболочка вашей ОС открывает файл и использует его в качестве стандартного ввода для процесса netcat.

Поэтому я бы попросил вас:

  1. Проверьте путь payload1. Возможно, вам придется использовать что-то вроде nc localhost 8080 < /path/to/payload1
  2. Убедитесь, что ваш сервер прослушивает TCP-порт 8080.
  3. Если ничего из этого не работает, поместите некоторые сообщения об ошибках / симптомы проблем, которые вы видите.

Обновление (на основе редактирования вопроса):

клиент здесь — netcat. Судя по вашему редактированию, сервер дает сбой. Таким образом, запрос проходит на сервер. Возможно, вы только что обнаружили еще одну ошибку в программном обеспечении сервера (в дополнение к исходному переполнению буфера). Когда вы пытались использовать telnet, вы отправляли идентичный URI?

person jman    schedule 14.11.2011
comment
да, это точно такая же команда get, которую я использовал с помощью telnet. Вот что делает его таким странным. - person tpar44; 15.11.2011