(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
我不完全确定处理这个问题的最佳策略是什么。 有几种可能性:
- 您可以使用
iptables
阻止IP地址 - 在您的
nginx
或apache
configuration中过滤(PUT
或全部)请求到/ali.txt
。 - 使用像
rack-attack
gem的工具,并在那里应用filter。 (请参阅此机架攻击问题 ) - 使用
request_exception_handler
gem来捕获错误并在Rails中处理它(参见这个SO回答和这个github问题 ) -
将Rails的routes.rb
PUT
请求routes.rb
到所有的url,但是明确允许的。看起来在这种情况下,即使在Rails路由之前,错误也会出现 – 所以这可能是不可能的。 - 使用
rack-robustness
中间件,并使用config/application.rb
中的config/application.rb
捕获jsonparsing错误 - 编写你自己的中间件。 东西在这个职位的东西沿线
我目前倾向于选项#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