Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: @XSStringManolo en 13 Mayo 2020, 07:48 am



Título: [Aporte] Controlar node.js desde navegador, vanilla javascript.
Publicado por: @XSStringManolo en 13 Mayo 2020, 07:48 am
Controlar node.js desde un navegador.

Cómo funciona?
Guardas el código node.js como servidor.js en el equipo a ser controlado. Cambia la ip por la tuya actual.
Guardas el código navegador como cliente.html. Cambia la ip por la ip actual del equipo corriendo el servidor.
Ejecuta el código node.js con el comando node servidor.js
Abre el client.html en el equipo que va a controlar el servidor. Escribe @seguido del comando en el priner campo y dale al botón Enter.

Cómo y para qué lo uso yo?
Activo la zona wi-fi en un Android con termux.
Me conecto al wi-fi con otro Android incompatible con Termux.
Controlo el smartphone con node.js y lo uso de servidor para desarrollo, usar bots, herramientas de hacking...

Algo más?
Puedes controlar el node escribiendo directamente sobre la barra de direcciones comandos simples sin espacios ni otros caracteres que tu navegador codifique.
CÓDIGO VULNERABLE A CSRF Y MITM entre otros.


Código navegador:
Código
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>R.Control</title>
  6. <style>
  7. textarea {
  8. height: 30em;
  9. width: 20em;
  10.  display: block;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <input type="text" id="comando">
  16. <button type="button" id="bEnter">Enter</button>
  17. <textarea id="res"></textarea>
  18. <script>
  19. document.querySelector("#bEnter").onclick=function() {
  20. var xhr = new XMLHttpRequest();
  21. xhr.open("GET", "http://192.168.5.1:8080/?comando=" + document.querySelector("#comando").value , true);
  22. xhr.send();
  23. xhr.onreadystatechange = function() {
  24.  
  25.  if (xhr.readyState == 4) {
  26.  
  27.    if (xhr.status == 0 || xhr.status == 200) {
  28.  
  29.    try {
  30. alert(xhr.getAllResponseHeaders());
  31.  
  32.      document.querySelector("#res").value = xhr.responseText;
  33.      }catch(err){alert(err)}
  34.    }
  35.  }
  36. }
  37. }
  38. </script>
  39. </body>
  40. </html>

Código node.js
Código
  1. const { http } = require("http");
  2. const { fs } = require("fs");
  3. const { url } = require("url");
  4. const { exec } = require("child_process");
  5.  
  6. const PUERTO = 8080;
  7. const IP = "192.168.5.1";
  8.  
  9. http.createServer( function (request, response) {  
  10.  
  11.   var pathname = url.parse(request.url).pathname;
  12.   var q = url.parse(request.url, true);
  13.   var comando = q.query.comando;
  14.   var output = "";
  15.   console.log("Request for " + pathname + " received.");
  16.   if(comando !== undefined) {
  17.     console.log("Comando " + comando);
  18.     if(comando.substr(0,1) == "@") {
  19.       exec(comando.substr(1), (error, stdout, stderr) => {
  20. if(error) {
  21.          console.log("Error: " + error.message);
  22. } if(stderr) {
  23.          console.log("Error: " + stderr);
  24.  return;
  25. }
  26. console.log("Output: " + stdout);
  27. output += stdout;
  28.  
  29. response.setHeader("Access-Control-Allow-Origin", "*");
  30. response.writeHead(200, {'Content-Type': 'text/html'});
  31. response.write(output);
  32. response.end();
  33.  
  34.       });
  35.     }
  36.   }
  37. }).listen(PUERTO, IP);
  38.  
  39. console.log("Server listening at " + IP + ":" + PUERTO);