(JSON :: ParserError)“{N}:在'alihack <%eval请求(\”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,他们尝试使用ruby的eval来运行脚本。

所以我的问题是:他们试图find什么types的漏洞? 该怎么办? 阻止IP?

先谢谢你。

为什么会发生?

这似乎是企图至lesstesting或利用远程代码执行漏洞。 可能是一个通用的(针对Rails之外的平台),或者是早期版本中的一个。

然而,实际的错误源于这样一个事实,即请求是一个带有application/json头部的HTTP PUT ,但是这个正文不是一个有效的json。

要在你的开发环境中重现这一点:

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

更多细节

Rails action_dispatch试图通过传递正文来parsing任何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。

可能的解决scheme

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

  1. 您可以使用iptables阻止IP地址
  2. 在您的nginxapacheconfiguration中过滤( PUT或全部)请求到/ali.txt
  3. 使用像rack-attackgem的工具,并在那里应用filter。 (请参阅此机架攻击问题 )
  4. 使用request_exception_handler gem来捕获错误并在Rails中处理它(参见这个SO回答和这个github问题 )
  5. 将Rails的routes.rb PUT请求routes.rb到所有的url,但是明确允许的。 看起来在这种情况下,即使在Rails路由之前,错误也会出现 – 所以这可能是不可能的。
  6. 使用rack-robustness中间件,并使用config/application.rb中的config/application.rb捕获jsonparsing错误
  7. 编写你自己的中间件。 东西在这个职位的东西沿线

我目前倾向于选项#3,#4或#6。 所有这些都可能用于其他types的漫游器/扫描仪或其他可能popup未来的无效请求…

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

我在我自己的网站上看到了一些奇怪的日志条目[不使用Ruby],Google把我带到了这个线程。 我input的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翻译帮我在这里)

我希望这个“黑蜘蛛”工具已经被脚本小子修改过,并被用作地毯式轰炸机,试图find任何“易受攻击”的地点。

只要添加一个自动拒绝包括“alihack”子string到您的configuration的尝试可能是谨慎的。

我有一个类似的问题出现在我的Rollbar日志,一个PUT请求/ali.txt

最好只是阻止这个IP,我只看到一个请求在我的最后这个错误。 我收到的请求来自法国 – > http://whois.domaintools.com/37.187.74.201

如果你使用nginx,把它添加到你的nginx conf文件中;

 deny 23.27.103.106/32; deny 199.27.133.183/32; 

对于Rails-3有一个特殊的解决方法-gem: https : //github.com/infopark/robust_params_parser