Advertisement
Guest User

Untitled

a guest
Mar 9th, 2019
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1.  
  2. ######################################
  3. #########__Injector Python__##########
  4. ######################################
  5. #*Obs: so atende ao metodo CONNECT
  6. #*Palavras-chave:
  7. #[crlf] = \r\n
  8. #[netData] = request line. Ex.: CONNECT a.com:443 HTTP/1.0
  9. #[host] = host requisitado. Ex.: a.com
  10. #[port] = porta requisitada. Ex.: 443
  11. #[host_port] = conjuto host:port. Ex.: a.com:443
  12. #[protocol] = protocol utilizado. Ex.: HTTP/1.0
  13.  
  14.  
  15. ###############__CONF__###############
  16. BIND_ADDR = '127.0.0.1'
  17. BIND_PORT = 8989
  18. PROXT_ADDR = '82.113.100.6'
  19. PROXY_PORT = 8080
  20. PAYLOAD = 'CONNECT [host_port] [protocol][crlf]Host: 0.facebook.com[crlf]X-Online-Host: 0.facebook.com[crlf]Connection: Keep-Alive[crlf][crlf]'
  21.  
  22.  
  23.  
  24. import socket
  25. import thread
  26. import string
  27. import select
  28.  
  29. TAM_BUFFER = 1024
  30. MAX_CLIENT_REQUEST_LENGTH = 1024 * 8
  31.  
  32. import paramiko
  33. from sshtunnel import SSHTunnelForwarder
  34.  
  35. with SSHTunnelForwarder(
  36. ('de-3.serverip.co', 80),
  37. ssh_username="fastssh.com-abdoxfox12"
  38. ssh_pkey=paramiko.RSAKey.from_private_key_file("")
  39. ssh_private_key_password="12345",
  40. remote_bind_address=("de-3.serverip.co", 80),
  41. local_bind_address=('127.0.0.1', 10022)
  42. ) as tunnel:
  43. client = paramiko.SSHClient()
  44. client.load_system_host_keys()
  45. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  46. client.connect(hostname='de-3.serverip.co', username='fastssh.com-abdoxfox12', password='12345', port=8080)
  47. # client.connect('127.0.0.1', 10022)
  48. # do some operations with client session
  49. stdin, stdout, stderr = client.exec_command('sshpass -p ******* ssh root@Storage_host_ip "isi storagepool list"')
  50. print( stdout.readlines())
  51. print( stderr.readlines())
  52. client.close()
  53.  
  54. print('FINISH!')`
  55.  
  56. #Monta uma payload
  57. def getReplacedPayload(payload, netData, hostPort, protocol):
  58. str = payload.replace('[netData]', netData)
  59. str = str.replace('[host_port]', (hostPort[0] + ':' + hostPort[1]))
  60. str = str.replace('[host]', hostPort[0])
  61. str = str.replace('[port]', hostPort[1])
  62. str = str.replace('[protocol]', protocol)
  63. str = str.replace('[crlf]', '\r\n')
  64. return str
  65.  
  66. #Separa o protocol HTTP de uma requisicao
  67. def getRequestProtocol(request):
  68. inicio = request.find(' ', request.find(':')) + 1
  69. str = request[inicio:]
  70. fim = str.find('\r\n')
  71.  
  72. return str[:fim]
  73.  
  74. #Separa o host e porta de uma requisicao
  75. def getRequestHostPort(request):
  76. inicio = request.find(' ') + 1
  77. str = request[inicio:]
  78. fim = str.find(' ')
  79.  
  80. hostPort = str[:fim]
  81.  
  82. return hostPort.split(':')
  83.  
  84. #Separa a request line de uma requisicao
  85. def getRequestNetData(request):
  86. return request[:request.find('\r\n')]
  87.  
  88. #Le uma request/response HTTP
  89. def receiveHttpMsg(socket):
  90. len = 1
  91.  
  92. data = socket.recv(1)
  93. while data.find('\r\n\r\n'.encode()) == -1:
  94. if not data: break
  95. data = data + socket.recv(1)
  96. len += 1
  97. if len > MAX_CLIENT_REQUEST_LENGTH: break
  98.  
  99. return data
  100.  
  101. #Implementa o metodo CONNECT
  102. def doConnect(clientSocket, serverSocket, tamBuffer):
  103. sockets = [clientSocket, serverSocket]
  104. timeout = 0
  105. print( '<-> CONNECT started')
  106.  
  107. while 1:
  108. timeout += 1
  109. ins, _, exs = select.select(sockets, [], sockets, 3)
  110. if exs: break
  111.  
  112. if ins:
  113. for socket in ins:
  114. try:
  115. data = socket.recv(tamBuffer)
  116. if not data: break;
  117.  
  118. if socket is serverSocket:
  119. clientSocket.sendall(data)
  120. else:
  121. serverSocket.sendall(data)
  122.  
  123. timeout = 0
  124. except:
  125. break
  126.  
  127. if timeout == 60: break
  128.  
  129. #Atente um cliente
  130. def acceptThread(clientSocket, clientAddr):
  131. print('<-> Client connected: ', clientAddr)
  132.  
  133. #Le a requisicao cliente
  134. request = receiveHttpMsg(clientSocket)
  135.  
  136. #Valida o metodo. Somente CONNECT e aceito
  137. if not request.startswith('CONNECT'):
  138. print( '<!> Client requisitou metodo != CONNECT!')
  139. clientSocket.sendall('HTTP/1.1 405 Only_CONNECT_Method!\r\n\r\n')
  140. clientSocket.close()
  141. thread.exit()
  142.  
  143. #Separa dados da request enviada
  144. netData = getRequestNetData(request)
  145. protocol = getRequestProtocol(request)
  146. hostPort = getRequestHostPort(netData)
  147.  
  148. #Gera a requisicao final a partir da payload, com base nos dados da request enviada
  149. finalRequest = getReplacedPayload(PAYLOAD, netData, hostPort, protocol)
  150.  
  151. #Envia a requisicao ao servidor proxy
  152. proxySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  153. proxySocket.connect((PROXT_ADDR, PROXY_PORT))
  154. proxySocket.sendall(finalRequest)
  155.  
  156. #Recebe a resposta do servidor proxy
  157. proxyResponse = receiveHttpMsg(proxySocket)
  158.  
  159. print '<-> Status line: ' + getRequestNetData(proxyResponse)
  160. #Envia a resposta do proxy ao cliente
  161. clientSocket.sendall(proxyResponse)
  162.  
  163. #Se a resposta do proxy contem codigo 200, executa metodo CONNECT
  164. if proxyResponse.find('200 ') != -1:
  165. doConnect(clientSocket, proxySocket, TAM_BUFFER)
  166.  
  167. #Fecha a conexao com o cliente
  168. print '<-> Client ended : ', clientAddr
  169. proxySocket.close()
  170. clientSocket.close()
  171. thread.exit()
  172.  
  173.  
  174. #############################__INICIO__########################################
  175.  
  176. print ('\n')
  177. print( '==>Injector.py')
  178. print( '-->Listening : ' + BIND_ADDR + ':' + str(BIND_PORT))
  179. print ('-->Remote proxy: ' + PROXT_ADDR + ':' + str(PROXY_PORT))
  180. print( '-->Payload : ' + PAYLOAD)
  181. print( '\n')
  182.  
  183. #Configura a escuta numa porta local
  184. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  185. server.bind((BIND_ADDR, BIND_PORT))
  186. server.listen(1)
  187.  
  188. print( '<-> Server listening... ')
  189.  
  190. #Recebe o cliente e despacha uma thread para atende-lo
  191. while True:
  192. clientSocket, clientAddr = server.accept()
  193. thread.start_new_thread(acceptThread, tuple([clientSocket, clientAddr]))
  194.  
  195. server.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement