Want create site? With Free visual composer you can do it easy.

Dalam pembelajaran Python untuk Hacker Vol. 2 ini saya akan membahas tentang jaringan. Jaringan merupakan arena yang paling erotis bagi seorang hacker. Seorang penyerang dapat melakukan hampir apa saja dengan akses jaringan yang sederhana. Seperti memindai host, menginjeksi paket, mengendus data, eksploitasi remote host, dan masih banyak lagi. Tapi sebelum itu, sangat dianjurkan biar afdol, simak dulu Python untuk Hacker volume sebelumnya disini.

Jika kamu telah berusaha memasuki kedalaman terdalam dari target, mungkin kamu akan menemukan sedikit teka-teki. Seperti tidak ada tool untuk meluncurkan serangan pada jaringan. Tidak ada netcat, tidak ada wireshark, tidak ada compiler dan tidak ada cara untuk menginstal sebuah tool pun. Namun mungkin kamu akan sedikit terkejut. Ketika kamu menemukan instalasi Python dalam target. Nah, disinilah kamu bisa mulai beraksi meskipun tidak ada tool apapun.

Dalam “Python untuk Hacker” volume 2 ini saya akan membahas beberapa dasar-dasar mengenai jaringan dalam Python menggunakan modul socket. Disini kita akan belajar membangun client, server, dan proxy TCP. Kemudian mengubahnya menjadi netcat buatan sendiri yang dilengkapi dengan command shell.

Volume 2 ini juga merupakan dasar untuk pembelajaran “Python untuk Hacker” volume berikutnya. Dimana kita akan belajar membangun sebuah tool discovery host, menerapkan cross-platform sniffer, dan menciptakan framework remote trojan.

Python Networking dalam Paragraph

Programmer memiliki sejumlah tool pihak ketiga untuk membuat jaringan server & client di Python. Tapi modul inti dari semua tool tersebut adalah modul socket. Modul ini mengekspos semua potongan yang diperlukan untuk menulis cepat TCP dan UDP client-server, menggunakan socket raw, dll.

Untuk tujuan breaking atau mempertahankan akses ke mesin target, modul ini adalah modul yang benar-benar dibutuhkan. Ok, langsung saja kita mulai dengan menciptakaan client-server sederhana.

TCP Client

Sudah tak terhitung berapa kali saya menyiapkan TCP client untuk pentest layanan, spamming, fuzz, dan lain sebagaiannya. Jika kamu mengerjakannya dalam batas-batas lingkungan perusahaan besar, mungkin kamu tidak akan mempunyai tool jaringan atau compiler mewah. Dan kadang-kadang, kamu bahkan kehilangan dasar-dasar mutlak seperti copy-paste atau koneksi internet.

Nah, disiniah kemampuan cepat dengan membuat TCP client akan sangat berguna. Ok, cukup dulu ngebacotnya. Langsung saja, let’s write the code!

Yang pertama, kita buat objek socket dengan AF_INET dan parameter SOCK_STREAM. Parameter AF_INET mengatakan kita akan menggunakan alamat IPv4 standar atau hostname. Dan SOCK_STEAM menunjukan bahwa ini akan menjadi TCP client. Kemudian menghubungkan client ke server dan mengirimkan beberapa data. Langkah terakhirnya adalah untuk menerima beberapa data kembali dan print respon. Ini merupakan bentuk sederhana dari TCP client.

Dalam potongan kode diatas, kita membuat beberapa asumsi serius tentang socket. Asumsi pertama adalah bahwa koneksi kita akan selalu berhasil. Dan yang kedua adalah bahwa server selalu berharap kita mengirim data pertama (sebagai lawan server yang mengharapkan untuk mengirim data pertama dan menunggu tanggapan). Asumsi ketiga adalah bahwa server akan selalu mengirimkan data kembali secara tepat waktu.

Kita membuat sebagian besar asumsi ini untuk lebih memudahkan. Sementara programmer memiliki beragam pendapat tentang bagaimana cara memblokir socket, exception-handling di socket, dan sejenisnya. Tapi untuk pentester yaitu membangun basa-basi tersebut ke dalam sebuah tool cepat atau untuk meluncurkan eksploitasi.

UDP Client

Python UDP client tidak jauh berbeda dari TCP client. Kita hanya perlu membuat dua perubahan kecil untuk bisa mengirim paket dalam bentuk UDP.

Disini kita ubah jenis socket untuk SOCK_DGRAM saat membuat objek socket. Langkah selanjutnya yaitu untuk panggilan sendto(), melintasi data dan kamu ingin server juga mengirim data. Karena UDP adalah protokol connectionless, tidak ada panggilan connect() terlebih dahulu. Langkah terakhirnya yaitu untuk memanggil recvfrom() agar menerima data UDP kembali. Kamu juga akan melihay bahwa ia mengembalikan kedua data juga rincial remote host dan port.

