Ruby on Rails 3.2.11 and Ruby 1.9.3。
次のエラーの原因は何ですか:
(JSON::ParserError) "{N}: unexpected token at 'alihack<%eval request(\"alihack.com\")%>
ログにこのようなエラーがいくつかあります。それらはすべて、request(\ "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であると思います。
リンク guyは同じIPアドレス(23.27.103.106)からの彼のWebサイトで同じ問題を抱えています。
要約すると、すべてのエラーの共通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を報告します。
私はこれに対処するための最良の戦略が何であるか完全にはわかりません。いくつかの可能性があります。
iptables
を使用してIPアドレスをブロックできますPUT
またはnginx
構成内の/ALi.txt
への要求(Apache
またはすべて)をフィルターします。rack-attack
gemのようなツールを使用して、そこにフィルターを適用します。 (こちらをご覧ください rack-attack issue )request_exception_handler
gemを使用してエラーをキャッチし、Rails内から処理します( this SO =回答 および このgithubの問題 )routes.rb
内のPUT
リクエストを、明示的に許可されているURL以外のすべてのURLにブロックします。この場合、エラーはRailsのルートに到達する前でも発生しているように見えるため、これは不可能な場合があります。rack-robustness
ミドルウェアを使用し、json解析エラーを this configuration in config/application.rb
のようなものでキャッチします私は現在、オプション#3、#4または#6に傾いています。これらはすべて、他の種類のボット/スキャナー、または将来ポップアップする可能性のあるその他の無効なリクエストに役立つ可能性があります...
人々がさまざまな代替ソリューションについてどう思うか聞いて幸せ
自分のサイト(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 (ページは中国語ですが、Google翻訳が助けてくれました)
この「ブラックスパイダー」ツールはスクリプトキディによって変更され、「脆弱」なサイトを見つけようとするカーペット爆撃機として使用されていると思います。
構成に「alihack」サブストリングを含むすべての試みの自動拒否を追加するのが賢明かもしれません。
同様の問題がロールバーログに表示されました。/ALi.txtへのPUTリクエスト
そのIPをブロックするのに最適なのは、このエラーで最後に1つの要求しか見なかったことです。私が受け取ったリクエストはフランスから来ました-> 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には、特別な回避策ジェムがあります: https://github.com/infopark/robust_params_parser