Rabu, 05 Juli 2023

hacking 4

menyambungkan ke perangkat jaringan lain dari 
sistem Anda sangat penting untuk menjadi Hacker yang sukses, dan dengan teknologi 
nirkabel seperti WiFi (IEEE 802.1) dan Bluetooth menjadi kunci pencarian dan Bluetooth 
standar. Jika seseorang dapat meretas koneksi nirkabel, mereka dapat memperoleh akses ke 
perangkat dan mengakses informasi rahasia. Langkah pertama, tentu saja, adalah 
mempelajari cara menemukan perangkat ini.
Di Bab 3, kita melihat beberapa perintah jaringan dasar di Linux, termasuk beberapa 
dasar-dasar jaringan nirkabel, dengan janji akan lebih banyak jaringan nirkabel di Bab 14. 
Seperti yang dijanjikan di sini, dua teknologi nirkabel Linux: WiFi dan Bluetooth.
14.1 JARINGAN WI-FI 
Kami akan mulai dengan WiFi. Di bagian ini, saya akan menunjukkan cara 
menemukan, memeriksa, dan menghubungkan ke titik akses WiFi. Sebelum melakukannya, 
mari luangkan sedikit waktu untuk mempelajari beberapa istilah dan teknologi dasar WiFi 
untuk membantu Anda lebih memahami keluaran dari banyak pertanyaan yang akan kita 
buat di bab ini:
AP (access point /titik akses) Ini adalah perangkat yang dihubungkan pengguna nirkabel 
untuk akses internet.
ESSID ((extended service set identifier /pengidentifikasi kumpulan layanan yang diperluas)
Ini sama dengan SSID yang telah kita bahas di Bab 3, tetapi dapat digunakan untuk beberapa 
AP dalam LAN nirkabel.
BSSID (basic service set identifier /pengidentifikasi set layanan dasar) Ini adalah pengenal 
unik dari setiap AP, dan sama dengan alamat MAC perangkat.
SSID (service set identifier /pengidentifikasi set layanan) Ini adalah nama jaringan.
Channel WiFi dapat beroperasi di salah satu dari 14 saluran (1–14). Di Amerika Serikat, WiFi 
terbatas untuk saluran 1–11.
Power/Daya Semakin dekat Anda dengan WiFi AP, semakin besar dayanya, dan semakin 
mudah koneksi untuk retak.
Security Ini adalah protokol keamanan yang digunakan pada AP WiFi yang sedang dibaca. 
Ada tiga protokol keamanan utama untuk WiFi. Aslinya, Wired Equivalent Privacy (WEP), 
sangat cacat dan mudah retak. Penggantinya, WiFi Protected Access (WPA), sedikit lebih 
aman. Terakhir, WPA2PSK, yang jauh lebih aman dan menggunakan preshared key (PSK) 
yang dibagikan oleh semua pengguna, kini digunakan oleh hampir semua AP WiFi (kecuali 
WiFi perusahaan).
Mode WiFi dapat beroperasi di salah satu dari tiga mode: terkelola, master, atau monitor. 
Anda akan mempelajari arti mode ini di bagian berikutnya.
Jangkauan nirkabel Di Amerika Serikat, AP WiFi harus secara legal menyiarkan sinyalnya 
pada batas atas 0,5 watt. Dengan kekuatan ini, ia memiliki jangkauan normal sekitar 300 kaki 
(100 meter). Antena highgain dapat memperluas jangkauan ini hingga hingga 20 mil.
Frekuensi WiFi dirancang untuk beroperasi pada 2.4GHz dan 5GHz. AP WiFi modern dan 
kartu jaringan nirkabel sering menggunakan keduanya.
Perintah Nirkabel Dasar
Di Bab 3, Anda telah diperkenalkan dengan perintah jaringan dasar Linux ifconfig, 
yang mencantumkan setiap antarmuka jaringan yang diaktifkan pada sistem Anda bersama 
dengan beberapa statistik dasar, termasuk (yang paling penting) setiap alamat IP dari setiap 
alamat IP. Mari kita lihat lagi hasil Anda dari menjalankan ifconfig dan fokus pada koneksi 
nirkabel kali ini.
kali >ifconfig 
eth0Linkencap:EthernetHWaddr 00:0c:29:ba:82:0f
inet addr:192:168.181.131 Bcast:192.168.181.255 Mask:255.255.255.0 
--snip--
lo Linkencap:Local Loopback 
inet addr:127.0.0.1 Mask:255.0.0.0 
--snip—
➊ wlan0 Link encap:EthernetHWaddr 00:c0:ca:3f:ee:02
Antarmuka WiFi di sini ditampilkan sebagai wlan0 ➊. Di Kali Linux, antarmuka WiFi 
biasanya disebut sebagai wlanX, dengan X mewakili jumlah antarmuka tersebut. Dengan 
kata lain, adaptor WiFi pertama di sistem Anda akan diberi label wlan0, wlan kedua1, dan 
seterusnya.
Jika Anda hanya ingin melihat antarmuka WiFi Anda dan statistiknya, Linux memiliki 
perintah khusus yang mirip dengan ifconfig tetapi didedikasikan untuk nirkabel. Perintah 
tersebut adalah iwconfig . Saat Anda memasukkannya, hanya antarmuka nirkabel Anda dan 
data kuncinya yang ditampilkan:
kali >iwconfig
lo no wireless extensions
wlan0 IEEE 802.11bg ESSID:off/any 
Mode:Managed Access Point:Not-Associated Tx-Power=20 dBm Retry short limit:7 RTS t
hr:off Fragment thr:off 
Encryption key:off 
Power Management:off
eth0 no wireless extensions
Di sini, kita hanya melihat antarmuka nirkabel, juga dikenal sebagai kartu jaringan, dan data 
penting tentangnya, termasuk standar nirkabel yang digunakan, apakah ESSID dimatikan, 
dan modenya. Mode ini memiliki tiga setelan: terkelola, artinya siap untuk bergabung atau 
telah bergabung dengan AP; master, yang artinya siap bertindak sebagai atau sudah menjadi 
AP, dan memantau, yang akan kita bahas sedikit Bab. Kami juga dapat melihat apakah ada 
klien yang terkait dengannya dan apa daya pancarnya, di antara hal-hal lainnya. Anda dapat 
mengetahui dari contoh ini bahwa wlan0 berada dalam mode yang diperlukan untuk 
terhubung ke jaringan WiFi tetapi belum terhubung ke jaringan apa pun. Kami akan 
meninjau kembali perintah ini lagi setelah antarmuka nirkabel terhubung ke jaringan WiFi.
Jika Anda tidak yakin dengan AP WiFi yang ingin Anda sambungkan, Anda dapat 
melihat semua titik akses nirkabel yang dapat dijangkau oleh kartu jaringan Anda 
menggunakan perintah iwlist. Sintaks untuk iwlist adalah sebagai berikut:
iwlist interface action
Anda dapat melakukan beberapa tindakan dengan iwlist. Untuk tujuan kami, kami akan 
menggunakan tindakan pemindaian untuk melihat semua AP WiFi di area Anda. (Perhatikan 
bahwa dengan antena standar, jangkauan Anda adalah 300–500 kaki, tetapi ini dapat 
diperpanjang dengan antena highgain yang murah).
kali >iwlist wlan0 scan
wlan0 Scan completed: 
Cell 01 - Address:88:AD:43:75:B3:82 
Channel:1 
Frequency:2.412GHz (Channel 1) 
Quality=70/70 Signal level =-38 dBm 
Encryption key:off 
ESSID:"Hackers-Bangkit" 
--snip--
Keluaran dari perintah ini harus mencakup semua AP WiFi dalam jangkauan 
antarmuka nirkabel Anda, bersama dengan data kunci tentang setiap AP, seperti alamat 
MAC dari AP, saluran dan frekuensinya, tingkat kualitas operasinya, apakah kunci enkripsinya 
diaktifkan, dan ESSID-nya.
Anda akan memerlukan alamat MAC dari AP target (BSSID), alamat MAC klien (kartu 
jaringan nirkabel lain), dan saluran tempat AP beroperasi untuk melakukan segala jenis 
peretasan, jadi ini adalah informasi yang berharga.
Perintah lain yang sangat berguna dalam mengelola koneksi WiFi Anda adalah nmcli 
(atau antarmuka baris perintah pengelola jaringan). Daemon Linux yang menyediakan 
antarmuka tingkat tinggi untuk antarmuka jaringan (termasuk nirkabel) dikenal sebagai 
manajer jaringan. Umumnya, pengguna Linux sudah familiar dengan daemon ini dari 
antarmuka pengguna grafis (GUI), tetapi daemon ini juga dapat digunakan dari baris perintah.
Perintah nmcli dapat digunakan untuk melihat AP WiFi di dekat Anda dan data 
kuncinya, seperti yang kami lakukan dengan iwlist, tetapi perintah ini memberi kami sedikit 
lebih banyak informasi. Kami menggunakannya dalam format nmcli dev networktype, di 
mana dev adalah singkatan dari perangkat dan jenisnya (dalam hal ini) adalah wifi, seperti:
kali >nmcli dev wifi
* SSID MODE CHAN RATE SIGNAL BARS SECURITY 
Hackers-Bangkit Infra 1 54 Mbits/s 100 WPA1 WPA2 
Xfinitywifi Infra 1 54 Mbits/s 75 WPA2 
TPTV1 Infra 11 54 Mbits/s 44 WPA1 WPA2 --snip--
Selain menampilkan AP WiFi dalam jangkauan dan data penting tentangnya, 
termasuk SSID, mode, saluran, kecepatan transfer, kekuatan sinyal, dan protokol keamanan 
yang diaktifkan pada perangkat, nmcli dapat digunakan menghubungkan ke AP. Sintaks 
untuk menghubungkan ke AP adalah sebagai berikut:
nmcli dev wifi connect AP-SSID password APpassword
Jadi, berdasarkan hasil dari perintah pertama kami, kami tahu ada AP dengan SSID 
Hacker-Bangkit. Kami juga tahu bahwa AP memiliki keamanan WPA1 WPA2 (ini berarti 
bahwa AP mampu menggunakan baik WPA1 lama dan WPA yang lebih baru), yang berarti 
kami harus memberikan kata sandi untuk terhubung ke jaringan. Untungnya, karena ini 
adalah AP kami, kami tahu sandinya adalah 12345678, jadi kami dapat memasukkan yang 
berikut:
kali >nmcli dev wifi connect Hackers-Bangkit password 12345678 
Device 'wlan0' successfully activated with '394a5bf4-8af4-36f8-49beda6cb530'
Coba ini di jaringan yang Anda kenal, lalu ketika Anda berhasil tersambung ke AP nirkabel 
tersebut, jalankan iwconfig lagi untuk melihat apa yang telah berubah. Berikut keluaran saya 
dari menghubungkan ke HackersBangkit:
kali >iwconfig 
lo no wireless extensions
wlan0 IEEE 802.11bg ESSID:"Hackers-Bangkit" 
Mode:Managed Frequency:2.452GHz Access Point:00:25:9C:97:4F:48 
Bit Rate=12 Mbs Tx-Power=20 dBm 
Retry short limit:7 RTS thr:off Fragment thr:off 
Encryption key:off 
Power Management:off 
Link Quality=64/70 Signal level=-46 dBm 
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 
Tx excessive reties:0 Invalid misc:13 Missed beacon:0
eth0 no wireless extensions
Perhatikan bahwa sekarang iwconfig telah menunjukkan bahwa ESSID adalah "Hackers￾Bangkit" dan bahwa AP beroperasi pada frekuensi 2,452 GHz. Dalam jaringan WiFi, mungkin 
beberapa AP semuanya menjadi bagian dari jaringan yang sama, sehingga mungkin ada 
banyak AP yang membentuk jaringan Hackers-Bangkit. Alamat MAC 00:25:9C:97:4F:48 
adalah, seperti yang Anda duga, MAC dari AP yang saya hubungkan. Jenis keamanan yang 
digunakan jaringan WiFi, apakah berjalan pada 2.4GHz atau 5GHz, apa ESSID-nya, dan alamat 
MAC AP adalah semua bagian informasi penting yang diperlukan untuk peretasan WiFi. 
Sekarang setelah Anda mengetahui perintah dasarnya, mari masuk ke beberapa peretasan.
Pengintaian Wi-Fi dengan aircrack-ng Salah satu eksploitasi yang paling populer 
untuk dicoba oleh Hacker baru adalah meretas titik akses WiFi. Seperti yang telah disebutkan, 
sebelum Anda bahkan dapat mempertimbangkan untuk menyerang AP WiFi, Anda 
memerlukan alamat MAC dari AP target (BSSID), alamat MAC klien, dan saluran tempat AP 
beroperasi.
Kami dapat mendapatkan semua informasi itu dan lainnya menggunakan alat dari 
aircrackng suite. Saya telah menyebutkan perangkat hacking toolan WiFi ini beberapa kali 
sebelumnya, dan sekarang saatnya untuk benar-benar menggunakannya. Rangkaian alat ini 
disertakan di setiap versi Kali, jadi Anda tidak perlu mengunduh atau memasang apa pun.
Untuk menggunakan alat ini secara efektif, Anda harus terlebih dahulu memasukkan 
kartu jaringan nirkabel ke mode monitor sehingga kartu tersebut dapat melihat semua lalu 
lintas yang lewat. Biasanya, kartu jaringan hanya menangkap lalu lintas yang ditujukan 
khusus untuk kartu tersebut. Mode monitor mirip dengan mode promiscuous pada kartu 
jaringan berkabel.
Untuk menempatkan kartu jaringan nirkabel Anda dalam mode monitor, gunakan 
perintah airmon-ng dari aircrackng suite. Sintaks untuk perintah ini sederhana:
airmon-ng start|stop|restart interface
Jadi, jika Anda ingin memasukkan kartu jaringan nirkabel Anda (yang ditunjuk wlan0) ke 
dalam mode monitor, Anda akan memasukkan yang berikut ini:
kali >airmon-ng start wlan0
Found three processes that could cause trouble
If airodump-ng, aireplay-ng, or airtun-ng stops working after 
a short period of time, you may want to run 'airmon-ng check kill' 
--snip--
PHY INTERFACE DRIVER Chipset 
phy0 wlan0 rt18187 Realtek Semiconductor Corop RTL8187
(mac8311 monitor mode vif enabled for [phy0]wlan0 on [phy0]wlan0mon)
--snip--
Perintah stop dan memulai ulang, berturut-turut, menghentikan mode monitor dan memulai 
ulang mode monitor jika Anda mendapatkan masalah.
Dengan kartu nirkabel dalam mode monitor, Anda dapat mengakses semua lalu lintas 
nirkabel yang lewat dalam jangkauan adaptor dan antena jaringan nirkabel Anda (standarnya 
sekitar 300–500 kaki). Perhatikan bahwa airmon-ng akan mengganti nama antarmuka 
nirkabel Anda: milik saya telah diubah namanya menjadi "wlan0mon", meskipun milik Anda 
mungkin berbeda. Pastikan untuk mencatat nama baru yang ditetapkan untuk nirkabel Anda 
karena Anda akan memerlukan informasi tersebut di langkah berikutnya.
Sekarang kami akan menggunakan alat lain dari aircrackng suite untuk menemukan 
data kunci dari lalu lintas nirkabel. Perintah airodump-ng mengambil dan menampilkan data 
kunci dari AP penyiaran dan setiap klien yang terhubung ke AP tersebut atau di sekitar. 
Sintaksnya di sini sangat mudah: cukup pasang airdump-ng, diikuti dengan nama antarmuka 
yang Anda dapatkan dari menjalankan airmon-ng barusan. Saat Anda mengeluarkan 
perintah ini, kartu nirkabel Anda akan mengambil informasi penting (tercantum berikutnya) 
dari semua lalu lintas nirkabel AP di sekitar:
BSSID Alamat MAC AP atau klien
PWR Kekuatan sinyal
ENC Enkripsi yang digunakan untuk mengamankan transmisi
#Data Tingkat throughput data
CH Saluran tempat AP beroperasi
ESSID Nama AP
kali >airodump-ng wlan0mon
CH 9][ Elapsed: 28 s ][ 2018-02-08 10:27
BSSID PWR Beacons #Data #/s CH MB ENC CIPHER AUTH ESSID 
01:01:AA:BB:CC:22 -1 4 26 0 10 54e WPA2 CCMP PSK Hackers-Bangkit
--snip--
BSSID Station PWR Rate Lost Frames Probe 
(not associated) 01:01:AA:BB:CC:22 
01:02:CC:DD:03:CF A0:A3:E2:44:7C:E5
Perhatikan bahwa airodump-ng membagi layar keluaran menjadi bagian atas dan bawah. 
Bagian atas memiliki informasi tentang AP penyiaran, termasuk BSSID, kekuatan AP, berapa

banyak beacon frame yang telah terdeteksi, tingkat throughput data, berapa banyak paket 
yang telah melintasi kartu nirkabel(1–14), batas throughput teoretis, protokol enkripsi, sandi 
yang digunakan untuk enkripsi, jenis otentikasi, dan ESSID (biasanya disebut sebagai SSID). Di 
bagian klien, output memberi tahu kami bahwa satu klien tidak terkait, artinya telah 
terdeteksi tetapi tidak terhubung ke AP mana pun, dan yang lain terkait dengan stasiun, 
artinya alamat terhubung ke AP.
Sekarang Anda memiliki semua informasi yang Anda butuhkan untuk memecahkan 
AP! Meskipun di luar cakupan buku ini, untuk memecahkan AP nirkabel, Anda memerlukan 
alamat MAC klien, alamat MAC AP, saluran tempat target beroperasi, dan daftar kata sandi.
Jadi untuk memecahkan sandi WiFi, Anda akan membuka tiga terminal. Di terminal 
pertama, Anda akan memasukkan perintah yang mirip dengan berikut, mengisi klien dan 
alamat MAC AP dan saluran:
airodump-ng -c 10 --bssid 01:01:AA:BB:CC:22 -w Hackers-BangkitPSK wlan0mon
Perintah ini menangkap semua paket yang melintasi AP di saluran 10 menggunakan opsi -c.
Di terminal lain, Anda dapat menggunakan perintah aireplay-ng untuk mematikan 
(menghentikan autentikasi) siapa pun yang terhubung ke AP dan memaksa mereka untuk 
mengautentikasi ulang ke AP, seperti yang ditunjukkan berikutnya. Saat mereka 
mengautentikasi ulang, Anda dapat menangkap hash dari kata sandi mereka yang ditukar 
dalam jabat tangan empat arah WPA2PSK. Hash sandi akan muncul di pojok kanan atas 
terminal airodump-ng.
aireplay-ng --deauth 100 -a 01:01:AA:BB:CC:22-c A0:A3:E2:44:7C:E5 wlan0mon
Terakhir, di terminal terakhir, Anda dapat menggunakan daftar kata sandi 
(wordlist.dic) untuk menemukan kata sandi di hash yang diambil (HackersBangkitPSK.cap), 
seperti yang ditunjukkan di sini:
aircrack-ng -w wordlist.dic -b 01:01:AA:BB:CC:22 Hacker-BangkitPSK.cap
14.2 MENDETEKSI DAN MENYAMBUNGKAN KE BLUETOOTH 
Saat ini, hampir setiap gadget, perangkat seluler, dan sistem telah dilengkapi 
Bluetooth, termasuk komputer, smartphone, iPod, tablet, speaker, pengontrol game, 
keyboard, dan banyak perangkat lainnya. Mampu meretas Bluetooth dapat mengakibatkan 
kompromi informasi apa pun di perangkat, kontrol perangkat, dan kemampuan untuk 
mengirim informasi yang tidak diinginkan ke dan dari perangkat, antara lain.
Untuk mengeksploitasi teknologi, kita perlu memahami cara kerjanya. Pemahaman 
mendalam tentang Bluetooth berada di luar cakupan buku ini, tetapi saya akan memberi 
Anda beberapa pengetahuan dasar yang akan membantu Anda memindai dan 
menghubungkan ke perangkat Bluetooth sebagai persiapan untuk meretasnya.
Cara Kerja Bluetooth 
Bluetooth adalah protokol universal untuk komunikasi jarak dekat berdaya rendah 
yang beroperasi pada 2.4–2.485GHz menggunakan spektrum penyebaran, lompatan 
frekuensi pada 1.600 lompatan per detik (lompatan frekuensi ini adalah ukuran keamanan). 
Ini dikembangkan pada tahun 1994 oleh Ericsson Corp. dari Swedia dan dinamai menurut 
raja Denmark Harald Bluetooth abad ke-10 (perhatikan bahwa Swedia dan Denmark adalah 
satu negara di abad ke-10).
Spesifikasi Bluetooth memiliki jangkauan minimum 10 meter, tetapi tidak ada 
batasan untuk produsen kisaran atas yang dapat diterapkan di perangkat mereka.
Banyak perangkat memiliki rentang sebesar 100 meter. Dengan antena khusus, jangkauan 
tersebut dapat diperpanjang lebih jauh.
Menghubungkan dua perangkat Bluetooth disebut sebagai penyandingan. Hampir 
semua perangkat Bluetooth dapat terhubung satu sama lain, tetapi keduanya hanya dapat 
disandingkan jika berada dalam mode yang dapat ditemukan. Perangkat Bluetooth dalam 
mode dapat ditemukan mentransmisikan informasi berikut:
 Nama
 Kelas
 Daftar layanan
 Informasi teknis
Saat kedua perangkat berpasangan, mereka bertukar kunci rahasia atau tautan. Setiap 
menyimpan kunci tautan ini agar dapat mengidentifikasi yang lain dalam penyambungan di 
masa mendatang.
Setiap perangkat memiliki pengenal 48bit yang unik (alamat mirip MAC) dan biasanya 
nama yang ditetapkan oleh pabrikan. Ini akan menjadi bagian data yang berguna saat kami 
ingin mengidentifikasi dan mengakses perangkat.
Bluetooth Scanning and Reconnaissance 
Linux memiliki implementasi dari tumpukan protokol Bluetooth yang disebut BlueZ 
yang akan kami gunakan untuk memindai sinyal Bluetooth. Sebagian besar distribusi Linux, 
termasuk Kali Linux, telah menginstalnya secara default. Jika milik Anda tidak, Anda biasanya 
dapat menemukannya di repositori Anda menggunakan perintah berikut:
kali >apt-get install bluez
BlueZ memiliki sejumlah alat sederhana yang dapat kami gunakan untuk mengelola dan 
memindai perangkat Bluetooth, termasuk yang berikut ini:
hciconfig Alat ini beroperasi sangat mirip dengan ifconfig di Linux, tetapi untuk perangkat 
Bluetooth. Seperti yang dapat Anda lihat di Daftar 141, saya telah menggunakannya untuk 
menampilkan antarmuka Bluetooth dan menanyakan perangkat untuk spesifikasinya.
hcitool Alat pertanyaan ini dapat memberi kami nama perangkat, ID perangkat, kelas 
perangkat, dan informasi jam perangkat, yang memungkinkan perangkat bekerja secara 
serempak.
hcidump Alat ini memungkinkan kita untuk mengendus komunikasi Bluetooth, 
artinya kita dapat menangkap data yang dikirim melalui sinyal Bluetooth.
Langkah pemindaian dan pengintaian pertama dengan Bluetooth adalah memeriksa 
apakah adaptor Bluetooth pada sistem yang kami gunakan dikenali dan diaktifkan sehingga 
kami dapat menggunakannya untuk memindai perangkat lain. Kita dapat melakukan ini 
dengan hciconfig alat BlueZ bawaan, seperti yang ditunjukkan di Daftar 14.1
kali >hciconfig 
hci0: Type: BR/EDR Bus: USB 
BD Address: 10:AE:60:58:F1:37 ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING PSCAN INQUIRY 
RX bytes:131433 acl:45 sco:0 events:10519 errors:0 
TX bytes:42881 acl:45 sco:0 commands:5081 errors:0
Daftar 14.1 Memindai untuk perangkat Bluetooth
Seperti yang Anda lihat, adaptor Bluetooth saya dikenali dengan alamat MAC 
10:AE:60:58:F1:37. Adaptor ini telah diberi nama hci0. Langkah berikutnya adalah
memeriksa apakah koneksi telah diaktifkan, yang juga dapat kita lakukan dengan hciconfig 
dengan memberikan nama dan perintah naik:
kali >hciconfig hci0 up
Jika perintah berhasil berhasil, kami tidak akan melihat output, hanya promp baru. 
Bagus, hci0 sudah siap, Mari kita lakukan.
Memindai Perangkat Bluetooth dengan hcitool
Sekarang setelah kita mengetahui bahwa adaptor kita sudah aktif, kita dapat 
menggunakan alat lain di suite BlueZ yang disebut hcitool, yang digunakan untuk memindai 
perangkat Bluetooth lain dalam jangkauan.
Mari pertama-tama gunakan fungsi pemindaian alat ini untuk mencari perangkat 
Bluetooth yang mengirimkan suar penemuannya, artinya perangkat tersebut dalam mode 
penemuan, dengan perintah pemindaian sederhana yang ditampilkan di Daftar 14.2.
kali >hcitool scan 
Scanning... 
72:6E:46:65:72:66 ANDROID BT 
22:C5:96:08:5D:32 SCH-I535
Daftar 14.2 Memindai perangkat Bluetooth dalam mode penemuan
Seperti yang Anda lihat, di sistem saya, hcitool menemukan dua perangkat, ANDROID 
BT dan SCHI535. Perangkat Anda kemungkinan akan memberi Anda keluaran yang berbeda 
tergantung pada perangkat yang Anda miliki. Untuk tujuan pengujian, coba tempatkan 
ponsel Anda atau perangkat Bluetooth lainnya dalam mode penemuan dan lihat apakah 
ponsel tersebut diambil dalam pemindaian. Sekarang, mari kumpulkan lebih banyak 
informasi tentang perangkat yang terdeteksi dengan fungsi penyelidikan inq:
kali >hcitool inq
Inquiring... 
24:C6:96:08:5D:33 clock offset:0x4e8b class:
6:6F:46:65:72:67 clock offset:0x21c0 class:0x5a020c
Ini memberi kami alamat MAC perangkat, offset jam, dan kelas perangkat. Kelas tersebut 
menunjukkan jenis perangkat Bluetooth yang Anda temukan, dan Anda dapat mencari 
kodenya dan melihat jenis perangkatnya dengan membuka situs Bluetooth SIG di 
https://www.bluetooth.org/en-us/specification/assigned-numbers/servicediscovery/. 
Alat hcitool adalah antarmuka baris perintah yang kuat ke tumpukan Bluetooth yang 
dapat melakukan banyak hal. Daftar 143 menampilkan laman bantuan dengan beberapa 
perintah yang dapat Anda gunakan. Lihat sendiri halaman bantuan untuk melihat daftar 
lengkapnya.
kali >hcitool --help
hcitool - HCI Tool ver 4.99 
Usage: 
hcitool [options] <command> [command parameters]
Options: 
--help Display help 
-i dev HCI device

Commands 
dev Display local devices 
inq Inquire remote devices 
scan Scan for remote devices 
name Get name from remote devices 
--snip--
Daftar 14.3 Beberapa perintah hcitool
Banyak hacking toolan Bluetooth yang akan Anda lihat hanya menggunakan perintah 
ini dalam skrip, dan Anda dapat dengan mudah membuat alat Anda sendiri dengan 
menggunakan perintah ini di skrip bash atau Python Anda sendiri—kita akan melihat skrip di 
Bab 17.
Memindai Layanan dengan sdptool Service Discovery Protocol (SDP) adalah protokol 
Bluetooth untuk mencari layanan Bluetooth (Bluetooth adalah rangkaian layanan), dan, 
untuk membantu, BlueZ menyediakan alat sdptool untuk menjelajahi perangkat untuk 
menyediakannya. Penting juga untuk diperhatikan bahwa perangkat tidak harus dalam mode 
penemuan untuk dipindai. Sintaksnya adalah sebagai berikut:
sdptool browse MACaddress
Daftar 14.4 menunjukkan penggunaan sdptool untuk menelusuri layanan di salah 
satu perangkat yang terdeteksi sebelumnya di Daftar 14.2.
kali >sdptool browse 76:6E:46:63:72:66 
Browsing 76:6E:46:63:72:66... 
Service RecHandle: 0x10002 Service Class ID List: 
""(0x1800) 
Protocol Descriptor List: 
"L2CAP" (0x0100) 
PSM: 31 
"ATT" (0x0007) 
uint16: 0x1 
uint16: 0x5 --sni
Daftar 14.4 Memindai dengan sdptool
Di sini, kita dapat melihat bahwa alat sdptool mampu menarik informasi tentang 
semua layanan yang dapat digunakan oleh perangkat ini. Secara khusus, kami melihat bahwa 
perangkat ini mendukung Protokol ATT, yang merupakan Protokol Atribut Rendah Energi. 
Hal ini dapat memberi kami lebih banyak petunjuk tentang apa itu perangkat dan 
kemungkinan jalan potensial untuk berinteraksi dengannya lebih lanjut.
Melihat Apakah Perangkat Dapat Dijangkau dengan l2ping 
Setelah kami mengumpulkan alamat MAC dari semua perangkat di sekitar, kami 
dapat mengirimkan ping ke perangkat ini, baik dalam mode penemuan atau tidak, untuk 
melihat apakah perangkat tersebut dalam jangkauan. Ini memungkinkan kami mengetahui 
apakah mereka aktif dan dalam jangkauan. Untuk mengirim ping, kami menggunakan 
perintah l2ping dengan sintaks berikut:
l2ping MACaddress
Daftar 14.5 menunjukkan saya melakukan ping ke perangkat Android yang ditemukan di 
Daftar 14.2.
kali >l2ping 76:6E:46:63:72:66 -c 4
Ping: 76:6E:46:63:72:66 from 10:AE:60:58:F1:37 (data size 44)... 
44 bytes 76:6E:46:63:72:66 id 0 time 37.57ms 
44 bytes 76:6E:46:63:72:66 id 1 time 27.23ms 
44 bytes 76:6E:46:63:72:66 id 2 time 27.59ms
--snip--
Daftar 14.5 Ping perangkat Bluetooth
Keluaran ini menunjukkan bahwa perangkat dengan alamat MAC 76:6E:46:63:72:66 
berada dalam jangkauan dan dapat dijangkau. Ini adalah pengetahuan yang berguna, karena 
kita harus tahu apakah suatu perangkat dapat dijangkau bahkan sebelum kita berpikir untuk 
meretasnya.
14.3 RINGKASAN
Perangkat nirkabel mewakili masa depan konektivitas dan peretasan. Linux telah 
mengembangkan perintah khusus untuk memindai dan menghubungkan ke WiFi AP sebagai 
langkah pertama untuk meretas sistem tersebut. Perangkat peretasan aircrackng nirkabel 
mencakup airmon-ng dan airodump-ng, yang memungkinkan kami untuk memindai dan 
mengumpulkan informasi penting dari perangkat nirkabel dalam jangkauan. BlueZ suite 
mencakup hciconfig , hcitool, dan alat lain yang mampu memindai dan mengumpulkan 
informasi yang diperlukan untuk meretas perangkat Bluetooth dalam jangkauan. Ini juga 
mencakup banyak alat lain yang layak untuk dijelajahi.





BAB 15
MENGELOLA KERNEL LINUX DAN MODUL KERNEL
Semua sistem operasi terdiri dari setidaknya dua komponen utama. Yang pertama 
dan terpenting dari semua ini adalah kernel. Kernel berada di pusat sistem operasi dan 
mengontrol semua yang dilakukan sistem operasi, termasuk mengelola memori, mengontrol 
CPU, dan bahkan mengontrol apa yang dilihat pengguna di layar. Elemen kedua dari sistem 
operasi sering disebut sebagai lahan pengguna dan mencakup hampir semua hal lainnya.
Kernel dirancang untuk menjadi area yang dilindungi atau diistimewakan yang hanya 
dapat diakses oleh root atau akun istimewa lainnya. Ini untuk alasan yang baik, karena akses 
ke kernel dapat memberikan akses yang hampir tidak terbatas ke sistem operasi. Akibatnya, 
sebagian besar sistem operasi menyediakan akses pengguna dan layanan hanya ke lahan 
pengguna, di mana pengguna dapat mengakses hampir semua yang mereka butuhkan tanpa 
mengendalikan sistem operasi.
Akses ke kernel memungkinkan pengguna untuk mengubah cara kerja, tampilan, dan 
nuansa sistem operasi. Ini juga memungkinkan mereka untuk merusak sistem operasi, 
sehingga tidak dapat bekerja. Terlepas dari risiko ini, dalam beberapa kasus, admin sistem 
harus sangat hati-hati mengakses kernel untuk alasan operasional dan keamanan.
Dalam bab ini, kita akan mempelajari cara mengubah cara kerja kernel dan 
menambahkan modul baru ke kernel. Mungkin tidak perlu dikatakan bahwa jika seorang 
Hacker dapat mengubah kernel target, mereka dapat mengontrol sistem. Selain itu, 
penyerang mungkin perlu mengubah cara kerja kernel untuk beberapa serangan, seperti 
serangan man-in-the-middle (MITM), di mana Hacker menempatkan dirinya di antara klien 
dan server dan dapat menguping komunikasi atau mengubah komunikasi. Pertama, kita akan 
melihat lebih dekat struktur kernel dan modulnya.
15.1 APA ITU MODUL KERNEL? 
Kernel adalah sistem saraf pusat dari sistem operasi Anda, yang mengontrol semua 
yang dilakukannya, termasuk mengelola interaksi antara komponen perangkat keras dan 
memulai layanan yang diperlukan. Kernel beroperasi antara aplikasi pengguna yang Anda 
lihat dan perangkat keras yang menjalankan semuanya, seperti CPU, memori, dan hard drive.
Linux adalah kernel monolitik yang memungkinkan penambahan modul kernel. 
Dengan demikian, modul dapat ditambahkan dan dihapus dari kernel. Kernel terkadang 
perlu diupdate, yang mungkin memerlukan pemasangan driver perangkat baru (seperti kartu 
video, perangkat Bluetooth, atau perangkat USB), driver sistem file, dan bahkan ekstensi 
sistem. Driver ini harus disematkan di kernel agar berfungsi sepenuhnya. Di beberapa sistem, 
untuk menambahkan driver, Anda harus membangun kembali, mengompilasi, dan mem￾boot ulang seluruh kernel, tetapi Linux memiliki kemampuan untuk menambahkan beberapa 
modul ke kernel tanpa melalui seluruh proses tersebut. Modul ini disebut sebagai modul 
kernel yang dapat dimuat, atau LKM.
LKM memiliki akses ke tingkat kernel terendah sesuai kebutuhan, menjadikannya 
target yang sangat rentan bagi Hacker. Jenis software jahat tertentu yang dikenal sebagai 
rootkit menyematkan dirinya ke dalam kernel sistem operasi, sering kali melalui LKM ini. Jika 
malware menyematkan dirinya di kernel, Hacker dapat mengambil kendali penuh atas 
sistem operasi.
Jika seorang Hacker dapat membuat admin Linux memuat modul baru ke kernel, 
Hacker tidak hanya dapat memperoleh kendali atas sistem target tetapi, karena mereka 
beroperasi pada tingkat kernel sistem operasi apa yang dapat dikendalikan adalah 
melaporkan dalam hal proses, port, layanan, ruang hard drive, dan hampir semua hal lain 
yang dapat Anda pikirkan.
Jadi, jika seorang Hacker berhasil menggoda admin Linux untuk menginstal video 
atau driver perangkat lain yang memiliki rootkit tertanam di dalamnya, Hacker dapat 
mengambil kendali total atas sistem dan kernel. Ini adalah cara beberapa rootkit yang paling 
berbahaya memanfaatkan Linux dan sistem operasi lainnya.
Memahami LKM benar-benar merupakan kunci untuk menjadi admin Linux yang 
efektif dan menjadi Hacker yang sangat efektif dan tersembunyi. Mari kita lihat bagaimana 
kernel dapat dikelola untuk kebaikan dan keburukan.
15.2 MEMERIKSA VERSI KERNEL
Langkah pertama untuk memahami kernel adalah memeriksa kernel apa yang 
dijalankan oleh sistem Anda. Setidaknya ada dua cara untuk melakukannya. Pertama, kita 
dapat memasukkan yang berikut:
kali >uname -a 
Linux Kali 4.6.0-kalil-amd64 #1 SMP Debian 4.6.4-lkalil (2016-07-21) x86_64
Kernel merespons dengan memberi tahu kami bahwa distribusi OS yang kami jalankan 
adalah Linux Kali, versi kernel adalah 4.6.4, dan arsitektur yang digunakan adalah arsitektur 
x86_64. Ini juga memberi tahu kami bahwa ia memiliki kemampuan symmetric 
multiprocessing (SMP) (artinya dapat berjalan pada mesin dengan banyak inti atau prosesor) 
dan dibangun di Debian 4.6.4 pada 21 Juli 2016. Output Anda mungkin berbeda, tergantung 
pada kernel yang digunakan. digunakan di build Anda dan CPU di sistem Anda. Informasi ini 
mungkin diperlukan saat Anda menginstal atau memuat driver kernel, jadi sangat berguna 
untuk memahami cara mendapatkannya.
Salah satu cara lain untuk mendapatkan informasi ini, serta beberapa informasi 
berguna lainnya adalah dengan menggunakan perintah cat pada file/proc/version, seperti:
kali >cat /proc/version 
Linux version 4.6.0-kalil-amd64 (devel@kali.org) (gcc version 5.4.0 20160909
(Debian 5.4.0-6) ) #1 SMP Debian 4.6.4-lkalil (2016-07-21)
Di sini Anda dapat melihat bahwa file/proc/version mengembalikan informasi yang sama.
15.3 TUNING KERNEL DENGAN SYSCTL 
Dengan perintah yang tepat, Anda dapat menyetel kernel, artinya Anda dapat 
mengubah alokasi memori, mengaktifkan fitur jaringan, dan bahkan memperkuat kernel dari 
serangan luar.
Kernel Linux modern menggunakan perintah sysctl untuk menyetel opsi kernel. 
Semua perubahan yang Anda buat dengan sysctl tetap berlaku hanya sampai Anda mem￾boot ulang sistem. Untuk membuat perubahan permanen, Anda harus mengedit file 
konfigurasi untuk sysctl secara langsung di /etc/sysctl.conf.
Peringatan: Anda harus berhati-hati saat menggunakan sysctl karena tanpa 
pengetahuan dan pengalaman yang tepat, Anda dapat dengan mudah membuat sistem 
Anda tidak dapat di-boot dan tidak dapat digunakan. Pastikan Anda telah
mempertimbangkan apa yang Anda lakukan dengan cermat sebelum membuat perubahan 
permanen apa pun.
Mari kita me lihat isi dari sysctl sekarang. Saat ini, Anda harusnya mengenali opsi 
yang kami berikan dengan perintah yang ditampilkan di sini:
kali >sysctl -a | less 
dev.cdrom.autoclose = 1 
dev.cdrom.autoeject = 0 
dev.cdrom.check_media = 0 
dev.cdrom.debug = 0 --snip -
Pada output, Anda akan melihat ratusan baris parameter yang dapat diedit oleh 
administrator Linux untuk mengoptimalkan kernel. Ada beberapa baris di sini yang berguna 
bagi Anda sebagai Hacker. Sebagai contoh tentang bagaimana Anda dapat menggunakan 
sysctl, kita akan melihat mengaktifkan penerusan paket.
Dalam serangan maninthe middle (MITM), Hacker menempatkan dirinya di antara 
host yang berkomunikasi untuk mencegat informasi. Lalu lintas melewati sistem Hacker, 
sehingga mereka dapat melihat dan mungkin mengubah komunikasi. Salah satu cara untuk 
mencapai perutean ini adalah dengan mengaktifkan penerusan paket.
Jika Anda menggulir ke bawah beberapa halaman di output atau filter untuk “ipv4” 
(sysctl -a | less | grep ipv4 ), Anda akan melihat hal berikut:
net.ipv4.ip_dynaddr = 0 
net.ipv4.ip_early_demux = 0 
net.ipv4.ip_forward = 0 net.ipv4.ip_forward_use_pmtu = 0 
--sniP--
The line net.ipv4.ip_forward = 
0 adalah parameter kernel yang memungkinkan kernel meneruskan paket yang diterimanya. 
Dengan kata lain, paket yang diterimanya, dikirim kembali. Setelan defaultnya adalah 0, yang 
berarti bahwa penerusan paket dinonaktifkan.
Untuk mengaktifkan penerusan IP, ubah 0 menjadi 1 dengan memasukkan yang 
berikut ini:
kali >sysctl -w net.ipv4.ip_forward=1
Ingatlah bahwa perubahan sysctl terjadi pada waktu proses tetapi hilang saat sistem di-boot 
ulang. Untuk membuat perubahan permanen pada sysctl, Anda perlu mengedit file 
konfigurasi /etc/sysctl.conf. Mari ubah cara kernel menangani penerusan IP untuk serangan 
MITM dan membuat perubahan ini permanen.
Untuk mengaktifkan penerusan IP, buka file /etc/sysctl.conf di editor teks mana pun 
dan batalkan komentar pada baris untuk ip_forward.
Buka /etc/sycstl.conf dengan editor teks apa saja dan lihatlah:
#/etc/sysctl.conf - Configuration file for setting system variables 
# See /etc/sysctl.d/ for additional system variables. 
# See sysctl.conf (5) for information. 
#kernel.domainname = example.com 
# Uncomment the following to stop low-level messages on console. 
#kernel.printk = 3 4 1 3
##############################################################3 
# Functions previously found in netbase 
# Uncomment the next two lines to enable Spoof protection (reverse-path 
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks. 
# net.ipv4.conf.default.rp_filter=1 
# net.ipv4.conf.all.rp_filter=1 
# Uncomment the next line to enable TCP/IP SYN cookies 
# Note: This may impact IPv6 TCP sessions too 
#net.ipv4.tcp_syncookies=1 
See http://lwn.net/Articles/277146/
# Batalkan komentar pada baris berikutnya untuk mengaktifkan penerusan paket untuk IPv4
➊ #net.ipv4.ip_forward=1
Baris yang relevan ada di ➊ ; cukup hapus komentar (#) di sini untuk mengaktifkan 
penerusan IP.
Dari perspektif pengerasan sistem operasi, Anda dapat menggunakan file ini untuk 
menonaktifkan permintaan gema ICMP dengan menambahkan baris 
net.ipv4.icmp_echo_ignore_all=1 untuk membuatnya lebih sulit—tetapi bukannya tidak 
mungkin—bagi Hacker untuk menemukan sistem Anda. Setelah menambahkan baris, Anda 
harus menjalankan command sysctl -p .
15.4 MENGELOLA MODUL KERNEL
Linux memiliki setidaknya dua cara untuk mengelola modul kernel. Cara lama adalah 
menggunakan sekelompok perintah yang dibuat di sekitar suite insmod—insmod adalah 
singkatan dari insert module dan dimaksudkan untuk menangani modul. Cara kedua, 
menggunakan perintah modprobe, kita akan menerapkannya nanti di bab ini. Di sini, kami 
menggunakan perintah lsmod dari suite insmod untuk membuat daftar modul yang diinstal 
di kernel:
kali >lsmod
Module Size Used by 
nfnetlink_queue 20480 0 
nfnetlink_log 201480 0 
nfnetlink 16384 2 nfnetlink_log, nfnetlink_queue 
bluetooth 516096 0 
rfkill 0 2 bluetooth
--snip--
Seperti yang Anda lihat, perintah lsmod mencantumkan semua modul kernel serta informasi 
tentang ukurannya dan modul lain yang mungkin menggunakannya. Jadi, misalnya, modul 
nfnetlink—protokol berbasis pesan untuk berkomunikasi antara kernel dan ruang
pengguna—berukuran 16.384 byte dan digunakan oleh modul nfnetlink_log dan modul 
nf_netlink_queue.
Dari insmod suite, kita dapat memuat atau menyisipkan modul dengan insmod dan 
menghapus modul dengan rmmod, yang merupakan singkatan dari remove module. 
Perintah-perintah ini tidak sempurna dan mungkin tidak memperhitungkan dependensi 
modul, sehingga menggunakannya dapat membuat kernel Anda tidak stabil atau tidak dapat 
digunakan. Akibatnya, distribusi modern dari Linux kini telah menambahkan perintah 
modprobe, yang secara otomatis memuat dependensi dan membuat pemuatan dan 
penghapusan modul kernel menjadi tidak terlalu berisiko. Kami akan membahas modprobe 
sebentar lagi. Pertama, mari lihat cara mendapatkan informasi selengkapnya tentang modul 
kami.
Menemukan Informasi Lebih Lanjut dengan modinfo 
Untuk mempelajari lebih lanjut tentang salah satu modul kernel, kita dapat 
menggunakan perintah modinfo. Sintaks untuk perintah ini sangat sederhana: modinfo 
diikuti dengan nama modul yang ingin Anda pelajari. Misalnya, jika Anda ingin mengambil 
informasi dasar tentang modul kernel bluetooth yang Anda lihat saat menjalankan perintah 
lsmod sebelumnya, Anda dapat memasukkan perintah berikut:
kali >modinfo bluetooth
filename: /lib/modules/4.6.0-kali-amd64/kernel/net/bluetooth/bluetooth.ko
alias: net-pf-31
license: GPL 
version: 2.21 
description:Bluetooth Core ver 2.21 
author: Marcel Holtman <marcel@holtmann.org> 
srcversion: FCFDE98577FEA911A3DAFA9 
depends: rfkill, crc16 
intree: Y 
vermagic: 4.6.0-kali1-amd64 SMP mod_unload modversions 
parm: disable_esco: Disable eSCO connection creation (bool) 
parm: disable_ertm: Disable enhanced retransmission mode (bool)
Seperti yang Anda lihat, perintah modinfo mengungkapkan informasi penting tentang modul 
kernel ini yang diperlukan untuk menggunakan Bluetooth di sistem Anda. Perhatikan bahwa 
di antara banyak hal lainnya, ini mencantumkan dependensi modul: rfkill dan crc16. 
Dependensi adalah modul yang harus diinstal agar modul bluetooth berfungsi dengan benar.
Biasanya, ini adalah informasi yang berguna saat memecahkan masalah mengapa 
perangkat keras tertentu tidak berfungsi. Selain mencatat hal-hal seperti dependensi, Anda 
juga bisa mendapatkan informasi tentang versi modul dan versi kernel yang dikembangkan 
untuk modul tersebut dan kemudian memastikan mereka cocok dengan versi yang Anda 
jalankan.
Menambah dan Menghapus Modul dengan modprobe 
Sebagian besar distribusi Linux yang lebih baru, termasuk Kali Linux, menyertakan 
perintah modprobe untuk manajemen LKM. Untuk menambahkan modul ke kernel Anda, 
Anda akan menggunakan perintah modprobe dengan saklar -a (add), seperti:
kali >modprobe -a <module name
Untuk menghapus modul, gunakan sakelar -r (hapus) dengan modprobe diikuti dengan nama 
modul:
kali >modprobe -r <module to be removed >
Keuntungan utama menggunakan modprobe daripada insmod adalah modprobe memahami 
dependensi, opsi, dan prosedur penginstalan dan penghapusan serta mempertimbangkan 
semua ini sebelum melakukan perubahan. Dengan demikian, lebih mudah dan lebih aman 
untuk menambahkan dan menghapus modul kernel dengan modprobe.
Inserting dan Deleting Modul Kernel
Mari kita coba menyisipkan dan menghapus modul pengujian untuk membantu Anda 
membiasakan diri dengan proses ini. Bayangkan Anda baru saja memasang kartu video baru 
dan Anda perlu memasang driver untuk kartu video tersebut. Ingat, driver untuk perangkat 
biasanya dipasang langsung ke dalam kernel untuk memberi mereka akses yang diperlukan 
agar berfungsi dengan benar. Hal ini juga membuat driver menjadi lahan subur bagi Hacker
jahat untuk memasang rootkit atau perangkat pendengar lainnya.
Mari kita asumsikan untuk tujuan demonstrasi (tidak benar-benar menjalankan 
perintah ini) bahwa kita ingin menambahkan driver video baru bernama 
HackersBangkitNewVideo. Anda dapat menambahkannya ke kernel Anda dengan 
memasukkan yang berikut:
kali >modprobe -a HackersBangkitNewVideo
Untuk menguji apakah modul baru dimuat dengan benar, Anda dapat menjalankan 
perintah dmesg yang mencetak buffer pesan dari kernel, lalu memfilter untuk "video" dan 
mencari peringatan apa pun yang akan menunjukkan masalah.
kali >dmesg | grep video
Jika ada pesan kernel dengan kata "video" di dalamnya, pesan tersebut akan 
ditampilkan di sini. Jika tidak ada yang muncul, berarti tidak ada pesan yang berisi kata kunci 
tersebut.
Kemudian, untuk menghapus modul yang sama ini, Anda dapat memasukkan 
perintah yang sama tetapi dengan tombol -r (hapus):
kali >modprobe -r HackersBangkitNewVideo
Ingat, modul kernel yang dapat dimuat adalah kemudahan bagi pengguna/admin 
Linux, tetapi juga merupakan kelemahan keamanan utama dan yang harus diketahui oleh 
Hacker profesional. Seperti yang saya katakan sebelumnya, LKM dapat menjadi kendaraan 
yang sempurna untuk memasukkan rootkit Anda ke dalam kernel dan mendatangkan 
malapetaka!
15.5 RINGKASAN 
Kernel sangat penting untuk keseluruhan operasi sistem operasi, dan dengan 
demikian, ini adalah kawasan yang dilindungi. Apa pun yang secara tidak sengaja 
ditambahkan ke kernel dapat mengganggu sistem operasi dan bahkan mengendalikannya.
LKM memungkinkan administrator sistem untuk menambahkan modul langsung ke 
dalam kernel tanpa harus membangun kembali seluruh kernel setiap kali mereka ingin 
menambahkan modul.
Jika seorang Hacker dapat meyakinkan admin sistem untuk menambahkan LKM yang 
berbahaya, Hacker dapat mengambil kendali penuh atas sistem, sering kali tanpa diketahui 
oleh admin sistem.





BAB 16
OTOMATISASI TASK DENGAN JOB SCHEDULING
Seperti semua orang yang menggunakan Linux, Hacker sering kali memiliki tugas, 
skrip, atau tugas lain yang ingin dijalankan secara berkala. Anda mungkin, misalnya, ingin 
menjadwalkan pencadangan file reguler otomatis dari sistem Anda, atau mungkin Anda ingin 
memutar file log seperti yang kami lakukan di Bab 11. Hacker, di sisi lain, mungkin juga ingin 
sistem pemindai MySQL menjalankan sistem mereka. .sh skrip dari Bab 8 setiap malam atau 
saat mereka di kerja atau sekolah. Ini adalah semua contoh penjadwalan pekerjaan otomatis. 
Menjadwalkan tugas memungkinkan Anda menjalankan tugas tanpa harus memikirkannya, 
dan Anda dapat menjadwalkan tugas untuk dijalankan saat Anda tidak menggunakan sistem 
sehingga Anda memiliki banyak sumber daya gratis.
Admin Linux—atau Hacker dalam hal ini—mungkin juga ingin menyetel skrip atau 
layanan tertentu untuk memulai secara otomatis saat sistem mereka melakukan booting. 
Dalam Bab 12, kita melihat penggunaan database PostgreSQL yang terkait dengan kerangka 
kerja Hacker/pentest Metasploit. Daripada memulai secara manual database PostgreSQL 
setiap kali sebelum memulai Metasploit, Anda dapat membuat PostgreSQL—atau layanan 
atau skrip apa pun—mulai secara otomatis saat sistem melakukan booting.
Dalam bab ini, Anda akan mempelajari lebih lanjut tentang cara menggunakan 
daemon cron dan crontab untuk menyiapkan skrip agar berjalan secara otomatis, bahkan 
saat sistem tidak dijaga. Anda juga akan mempelajari cara menyiapkan skrip startup yang 
secara otomatis berjalan setiap kali sistem di-boot, yang akan memberi Anda layanan yang 
diperlukan yang perlu Anda jalankan selama hari sibuk peretasan.
16.1 MEJADWALKAN ACARA UNTUK DILAKSANAKAN SECARA OTOMATIS
Daemon cron dan tabel cron (crontab) adalah alat yang paling berguna untuk 
menjadwalkan tugas reguler. Yang pertama, crond, adalah daemon yang berjalan di latar 
belakang. Daemon cron memeriksa tabel cron untuk perintah mana yang harus dijalankan 
pada waktu tertentu. Kita dapat mengubah tabel cron untuk menjadwalkan tugas atau 
pekerjaan yang harus dijalankan secara teratur pada hari atau tanggal tertentu, pada waktu 
tertentu setiap hari, atau setiap beberapa minggu atau bulan.
Untuk menjadwalkan tugas atau tugas ini, masukkan ke dalam file tabel cron yang 
terletak di /etc/crontab. Tabel cron memiliki tujuh bidang: lima bidang pertama digunakan 
untuk menjadwalkan waktu untuk menjalankan tugas, bidang keenam menentukan 
pengguna, dan bidang ketujuh digunakan untuk jalur absolut ke perintah yang Anda jalankan. 
Jika kami menggunakan tabel cron untuk menjadwalkan skrip, kami dapat menempatkan 
jalur absolut ke skrip di kolom ketujuh.
Masing-masing dari lima bidang waktu mewakili elemen waktu yang berbeda: menit, 
jam, hari dalam sebulan, bulan, dan hari dalam seminggu, dalam urutan itu. Setiap elemen 
waktu harus direpresentasikan secara numerik, sehingga Maret direpresentasikan sebagai 3 
(Anda tidak bisa hanya memasukkan “Maret”). Hari-hari dalam seminggu dimulai pada 0, 
yaitu hari Minggu, dan berakhir pada 7 yang juga hari Minggu. Tabel 16.1 meringkas ini.

Jadi, jika kami telah menulis skrip untuk memindai globe untuk port terbuka yang 
rentan dan ingin menjalankannya setiap malam pada pukul 02:30, Senin hingga Jumat, kami 
dapat menjadwalkannya di file crontab. Kami akan memandu melalui proses bagaimana 
memasukkan informasi ini ke dalam crontab sebentar lagi, tetapi pertama-tama mari kita 
bahas format yang harus kita ikuti, yang ditunjukkan di Daftar 16.1.
M H DOM MON DOW USER COMMAND 
30 2 * * 1-5 root /root/myscanningscript
Daftar 16.1 Format untuk penjadwalan perintah
File crontab membantu melabeli kolom untuk Anda. Perhatikan bahwa kolom 
pertama menunjukkan menit (30), kolom kedua menunjukkan jam (2), kolom kelima 
menunjukkan hari (1-5, atau Senin hingga Jumat), kolom keenam mendefinisikan pengguna 
(root), dan kolom ketujuh adalah jalur menuju skrip. Kolom ketiga dan keempat berisi tanda 
bintang (*) karena kami ingin skrip ini dijalankan setiap hari Senin sampai Jumat terlepas dari 
hari atau bulannya.
Dalam Daftar 16.1, bidang kelima menentukan rentang untuk hari dalam minggu den
gan menggunakan tanda hubung () di antara angka. Jika Anda ingin menjalankan skrip pada 
beberapa hari yang tidak bersebelahan dalam seminggu, Anda dapat memisahkan hari-hari 
tersebut dengan koma (,). Jadi, Selasa dan Kamis adalah 2,4 .
Untuk mengedit crontab, Anda dapat menjalankan perintah crontab diikuti dengan 
opsi-e (edit):
kali >crontab -e 
Select an editor. To change later, run 'select-editor'. 
1. /bin/nano <----easiest 
2. /usr/bin/mcedit 
3. /usr/bin/vim.basic 
4. /usr/bin/vim.gtk 
5. /usr/bin/vim.tiny 
Choose 1-5 [1]:

Saat pertama kali Anda menjalankan perintah ini, perintah ini akan menanyakan 
editor mana yang ingin Anda gunakan. Defaultnya adalah /bin/nano, opsi 1. Jika Anda 
memilih opsi ini, opsi akan terbuka langsung ke crontab.
Opsi lainnya, dan sering kali yang lebih baik untuk pendatang baru di Linux, adalah 
membuka crontab langsung di editor teks favorit Anda, yang dapat Anda lakukan seperti:
kali >leafpad /etc/crontab
Saya telah menggunakan perintah ini untuk membuka crontab di Leafpad. 
Anda dapat melihat cuplikan file di Daftar 16.2.
# /etc/crontab: system-wide crontab 
# Unlike any other crontab, you don't have to run the 'crontab' 
# command to install the new version when you edit this file 
# and files in /etc/cron.d. These files also have username fields, 
# which no other crontabs do.
SHELL=/bin/sh 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command 
17 * * * * root cd / && run-parts --report /etc/cron.hourly 
25 6 * * * root test -x /usr/sbin/anacron II ( cd / && run-parts 
47 6 * * 7 root test -x /usr/sbin/anacron II ( cd / && run-parts 
52 6 1 * * root test -x /usr/sbin/anacron II ( cd / && run-parts 
#
Daftar 16.2 File crontab sedang digunakan di editor teks
Sekarang, untuk menetapkan tugas baru yang dijadwalkan secara rutin, Anda hanya 
perlu memasukkan baris baru dan menyimpan file.
Menjadwalkan Tugas Pencadangan Mari kita lihat utilitas ini terlebih dahulu dari 
perspektif administrator sistem. Sebagai administrator sistem, Anda sering kali ingin 
menjalankan pencadangan semua file Anda setelah jam kerja, saat sistem tidak digunakan 
dan sumber daya tersedia dengan mudah. (Pencadangan sistem cenderung memerlukan 
sumber daya sistem yang tidak terlalu dibutuhkan selama jam kerja.) Waktu yang ideal 
mungkin di tengah malam pada akhir pekan. Daripada harus masuk pada pukul 02:00 pada 
Sabtu malam/Minggu pagi (saya yakin Anda memiliki prioritas lain pada waktu itu), Anda 
dapat menjadwalkan pencadangan untuk dimulai secara otomatis pada waktu itu, meskipun 
Anda tidak berada di depan komputer .
Perhatikan bahwa bidang jam menggunakan jam 24 
jam daripada menggunakan AM dan PM, jadi 1 PM, misalnya, 13:00. Perhatikan juga bahwa 
hari dalam seminggu (DOW) dimulai dengan hari Minggu (0) dan diakhiri dengan hari Sabtu 
(6).
Untuk membuat tugas, Anda hanya perlu mengedit file crontab dengan 
menambahkan baris dalam format yang ditentukan. Jadi, misalnya Anda ingin membuat 
tugas pencadangan biasa menggunakan akun pengguna bernama “pencadangan”. Anda akan 
menulis skrip untuk mencadangkan sistem dan menyimpannya sebagai systembackup.sh di 
direktori/bin, lalu menjadwalkan pencadangan ini untuk dijalankan setiap Sabtu 
malam/Minggu pagi pukul 02.00 dengan menambahkan baris berikut ke crontab:
00 2 * * 0 backup /bin/systembackup.sh

Perhatikan bahwa karakter pengganti * digunakan untuk menunjukkan “setiap”, dan 
menggunakannya sebagai pengganti digit untuk hari dalam sebulan, bulan, atau hari dalam 
seminggu dibaca sebagai “semua” hari atau bulan. Jika Anda membaca di baris ini, ternyata 
ternyata
1. Di bagian atas jam (00 ),
2. Dari jam kedua (2 ),
3. Dari setiap hari dalam bulan (* ),
4. Dari setiap bulan (* ),
5. Pada Minggu (0 ),
6. Sebagai pengguna cadangan,
7. Jalankan skrip di /bin/systembackup.sh.
Daemon cron kemudian akan menjalankan skrip tersebut setiap Minggu pagi pukul 02.00, 
setiap bulan.
Jika Anda hanya ingin pencadangan berjalan pada tanggal 15 dan 30 setiap bulan, 
terlepas dari hari apa dalam seminggu tanggal tersebut jatuh, Anda dapat merevisi entri di 
crontab agar muncul sebagai berikut:
00 2 15,30 * * backup /root/systembackup.sh
Perhatikan bahwa bidang hari dalam bulan/day of the month (DOM) sekarang memiliki 15,30. 
Ini memberi tahu sistem untuk menjalankan skrip hanya pada tanggal 15 dan 30 setiap bulan, 
jadi sekitar setiap dua minggu. Jika Anda ingin menentukan beberapa hari, jam, atau bulan, 
Anda perlu mencantumkannya dengan dipisahkan dengan koma, seperti yang kami lakukan 
di sini.
Selanjutnya, mari kita asumsikan bahwa perusahaan mengharuskan Anda untuk 
sangat waspada dengan cadangannya. Perangkat ini tidak dapat kehilangan bahkan satu hari 
pun data jika terjadi pemadaman listrik atau kerusakan sistem. Kemudian, Anda perlu 
mencadangkan data setiap malam kerja dengan menambahkan baris berikut:
00 23 * * 1-5 backup /root/systembackup.sh
Pekerjaan ini akan berjalan pada pukul 11 malam (jam 23), setiap hari dalam sebulan, 
setiap bulan, tetapi hanya pada Senin sampai Jumat (hari 1-5). Khususnya perhatikan bahwa 
kami menetapkan hari Senin sampai Jumat dengan memberikan interval hari (1-5) yang 
dipisahkan dengan tanda hubung (). Ini mungkin juga telah ditetapkan sebagai 1,2,3,4,5; 
kedua cara ini berfungsi dengan baik.
Menggunakan crontab untuk Menjadwalkan MySQLscanner 
Anda Sekarang setelah Anda memahami dasar-dasar penjadwalan tugas dengan 
perintah crontab, mari jadwalkan skrip MySQLscanner.sh yang mencari port MySQL terbuka 
yang Anda buat di MySQLscannersearchThisesSQLini dengan mencari port terbuka 3306.
Untuk memasukkan MySQLscanner.sh Anda ke file crontab, edit file tersebut untuk 
memberikan rincian pekerjaan ini, seperti yang kami lakukan dengan cadangan sistem. Kami 
akan menjadwalkannya untuk dijalankan di siang hari saat Anda sedang bekerja sehingga 
tidak menghabiskan sumber daya saat Anda menggunakan sistem rumah Anda. 
Untuk melakukannya, masukkan baris berikut di crontab Anda:
00 9 * * * user /usr/share/MySQLsscanner.sh
Kami telah menyiapkan tugas untuk dijalankan pada 00 menit, pada jam kesembilan, 
setiap hari dalam sebulan (*), setiap bulan (*), setiap hari dalam seminggu (*), dan untuk menjalankannya sebagai pengguna biasa. Kami hanya perlu menyimpan file crontab ini 
untuk menjadwalkan pekerjaan.
Sekarang, katakanlah Anda ingin sangat berhati-hati dan hanya menjalankan 
pemindai ini pada akhir pekan dan pada pukul 02.00 ketika kecil kemungkinan ada orang 
yang menonton lalu lintas jaringan. Anda juga hanya ingin itu berjalan di musim panas, Juni 
hingga Agustus. Pekerjaan Anda akan sekarang terlihat seperti ini:
00 2 * 6-8 0,6 user /usr/share/MySQLsscanner.sh
Anda akan menambahkan ini ke crontab seperti seperti:
# /etc/crontab: system-wide crontab 
# Tidak seperti crontab lainnya, Anda tidak perlu menjalankan 'crontab'
# perintah untuk menginstal versi baru saat Anda mengedit file ini
# dan file di /etc/cron.d. File-file ini juga memiliki bidang nama pengguna,
# yang tidak dilakukan oleh crontab lainnya.
SHELL=/bin/sh 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command 
17 * * * * root cd / && run-parts --report /etc/cron.hourly 
25 6 * * * root test -x /usr/sbin/anacron II ( cd / && run-parts --report /etc/cron.daily ) 
47 6 * * 7 root test -x /usr/sbin/anacron II ( cd / && run-parts --report /etc/cron.weekly ) 
52 6 1 * * root test -x /usr/sbin/anacron II ( cd / && run-parts --report /etc/cron.monthly ) 
00 2 * 6-8 0,6 user /usr/share/MySQLsscanner.sh
Sekarang, MySQLscanner.sh Anda hanya akan berjalan pada akhir pekan di bulan Juni, Juli 
dan Agustus pukul 2 pagi. 
Pintasan crontab
File crontab memiliki beberapa pintasan bawaan yang dapat Anda gunakan alih-alih 
menentukan waktu, hari, dan bulan setiap waktu. Ini termasuk yang berikut:
 @yearly
 @annually
 @monthly
 @weekly
 @daily
 @midnight
 @noon
 @reboot
Jadi, jika Anda ingin pemindai MySQL berjalan setiap malam di tengah malam, Anda dapat 
menambahkan baris berikut ke file crontab:
@midnight user /usr/share/MySQLsscanner.sh
16.2 MENGGUNAKAN SKRIP RC UNTUK MENJALANKAN PEKERJAAN SAAT MULAI 
Setiap kali Anda memulai sistem Linux, sejumlah skrip dijalankan untuk menyiapkan 
lingkungan untuk Anda. Ini dikenal sebagai skrip rc. Setelah kernel melakukan inisialisasi dan 
memuat semua modulnya, kernel memulai daemon yang dikenal sebagai init atau init.d. 
Daemon ini kemudian mulai menjalankan sejumlah skrip yang ditemukan di/etc/init.d/rc. 
Skrip ini mencakup perintah untuk memulai banyak layanan yang diperlukan untuk 
menjalankan sistem Linux Anda seperti yang Anda harapkan.
Linux Runlevel Linux memiliki beberapa runlevel yang menunjukkan layanan apa yang 
harus dimulai saat boot. Misalnya, runlevel 1 adalah mode pengguna tunggal, dan layanan 
seperti jaringan tidak dimulai di runlevel 1. Skrip rc disetel untuk berjalan bergantung pada 
runlevel yang dipilih:
0 Menghentikan sistem
1 Mode pengguna tunggal/minimal
2–5 Mode multipengguna
6 Mulai ulang sistem
Menambahkan Layanan ke rc.d 
Anda dapat menambahkan layanan agar skrip rc.d dijalankan saat startup 
menggunakan perintah update-rc.d. Perintah ini memungkinkan Anda untuk menambah 
atau menghapus layanan dari skrip rc.d. Sintaksnya untuk update-rc.d sangat mudah; Anda 
cukup mencantumkan perintah diikuti dengan nama skrip dan kemudian tindakan yang 
harus dilakukan, seperti:
kali >update-rc.d <name of the script or service> 
< remove | defaults |disable |enable>
Sebagai contoh tentang bagaimana Anda dapat menggunakan update-rc.d, mari kita 
asumsikan Anda selalu ingin database PostgreSQL dimulai saat boot sistem sehingga 
kerangka kerja Metasploit Anda dapat menggunakannya untuk menyimpan hasil pengujian 
dan peretasan. Anda akan menggunakan update-rc.d untuk menambahkan baris ke skrip rc.d 
untuk mengaktifkannya dan menjalankannya setiap kali Anda mem-boot sistem Anda.
Sebelum Anda melakukannya, mari kita periksa apakah PostgreSQL sudah berjalan di 
sistem Anda. Anda dapat melakukannya menggunakan perintah ps dan menyalurkannya ke 
filter yang mencari PostgreSQL menggunakan grep, seperti:
kali >ps aux | grep postgresql
root 3876 0.0 0.0 12720 964pts/1 S+ 14.24 0.00 grep postgresql
Keluaran ini memberi tahu kami bahwa satu-satunya proses yang ditemukan berjalan 
untuk PostgreSQL adalah perintah yang kami jalankan untuk mencarinya, jadi tidak ada 
database PostgreSQL yang berjalan di sistem ini saat ini.
Sekarang, mari update rc.d kita agar PostgreSQL berjalan secara otomatis saat 
bootup:
kali >update-rc.d postgresql defaults
Tindakan ini akan menambahkan baris ke file rc.d. Anda perlu me-reboot sistem agar 
perubahan terjadi. Setelah Anda selesai melakukannya, mari gunakan kembali perintah ps 
dengan grep untuk mencari proses PostgreSQL:
kali >ps aux | grep postgresql
postgresql 757 0.0 0.1 287636 25180 ? S March 14
0.0 /usr/lib/postgresql/9.6/bin/postgresql -D
/var/lib/postgresql/9.6/main
-c config_file=/etc/postgresql/9.6/main/postgresql.conf
root 3876 0.0 0.0 12720 964pts/1 S+ 14.24 0.00 grep postgresql
Seperti yang Anda lihat, PostgreSQL berjalan tanpa Anda pernah memasukkan perintah apa 
pun secara manual. Ini secara otomatis dimulai saat sistem Anda booting, siap dan 
menunggu untuk digunakan dengan Metasploit Anda!
16.3 MENAMBAHKAN LAYANAN KE BOOTUP ANDA VIA GUI
Jika Anda lebih nyaman bekerja dari GUI untuk menambahkan layanan saat startup, 
Anda dapat mengunduh alat rcconf berbasis GUI yang belum sempurna dari repositori Kali, 
seperti:
kali >apt-get install rcconf
Setelah rcconf selesai diinstal, Anda dapat memulai rcconf dengan memasukkan yang 
berikut ini:
kali >rcconf
Ini akan membuka GUI sederhana seperti yang ada di Gambar 16.1. Anda kemudian dapat 
menggulir melalui layanan yang tersedia, memilih layanan yang ingin Anda mulai saat boot, 
dan klik OK.
Gambar 16.1 GUI rcconf untuk menambahkan layanan ke startup
Pada gambar ini, Anda dapat melihat layanan PostgreSQL yang tercantum kedua dari 
terakhir. Tekan bilah spasi untuk memilih layanan ini, tekan TAB untuk menyorot <Ok>, lalu 
tekan ENTER. Saat berikutnya Anda mem-boot Kali, PostgreSQL akan dimulai secara otomatis.
16.4 RINGKASAN
Baik administrator sistem maupun Hacker sering kali perlu menjadwalkan layanan, 
skrip, dan utilitas untuk dijalankan pada interval reguler. Linux memungkinkan Anda untuk 
menjadwalkan hampir semua skrip atau utilitas untuk dijalankan secara reguler 
menggunakan daemon cron yang menjalankan tugas ini dari tabel cron. Selain itu, Anda 
dapat membuat layanan dimulai secara otomatis saat boot dengan menggunakan perintah 
update-rc.d atau alat berbasis GUI rcconf untuk mengupgrade skrip rc.d.




BAB 17
DASAR-DASAR SCRIPT PYTHON UNTUK HACKERS
Keterampilan dasar pembuatan skrip sangat penting untuk menjadi master Hacker.
Tanpa mengembangkan beberapa keterampilan dasar pembuatan skrip, Hacker pemula yang 
hanya menggunakan alat yang dibuat oleh orang lain akan dikutuk ke dunia script kiddies. Ini 
berarti bahwa Anda akan dibatasi untuk menggunakan alat yang dikembangkan oleh orang 
lain, yang mengurangi kemungkinan keberhasilan Anda dan meningkatkan kemungkinan 
deteksi oleh software antivirus (AV), intrusion detection systems (IDS), dan penegakan 
hukum. Dengan beberapa keterampilan scripting, Anda dapat meningkatkan diri Anda ke 
eselon atas dari master Hacker!
Di Bab 8, kami mencakup dasar-dasar skrip bash dan membuat beberapa skrip 
sederhana, termasuk MySQLScanner.sh, yang menemukan sistem yang menjalankan sistem 
database MySQL yang ada di mana-mana. Di bab ini, kita mulai melihat bahasa scripting yang 
paling banyak digunakan oleh Hacker: Python. Banyak alat Hacker paling populer ditulis 
dalam Python, termasuk sqlmap, scapy, SocialEngineer Toolkit (SET), w3af, dan banyak lagi.
Python memiliki beberapa fitur penting yang membuatnya sangat cocok untuk 
peretasan, tetapi mungkin yang paling penting, Python memiliki beragam pustaka yang 
sangat besar—modul kode bawaan yang dapat diimpor secara eksternal dan digunakan 
kembali—yang menyediakan fungsionalitas yang uat. Python dikirimkan dengan lebih dari 
1.000 modul bawaan, dan banyak lagi yang tersedia di berbagai repositori lainnya. Membuat 
hacking tool juga bisa dibuat menggunakan bahasa yang lain, seperti bash, Perl, dan Ruby, 
tetapi modul Python mempermudah pembuatan alat ini.
17.1 MENAMBAHKAN MODUL PYTHON 
Saat menginstal Python, Anda juga menginstal kumpulan pustaka dan modul 
standarnya yang menyediakan berbagai kemampuan yang luas, termasuk tipe data bawaan, 
penanganan pengecualian, modul numerik dan matematika, penanganan data dan 
kriptografi, penanganan file dan data, interaksi dengan internet protocol (IP)
Gambar 17.1 Indeks Paket Python
Terlepas dari semua kekuatan yang ditawarkan oleh perpustakaan dan modul 
standar ini, Anda mungkin memerlukan atau menginginkan modul pihak ketiga tambahan. 
Modul pihak ketiga yang tersedia untuk Python sangat luas dan mungkin merupakan alasan 
sebagian besar Hacker lebih memilih Python untuk membuat skrip. Anda dapat menemukan 
daftar lengkap modul pihak ketiga di PyPI (Indeks Paket Python, ditunjukkan pada Gambar 
17.1) di http://www.pypi.org/.
Menggunakan pip 
Python memiliki pengelola paket khusus untuk menginstal dan mengelola paket 
Python yang dikenal sebagai pip (Paket Pemasangan Pip). Karena kami bekerja dengan 
Python 3 di sini, Anda akan membutuhkan pip untuk Python 3 untuk mengunduh dan 
menginstal paket. Anda dapat mendownload dan menginstal pip dari repositori Kali dengan 
memasukkan kode berikut:
kali >apt-get install python3-pip
Sekarang, untuk mengunduh modul dari PyPI, Anda cukup memasukkan ini:
kali >pip3 install <package name
Saat Anda mengunduh paket ini, paket tersebut akan ditempatkan secara otomatis di 
direktori /usr/local//lib/<pythonversion>/distpackages. Jadi, misalnya, jika Anda telah 
menggunakan pip untuk menginstal implementasi Python dari protokol SNMP untuk Python 
3.6, Anda akan menemukannya di /usr/local/lib/python3.6/pysnmp. Jika Anda tidak yakin di 
mana sebuah paket telah ditempatkan di sistem Anda (terkadang distribusi Linux yang 
berbeda menggunakan direktori yang berbeda), Anda dapat memasukkan pip3 diikuti 
dengan show dan nama paket, seperti yang ditunjukkan di sini:
kali >pip3 show pysnmp
Name: pysnmp
Version: 4.4.4 
Summary: SNMP library for Python 
Home-page: https://github.com/etingof/pysnmp
Author: Ilya Etingof <etingof@gmail.com> 
Author-email: etingof@gmail.com License: BSD 
Location: usr/local/lib/python3.6/dist-packages 
Requires: ptsmi, pyansl, pycryptodomex
Anda dapat melihat ini memberi Anda banyak informasi tentang paket, termasuk direktori 
yang menyimpannya. Sebagai alternatif untuk menggunakan pip, Anda dapat mengunduh 
paket langsung dari situs (pastikan bahwa diunduh ke direktori yang benar), 
membongkarnya (lihat Bab 9 tentang cara membongkar software), lalu jalankan yang berikut:
kali >python setup.py install
Tindakan ini akan menginstal semua paket yang belum dibongkar yang belum diinstal.
Memasang Modul Pihak Ketiga 
Untuk memasang modul pihak ketiga yang dibuat oleh anggota komunitas Python 
lainnya (berlawanan dengan paket Python yang dirilis secara resmi), Anda cukup 
menggunakan wget untuk mengunduhnya dari mana pun disimpan secara online, buka 
kompresi modul, lalu jalankan perintah python setup.py install.
Sebagai contoh, mari unduh dan instal modul Python untuk alat pemindaian port 
yang kita gunakan di Bab 8, nmap, dari repositori online-nya di https://xael.org. 
Pertama, kita perlu mengunduh modul dari xael.org:
kali >wget http://xael.org/norman/python/python-nmap/python-nmap-0.3.4.tar.gz 
--2014-12-28 17:48:32-- http://xael.org/norman/python/python-nmap/python-nmap0.3.4.ta
r.gz 
Resolving xael.org (xael.org)...194.36.166.10 
Connecting to xael.org (xael.org)|194.36.166.10|:80...connected.
--snip--
2018-21-28 17.48:34 (113 KB/s) - 'python-nmap-0.3.4.tar.gz' saved 
[40307/40307]
Di sini, Anda dapat melihat kami menggunakan perintah wget dan URL lengkap untuk paket 
tersebut. Setelah paket diunduh, Anda perlu membuka kompresnya dengan tar, seperti yang 
Anda pelajari di Bab 9:
kali >tar -xzf python-nmap-0.3.4.tar.gz
Kemudian ubah direktori ke direktori yang baru dibuat:
kali >cd python-nmap-.03.4
Terakhir, di direktori tersebut, instal modul baru dengan memasukkan yang berikut:
kali >~/python-nmap-0.3.4 >python setup.py install 
running install 
running build 
running build_py 
creating build

--snip--
running install_egg_info 
writing /usr/local/lib/python2.7/dist-packages/python_nmap-0.3.4.egg.info
Modul lain yang tak terhitung banyaknya dapat diperoleh dengan cara ini juga. Setelah Anda 
menginstal modul nmap ini, Anda dapat menggunakannya di skrip Python Anda dengan 
mengimpor modul. Selengkapnya tentang ini nanti. Sekarang mari memulai beberapa 
scripting.
17.2 MEMULAI SCRIPT DENGAN PYTHON
Sekarang setelah Anda mengetahui cara memasang modul di Python, saya ingin 
membahas beberapa konsep dasar dan terminologi Python, lalu sintaks dasar. Setelah itu, 
Anda akan menulis beberapa skrip yang akan berguna bagi Hacker di mana pun dan saya 
harap akan menunjukkan kekuatan Python.
Sama seperti dengan bash atau bahasa skrip lainnya, kita dapat membuat skrip 
Python menggunakan editor teks apa pun. Untuk bab ini, untuk menyederhanakan, saya 
menyarankan Anda untuk menggunakan editor teks sederhana seperti Leafpad, tetapi 
berguna untuk mengetahui bahwa sejumlah lingkungan pengembangan terintegrasi, atau 
IDE, tersedia untuk digunakan. IDE seperti editor teks dengan kemampuan lainnya yang ada 
di dalamnya, seperti kemampuan pengodean warna, debugging, dan kompilasi. Kali memiliki 
IDE PyCrust bawaan, tetapi masih banyak lagi IDE yang tersedia untuk diunduh, salah 
satunya adalah PyCharm milik JetBrain. Ini adalah IDE yang sangat baik dengan banyak 
penyempurnaan yang membuat pembelajaran Python lebih mudah dan lebih cepat. Ada 
versi profesional untuk pembelian dan edisi komunitas yang gratis. Anda dapat 
menemukannya di https://www.jetbrains.com/pycharm/.
Setelah Anda menyelesaikan bab ini, jika Anda ingin terus belajar Python, PyCharm adalah 
alat yang sangat baik yang akan membantu Anda dalam pengembangan Anda. Untuk saat ini, 
kami akan menggunakan editor teks dasar seperti Leafpad untuk menyederhanakan 
semuanya.
Perhatikan bahwa mempelajari bahasa pemrograman apa pun membutuhkan waktu 
dan banyak kerja keras. Bersabarlah dengan diri sendiri—berusahalah untuk menguasai 
setiap skrip kecil yang saya berikan sebelum melanjutkan.
MEMFORMAT DI PYTHON
Keterampilan dasar pembuatan skrip sangat penting untuk menjadi master Hacker. 
Tanpa mengembangkan beberapa keterampilan dasar pembuatan skrip, Hacker pemula yang 
hanya menggunakan alat yang dibuat oleh orang lain akan dikutuk ke dunia script kiddies. Ini 
berarti bahwa Anda akan dibatasi untuk menggunakan alat yang dikembangkan oleh orang 
lain, yang mengurangi kemungkinan keberhasilan Anda dan meningkatkan kemungkinan 
deteksi oleh software antivirus (AV), intrusion detection systems (IDS), dan penegakan 
hukum. Dengan beberapa keterampilan scripting, Anda dapat meningkatkan diri Anda ke 
eselon atas dari master Hacker!
Variabel
Sekarang, ke beberapa konsep yang lebih praktis di Python. Variabel adalah salah 
satu jenis data paling dasar dalam pemrograman, dan Anda pernah menemukannya di Bab 8 
dengan skrip bash. Secara sederhana, variabel adalah nama yang dikaitkan dengan nilai
tertentu sehingga setiap kali Anda menggunakan nama itu dalam program Anda, itu akan 
memanggil nilai terkait.
Cara kerjanya adalah bahwa nama variabel menunjuk ke data yang disimpan di lokasi 
memori, yang mungkin berisi segala jenis nilai, seperti bilangan bulat, bilangan real, string, 
bilangan floatingpoint, Boolean (pernyataan benar atau salah), atau daftar. kamus. Kami 
akan secara singkat mencakup semua ini di bab ini.
Agar terbiasa dengan dasar-dasarnya, mari buat skrip sederhana yang ditampilkan di 
Daftar 17.1, di Leafpad dan simpan sebagai Hackersbangkit_greetings.py.
#! /usr/bin/python3
name="OccupyTheWeb"
print ("Greetings to " + name + " from Hackers-Bangkit. The BestPlace to Learn Hacking!")
Daftar 17.1 Program Python pertama Anda
Baris pertama hanya memberi tahu sistem Anda bahwa Anda ingin menggunakan 
juru bahasa Python untuk menjalankan program ini, bukan bahasa lainnya.
Baris kedua menentukan variabel yang disebut nama dan memberi nilai untuk 
variabel tersebut (dalam hal ini, "OccupyTheWeb"). Anda harus mengubah nilai ini menjadi 
nama Anda sendiri. Nilai dari variabel ini adalah dalam format data karakter string, artinya 
konten diapit dalam tanda kutip dan diperlakukan seperti teks. Anda juga dapat 
memasukkan angka ke dalam string, dan angka tersebut akan diperlakukan seperti teks, 
sehingga Anda tidak akan dapat menggunakannya dalam perhitungan numerik.
Baris ketiga membuat pernyataan print() yang menggabungkan Greetings to dengan 
nilai dalam variabel nama, diikuti dengan teks dari Hackers-Bangkit. Tempat Terbaik untuk 
Belajar Hacking! Pernyataan print() akan menampilkan apa pun yang Anda teruskan ke 
dalam tanda kurung di layar Anda.
Sekarang, sebelum Anda dapat menjalankan skrip ini, Anda perlu memberi diri Anda 
izin untuk menjalankannya. Kami membutuhkan perintah chmod untuk melakukannya. 
(Untuk informasi selengkapnya tentang izin Linux, lihat Bab 5).
kali >chmod 755 Hackers-bangkit_greetings.py
Seperti yang Anda lakukan di Bab 8 dengan skrip bash, untuk menjalankan skrip Anda, 
awali nama skrip dengan titik dan garis miring. Direktori Anda saat ini tidak ada dalam 
variabel $PATH untuk alasan keamanan, jadi kami harus mendahului nama skrip dengan./ 
untuk memberi tahu sistem agar mencari di direktori saat ini untuk nama file dan 
menjalankannya. Untuk menjalankan skrip khusus ini, masukkan yang berikut:
kali >./Hackers-bangkit_greetings.py
Greetings to OccupyTheWeb from Hackers-Bangkit. The Best Place to Learn Hacking!
Di Python, setiap jenis variabel diperlakukan seperti kelas.
Kelas adalah sejenis templat untuk membuat objek. Lihat “Object-Oriented 
Programming (OOP)” dalam skrip berikut, saya telah mencoba menunjukkan beberapa jenis 
variabel. Variabel dapat menyimpan lebih dari sekadar string. Daftar 17.2 menampilkan 
beberapa variabel yang berisi jenis data berbeda.
#! /usr/bin/python3
HackersBangkitStringVariable = "Hackers-Bangkit Is the Best Place to Learn Hacking
HackersBangkitIntegerVariable = 12
HackersBangkitFloatingPointVariable = 3.1415
HackersBangkitList = [1,2,3,4,5,6]
HackersBangkitDictionary = {'name' : 'OccupyTheWeb', 'value' : 27)
print (HackersBangkitStringVariable)
print (HackersBangkitIntegerVariable)
print (HackersBangkitFloatingPointVariable)
Daftar 17.2 Serangkaian struktur data yang terkait dengan variabel
Ini membuat lima variabel yang berisi tipe data yang berbeda: string, diperlakukan 
sebagai teks; integer, yang merupakan tipe angka tanpa desimal yang dapat digunakan 
dalam operasi numerik; float, yang merupakan tipe angka yang juga dapat digunakan dengan 
desimal dalam operasi numerik; daftar, yang merupakan serangkaian nilai yang disimpan 
bersama; dan kamus, yang merupakan kumpulan data yang tidak berurutan di mana setiap 
nilai dipasangkan dengan kunci, yang berarti setiap nilai dalam kamus memiliki kunci 
pengenal yang unik. Ini berguna ketika Anda ingin merujuk atau mengubah nilai dengan 
merujuk ke nama kunci. Misalnya, katakanlah Anda memiliki kamus bernama fruit_color 
yang dikonfigurasi seperti berikut:
fruit_color = {'apple' : 'red', 'grape' : 'green', orange : 'orange'}
Jika nanti dalam skrip Anda Anda ingin mendapatkan fruit_color dari anggur, Anda cukup 
menyebutnya dengan kuncinya:
print (fruit_color['grape'])
Anda juga dapat mengubah nilai untuk kunci tertentu; misalnya, di sini kami mengubah 
warna apel:
fruit_color['apple'] : 'green'
Kami akan membahas daftar dan kamus secara lebih mendetail nanti di bab ini.
Buat skrip ini di editor teks apa pun, simpan sebagai secondpythonscript.py, lalu beri 
izin pada diri Anda untuk menjalankannya, seperti:
kali >chmod 755 secondpythonscript.p
Saat kami menjalankan skrip ini, skrip akan mencetak nilai variabel string, variabel integer, 
dan variabel angka floatingpoint, seperti:
kali >./secondpythonscript.py 
Hackers-Bangkit Is the Best Place to Learn Hacking 
12 
3.1415

Catatan
Di Python, tidak tidak perlu mendeklarasikan variabel sebelum menetapkan nilai padanya, 
seperti dalam beberapa bahasa pemrograman lainnya.
Komentar
Seperti bahasa pemrograman dan skrip lainnya, Python memiliki kemampuan untuk 
menambahkan komentar. Komentar hanyalah bagian dari kode Anda—kata, kalimat, dan 
bahkan paragraf—yang menjelaskan apa yang dimaksud dengan kode tersebut. Python akan 
mengenali komentar dalam kode Anda dan mengabaikannya. Meskipun komentar tidak 
diperlukan, komentar tersebut sangat membantu saat Anda kembali ke kode Anda dua 
tahun kemudian dan tidak dapat mengingat apa yang harus dilakukan. Pemrogram sering 
menggunakan komentar untuk menjelaskan apa yang dilakukan oleh blok kode tertentu atau 
untuk menjelaskan logika di balik pemilihan metode pengkodean tertentu.
Komentar diabaikan oleh penerjemah. Ini berarti bahwa setiap baris yang ditetapkan 
sebagai komentar akan dilewati oleh penerjemah, yang terus berlanjut sampai menemukan 
baris kode yang sah. Python menggunakan simbol # untuk menunjukkan awal dari komentar 
tunggal. Jika Anda ingin menulis komentar multibaris, Anda dapat menggunakan tiga tanda 
kutip ganda (""") di awal dan akhir bagian komentar.
Seperti yang dapat Anda lihat di skrip berikut, saya telah menambahkan komentar 
singkat multibaris ke skrip Hackersbangkit_greetings.py sederhana kami.
#! /usr/bin/python3 
""" This is my first Python script with comments. Comments are used to help explain code to
ourselves and fellow programmers. In this case, this simple script creates a greeting for 
the user. 
""" 
name = "OccupyTheWeb" 
print ("Greetings to "+name+" from Hackers-Bangkit. The Best Place to Learn Hacking!")
Saat kami mengeksekusi skrip lagi, tidak ada perubahan yang dibandingkan terakhir kali skrip 
dijalankan, seperti yang Anda dapat lihat di sini:
kali >./Hackers-bangkit_greetings.py 
Greetings to OccupyTheWeb from Hackers-Bangkit. The Best Place to Learn Hacking!
Ini berjalan persis sama seperti di Daftar 17.1, tetapi sekarang kami memiliki beberapa info 
tentang skrip kami saat kami kembali ke kode di lain waktu.
Fungsi 
Fungsi dalam Python adalah bit kode yang melakukan tindakan tertentu. Pernyataan 
print() yang Anda gunakan sebelumnya, misalnya, adalah fungsi yang menampilkan nilai apa 
pun yang Anda berikan ke sana. Python memiliki sejumlah fungsi bawaan yang dapat 
langsung Anda impor dan gunakan. Sebagian besar dari mereka tersedia pada penginstalan 
default Python Anda di Kali Linux, meskipun masih banyak lagi yang tersedia dari 
perpustakaan yang dapat diunduh. Mari kita lihat hanya beberapa dari ribuan fungsi yang 
tersedia untuk Anda:
 exit() keluar dari sebuah program.
 float() mengembalikan argumennya sebagai angka floatingpoint. 
Misalnya, float(1) akan mengembalikan 1.0 .
 help() menampilkan help pada objek yang ditentukan oleh argumennya.
 int() mengembalikan bagian bilangan bulat dari argumennya (terpotong).
 len() mengembalikan jumlah elemen dalam daftar atau kamus.
 max() mengembalikan nilai maksimum dari argumennya (daftar ).
 open() membuka file dalam mode yang ditentukan oleh argumennya.
 range() mengembalikan daftar bilangan bulat antara dua nilai yang ditentukan oleh 
argumennya.
 sort() mengambil daftar sebagai argumen dan mengembalikannya dengan elemennya
secara berurutan.
 type() mengembalikan jenis argumennya (misalnya, int, file, metode, fungsi).
Anda juga dapat membuat fungsi Anda sendiri untuk melakukan tugas khusus. Karena ada 
begitu banyak yang sudah ada dalam bahasa ini, selalu ada baiknya memeriksa apakah suatu 
fungsi sudah ada sebelum melakukan upaya membangunnya sendiri. Ada banyak cara untuk 
melakukan pemeriksaan ini. Salah satunya adalah dengan melihat dokumentasi resmi 
Python yang tersedia di https://docs.python.org. Pilih versi yang Anda kerjakan lalu pilih 
Referensi Library.
17.3 DAFTAR
Banyak bahasa pemrograman menggunakan array sebagai cara untuk menyimpan 
beberapa objek terpisah. Array adalah daftar nilai yang dapat diambil, dihapus, diganti, atau 
dikerjakan dengan berbagai cara dengan merujuk nilai tertentu dalam array berdasarkan 
posisinya dalam daftar, yang dikenal sebagai indeksnya. Penting untuk diperhatikan bahwa 
Python, seperti banyak lingkungan pemrograman lainnya, mulai menghitung indeks pada 0, 
jadi elemen pertama dalam daftar adalah indeks 0, yang kedua adalah indeks 1, yang ketiga 
adalah indeks 3, dan seterusnya. Jadi, misalnya, jika kita ingin mengakses nilai ketiga dalam 
array, kita dapat melakukannya dengan array [2]. Di Python, ada beberapa implementasi 
array, tetapi mungkin implementasi yang paling umum dikenal sebagai daftar.
Daftar di Python dapat diubah, artinya daftar dapat menyediakan elemen berturut￾turut saat Anda menjalankan semuanya. Hal ini berguna karena cukup sering ketika kami 
menggunakan daftar, kami menelusurinya untuk menemukan nilai tertentu, untuk mencetak 
nilai satu per satu, atau untuk mengambil nilai dari satu daftar dan memasukkannya ke 
dalam daftar lain.
Jadi, mari kita bayangkan kita perlu menampilkan elemen keempat dalam daftar 
HackersBangkitList dari Daftar 17.2. Kita dapat mengakses elemen tersebut dan 
mencetaknya dengan memanggil nama daftar, HackersBangkitList, diikuti dengan indeks 
elemen yang ingin kita akses yang diapit dalam tanda kurung siku.
Untuk mengujinya, tambahkan baris berikut ke bagian bawah skrip pythonscript.py 
kedua Anda untuk mencetak elemen di indeks 3 di HackersBangkitList: 
--snip--
print (HackersBangkitStringVariable)
print (HackersBangkitIntegerVariable)
print (HackersBangkitFloatingPointVariable)
print (HackersBangkitList[3])
Saat kami menjalankan skrip ini lagi, kami dapat melihat bahwa pernyataan cetak baru 
mencetak 4 di samping keluaran lainnya:
kali >./secondpythonscript.py

Hackers-Bangkit Is the Best Place to Learn Hacking 
12 
3.1415 
4
17.4 MODUL
Modul hanyalah bagian dari kode yang disimpan ke dalam file terpisah sehingga Anda 
dapat menggunakannya sebanyak yang Anda butuhkan dalam program Anda tanpa harus 
mengetik semuanya lagi. Jika Anda ingin menggunakan modul atau kode apa pun dari modul, 
Anda perlu mengimpornya. Seperti yang telah dibahas sebelumnya, menggunakan modul 
standar dan modul pihak ketiga adalah salah satu fitur utama yang membuat Python sangat 
kuat bagi para Hacker. Jika kami ingin menggunakan modul nmap yang telah kami instal 
sebelumnya, kami akan menambahkan baris berikut ke skrip kami:
Nanti dalam bab ini, kita akan menggunakan dua modul yang sangat berguna: socket dan 
ftplib.
import nmap
Nanti dalam bab ini, kita akan menggunakan dua modul yang sangat berguna: socket 
dan ftplib.
17.5 OBJECT-ORIENTED PROGRAMMING (OOP) 
Sebelum kita mempelajari lebih dalam tentang Python, mungkin ada baiknya 
meluangkan beberapa menit untuk membahas konsep object-oriented programming (OOP). 
Python, seperti kebanyakan bahasa pemrograman saat ini (C++, Java, dan Ruby, untuk 
menyebutkan beberapa) mengikuti model OOP.
Gambar 17.2 menunjukkan konsep dasar di balik OOP: alat utama bahasa adalah 
objek, yang memiliki properti dalam bentuk atribut dan status, serta metode yang 
merupakan tindakan yang dilakukan oleh atau pada objek.
Gambar 17.2 Ilustrasi pemrograman berorientasi objek
Ide di balik bahasa pemrograman berbasis OOP adalah untuk membuat objek yang 
bertindak seperti sesuatu di dunia nyata. Misalnya, mobil adalah suatu benda yang memiliki 
sifat, seperti roda, warna, ukuran, dan jenis mesinnya; ia juga memiliki metode, yaitu 
tindakan yang dilakukan mobil, seperti mempercepat dan mengunci pintu. Dari perspektif 
bahasa alami manusia, objek adalah kata benda, properti adalah kata sifat, dan metode 
umumnya adalah kata kerja.
Objek adalah anggota kelas, yang pada dasarnya adalah template untuk membuat 
objek dengan variabel awal, properti, dan metode bersama. Misalnya, katakanlah kami 
memiliki kelas yang disebut mobil; mobil kami (BMW) akan menjadi anggota kelas mobil. 
Kelas ini juga akan mencakup benda/mobil lain, seperti Mercedes dan Audi, seperti yang 
ditunjukkan pada Gambar 17.3.

Gambar 17.3 Kelas dan objek OOP
Kelas mungkin juga memiliki subkelas. Kelas mobil kami memiliki subkelas BMW, dan 
objek dari subkelas tersebut mungkin adalah model 320i.
Setiap objek akan memiliki properti (make, model, tahun, dan warna) dan metode 
(mulai, mengemudi, dan parkir), seperti yang ditunjukkan pada Gambar 17.4.
Gambar 17.4 properti OOP dan metode
Dalam bahasa OOP, objek mewarisi karakteristik kelasnya, sehingga BMW 320i akan 
mewarisi metode mulai, mengemudi, dan parkir dari mobil kelas.
Konsep-konsep OOP ini sangat penting untuk memahami cara kerja Python dan 
bahasa OOP lainnya, seperti yang akan Anda lihat dalam skrip di bagian berikut.
17.6 KOMUNIKASI JARINGAN DI PYTHON
Sebelum kita beralih ke konsep Python lainnya, mari kita gunakan apa yang telah Anda 
pelajari sejauh ini untuk menulis beberapa skrip peretasan yang harus dilakukan dengan 
koneksi jaringan.
Membangun Klien TCP Kami akan membuat koneksi jaringan di Python menggunakan 
modul soket. Saya telah menyebutkan bahwa Python dilengkapi dengan perpustakaan 
modul untuk banyak tugas. Dalam hal ini, kita memerlukan modul soket untuk membuat 
koneksi TCP. Mari kita melihatnya dalam tindakan.
Lihat skrip di Daftar 17.3 bernama HackersBangkitSSHBannerGrab.py (Saya tahu, ini 
namanya panjang, tetapi bersabarlah dengan saya di sini). Spanduk adalah apa yang 
ditampilkan aplikasi saat seseorang atau sesuatu terhubung ke sana. Ini semacam seperti 
aplikasi yang mengirimkan sapaan mengumumkan apa itu. Hacker menggunakan teknik yang 
dikenal sebagai spanduk meraih untuk mengetahui informasi penting tentang aplikasi atau 
layanan apa yang berjalan di port.
#! /usr/bin/python3
➊ import socket 
➋ s = socket.socket()
➌ s.connect(("192.168.1.101", 22)) 
➍ answer = s.recv(1024) 
➎ print (answer)
s.close
Daftar 17.3 Skrip Python bannergrabbing
Pertama, kita impor modul socket ➊ agar dapat menggunakan fungsi dan alatnya. Di 
sini, kita akan menggunakan alat jaringan dari modul socket untuk menjaga antarmuka 
koneksi melalui jaringan untuk kita. Soket menyediakan cara bagi dua node komputer untuk 
berkomunikasi satu sama lain. Biasanya, satu adalah server dan satu adalah klien.
Kemudian, kita membuat variabel baru, s dan mengaitkannya dengan kelas soket dari 
modul soket ➋. Dengan cara ini, kita tidak perlu merujuk sintaks lengkap socket.socket() 
kapan pun kita ingin menggunakan kelas socket—kita cukup menggunakan nama variabel s.
Kami kemudian menggunakan metode connect() dari modul soket ➌ untuk membuat 
koneksi jaringan ke IP dan port tertentu. Ingatlah bahwa metode adalah fungsi yang tersedia 
untuk objek tertentu. Sintaksnya adalah object.method (misalnya, socket.connect ). Dalam 
hal ini, saya menghubungkan ke alamat IP 192.168.1.101, yang merupakan alamat IP mesin 
di jaringan saya, dan port 22, yang merupakan port SSH default. Anda dapat mengujinya 
di instance lain dari Linux atau Kali. Sebagian besar memiliki port 22 terbuka secara default.
Setelah Anda membuat sambungan, ada beberapa hal yang dapat Anda lakukan. Di 
sini, kami menggunakan metode recv untuk membaca 1024 byte data dari soket ➍ dan 
menyimpannya dalam jawaban bernama answer; 1024 byte ini akan berisi informasi 
spanduk. Kemudian kami mencetak konten variabel tersebut ke layar dengan print() fungsi 
➎ untuk melihat data apa yang telah dilewatkan melalui soket tersebut, memungkinkan 
kami untuk memata-matainya! Di baris akhir, kami menutup koneksi.
Simpan skrip ini sebagai HackersBangkitSSHBannerGrab.py, lalu ubah izinnya 
menggunakan perintah chmod sehingga Anda dapat menjalankannya. Mari kita jalankan 
skrip ini untuk terhubung ke sistem Linux lain (Anda mungkin menggunakan sistem Ubuntu 
atau bahkan sistem Kali lain) di port 22. Jika SSH berjalan di port itu, kita harus dapat 
membaca dan mencetaknya ke variabel kita ke layar, seperti yang ditunjukkan di sini:
kali >./HackersBangkitSSHBannerGrab.py 
SSH-2.0-OpenSSH_7.3p1 Debian-1
Kami baru saja membuat skrip Python bannergrabbing sederhana! Kita dapat menggunakan 
skrip ini untuk mengetahui aplikasi, versi, dan sistem operasi apa yang berjalan di alamat IP 
dan port tersebut. Ini memberi kami informasi penting yang dibutuhkan Hacker sebelum 
menyerang sistem. Inilah yang pada dasarnya dilakukan oleh situs web Shodan.io untuk 
hampir setiap alamat IP di planet ini, dan situs ini mengkatalog dan mengindeks informasi ini 
untuk kami telusuri.
Membuat Pendengar TCP 
Kami baru saja membuat klien TCP yang dapat membuat koneksi ke alamat dan port 
TCP/IP lain, lalu memata-matai informasi yang sedang dikirim. Soket tersebut juga dapat 
digunakan untuk membuat pendengar TCP, untuk mendengarkan koneksi dari pihak luar ke 
server Anda. Mari coba lakukan itu selanjutnya.
Dalam skrip Python yang ditampilkan di Daftar 17.4, Anda akan membuat socket di 
port di sistem Anda yang, saat seseorang terhubung ke socket tersebut, mengumpulkan 
informasi kunci tentang sistem konektor. Masukkan skrip dan simpan sebagai tcp_server.py. 
Pastikan untuk memberi diri Anda izin eksekusi dengan chmod
#! /usr/bin/python3
import socket 
➊ TCP_IP = "192.168.181.190" 
TCP_PORT = 6996 
BUFFER_SIZE = 100 
➋ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
➌ s.bind((TCP_IP, TCP_PORT)) 
➍ s.listen (1) 
➎ conn, addr = s.accept() 
print ('Connection address: ', addr )
while 1:
data=conn.recv(BUFFER_SIZE)
if not data:break 
print ("Received data: ", data) 
conn.send(data) #echo
conn.close
Daftar 17.4 Skrip Python Pendengar TCP
Kami menyatakan bahwa kami ingin skrip dijalankan dengan interpreter Python dan 
kemudian mengimpor modul soket seperti sebelumnya, sehingga kami dapat menggunakan 
kemampuannya. Kami kemudian menentukan variabel untuk menyimpan informasi untuk 
alamat TCP/IP, port untuk mendengarkan, dan ukuran buffer data yang ingin kami tangkap 
dari sistem penghubung ➊. 
Kami mendefinisikan socket ➋ dan mengikat socket ke alamat IP dan port ➌
menggunakan variabel yang baru saja kami buat. Kami menyatakan soket untuk 
mendengarkan menggunakan metode listen() dari pustaka soket ➍.
Kami kemudian mengambil alamat IP dan port dari sistem penghubung 
menggunakan metode penerimaan library accept, dan kami mencetak informasi tersebut ke 
layar sehingga pengguna dapat melihatnya. Perhatikan sintaks while 1: di sini; kita akan 
membahas ini lebih lanjut di bab ini, tetapi untuk saat ini ketahuilah bahwa ini digunakan 
untuk menjalankan kode indentasi yang muncul setelahnya tanpa batas, artinya Python 
terus memeriksa data .
Terakhir, kami menempatkan informasi dari sistem penghubung ke dalam buffer, 
mencetaknya, lalu menutup koneksi. Sekarang, buka komputer lain di jaringan Anda dan 
gunakan browser untuk menyambung ke port 6996 yang ditentukan dalam skrip kami. 
Jalankan skrip tcp_server.py, dan Anda akan dapat menghubungkan dan mengumpulkan 
informasi penting tentang sistem tersebut, termasuk alamat IP dan port sistem penghubung, 
seperti yang ditunjukkan di sini:
kali >./tcp_server.py
Connection Address: ('192.168.181.190', 45368) 
Received data: Get /HTTP/1.1 
Host:192.168.181.190:6996 
User -Agent:Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gec
--snip--
Ini adalah informasi penting yang harus dikumpulkan oleh seorang Hacker sebelum 
memutuskan untuk mengeksploitasi. Eksploitasi (atau peretasan) sangat spesifik untuk 
sistem operasi, aplikasi, dan bahkan bahasa yang digunakan, sehingga Hacker perlu 
mengetahui sebanyak mungkin informasi tentang target sebelum melanjutkan. Tindakan 
mengumpulkan informasi sebelum peretasan ini sering disebut sebagai pengintaian. Anda 
baru saja mengembangkan alat yang akan mengumpulkan informasi pengintaian utama 
tentang target potensial, sangat mirip dengan alat Hacker populer p0F!
17.7 DICTIONARY, LOOP, DAN KONTROL STATEMENT
Mari kita terus memperluas pemahaman Anda tentang Python dan kemudian 
menggunakan semua yang telah Anda pelajari sejauh ini untuk membangun cracker kata 
sandi untuk server FTP.
Dictionary
Dictionary menyimpan informasi sebagai pasangan tak berurutan, di mana setiap 
pasangan berisi kunci dan nilai terkait. Kami dapat menggunakan kamus untuk menyimpan 
daftar item dan memberi label pada setiap item sehingga kami dapat menggunakan dan 
merujuk ke item tersebut satu per satu. Kami mungkin menggunakan kamus untuk 
menyimpan, misalnya, ID pengguna dan nama terkaitnya, atau untuk menyimpan 
kerentanan yang diketahui terkait dengan host tertentu. Kamus dalam Python berperan 
seperti array asosiatif dalam bahasa lain.
Seperti daftar, kamus dapat diubah, artinya kita menggunakan struktur kontrol 
seperti pernyataan untuk menelusuri seluruh kamus, menetapkan setiap elemen kamus ke 
variabel sampai kita tiba di akhir kamus.
Antara lain, Anda mungkin menggunakan struktur ini dalam membangun cracker kata 
sandi yang mengulangi setiap kata sandi yang disimpan dalam kamus sampai salah satu 
berfungsi atau sampai cracker mencapai akhir kamus. Sintaks untuk membuat kamus adalah 
sebagai berikut:
dict = {key1 :value1 , key2 :value2 , key3 :value3...}
Perhatikan bahwa untuk kamus, Anda menggunakan tanda kurung kurawal dan memisahkan 
item dengan koma. Anda dapat menyertakan sebanyak pasangan nilai kunci sebanyak yang 
Anda suka.

Pernyataan Kontrol 
Pernyataan kontrol memungkinkan kode Anda untuk membuat keputusan 
berdasarkan beberapa kondisi. Ada beberapa cara di Python untuk mengontrol aliran skrip. 
Mari kita lihat beberapa struktur ini di Python.
Pernyataan if Struktur 
if di Python, seperti dalam banyak bahasa pemrograman lain termasuk bash, 
digunakan untuk memeriksa apakah suatu kondisi benar atau tidak dan menjalankan set 
kode yang berbeda untuk setiap skenario. Sintaksnya terlihat seperti ini:
if conditional expression
run this code if the expression is true
Pernyataan if berisi kondisi yang mungkin seperti if variabel < 10, misalnya. Jika 
kondisi terpenuhi, ekspresi dievaluasi menjadi benar, dan kemudian kode yang mengikuti, 
yang dikenal sebagai blok kontrol, dijalankan. Jika pernyataan bernilai salah, maka 
pernyataan di blok kontrol dilewati dan tidak dieksekusi.
Di Python, blok kontrol harus diindentasi. Lekukan ini mengidentifikasi blok kontrol 
ke penerjemah. Pernyataan berikutnya yang tidak memiliki indentasi berada di luar blok 
kontrol dan oleh karena itu bukan bagian dari pernyataan jika, dan ini adalah cara Python 
mengetahui ke mana harus melompati jika kondisi tidak terpenuhi.
if...else
Struktur if...else di Python terlihat seperti ini:
if conditional expression 
*** # run this code when the condition is met 
else 
*** # run this code when the condition is not met
Seperti sebelumnya, pertama-tama penerjemah memeriksa kondisi dalam ekspresi if. Jika 
mengevaluasi menjadi benar, penerjemah mengeksekusi pernyataan di blok kontrol. Jika 
pernyataan bersyarat bernilai salah, blok kontrol yang mengikuti pernyataan else akan 
dieksekusi sebagai gantinya.
Misalnya, di sini kami memiliki cuplikan kode yang memeriksa nilai ID pengguna; jika 
adalah 0 (pengguna root di Linux selalu UID 0), maka kami mencetak pesan “Anda adalah 
pengguna root”. Jika tidak, jika itu adalah nilai lain, kami mencetak pesan “Anda BUKAN 
pengguna root”.
if
userid == 0
print ("You are the root user") 
else 
print ("You are NOT the root user")
Loops 
Loops adalah struktur lain yang sangat berguna di Python. Loop memungkinkan 
pemrogram untuk mengulangi blok kode beberapa kali, bergantung pada nilai atau kondisi. 
Dua yang paling banyak digunakan adalah while dan for .
The while Loop 
Loop while mengevaluasi ekspresi Boolean (ekspresi yang hanya dapat mengevaluasi 
true atau false) dan melanjutkan eksekusi sementara ekspresi dievaluasi ke true.
Misalnya, kita dapat membuat cuplikan kode yang mencetak setiap angka dari 1 hingga 10 la
lu keluar dari loop, seperti begitu:
count = 1 
while (count <= 10): 
print (count) 
count += 1
Blok kontrol indentasi kemudian berjalan selama kondisinya benar.
The for Loop 
The for for loop dapat menetapkan nilai dari daftar, string, kamus, atau struktur yang 
dapat diubah lainnya ke variabel indeks setiap kali melalui loop, memungkinkan kita untuk 
menggunakan setiap item dalam struktur satu demi satu. Misalnya, kita dapat menggunakan 
for loop untuk mencoba sandi hingga menemukan kecocokan, seperti:
for password in passwords: 
attempt = connect (username, password)
if attempt == "230"
print ("Password found: " + password)
sys.exit (0)
Dalam cuplikan kode ini, kami membuat pernyataan untuk yang dilanjutkan melalui daftar 
sandi yang telah kami berikan dan berusaha menghubungkan dengan nama pengguna dan 
sandi. Jika upaya koneksi menerima kode 230, yang merupakan kode untuk koneksi yang 
berhasil, program akan mencetak "Pasword found:" dan kemudian kata sandinya. Itu lalu 
keluar. Jika tidak mendapatkan 230, itu akan melanjutkan setiap kata sandi yang tersisa 
hingga menerima 230 atau sampai menghabiskan daftar sandi.
17.8 MENINGKATKAN SCRIPT HACKING
Sekarang dengan sedikit lebih banyak latar belakang dalam struktur perulangan 
Python dan pernyataan bersyarat, mari kembali ke skrip bannergrabbing dan menambahkan 
beberapa kemampuan.
Kami akan menambahkan daftar port yang ingin kami ambil spanduknya, daripada 
hanya mendengarkan di satu port, lalu mengulang daftar menggunakan pernyataan untuk. 
Dengan cara ini, kita dapat mencari dan mengambil spanduk untuk beberapa port dan 
menampilkannya ke layar.
Pertama, mari buat daftar dan masukkan port tambahan ke dalamnya. Buka 
HackersBangkitSSHBannerGrab.py, dan kami akan bekerja dari sana. Daftar 17.5 
menampilkan kode lengkap. Perhatikan bahwa garis abu-abu tetap sama; garis hitam adalah 
garis yang perlu Anda ubah atau tambahkan. Kami akan mencoba mengambil spanduk untuk 
port 21 (ftp), 22 (ssh), 25 (smtp), dan 3306 (mysql).
#! /usr/bin/python3
import socket 
➊ Ports = [21,22,25,3306]

for i in range (0,4):
s = socket.socket() 
➌ Ports = Port[i]
print ('This Is the Banner for the Port')
print (Ports) 
➍ s.connect (("192.168.1.101", Port))
answer = s.recv (1024)
print (answer)
s.close ()
Daftar 17.5 Meningkatkan pengambil spanduk
Kami membuat daftar yang disebut Port ➊ dan menambahkan empat elemen, 
masing-masing mewakili satu port. Kemudian, kita membuat pernyataan untuk yang 
mengulangi daftar tersebut empat kali, karena memiliki empat item .
Ingatlah bahwa saat Anda menggunakan for loop, kode yang terkait dengan loop 
harus diindentasi di bawah pernyataan for.
Kita perlu mengubah program untuk mencerminkan penggunaan variabel dari daftar 
pada setiap iterasi hingga selesai. Untuk melakukannya, kami membuat variabel bernama 
Port dan menetapkannya ke nilai dari daftar pada setiap iterasi ➌. Kemudian kami 
menggunakan variabel itu dalam koneksi kami ➍.
Saat penerjemah mendapatkan pernyataan itu, penerjemah akan mencoba 
menghubungkan ke port mana saja yang ditetapkan ke variabel di alamat IP. Sekarang, jika 
Anda menjalankan skrip ini pada sistem dengan semua port yang terdaftar terbuka dan 
diaktifkan, Anda akan melihat sesuatu seperti Daftar 17.6.
kali >./HackersBangkitPortBannerGrab.py
This is the Banner for the Port 
21 
220 (vsFTPd 2.3.4)
This Is the Banner for the Port 
22 
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1
This Is the Banner for the Port 
25 
220 metasploitable.localdomain ESMTP Postfix (Ubuntu)
This Is the Banner for the Port 
3306
5.0.51a-3ubuntu5
Daftar 17.6 Output untuk pemegang spanduk port

Perhatikan bahwa skrip telah menemukan port 21 terbuka dengan vsFTPd 2.3.4 
berjalan di atasnya, port 22 terbuka dengan OpenSSH 4.7 berjalan di atasnya, port 25 
dengan Postfix, dan port 3306 dengan MySQL 5.0.51a.
Kami baru saja berhasil membuat alat multiport bannergrabbing di Python untuk 
melakukan pengintaian pada sistem target. Alat ini memberi tahu kami layanan mana yang 
berjalan di port dan versi layanan itu! Ini adalah informasi penting yang dibutuhkan Hacker
sebelum melanjutkan serangan.
17.9 PENGECUALIAN DAN PEMECAH SANDI 
Setiap kode yang Anda tulis akan berisiko mengalami kesalahan atau pengecualian. 
Dalam istilah pemrograman, pengecualian adalah segala sesuatu yang mengganggu aliran 
normal kode Anda—biasanya kesalahan yang disebabkan oleh kode atau input yang salah. 
Untuk menangani kemungkinan kesalahan, kami menggunakan penanganan pengecualian, 
yaitu hanya kode yang menangani masalah tertentu, menyajikan pesan kesalahan, atau 
bahkan menggunakan pengecualian untuk pengambilan keputusan. Di Python, kami memiliki 
struktur try/except untuk menangani kesalahan atau pengecualian ini.
Blok coba-coba mencoba untuk mengeksekusi beberapa kode, dan jika terjadi 
kesalahan, pernyataan kecuali akan menangani kesalahan tersebut. Dalam beberapa kasus, 
kita dapat menggunakan struktur try/except untuk pengambilan keputusan, mirip dengan 
if...else. Misalnya, kita dapat menggunakan try/except di cracker kata sandi untuk mencoba 
kata sandi dan, jika terjadi kesalahan karena kata sandi tidak cocok, pindah ke kata sandi 
berikutnya dengan pernyataan kecuali. Mari kita coba itu sekarang.
Masukkan kode di Daftar 17.7 dan simpan sebagai ftpcracker.py; kita akan 
mempelajarinya sebentar lagi. Skrip ini menanyakan nomor server FTP kepada pengguna dan 
nama pengguna akun FTP mana pun yang ingin di hack. Kemudian, sandi terbaca dalam file 
teks eksternal yang berisi daftar kemungkinan kata sandi dan mencoba masing-masing 
dalam upaya untuk meretas akun FTP. Skrip melakukannya sampai berhasil atau kehabisan 
sandi.
#! /usr/bin/python3
import ftplib 
➊ server = input(FTP Server: ")
➋ user = input("username: ") 
➌ Passwordlist = input ("Path to Password List > ") 
➍ try:
with open(Passwordlist, 'r') as pw:
for word in pw: 
➎ word = word.strip ('\r').strip('\n')

➏ try:
ftp = ftplib.FTP(server)
ftp.login(user, word) 
➐ print (Success! The password is ' + word) 
➑ except:
print('still trying...')
except:
print ('Wordlist error')
Daftar 17.7 Skrip Python Hacker sandi FTP
Kami akan menggunakan alat dari modul ftplib untuk protokol FTP, jadi pertama￾tama kami mengimpornya. Selanjutnya, kami membuat server bernama variabel dan 
pengguna bernama variabel lainnya, yang akan menyimpan beberapa perintah untuk input 
user. Skrip Anda akan meminta pengguna untuk memasukkan alamat IP server FTP ➊ dan 
username untuk akun ➋ tersebut yang coba dibobol oleh pengguna. Kemudian kami 
meminta pengguna untuk jalur ke daftar sandi ➌. Anda dapat menemukan banyak daftar 
kata sandi di Kali Linux dengan memasukkan daftar kata temukan di terminal. Kami 
kemudian memulai blok kode try yang akan menggunakan daftar kata sandi yang diberikan 
oleh pengguna untuk mencoba memecahkan kata sandi untuk nama pengguna yang 
diberikan oleh pengguna.
Perhatikan bahwa kami menggunakan fungsi Python baru yang disebut strip() ➎. 
Fungsi ini menghapus karakter pertama dan terakhir dari string (dalam hal ini, password list). 
Hal ini diperlukan jika sandi dalam daftar ini memiliki spasi atau koma sebelumnya. 
Fungsi strip() menghapus ini dan hanya menyisakan string karakter dari kata sandi potensial. 
Jika kami tidak menghapus spasi putih, kami mungkin mendapatkan negatif palsu.
Kemudian, kami menggunakan blok try ➏ kedua. Di sini, kami menggunakan modul 
ftplib untuk menyambungkan ke server terlebih dahulu menggunakan alamat IP yang 
diberikan pengguna lalu mencoba kata sandi berikutnya dari daftar sandi di akun tersebut.
Jika kombinasi nama pengguna dan sandi menghasilkan kesalahan, blok akan keluar 
dan menuju ke klausa except klausa ➑, di mana ia mencetak masih mencoba dan kemudian 
kembali ke kata sandi teratas untuk klausa dan mengambil kata sandi dari daftar berikutnya. 
Jika kombinasi berhasil, sandi yang berhasil tercetak ke layar ➐. Baris akhir 
mengambil situasi lain yang akan mengakibatkan kesalahan. Contohnya adalah jika 
pengguna memasukkan sesuatu yang tidak dapat diproses oleh program, seperti jalur yang 
buruk ke daftar kata atau daftar kata yang hilang.
Sekarang, mari kita jalankan skrip ini terhadap server FTP di 192.168.1.101 dan lihat 
apakah kita dapat memecahkan sandi pengguna root. Saya menggunakan daftar sandi 
bernama bigpasswordlist.txt di direktori kerja saya. Anda mungkin perlu memberikan 
seluruh jalur ke daftar sandi mana pun yang Anda gunakan jika tidak ada di direktori kerja 
Anda (misalnya, /usr/share/bigpasswordlist.txt).
kali >./ftpcracker.py
FTP Server: 192.168.1.101
username: root
Path to PasswordList >bigpasswordlist.txt
still trying... 
still trying... 
still trying...
--snip—
Success! The password is toor
Seperti yang Anda lihat, ftpcracker.py berhasil menemukan sandi untuk root 
pengguna dan menampilkannya di layar.
17.10 RINGKASAN
Untuk lulus dari status scriptkiddie, seorang Hacker harus menguasai bahasa scripting, 
dan Python umumnya merupakan pilihan pertama yang baik karena fleksibilitasnya dan 
kurva pembelajarannya yang relatif kecil. Sebagian besar hacking toolan ditulis di Python, 
termasuk sqlmap, scapy, dan banyak lainnya. Di sini, Anda telah mempelajari beberapa dasar 
Python yang dapat Anda gunakan untuk membangun beberapa alat Hacker yang berguna 
namun sederhana, termasuk pengambil spanduk dan pemecah kata sandi FTP. Untuk 
mempelajari lebih lanjut tentang Python, saya sangat merekomendasikan buku No Starch 
Press yang sangat bagus Mengotomatiskan Hal-Hal yang Boring Stuff Python (2015) oleh Al 
Sweigart.