Dan lagi, disini kita tidak ingin menjadi network programmer yang unggul. Namun disini kita ingin tugas peretasan menjadi cepat, mudah, dan cukup handal. Ok, mari kita lanjut ke membuat server sederhana.

TCP Server

Membuat TCP server di Python mudahnya seperti membuat client. Mari kita mulai dengan membuat TCP server multi-thread standar.

Untuk memulai, kita pass dalam alamat IP juga port yang kita ingin server untuk listening. Selanjutnya kita memberitahu server untuk memulai listening dengan backlog maksimum konseksi diatur ke 5. Kemudian menempatkan server ke dalam lingkaran utama, dimana ia menunggu koneksi yang masuk. Ketika client terhubung, kita menerima socket client ke dalam variabel client. Dan rincian koneksi remote ke dalam variabel addr. Lalu membuat objek thread baru yang mennjuk ke fungsi handle_client. Dan kita menyebarkan objek socket client sebagai argumen. Selanjutnya memulai thread untuk menangani koneksi client, dan loop server utama siap untuk menangani koneksi lain masuk.  handle_client berfungsi melakukan revc() dan kemudian mengirimkan pesan sederhana kembali ke client.

Jika kamu menggunakan TCP client yang kita buat sebelumnya, kamu dapat mengirim beberapa paket tes ke server. Dan kamu akan melihat output seperti berikut:

Mengganti Netcat

Netcat merupakan utilitas knife dalam jaringan. Sehingga tidak mengherankan bahwa sistem cerdas administrator mengahapusnya dari sistem mereka. Namun ketika kamu menemukan server yang tidak memiliki Netcat terinstal tapi terinstal Python, nah disitu masih ada jalan.

Jika kasus nya seperti itu, kamu dapat menjatuhkan callback Python untuk memberikan akses sekunder tanpa harus burning trojan atau backdoor. Membuat tool seperti ini juga merupakan bagian dari latihan mengasah skill Python.

Di sini, kita hanya mengimpor semua library yang diperlukan dan menetapkan beberapa variabel global.

Sekarang mari kita membuat fungsi utama yang bertanggung jawab untuk menangani argumen baris perintah dan memanggil seluruh fungsi.

Dimulai dengan membaca di semua pilihan baris perintah dan pengaturan variabel yang diperlukan tergantung pada pilihan. Jika salah satu parameter baris perintah tidak sesuai dengan kriteria, maka akan mencetak informasi penggunaan yang bisa digunakan. Di blok berikutnya, kita mencoba meniru netcat untuk membaca data dari stdin dan mengirimkannya melalui jaringan. Sebagaimana yang ditulis, jika kamu berencana untuk mengirim data secara interaktif, kamu perlu Ctrl+D untuk memotong pembacaan stdin. Bagian akhirnya kita mendeteksi bahwa harus menyiapkan listening socket dan proses perintah lebih lanjut. Seperti mengupload file, menjalankan perintah, memulai command shell.

Sekarang mari kita mulai menempatkan beberapa fitur tersebut, dimulai dengan kode client. Tambahkan kode berikut di atas fungsi utama.

Kita mulai dengan menyiapkan objek socket TCP dan kemudian mengujinya untuk melihat apakah sudah menerima masukan dari stdin. Jika semuanya mulus, kita kirimkan data off untuk target remote. Dan menerima kembali data sampai tidak ada lagi data untuk diterima. Lalu kita menunggu masukan lebih lanjut dari user dan terus mengirim dan menerima data sampai user kill script. Baris ekstra baru terpasang khusus untuk inputan user, sehingga client akan kompatibel dengan command shell. Sekarang kita akan bergerak juga membuat lingkaran server utama dan fungsi rintisan yang akan menangani kedua perintah eksekusi serta full command shell.

Fungsi run_command berisi library baru yang belum saya bahas sebelumnya yaitu library subprocess. Subprocess menyediakan antarmuka proses penciptaan kuat yang memberikan sejumlah cara untuk memulai dan berinteraksi dengan program client. Dalam hal ini, kita hanya menjalankan command pass, menjalankannya dalam sistem operasi lokal, dan output kembali dari command back ke client yang terhubung. Kode exception-handling akan menangkap kesalahan generik dan memberikan pesan bahwa perintah gagal.

Sekarang mari kita menerapkan logika untuk melakukan upload file, perintah eksekusi, dan shell.

