Wpis z mikrobloga

Cześć!
Kontynuujemy naszą podróż w cyklu #od0dopentestera dzisiaj język #ruby

Czasami w naszych firmach nie możemy wejść na niektóre strony ponieważ są one zablokowane na firewallu.
Dlatego też stworzymy naszą własną bramkę proxy.

class ProxyServlet < WEBrick::HTTPServlet::AbstractServlet
def do_GET (request, response)
open(request.query["url"]) do |http|
result = http.read
response.body = result
end
end
end

Użytkownik podaje parametr url który jest następnie przekazywany do funkcji open.
Ona to pobiera treść witryny i wyświetla jej treść na stronie.
W tym kodzie znajdują się aż 2 podatności.
Pierwsza: open traktuje ciąg znaków zaczynający się od pipe (czyli |) jako komendę, którą ma wykonać w konsoli.
Jeżeli więc przekażemy: ?url=|cmd to zamiast treści strony internetowej wyświetlona zostanie lista plików w katalogu.
Więcej o tym błędzie można przeczytać tutaj.
Druga podatność to #ssrf
Nic bowiem nie stoi na przeszkodzie aby atakujący jako adres podał http://localhost.
Jeśli więc na naszym serwerze znajduje się jakaś inna usługa, która nie jest dostępna z zewnątrz, można podglądnąć jej treść.

#programowanie #informatyka #it #hacking #bezpieczenstwo
KacperSzurek - Cześć!
Kontynuujemy naszą podróż w cyklu #od0dopentestera dzisiaj jęz...
  • 6
  • Odpowiedz
@yggdrasil: ssrf najlepiej jakąś zewnętrzną biblioteką, np: ssrf_filter
Trzeba tam bowiem pamiętać o przekierowaniach, które również mogą być niebezpieczne.
Regexpy powinny dać radę o ile używamy \A\z do zaznaczania początku i końca tekstu zamiast ^$
"|dir;\n[https://wykop.pl](https://wykop.pl)" =~ /^http/ działa bowiem bez problemów
Więcej: tu, tu i tu.
  • Odpowiedz