Odefinierat beteende = buggigt beteende
Genom att testa en massa större webbapplikationer har de hittat ett antal intressanta hanteringar av multipla parametrar. En del applikationer tar sökparameter A och letar i databasen och sökparameter B och presenterar på webbsidan. I stil med ...
www.sajt.se/?search=Kalle&search=Stina
Din sökning på 'Kalle' gav följande träffar:
Stina Andersson
Stina af Grepe
Kristina Gunnarsson
Man kan ju undra vilken av de två parametrarna som validerades? Andra applikationer kastar undantag med informativa felmeddelanden. Ytterligare andra väljer någon av parametrarna såsom Google Search Appliance som tar den sista förekomsten.
Det blir riktigt intressant när olika parametervärden har olika accessrättigheter. Om vi tänker oss att alla användare ska få se viss data men bara administratörer ska få ändra den -- vad händer då vid följande parametersättning:
www.sajt.se/?action=view&attribute=name&action=edit
Att man överhuvudtaget kan ha fler än en förekomst av en parameter syns t ex i Javas API:
- javax.servlet.ServletRequest.getParameter() returnerar någon förekomst av parametern
- javax.servlet.ServletRequest.getParameterValues() returnerar en array av alla förekomster
OK, om olika ramverk hanterar multipla förekomster av parametrar olika så borde vi väl kunna utnyttja den funktionaliteten till något? Japp. T ex för att ta oss förbi applikationsbrandväggar som filtrerar indata.
ModSecurity säger stopp vid följande SQL-injektion i en parameter:
www.sajt.se/surfa.aspx?page=select 1,2,3 from table where id=1
Men en ASP-server kommer tolka följande parametersättning ...
www.sajt.se/surfa.aspx?page=select 1&page=2,3 from table where id=1
... som en kommaseparerad lista av parametervärden och alltså ersätta &page= med ett kommatecken. Resultatet? Jo ...
www.sajt.se/surfa.aspx?page=select 1,2,3 from table where id=1
Inga kommentarer:
Skicka en kommentar