Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Bezpieczeństwo w PHP (HTTP Cache Poisoning via Host Header Injection)
szajens
post 4.10.2015, 14:59:20
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


Chodzi mi o atak w stylu https://nfsec.pl/security/5505 http_host ale z wykorzystaniem request_uri


Czy jest możliwe wywołanie strony np cos.pl/aaaa/ssss/aaa/fff a w request_uri przesłanie np /
?

Nie mogłem znaleźć takiej informacji nigdzie w internecie.

Mianowicie takim atakiem możnabybyło zapętlić np stronę główną.

Bo jeżeli skrypt php by automatycznie przekierowywał np ze slashu na bez slasha
np.
wp.pl/cos/ na wp.pl/cos i w wp.pl/cos request_uri by wskazywał wp.pl/cos to powstało by zapetlenie

Proszę o info

Pozdrawiam.
Go to the top of the page
+Quote Post
Damonsson
post 4.10.2015, 15:49:08
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Abstrahując od tego czy możliwe, ale w pewnych przypadkach (kiedy request_uri jest wykorzystywane do dziwnych rzeczy i niefiltrowane) jest możliwe. Możesz posadzić małpę i kazać jej odświeżać stronę co pół sekundy, wyjdzie taki sam "atak".
Go to the top of the page
+Quote Post
szajens
post 4.10.2015, 19:26:23
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


nie mówię o filtracji, bo to raczej logiczne.

Chodzi mi raczej o atak coś w stylu http_host, coś jak z linka którego podałem

edit: tzn. że można wywołać z inną zawartością request_uri a następnie podmienić

Ten post edytował szajens 4.10.2015, 19:27:36
Go to the top of the page
+Quote Post
Damonsson
post 4.10.2015, 21:15:10
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


To wszystko zależy od głupoty piszącego, znajdziesz taki przypadek, że łapie sobie HTTP_REQUEST_URI i na podstawie tego coś robi dziwnego i tam masz pole do popisu. Ogólnie nie masz szansy na zrobienie jakiegoś ataku podmieniając request_uri, bo po pierwsze i najważniejsze nie możesz sobie w trakcie wykonywania skryptu podmienić tego request_uri.

To o co pytasz to wg mnie tak musiałoby wyglądać:

Odpalam stronę, request_uri jest wp.pl, nagle jak skrypt jest przy 20 linijce kodu wstrzelam się i wysyłam drugi request ze zmienionym request_uri który nie reaguje na zmiany request_uri i zostaje na tej stronie, a w 21 linijce jest przekierowanie ustawione po request_uri. To nie jest możliwe.

Ten post edytował Damonsson 4.10.2015, 21:15:40
Go to the top of the page
+Quote Post
szajens
post 4.10.2015, 21:41:29
Post #5





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


raczej chodzi mi o atak HTTP Cache Poisoning ale z wykorzystanie request_uri
  1. $ telnet startup.com 80
  2. Trying 1.2.3.4...
  3. Connected to startup.com.
  4. Escape character is '^]'.
  5. GET /index.html HTTP/1.1
  6. User-Agent: X-Agresor
  7. Host: attacker.com
  8.  
  9. HTTP/1.1 200 OK
  10. Date: Wed, 10 Jun 2013 00:27:45 GMT
  11. Server: Apache
  12. Cache-Control: max-age=9600
  13. Expires: Wed, 17 Jun 2014 00:27:45 GMT
  14. Content-Length: 2959
  15. Content-Type: text/html; charset=utf-8
  16.  
  17. <html>
  18. <head>
  19. <title>StartUP</title>
  20. </head>
  21. <body>
  22. <a href="http://attacker.com/logowanie">Login</a>
  23. <link rel="stylesheet" type="text/css" href="http://attacker.com/st.css">
  24. <script src="http://attacker.com/jquery.js?v=1.2.3">
  25. [... dalszy kod strony...]
  26. </body>
  27. </html>
  28.  


czyli tym sposobem został podmieniony http_host czy jest możliwość podobnego podmienienia request_uri?


edit: czyli to o czym piszę jednak jest możliwe jeżeli dobrze zrozumiałem ten link: HTTP Splitting/Smuggling (słabo znam angielski)

reasumując 99% skryptów robiących np automatyczne przekierowanie ze slasha na 'brak slasha' jest podatna na tego typu atak

edit2: wydaje mi się że większość nie słyszała nawet o HTTP Cache Poisoning

