SORU
12 AĞUSTOS 2014, Salı


(:: JSON ParserError) &; {N}": beklenmeyen 'alihack< belirteç;%eval isteği(\"alihack.com\")%>

3.2.11 ve Ruby 1.9.3 Ruby on Rails web sitesinde var.

Aşağıdaki hata neden olabilir:

(JSON::ParserError) "{N}: unexpected token at 'alihack<%eval request(\"alihack.com\")%>

Bu günlükleri gibi çeşitli hatalar var. İstek eval için çalışan tüm(\"alihack.com\").

Günlük dosyası bir parçası:

"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" ve "ve diğerleri, bence, proxy. sahte IPs" 10.123.66.198

İşte a link adam aynı ıp adresini(23.27.103.106) web sitesi ile aynı sorun var.

Özetle, tüm hataları ortak ıp 23.27.103.106 ve script ruby eval kullanarak kaçmaya çalışacaklar.

Benim sorular şöyle: Ne tür bir güvenlik açığını buldular mı? Ne? Ip bloğu?

Şimdiden teşekkür ederim.

CEVAP
25 AĞUSTOS 2014, PAZARTESİ


Olur neden?

En azından test, ya da, uzaktan kod yürütme güvenlik açığından yararlanabilmesi için bir girişim gibi görünüyor. Önceki sürümlerde varolan potansiyel olarak genel bir (bir platform Raylar dışında hedefleme), ya da bir.

Asıl hata, ancak isteği application/json başlıklar HTTP PUT olmasından kaynaklanıyor, ama vücudun geçerli bir json değil.

Dev çevre üzerindeki bu yeniden oluşturmak için:

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

Daha fazla ayrıntı

Raylar action_dispatch vücut çözülecek geçerek herhangi bir json istekleri ayrıştırmak için çalışır

  # 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)
    ...

Bu durumda, geçerli bir JSON değil, hata, sunucu, 500 raporu neden ortaya çıkar.

Olası çözümler

Tamamen bu ile başa çıkmak için en iyi strateji emin değilim. Birçok olasılık vardır:

  1. IP adresi iptables kullanarak engelleyebilirsiniz
  2. filtre (PUT) nginx apache yapılandırmaları içinde /ali.txt istekleri.
  3. rack-attack taş gibi bir araç kullanın ve filtreyi uygulamak gerekir. (bu ** 22 )
  4. request_exception_handler gem hata yakalama kullanın ve idare Raylar içinde (this SO answer this github issue)
  5. blok Raylar' tüm adresler ama açıkça izin verilen olanlar için routes.rb içinde PUT istekleri Bu durumda, hata Raylar' rotalar - yani bu mümkün olmayabilir. ulaşmadan önce bile gündeme getirildiği gibi görünüyor
  6. rack-robustness katman kullanın ve config/application.rb 27 *gibi bir şey ile json ayrıştırma hatası yakalamak
  7. Kendi Katman yazma. this post şeyler çizgisinde bir şey

Şu anda seçenekleri doğru #3, #4 ya da #6 eğilmiş değilim. Bu belki de pop-up gelecek

İnsanlar çeşitli alternatif çözümler hakkında ne düşündüğünü duymak mutlu

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • B4ROK

    B4ROK

    1 EKİM 2008
  • Dive In

    Dive In

    17 Temmuz 2013
  • KliptOut KwazeeKilla

    KliptOut Kwa

    24 ŞUBAT 2010