Potongan kode diatas bertanggung jawab untuk menentukan apakah tool jaringan diatur untuk menerima file ketika menerima sebuah koneksi. Hal ini dapat berguna untuk mengupload dan menjalankan tes atau untuk menginstal malware. Pertama kita menerima data file dalam loop untuk memastikan kita menerima itu semua. Dan kemudian kita cukup membuka file handle dan menulis isi dari file. wb flag memastikan bahwa kita menulis file dengan modus biner diaktifkan. Yang mana menjamin bahwa upload dan menulis biner akan berhasil. Berikutnya kita memproses fungsi execute yang memanggil fungsi run_command dan hanay mengirimkan kembali seluruh hasilnya. Bit terakhir dari kode menangani command shell. Kemudian menjalan perintah seperti yang kita kirim dan mengirimkan kembali output’annya. Kamu akan melihat bahwa itu adalah pemindaian untuk baris baru karakter yang menentukan kapan untuk memproses perintah. Yang mana membuatnya menjadi netcat-friendly.

Membangun TCP Proxy

Saya sudah mengemploy proxy sederhana menggunakan Python dalam sejumlah kasus. Diantaranya untuk membantu memahami protokol yang tidak diketahui, memodifikasi trafik yang dikirim ke aplikasi, dan menciptakan tes uji untuk fuzzers.

Kita ambil beberapa argumen di baris perintah. Dan kemudian menjalankan loop server yang mendengarkan koneksi. Ketika permintaan koneksi fresh datang, hal itu akan diserahkan pada proxy_handler yang melakukan semua pengiriman dan penerimaan bit juicy dari kedua sisi data stream.

Sekarang, kita dalami fungsi proxy_handler dengan menambahkan kode berikut di atas fungsi main.

Fungsi tersebut sebagian besar berisi logika dari proxy. Untuk memulai kia pastikan untuk tidak harus terlebih dahulu melakukan koneksi ke sisi remote dan permintaan data sebelum masuk ke lingkaran utama. Beberapa daemon server mengharapkan kamu untuk melakukan hal ini pertama kali (FTP server biasanya mengirimkan banner pertama, misalnya).

Kemudian kita gunakan fungsi receive_from, yang digunakan untuk komunikasi kedua sisi. Hal itu hanya mengambil sebuah objek dalam socket yang terkoneksi dan melakukan penerimaan. Kemudai kita buang isi paket sehingga kita dapat memeriksa sesuatu yang menari. Selanjutnya kita serahkan output ke fungsi response_handler.

Di dalam fungsi ini, kamu dapat memodifikasi isi paket, melakukan fuzzing, tes untuk masalah otentikasi, atau apapun yang diinginkan. Ada fungsi pengujian request_handler yang melakukan hal sama untuk memodifikasi trafik outbound. Lalu langkah terakhirnya adalah untuk mengirim buffer diterima oleh client.

Kode diatas adalah potongan terakhir untuk menyelesaikan proxy. Pertama kita buat hex dengan membuang fungsi yang hanya akan memiliki output rincian paket dengan nilai-nilai hexadecimal dan karakter ASCII-printable. Hal ini berguna untuk memahami protokol yang tidak diketahui, menemukan akun kredensial di protokol plaintext, dan banyak lagi.

Fungsi receive_from digunakan baik untuk menerima data lokal atau pun remote. Dan kita hanya pass dalam objek socket yang akan digunakan. Secara default, ada batas waktu dua detik yang mungkin akan menjadi agresif jika trafik proxy ke negara-negara lain atau melalui jaringan lossy (meningkatkan batas waktu yang diperlukan).

Sisanya hanya berfungsi untuk menangani penerimaan data sampai mendeteksi lebih banyak data di sisi lain dari koneksi. Dua fungsi terakhir memungkinkan kamu untuk memodifikasi trafik yang diperuntukan bagi kedua sisi proxy. Hal ini dapat berguna, misalnya, jika akun kredensial plaintext sedang dikirim dan kamu ingin mencoba untuk mengangkat hak pada aplikasi dengan melewati admin.

SSH menggunakan Paramiko

Pivoting dengan BHNET cukup berguna, tapi kadang-kadang itu lebih bijaksana digunakan untuk mengenkripsi trafik agar menghindari deteksi. Sebuah cara yang umum melakukannya adalah untuk tunnel trafik menggunakan Secure Shell (SSH). Tapi bagaimana jika target tidak memiliki SSH client?

Dalam Python, kamu bisa menggunakan socket baku dan kripto untuk membuat SSH client atau server. Nah, disini Paramiko menggunakan PyCrypto yang memberikan akses mudah untuk protokol SSH2.

Untuk mempelajari tentang bagaimana library ini, kita akan menggunakan Paramiko untuk membuat koneksi dan menjalankan perintah pada sistem SSH, mengkonfigurasi SSH server dan client untuk menjalankan perintah remote pada mesin Windows.

