(JSON :: ParserError)“{N}:'alihack <%eval request(\”alihack.com \“)%>如何结局?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

我有关于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来运行脚本。

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

提问于
用户回答回答于

为什么会发生?

这似乎是企图至少测试或利用远程代码执行漏洞。可能是一个通用的(针对除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你的nginxapache配置中。
  3. 使用像rack-attack宝石一样的工具并在那里应用滤镜。(请参阅此机架攻击问题
  4. 使用request_exception_handlergem来捕获错误并在Rails中处理它(请参阅此github问题
  5. 使用rack-robustness中间件,赶上JSON解析错误的东西像这种配置config/application.rb
  6. 编写你自己的中间件。东西在这篇文章的东西沿线

我目前倾向于选项#3,#4或#5。所有这些都可能适用于其他类型的漫游器/扫描仪或其他未来可能弹出的无效请求...

用户回答回答于

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

我预计这个“爬虫”工具已经被脚本小子修改过,并被用作地毯式轰炸机,试图找到任何“易受攻击”的站点。

只需添加一个自动拒绝任何尝试,包括“alihack”子字符串到配置可能是谨慎的。

扫码关注云+社区

领取腾讯云代金券