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
  • 6