Pertama, comot dulu Paramiko nya menggunakan pip installer atau bisa kunjungi website officialnya http://www.paramiko.org/.

Buat file baru bernama error404_sshcmd.py dan masukkan kode berikut ini:

Kita membuat fungsi yang disebut ssh_command yang membuat koneksi ke server SSH dan menjalankan perintah tunggal. Perhatikan bahwa Paramiko mendukung otentikasi dengan key bukan otentikasi password. Menggunakan otentikasi key SSH sangat disarankan dalam keterlibatan yang nyata, tetapi untuk kemudahan penggunakan dalam contoh ini, kita akan menetapkan dengan usernam dan password otentikasi tradisional.

Karena kita mengendalikan kedua ujung koneksi, kita tetapkan kebijakan untuk menerima key SSH untuk server menghubungkan dan membuat koneksi. Dengan asumsi koneksi yang dibuat, kita jalankan perintah yang mem-pass sepanjang dalam panggilan ke fungsi ssh_command dalam contoh perintah id.

Dengan dasar-dasar yang dilakukan, mari kita memodifikasi script untuk mendukung perintah dapat berjalan dalam client Windows melalui SSH. Tentu saja, biasanya ketika menggunakan SSH, kamu menggunakan client SSH untuk koneksi ke server SSH, tapi karena Windows tidak termasuk server SSH out-of-the-box, kita perlu membalikan ini dan mengirim perintah dari server SSH untuk client.

Buat file baru bernama error404_sshRcmd.py dan masukkan kode berikut ini:

Beberapa baris pertama seperti program terakhir dan hal-hal baru dimulai pada saat True: loop. Perhatikan juga bahwa perintah pertama yang dikirim ClientConnected. Kamu akan melihat mengapa kita membuat ujung lain dari koneksi SSH.

Sekarang kita buat file baru bernama error404_sshserver.py dan masukkan kode berikut ini:

Program tersebut menciptakan koneksi antara server dan client SSH. Baik itu sistem Linux, Windows, atau bahkan OS X yang memiliki instalasi Python dan Paramiko.

SSH Tunneling

SSH tunneling terbilang menakjubkan, tetapi dapat membuat bingung untuk memahami dan mengkonfigurasinya. Terutama ketika berhadapan dengan reverse SSH tunnel.

Dalam file demo Paramiko ada file bernama rforward.py. File ini bekerja dengan sempurna, jadi saya tidak akan mengolah ulang file tersebut. Tapi saya akan mengulas beberapa poin pentingnya. Ok, langsung saja skip ke main() dan:

Beberapa baris di bagian atas double-check memastikan semua argumen yang diperlukan untuk pass ke script sebelum menyiapkan koneksi Paramiko SSH client. Bagian akhir main() memanggil fungsi reverse_forward_tunnel.

Mari kita coba lihat fungsi ini:

Dalam Paramiko, ada dua metode komunikasi utama. Pertama, transportasi, yang bertanggung jawab untuk membuat dan maintain koneksi terenkripsi. Dan kedua, channel, yang yang bertindak seperti sock untuk mengirim dan menerima data melalui sesi transportasi terenkripsi.

Di sini kita mulai menggunakan request_port_forward Paramiko untuk meneruskan koneksi TCP dari sebuah port pada SSH server dan memulai channel transportasi baru. Kemudian, di atas channel, kita memanggil fungsi handler.

Tapi kita masih belum selesai gaes:

And finally, data dikirim dan diterima.

SSH dan SSH tunneling sangat penting untuk dipahami ketika menggunakannya. Ketahui juga kapan penggunaannya dan bagaimana keterampilan SSH dan SSH tunnel ini menjadi penting bagi pentester maupun hacker. Dan disini Paramiko mengambil peran untuk menambah kemampuan tool SSH menggunakan Python yang apa adanya.

Kita sudah membuat beberapa tool sederhana namun sangat berguna dalam Python untuk Hacker Vol. 2 ini. Saya juga disini sangat menyarankan kamu untuk memperluas dan memodifikasi sesuai kebutuhan.

Tujuan utama pastinya untuk mengembangkan wawasan yang kuat tentang penggunaan Python networking untuk menciptakan tool yang dapat digunakan selamat penetration testing, post-exploitation, atau saat bug-hunting.

Ok, sampai disini dulu, di materi yang akan datang saya akan mengulas tentang penggunaan raw socket dan sniffing jaringan. Sampai jumpa di volume berikutnya!

– Salam Hangat, Kernel Panic

Did you find apk for android? You can find new Free Android Games and apps.