send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Cliente FTP

  • 0 Respuestas
  • 1174 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado B3N

  • *
  • Underc0der
  • Mensajes: 36
  • Actividad:
    0%
  • Reputación 0
  • 00111011 00101001
    • Ver Perfil
    • Email
« en: Junio 25, 2015, 09:29:48 pm »
Funciona igual que los clientes ftp de la linea de comandos de cualquier sistema operativo, aunque es mas informativo, esto es un proyecto no terminado, aunque funciona perfectamente la idea no era hacer un simple cliente ftp mas, se puede utilizar como base para hacer un fuzzer, un troyano, un backdoor, etc. Yo estoy trabajando en ello, pero lo comparto con uds por si pueden sacar algo distinto, ademas por su valor didactico.


Código: Ruby
  1. #!/usr/bin/env ruby
  2. #
  3. # Copyrigth (C) 2014-2015 - B3N
  4. # Description: ftp client
  5. # Version: 1.0
  6. #
  7.  
  8. require 'net/ftp'
  9. require 'socket'
  10.  
  11. def welcome
  12.         puts @ftp.welcome
  13.         s = TCPSocket.open(@host, 21)
  14.         puts s.gets
  15.         s.close
  16.         puts @ftp.system
  17.         if @ftp.passive == true
  18.                 puts "PASSIVE MODE: on"
  19.         else
  20.                 puts "PASSIVE MODE: off"
  21.         end
  22.         puts @ftp.status
  23.  
  24. end
  25.  
  26. def exit
  27.         puts "Goodbye!"
  28. end
  29.  
  30. def debugon
  31.         @ftp.debug_mode = true
  32. end
  33.  
  34. def debugoff
  35.         @ftp.debug_mode = false
  36. end
  37.  
  38. def help
  39.         puts "help\t clear ls status system"
  40.         puts "pwd cd size size_h get send"
  41.         puts "gettext sendtext last debug[on/off]"
  42.         puts "mkdir rmdir delete rename passive"
  43. end
  44.  
  45. def clear
  46.         system "clear"
  47. end
  48.  
  49. def ls
  50.         dir_lst = @shell.split(/\s/)
  51.         puts @ftp.list(dir_lst[1])
  52. end
  53.  
  54. def status
  55.         puts @ftp.status
  56. end
  57.  
  58. def passive
  59.         puts @ftp.passive
  60. end
  61.  
  62. def pwd
  63.         puts @ftp.pwd
  64. end
  65.  
  66. def ftpsystem
  67.         puts @ftp.system
  68. end
  69.  
  70. def cd
  71.         begin
  72.                 folder_name = @shell.split(/\s/)
  73.                 @ftp.chdir(folder_name[1])
  74.         rescue
  75.                 puts "cannot change to \'#{folder_name[1]}\'."
  76.         end
  77.  
  78. end
  79.  
  80. def size
  81.         begin
  82.                 s_name = @shell.split(/\s/)
  83.                 puts @ftp.size(s_name[1])
  84.         rescue
  85.                 puts "incorrect file \'#{s_name[1]}\'."
  86.         end
  87. end
  88.  
  89. def size_h
  90.         begin
  91.                 sh_name = @shell.split(/\s/)
  92.                 result = @ftp.size(s_name[1]) / 1024
  93.                 print result.to_f
  94.                 puts " Kb"
  95.         rescue
  96.                 puts "incorrect file \'#{sh_name[1]}\'."
  97.         end
  98. end
  99.  
  100. def get
  101.         begin
  102.                 b_name = @shell.split(/\s/)
  103.                 @ftp.getbinaryfile(b_name[1], b_name[1], 1024)
  104.         rescue
  105.                 puts "cannot get \'#{b_name[1]}\'."
  106.         end
  107. end
  108.  
  109. def send
  110.         begin
  111.                 lbin_name = @shell.split(/\s/)
  112.                 @ftp.putbinaryfile(lbin_name[1], lbin_name[1], 1024)
  113.         rescue
  114.                 puts "cannot send \'#{lbin_name[1]}\'."
  115.         end
  116. end
  117.  
  118. def gettext
  119.         begin
  120.                 t_name = @shell.split(/\s/)
  121.                 @ftp.gettextfile(t_name[1])
  122.         rescue
  123.                 puts "cannot get \'#{t_name[1]}\'."
  124.         end
  125. end
  126.  
  127. def sendtext
  128.         begin
  129.                 lt_name = @shell.split(/\s/)
  130.                 @ftp.puttextfile(lt_name[1], lt_name[1])
  131.         rescue
  132.                 puts "cannot send \'#{lt_name[1]}\'."
  133.         end
  134. end
  135.  
  136. def delete
  137.         begin
  138.                 d_name = @shell.split(/\s/)
  139.                 @ftp.delete(d_name[1])
  140.         rescue
  141.                 puts "cannot delete \'#{d_name[1]}\'."
  142.         end
  143. end
  144.  
  145. def mkdir
  146.         begin
  147.                 dir_name = @shell.split(/\s/)
  148.                 @ftp.mkdir(dir_name[1])
  149.         rescue
  150.                 puts "cannot create directory \'#{dir_name[1]}\'."
  151.         end
  152. end
  153.  
  154. def rmdir
  155.         begin
  156.                 rd_name = @shell.split(/\s/)
  157.                 @ftp.rmdir(rd_name[1])
  158.         rescue
  159.                 puts "cannot remove directory \'#{rd_name[1]}\'."
  160.         end
  161. end
  162.  
  163. def rename
  164.         begin
  165.                 re_name = @shell.split(/\s/)
  166.                 @ftp.rename(re_name[1], re_name[2])
  167.         rescue
  168.                 puts "cannot rename \'#{re_name[1]}\'."
  169.         end
  170. end
  171.  
  172. def last
  173.         puts @ftp.lastresp
  174. end
  175.  
  176. def bash
  177.         while TRUE
  178.                 print "local@bash> "
  179.                 STDOUT.flush
  180.                 bash = STDIN.gets
  181.                 break if not bash
  182.                 bash.chop!
  183.                 if bash == "exit"
  184.                         break
  185.                 elsif bash == ""
  186.                 else
  187.                         system "#{bash};"
  188.                 end
  189.         end
  190. end
  191.  
  192. def lls
  193.         Dir["*"].each do |cont|
  194.                 puts cont
  195.         end
  196. end
  197.  
  198. def lcp
  199.         begin
  200.                 file = @shell.split(/\s/)
  201.                 FileUtils.cp file[1], file[2]
  202.         rescue
  203.                 puts "cannot copy \'#{file[1]}\' to \'#{file[2]}\'."
  204.         end
  205. end
  206.  
  207. def default
  208.         puts "Invalid command: #{@shell}"
  209. end
  210.  
  211. host = ARGV[0]
  212. @host = host
  213. print "Host: " unless ARGV[0]
  214. host = STDIN.gets unless ARGV[0]
  215. host.chop! unless ARGV[0]
  216.  
  217. username = ARGV[1]
  218. @username = username
  219. print "User: " unless ARGV[1]
  220. username = STDIN.gets unless ARGV[1]
  221. username.chop! unless ARGV[1]
  222.  
  223. password = ARGV[2]
  224. @password = password
  225. print "Password: " unless ARGV[2]
  226. password = STDIN.gets unless ARGV[2]
  227. password.chop! unless ARGV[2]
  228.  
  229. #if host == 'localhost' || host == '127.0.0.1' || host =~ /192.168/
  230.         Net::FTP.open(host) do |ftp|
  231.         @ftp = ftp
  232.         ftp.login(user=username.to_s, passwd=password.to_s, acct=nil)
  233.         welcome()
  234.        
  235.         while TRUE
  236.                 print "ftp> "
  237.                 STDOUT.flush
  238.                 shell = STDIN.gets
  239.                 break if not shell
  240.                 shell.chop!
  241.                 @shell = shell
  242.  
  243.                 if shell == ""
  244.                 elsif shell == "exit"                    then   exit    ;break
  245.                 elsif shell == "debug on"                then   debugon
  246.                 elsif shell == "debug off"               then   debugoff
  247.                 elsif shell == "help"                    then   help
  248.                 elsif shell == "clear"                   then   clear
  249.                 elsif shell == "status"                  then   status
  250.                 elsif shell == "passive"                 then   passive
  251.                 elsif shell == "pwd"                     then   pwd
  252.                 elsif shell == "system"                  then   ftpsystem
  253.                 elsif shell == "last"                    then   last
  254.                 elsif shell == "bash"                    then   bash
  255.                 elsif shell == "lls"                     then   lls
  256.                 elsif shell.split(/\s/)[0] == "ls"       then   ls
  257.                 elsif shell.split(/\s/)[0] == "cd"       then   cd
  258.                 elsif shell.split(/\s/)[0] == "size"     then   size
  259.                 elsif shell.split(/\s/)[0] == "size_h"   then   size_h
  260.                 elsif shell.split(/\s/)[0] == "get"      then   get
  261.                 elsif shell.split(/\s/)[0] == "send"     then   send
  262.                 elsif shell.split(/\s/)[0] == "gettext"  then   gettext
  263.                 elsif shell.split(/\s/)[0] == "sendtext" then   sendtext
  264.                 elsif shell.split(/\s/)[0] == "delete"   then   delete
  265.                 elsif shell.split(/\s/)[0] == "mkdir"    then   mkdir
  266.                 elsif shell.split(/\s/)[0] == "rmdir"    then   rmdir
  267.                 elsif shell.split(/\s/)[0] == "rename"   then   rename
  268.                 elsif shell.split(/\s/)[0] == "lcp"      then   lcp
  269.                 else                                            default
  270.                 end
  271.         end
  272.         end
  273. #else
  274. #       puts "[-] Incorrect host"
  275. #end
« Última modificación: Julio 11, 2015, 12:55:31 am por B3N »
01010111 01100001 01101011 01100101 00100000 01110101
01110000 00100000 01001110 01100101 01101111

 

¿Te gustó el post? COMPARTILO!



Conexíon Cliente/Servidor - Sanko

Iniciado por Sanko

Respuestas: 0
Vistas: 1325
Último mensaje Septiembre 05, 2012, 06:18:25 pm
por Sanko