我有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”=&gt;我认为“10.93.15.235”和“10.123.66.198”以及其他代理商都是伪造的IP。
这里的a link家伙在同一个IP地址(23.27.103.106)的网站上遇到了同样的问题。
总而言之,所有错误的常见ip是23.27.103.106,他们尝试使用ruby的eval运行脚本。
所以我的问题是: 他们试图找到哪种类型的漏洞? 该怎么办?阻止ip?
提前谢谢。
答案 0 :(得分: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)
...
在这种情况下,它不是有效的JSON,并且引发错误,导致服务器报告500。
我不完全确定处理此问题的最佳策略是什么。有几种可能性:
iptables
PUT
或/ali.txt
配置中过滤nginx
或全部} apache
请求。rack-attack
gem这样的工具并在那里应用过滤器。 (见rack-attack issue)request_exception_handler
gem捕获错误并在Rails中处理它(请参阅this SO answer和this github issue)PUT
在Rails'routes.rb
内对所有网址的请求,但是明确允许的请求。看起来在这种情况下,错误甚至在它到达Rails的路由之前就会引发 - 所以这可能是不可能的。rack-robustness
中间件并使用config/application.rb
我目前倾向于选择#3,#4或#6。对于其他类型的机器人/扫描仪或将来可能弹出的其他无效请求,所有这些都可以派上用场......
很高兴听到人们对各种替代解决方案的看法
答案 1 :(得分:10)
我在自己的网站上看到了一些奇怪的日志条目[它们没有使用Ruby],谷歌把我带到了这个帖子。我的参赛作品的IP不同。 [120.37.236.161]
经过多一点探讨之后,这是我大多猜测/受过教育的猜测:
首先,在我自己的日志中,我看到了http://api.alihack.com/info.txt的引用 - 检查了这个链接;看起来像是注入PHP的尝试。
还有一个&#34; register.php&#34;那里的页面 - 提交将您带到&#34; invite.php&#34;页。
对此域名的进一步审核将我带到了http://www.alihack.com/2014/07/10/168.aspx(页面是中文,但Google翻译帮助了我)
我希望这个&#34;黑蜘蛛&#34;工具已被脚本小子修改,并被用作地毯轰炸机,试图找到任何易受攻击的网站。&#34;
谨慎地添加一个自动拒绝任何尝试,包括&#34; alihack&#34;子串到您的配置。
答案 2 :(得分:2)
我的Rollbar日志中出现了类似的问题,是对/ali.txt的PUT请求
最好只是阻止那个IP,我只看到一个请求就此错误。我收到的请求来自法国 - &gt; http://whois.domaintools.com/37.187.74.201
如果您使用nginx,请将其添加到您的nginx conf文件中;
deny 23.27.103.106/32;
deny 199.27.133.183/32;
答案 3 :(得分:0)
对于Rails-3,有一个特殊的解决方法-gem:https://github.com/infopark/robust_params_parser