Az elmúlt héten két érdekes hiba is szembejött velem a blogszférából, mindkettő tartogat tanulságokat. A hibákat azóta javították, erről lesz még később szó.
Az első probléma egy perzisztens XSS anyánk, a blog.hu kommentdobozában. A problémát _2501 vette észre ennél a bejegyzésnél, és volt olyan kedves, hogy meg is írta az élményt szépen:
Miután a srác aki megpróbálta a href.hu-val lerövidíteni az url-t kétszer is beleszaladt, kipróbáltam hogy tényleg a blog.hu manipulál vele, vagy csak simán elcseszte a postot.
Kipróbáltam, létrehoztam egy href.hu-s hivatkozást a http://tgpreactor.com/ -ra, és bepostoltam... tényleg átalakította.
Felmerült bennem a kérdés hogy wtf?
Máshogy nem nagyon lehet csak ha detektálja a postban a href-hu-s url-t, lekérdezni onnan hogy hova redirectel és lecseréli... kérdés az hogy előbb végzi el az xss-checket vagy html elemek kigyomlálását a commentből, vagy utána...
Ezek szerint utána:
létrehoztam egy href.hu-s hivatkozást erre az "url"-re:
http://x<script>alert(document.location)</script>
ezt kaptam:
http://href.hu/x/dw8o
megnéztem hogy hogy mennek át a tagek:
---->8----
# echo -ne "GET /x/dw8o HTTP/1.1\nHost: href.hu\nConnection: close\n\n" | nc href.hu 80
HTTP/1.1 302 Found
Connection: close
Date: Fri, 03 Dec 2010 11:17:23 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: http://x<script>alert(document.location)</script>
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 172
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://x<script>alert(document.location)</script>">here</a>.</h2>
</body></html>
---->8----
A bloghu a location header-t fogja megcsípni, és arra cseréli ki a hrefhu-s hivatkozást.
Láthatóan megkerülte a szűrést, annyi nehezítés van az xss-eléssel hogy a whitespace karaktereket lecseréli, szal space %20 ként fog megjelenni, hiába adja jól vissza a redirect headerben.
Tehát képet beszúrni csak html tagekkel nem fog így menni, mert az lesz belőle hogy <img%20src="blahblah"/>
De ezt megkerülni már lufi.
Kipróbáltam, a bit.ly hivatkozásait is lecseréli, azzal is megy.
Igen szép XSS fírget lehetett volna kreálni ebből!
A másik hibát secretworld találta a postr.hu keresőjében, bár elősőre nem volt egyértelmű, hogy valóban kihasználható-e a probléma, melynek ez a rondaság lett az eredménye:
A PDOException alapján azt hihetnénk, hogy csak valami típusegyeztetési hibát nem sikerült megfogni, ezzel még nem megy sokra egy bitbetyár, de a biztosítékot kiverő " karakter nem erre utalt. A második sor végén jól látszik, hogy egy idézőjelen és egy zárójelen belül vagyok, így könnyű volt szintaktikailag helyesre hozni a query-t:
Ez már tuti jó lesz egy blind injection-re, de jó lenne tudni azt is, hogy milyen júzerünk van:
A privilégiumszeparáció pirospontot ér, nézzük, hogy milyen táblákban turkálhatunk ilyen jogkörrel:
Hopp, mégis csak látunk! Az érintett query eredménye bekerül egy másik lekérdezésbe, így a bőbeszédű hibaüzenetekben kapásból ott van a teljes adat, innentől az adatbázis nyitott könyv, bár a továbblépési lehetőségeket erősen korlátozza a viszonylag friss MySQL verzió és az alacsony jogkör.
Természetesen már ezt a problémát is javították, a poszt második felében a hibajelzés viszontagságait igyekszem körbejárni.
theshadow · http://hackstock.blog.hu/ 2010.12.07. 19:24:12