Подтвердить что ты не робот

(JSON:: ParserError) "{N}: неожиданный токен в 'alihack <% eval request (\" alihack.com\")%>

У меня есть сайт на Ruby on Rails 3.2.11 и Ruby 1.9.3.

Что может вызвать следующую ошибку:

(JSON::ParserError) "{N}: unexpected token at 'alihack<%eval request(\"alihack.com\")%>

У меня есть несколько ошибок, подобных этому в журналах. Все они пытаются выполнить запрос (\ "alihack.com \" ).

Часть файла журнала:

"REMOTE_ADDR" => "10.123.66.198",
"REQUEST_METHOD" => "PUT",
"REQUEST_PATH" => "/ali.txt",
"PATH_INFO" => "/ali.txt",
"REQUEST_URI" => "/ali.txt",
"SERVER_PROTOCOL" => "HTTP/1.1",
"HTTP_VERSION" => "HTTP/1.1",
"HTTP_X_REQUEST_START" => "1407690958116",
"HTTP_X_REQUEST_ID" => "47392d63-f113-48ba-bdd4-74492ebe64f6",
"HTTP_X_FORWARDED_PROTO" => "https",
"HTTP_X_FORWARDED_PORT" => "443",
"HTTP_X_FORWARDED_FOR" => "23.27.103.106, 199.27.133.183".

199.27.133.183 - это CLoudFlare IP. "REMOTE_ADDR" = > "10.93.15.235" и "10.123.66.198" и другие, я думаю, являются поддельными IP-адресами прокси.

Здесь ссылка у парня такая же проблема со своим веб-сайтом с того же ip-адреса (23.27.103.106).

Подводя итог, общий ip из всех ошибок составляет 23.27.103.106, и они пытаются запустить script с использованием ruby ​​eval.

Итак, мои вопросы: Какую уязвимость они пытаются найти? Что делать? Заблокировать ip?

Спасибо заранее.

4b9b3361

Ответ 1

Почему это происходит?

Похоже на попытку хотя бы протестировать или использовать уязвимость удаленного выполнения кода. Потенциально общий (ориентированный на платформу, отличный от Rails), или тот, который существовал в более ранних версиях.

Фактическая ошибка, однако, связана с тем, что запрос является заголовком HTTP PUT с application/json, но тело не является допустимым json.

Чтобы воспроизвести это в своей среде dev:

curl -D - -X PUT --data "not json" -H "Content-Type: application/json" http://localhost:3000

Подробнее

Rails action_dispatch пытается разобрать любые json-запросы, передавая тело, подлежащее декодированию

  # lib/action_dispatch/middleware/params_parser.rb

  def parse_formatted_parameters(env)
    ...
    strategy = @parsers[mime_type]
    ...

    case strategy
    when Proc
      ...
    when :json
      data = ActiveSupport::JSON.decode(request.body)
    ...

В этом случае он не является допустимым JSON, и возникает ошибка, заставляя сервер сообщать 500.

Возможные решения

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

  • вы можете заблокировать IP-адрес, используя iptables
  • (PUT или все) запрашивает /ali.txt в конфигурациях nginx или apache.
  • используйте такой инструмент, как rack-attack gem и примените там фильтр. (см. этот проблема в стойке)
  • используйте request_exception_handler gem, чтобы поймать ошибку и обработать ее из Rails (см. этот ответ SO и этот вопрос github)
  • заблокировать PUT запросы в Rails 'routes.rb ко всем URL-адресам, но те, которые явно разрешены. Похоже, что в этом случае ошибка возникает еще до того, как она достигнет маршрутов Rails - так что это может быть невозможно.
  • Используйте rack-robustness промежуточное программное обеспечение и поймайте ошибку разбора json с чем-то вроде эту конфигурацию в config/application.rb
  • Напишите свое собственное промежуточное программное обеспечение. Что-то вроде строк на этот пост

В настоящее время я склоняюсь к вариантам # 3, # 4 или # 6. Все это может пригодиться для других типов ботов/сканеров или других недопустимых запросов, которые могут появиться в будущем...

Счастлив услышать, что люди думают о различных альтернативных решениях

Ответ 2

Я увидел некоторые странные записи журнала на моем собственном сайте [который не использует Ruby], и Google взял меня в эту тему. IP в моих записях был другим. [120.37.236.161]

После того, как ты немного окурился, вот моя главным образом предположение/образованное предположение:

Во-первых, в моих собственных журналах я увидел ссылку на http://api.alihack.com/info.txt - проверил эту ссылку; была похожа на попытку инъекции PHP.

Там также есть страница "register.php" - отправка приведет вас к странице "invite.php".

Дальнейшее изучение этого домена привело меня к http://www.alihack.com/2014/07/10/168.aspx (страница на китайском языке, но Google Translate помог мне здесь)

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

Возможно, разумно просто добавить автоматическое отрицание любой попытки, включая подстроку "alihack" в вашей конфигурации.

Ответ 3

У меня была аналогичная проблема, обнаруженная в моих журналах Rollbar, запрос PUT на /ali.txt

Лучше всего заблокировать этот IP-адрес, я только видел один запрос на моем конце с этой ошибкой. Я получил запрос от Франции → http://whois.domaintools.com/37.187.74.201

Если вы используете nginx, добавьте это в свой файл конфига nginx;

deny 23.27.103.106/32;
deny 199.27.133.183/32;