Ten post edytował szajens 4.10.2015, 21:57:12
Go to the top of the page
+Quote Post
Damonsson
post 5.10.2015, 01:05:15
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Ok zakończmy ten temat biggrin.gif Chciałbyś wejść na stronę www.wp.pl, a w headers podać Request-Uri=www.wp.pl/ i żeby w $_SERVER['REQUEST_URI'] było pokazane www.wp.pl/ - nie, tak się nie da, to jest niemożliwe, amen.
Go to the top of the page
+Quote Post
szajens
post 5.10.2015, 17:35:04
Post #7





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----



mam jeszcze jedno pytanie dotyczące HTTP Cache Poisoning via Host Header Injection

nie wiem czy dobrze zrozumiałem artykuł. Ale jeżeli np strona ma automatyczne przekierowanie 301 z www.mojadomena.pl na mojadomena.pl
i atakujący połączy się z www.mojadomena.pl (skrypt będzie chciał go przekierować na mojadomena.pl) a atakujący zmieni host na www.mojadomena.pl
powstanie w cache zapętlenie. Jak się przed tym bronić? Może wystarczyłoby użyć zwykłego przekierowania bez nagłówka 301?
Go to the top of the page
+Quote Post
Damonsson
post 5.10.2015, 17:58:50
Post #8





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Nie używać/filtrować HTTP_HOST
Go to the top of the page
+Quote Post
netmare
post 5.10.2015, 18:21:23
Post #9





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Ja szczerze mówiąc, nie bardzo rozumiem pojęcie podmiana hosta. Podstawową zaletą protokołu HTTP 1.1 jest możliwość utrzymania wielu stron z różnymi domenami na jednej maszynie. Np Kowalski i Iksiński mają strony na darmowym hostingu
powiedzmy na maszynie o ip 201.201.201.201. Obaj mają wykupione domeny kowalski.pl i iksinski.pl. Kiedy wpisujesz jedną z tych domen w przeglądarkę, DNS zwraca odpowiedź 201.201.201.201. Więc przeglądarka łączy się z tym ip i wysła nagłówek

GET / HTTP/1.1
Host: kowalski.pl

albo

GET / HTTP/1.1
Host: iksinski.pl

i tylko od tego nagłówka zależy czyją stronę domową obejrzysz.

Dla mnie osobiście potrzeba odczytania hosta z nagłówka w skrypcie jest dziwna i opisana sytuacja wydaje się dość wydumana. Trzeba po prostu pamiętać, że to tylko nagłówek i jeśli już coś potrzebujesz z niego wyciągnąć powinno być walidowane/filtrowane/odpowednio escapowane przed wykorzystaniem.

Co do Twojego edit2 -> faktycznie nie słyszałem o takim ataku, natomiast widzę tu tylko kolejną górnolotną nazwę dla złapania jakiegoś syfu w danych od użytkownika, a do tego z tego co ja rozumiem ten artykuł, to atak na użytkowników konkretnego serwera proxy, o ile ktoś jeszcze utrzymuje takie serwery do cachowania, a nie tylko do filtrowania ruchu.
Go to the top of the page
+Quote Post
szajens
post 5.10.2015, 19:31:45
Post #10





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


Potrzebuje użyć zmiennej http_host do przekierowania z www.domena.pl na domena.pl i zastanawiam się czy ktoś mógłby wykorzystać powyższą metodę do zapętlenia skryptu
Go to the top of the page
+Quote Post
netmare
post 5.10.2015, 20:08:30
Post #11





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Napisz lepiej czemu chcesz przekierowywać z wykorzystaniem zmiennej. Bo jak dla mnie, coś tu jest przekombinowane. A co do zagrożenia, napisz jak chcesz przekierowywać, bo z zasady branie czegoś z nagłówka i nieodpowiednia obróbka są niebezpieczne.
Go to the top of the page
+Quote Post
szajens
post 5.10.2015, 20:37:46
Post #12





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


Potrzebuje w php zrobić przekierowanie z www.mojadomena.pl na domena.pl chcę wykorzystać zmienną $_SERWER['HTTP_HOST'] w taim celu:
Kod
[php]
if ($_SERVER['HTTP_HOST'] == 'www.mojadomena.pl) {
header('HTTP/1.1 301 Moved Permanently');
header("Location: http://mojadomena.pl/");

}
[/php]


według HTTP Cache Poisoning via Host Header Injection można by się połączyć z hostem mojadomena.pl następnie podać nagłówek www.mojadomena.pl i powstałoby zapętlenie.
A tego chciałbym uniknąć.
Poza tym są programy do zmiany nagłówka podczas wywołania strony.


