msfjs
Version:
Node library for interacting with metasploit
91 lines (58 loc) • 1.61 kB
JavaScript
var child_process = require('child_process');
var Payloads = function(options) {
this.path = options.path;
this.payloads = [];
this.gatherPayloads();
}
Payloads.prototype.gatherPayloads = function() {
child_process.exec(this.path + '/msfpayload -l', function(err, stdout, stderr) {
var payloads = [];
stdout.split('\n').forEach(function(line) {
if(~line.indexOf('/') && !~line.indexOf("[37m|")) {
line = line.replace(/\s{2,}/g, ' ').trim().split(' ');
var payload = {
payload: line[0],
description: line.splice(1).join(' ')
}
payloads.push(payload);
}
});
this.payloads = payloads;
console.log("Loaded payloads.");
}.bind(this));
}
Payloads.prototype.getPayloads = function(cb) {
cb(this.payloads);
};
Payloads.prototype.create = function(options, cb) {
var filetypes = {
c: 'c',
perl: 'p',
ruby: 'y',
raw: 'r',
js: 'j',
javascript: 'j',
exe: 'x',
dll: 'd',
vba: 'v',
war: 'w'
}
if(!filetypes[options.type]) {
console.error(options.type + " is not a valid msfpayload type, defaulting to exe.");
options.type = 'x';
} else {
options.type = filetypes[options.type];
}
var opts = [];
for(var option in options.options) {
opts.push([ option, options.options[option] ].join('='));
}
opts = opts.join(' ');
var filename = options.filename;
child_process.exec(this.path + '/msfpayload ' + [ options.payload, opts, options.type ].join(" ") + " > " + filename, function(err, stdout, stderr) {
cb({
filename: filename
});
});
}
module.exports = Payloads;