Как я могу отправить HTTP-запрос в файл? - PullRequest
0 голосов
/ 15 ноября 2011

Я изучаю компьютерную безопасность и задаю вопрос о командах. У меня есть уязвимый веб-сервер, на котором я могу использовать переполнение буфера, используя команду telnet, а затем отправляя http get с очень длинным 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. Было утверждение, что payload1 должен быть в формате DOS с конечными строками CRLF. Чтобы проверить это, я передал файл на компьютер с Windows, и он отображался правильно, однако мне было интересно, есть ли другой способ проверить это?

1 Ответ

0 голосов
/ 15 ноября 2011

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

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

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

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

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

...