Czy dobrze rozumiem zasadę tego ataku? smile.gif

Ten post edytował szajens 5.10.2015, 20:45:42
Go to the top of the page
+Quote Post
netmare
post 5.10.2015, 21:06:04
Post #13





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Chyba zamiast:
header("Location: <a href="http://mojadomena.pl/&quot%3b%29;" target="_blank">http://mojadomena.pl/");
powinno być:
header("Location: http://mojadomena.pl");

Bo nic mi nie wiadomo żeby tagi html były interpretowane w nagłówkach.

A co do podmiany tego hosta, wczytaj się w posta z iksińskim i kowalskim, bo zadaje się, że nie bardzo rozumiesz pojęcie wirtualnego hosta. A to czy hosty będą się nazywać iksiński.pl i kowalski.pl czy też mojadomena.pl i www.mojadomena.pl to dwa odrębne byty i mogą zawierać kompletnie różne strony. Więc ktoś zmieniając host w nagłówku nic nie zyskuje bo:

-Jeśli te hosty będą w ramach tego samego serwera to zamiast edytować nagłówek, może po prostu sobie wpisać w na górze przeglądarki albo www.mojadomena.pl i mojadomena.pl i efekt będzie tożsamy jak z manipulacją nagłówkiem.
-Jeśli na innych hostach, to prawie podobnie, ale może dostać komunikat o tym, że nie odnaleziono serwera.

A co do ataku opisanego na stronie, ja to rozumiem tak (proxy w korpo, cache'ujace):
Użytkownik pobiera stronę której nie ma na proxy
Użytkownik1(onet.pl)->Proxy->DNS(213.180.141.140)->onet.pl->Proxy->Użytkownik1
A użytkownik2:
Użtykownik2(onet.pl)->Proxy->Użytkownik2,

Więc jeśli Użytkownik1 spreprauje nagłówek i wyśle spreparowany nagłówek (Host: onet.pl) na swój serwer 201.201.201.201 (zamiast 213.180.141.140), na którym będzie miał vhosta onet.pl, który pluje site <h1>Jestem PRO</h1> i ustawia cache control na 24h, to proxy może zachować stronę na 24h jako <h1>Jestem PRO</h1>
I od tej pory użytkownicy w korpo przez 24h będą oglądać stronę <h1>Jestem PRO</h1> pod adresem onet.pl

A jeśli nie zrozumiałem arta, to wybacz - albo nie chciało mi się wczytywać, albo był za mądry wink.gif

Co do tego co napisałeś, dalej nie wiem po co sprawdzać http_host - mz na vhost www.mojadomena.pl robisz bezwarunkowe przekierowanie na mojadomena.pl i tyle.

P.S. Z tym zapętleniem nie zapętli się, nie ma sensu i w ogóle. Lepszą próbą DoS będzie zablokowanie zapałką F5 biggrin.gif
Go to the top of the page
+Quote Post
szajens
post 5.10.2015, 21:22:00
Post #14





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


Cytat(netmare @ 5.10.2015, 22:06:04 ) *
Chyba zamiast:
header("Location: <a href="http://mojadomena.pl/&quot%3b%29;" target="_blank">http://mojadomena.pl/");
powinno być:
header("Location: http://mojadomena.pl");


forum.php dokleiło automatycznie linka podczas walidacji w klamrach php dlatego edytowałem i zmieniłem na code, zaraz się wczytam w to co napisałeś

edit:

Cytat(netmare @ 5.10.2015, 22:06:04 ) *
P.S. Z tym zapętleniem nie zapętli się, nie ma sensu i w ogóle. Lepszą próbą DoS będzie zablokowanie zapałką F5 biggrin.gif

haha dobre smile.gif uśmiałem się,

raczej chodzi mi że podajesz w pasku przeglądarki mojadomena.pl a wysyłasz host www.mojadomena.pl i jeżeli dobrze rozumiem ten atak, to powinno zapętlić jeżeli mam ustawione przekierowanie z www na bez www.

Chcę przekierować z poziomu php nie htaccess. Dlatego wydaje mi się że do sprawdzenia najlepiej będzie użyć http_host (czy została strona wywołana z www czy bez)

Ten post edytował szajens 5.10.2015, 21:24:56
Go to the top of the page
+Quote Post
netmare
post 5.10.2015, 21:26:37
Post #15





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Ja nie widzę związku pomiędzy zapętleniem, a podmianą hosta, ze względu na to czym jest vhost. Masz skonfigurowane vhosty mojadomena.pl i www.mojadomena.pl ? Oba vhosty są na jednej maszynie?
Go to the top of the page
+Quote Post
szajens
post 5.10.2015, 21:31:47
Post #16





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


tak, oba hosty na jednej maszynie, wydaje mi się że to ja czegoś nie rozumiem, a tym bardziej chyba tego arta,


zapytam inaczej,

czy jest fizycznie możliwe jakimś cudem wywołanie strony z paska adresu: www.mojadomena.pl i podmienienie hosta na mojadomena.pl ? (np programem http://filehippo.com/pl/download_fiddler/tech/)
Go to the top of the page
+Quote Post
netmare
post 5.10.2015, 21:43:10
Post #17





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


No to jeśli vhosty na jednym serwerze to:
podmiana hosta w nagłówku = zmiana adresu w pasku przeglądarki.

Zakładając, że nie masz po proxy to działania przeglądarki:

dla http://mojadomena.pl/index.php
Rozwiąż DNS mojadomena.pl =>127.0.0.1
Połącz 127.0.0.1:80
GET /index.php HTTP/1.1
Host: mojadomena.pl

dla http://www.mojadomena.pl/index.php
Rozwiąż DNS www.mojadomena.pl =>127.0.0.1
Połącz 127.0.0.1:80
GET /index.php HTTP/1.1
Host: www.mojadomena.pl

Więc, jak widzisz sama podmiana w nagłówku na nic nie wpływa, poza tym że pójdzie z innego vhosta.

Sprawdź na localhoście
dodaj te mojedomeny w pliku C:\Windows\System32\drivers\etc\hosts ze wskazaniem na 127.0.0.1
ustaw vhosty na apachu do różnych katalogów i podmieniaj nagłówek.

Mam nadzieję, że zrozumiesz, bo inaczej nie potrafię tego wytłumaczyć wink.gif


Go to the top of the page
+Quote Post
szajens
post 5.10.2015, 22:37:41
Post #18





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

Ostrzeżenie: (0%)
-----


No a da rade wyslac tak:

http://www.mojadomena.pl/index.php
Rozwiąż DNS www.mojadomena.pl =>127.0.0.1
Połącz 127.0.0.1:80
GET /index.php HTTP/1.1
Host: mojadomena.pl


Gdybym byl hackerem i umial podmieniac naglowki juz bym dawno to przetestowal smile.gif nie trul bym na forum

Edit: zostalby wywolany adres www.mojadomena.pl a w http_host mialbym mojadomena.pl i przekierowywaloby na www.mojadomena.pl i zapetlenie w przegladarce gotowe

Ten post edytował szajens 5.10.2015, 22:43:00
Go to the top of the page
+Quote Post
netmare
post 5.10.2015, 23:01:42
Post #19





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


No da, ale będzie to tożsame z wpisaniem mojadomena.pl.
Istotne jest tylko na jaki adres ip zostanie wysłany nagłówek i jaki host będzie zawierał.

Nie musisz być hakerem.
Nagłówek możesz wysłać telnetem.

Możesz wpisać telnet 127.0.0.1 80
Nie ma znaczenia czy wpiszesz 127.0.0.1, localhost, mojadomena.pl czy www.mojadomena.pl, bo wg informacji w ww pliku i tak zawsze połączysz się z usługą na porcie 80 swojego kompa. Przygotuj sobie plik x.txt a w nim na poszczególnych vhostach wpisz poszczególne: ip, local, z www, bez www.

Odpal przeglądarkę i zobacz plik x.txt na poszczególnych adresach.

Teraz notatnik i 2 linijki
GET /x.txt HTTP/1.1
Host: ...

W miejce kropek wstaw poczególne hosty.
Ważne: plik musi mieć znak nowej linii w formacie win i po nagłówku daj jedną pustą linię. Ctrl+a, ctrl+c. Otwórz telnet jak wcześniej i szybko wklej. Zobacz rezultaty.
Go to the top of the page
+Quote Post
Damonsson
post 5.10.2015, 23:02:38
Post #20





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Da radę i wejdziesz w pętle przekierowań, od 10 postów Ci to tłumaczę, że dziurą jest tylko i wyłącznie używanie bez pomyślunku HTTP_HOST, np. w taki sposób jak ten if. Jeżeli dodasz do tego cache np. po reverse proxy to bingo, masz podatność, innym osobom też pokaże się pętla przekierowań. - EDIT tego w sumie jednak pewien nie jestem, musiałbym prześledzić konkretny mechanizm cacheowania.

Ten post edytował Damonsson 5.10.2015, 23:39:00
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 04:45