(JSON :: ParserError)"{N}:'alihack <%eval request(\"alihack.com \")%>的意外标记

Igo*_*lov 54 ruby json ruby-on-rails ruby-on-rails-3

我有Ruby on Rails 3.2.11和Ruby 1.9.3的网站.

什么可能导致以下错误:

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

我在日志中有几个这样的错误.所有人都试图评估请求(\"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".
Run Code Online (Sandbox Code Playgroud)

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,他们尝试使用ruby的eval运行脚本.

所以我的问题是:他们试图找到什么类型的漏洞?该怎么办?阻止ip?

先感谢您.

gin*_*ime 65

为什么会这样?

这似乎是尝试至少测试或利用远程代码执行漏洞.可能是通用的(针对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)
    ...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它不是有效的JSON,并且引发错误,导致服务器报告500.

可能的解决方案

我不完全确定解决这个问题的最佳策略是什么.有几种可能性:

  1. 你可以使用阻止IP地址 iptables
  2. 在您或您的配置中过滤(PUT或全部)请求./ali.txtnginxapache
  3. 使用像rack-attackgem 这样的工具并在那里应用过滤器.(见这个机架攻击问题)
  4. 使用request_exception_handlergem来捕获错误并从Rails中处理它(请参阅此SO答案此github问题)
  5. PUT在Rails'中阻止routes.rb对所有URL的请求,但是那些明确允许的请求.看起来在这种情况下,错误甚至在它到达Rails的路由之前就会引发 - 所以这可能是不可能的.
  6. 使用rack-robustness中间件,赶上JSON解析错误的东西像这种配置config/application.rb
  7. 编写自己的中间件.在这篇文章的东西沿线的东西

我目前倾向于选择#3,#4或#6.对于其他类型的机器人/扫描仪或将来可能弹出的其他无效请求,所有这些都可以派上用场......

很高兴听到人们对各种替代解决方案的看法

  • 如果你想使用机架攻击,你可能需要这个用于rails:https://github.com/kickstarter/rack-attack/issues/99 (3认同)

小智 10

我在自己的网站上看到了一些奇怪的日志条目[不使用Ruby],谷歌把我带到了这个帖子.我的参赛作品的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(页面是中文,但谷歌翻译帮助我在这里)

我希望这个"黑蜘蛛"工具已被脚本小子修改,并被用作地毯轰炸机,试图找到任何"易受伤害"的网站.

谨慎地添加一个自动拒绝任何尝试,包括"alihack"子字符串到您的配置.