it-swarm.com.ru

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

У меня есть веб-сайт на Ruby на 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, и они пытаются запустить скрипт, используя eval Ruby.

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

Заранее спасибо.

54
Igor Markelov

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

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

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

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

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.

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

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

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

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

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

65
gingerlime

Я увидел несколько странных записей в журнале на своем собственном сайте [который не использует 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 помог мне здесь)

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

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

10
CRZ

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

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

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

deny 23.27.103.106/32;
deny 199.27.133.183/32;
2
Jamsi

Для Rails-3 есть специальный обходной прием: https://github.com/infopark/robust_params_parser

0
Kostia