Python untuk Security¶
Fase: Fondasi · Estimasi: 45 menit (santai, sambil coba) · Prasyarat: F8 Tujuan akhir: Bisa membaca & memodifikasi skrip Python untuk decode, kirim request, olah byte, hitung hash. Glossary. Belum ada Python? Pakai online Python (cari "online python") — tanpa instal.
1. Briefing¶
Komputer tak kenal lelah — biar ia yang mengulang pekerjaan membosankan. Python favorit operator karena mudah dibaca. Kamu tak perlu jadi programmer hebat — cukup bisa baca & ubah skrip. Kita pelan-pelan, satu konsep satu kotak.
2. Materi Inti¶
2.1 Variabel (wadah data)¶
nama = "operator" # string (teks)
umur = 20 # integer (angka)
aktif = True # boolean (benar/salah)
print(nama) # tampilkan
Output:
operator
2.2 Percabangan (if) — komputer mengambil keputusan¶
umur = 20
if umur >= 18:
print("dewasa")
else:
print("belum")
Output:
dewasa
2.3 Perulangan (for) — mengulang otomatis¶
for i in range(3): # i = 0, 1, 2
print(i)
Output:
0
1
2
2.4 Fungsi (resep yang bisa dipakai ulang)¶
def sapa(x):
return "Halo, " + x
print(sapa("operator"))
Output:
Halo, operator
Checkpoint #1: kamu sudah lihat variabel, if, for, fungsi. Itu 80% yang kamu butuh. Santai — sisanya tinggal "perkakas".
2.5 String vs Bytes (PENTING di security!)¶
STRING "abc" → teks untuk manusia
BYTES b"abc" → data mentah untuk komputer (kripto/encoding pakai ini)
s = "flag"
b = s.encode() # string → bytes
print(b) # Output: b'flag'
print(b.decode()) # bytes → string → Output: flag
2.6 Perkakas (library) andalan¶
import base64
print(base64.b64decode("ZmxhZw==")) # Output: b'flag'
import hashlib
print(hashlib.sha256(b"data").hexdigest()) # "sidik jari" SHA-256
print(bytes.fromhex("666c6167")) # Output: b'flag'
2.7 XOR (sering muncul di crypto) — sebaris saja¶
data = bytes([0x10, 0x20])
key = 0x42
hasil = bytes([x ^ key for x in data]) # XOR tiap byte dengan kunci
print(hasil)
2.8 Worked Example: kirim request web (requests)¶
import requests
r = requests.get("https://example.com/")
print(r.status_code) # Output: 200
print(r.text[:50]) # cuplikan isi halaman
s = requests.Session()
s.post("https://situs/login", data={"user":"a","pass":"b"})
print(s.get("https://situs/dash").text)
2.9 Cara menjalankan¶
$ python3 solve.py
Simpan skrip kecil tiap menyelesaikan soal (
solve.py) — jadi catatan & bisa dipakai ulang.
Kesalahan Umum¶
| Salah | Benar |
|---|---|
| Lupa indentasi (spasi di dalam if/for) | Python wajib indentasi rapi |
| Campur string & bytes | b"..." untuk bytes; pakai .encode()/.decode() |
print lupa tanda kurung |
Python 3: print("x") |
| Kira harus jago coding dulu | Cukup bisa baca & modifikasi skrip |
3. Kacamata Intelijen Siber¶
- Analis hadapi data besar (log, dump, paket). Python ubah berjam-jam → detik.
- Skrip kecil untuk decode, parsing, korelasi = roti & mentega analis.
- Paham bytes = paham data mentah apa adanya (penting forensik & kripto).
Purple: skrip sama bisa untuk menyerang (otomasi exploit) & bertahan (otomasi analisis log).
4. Hubungan ke Write-up CTF¶
- Hampir semua write-up punya
solve.py(decode XOR, kirim request, simulasi VM). - Proksi Merah → kirim payload + parse respons; Mesin Tanpa Nama → simulasi VM.
Trik Cepat Memahami¶
Jebakan #1 pemula: bytes vs str. Ingat: b'...' = data mentah (byte) untuk crypto/jaringan; '...' = teks untuk manusia. Jembatannya:
- teks -> byte:
.encode() - byte -> teks:
.decode()
data = "halo".encode() # b'halo' (siap di-XOR/hash)
teks = b'\x68\x69'.decode() # 'hi'
3 senjata script CTF yang wajib lengket di kepala:
bytes.fromhex("4869")-> ubah hex ke byteint.from_bytes(b, "big")-> byte ke angka besar (untuk RSA)pwntools(from pwn import *) -> koneksi & exploit otomatis
f-string mempercepat semuanya:
f"flag = {hasil}".
5. Rangkuman¶
- Python: variabel, if, for, fungsi — cukup bisa baca & modifikasi.
- String vs bytes:
.encode()/.decode(); kripto pakai bytes. - Library:
base64,hashlib,bytes.fromhex, XOR sebaris,requests. - Simpan
solve.pytiap soal.
6. Uji Pemahaman¶
- Beda string & bytes + cara ubah string→bytes?
- 1 baris Python untuk decode Base64
"ZmxhZw=="? - Output
for i in range(3)? - Library untuk (a) hashing, (b) request web?
- Output
0x10 ^ 0x42? 6 (PG). Mengotomatiskan login berulang ke web: A.hashlib· B.requests· C.xxd· D.chmod
Kunci Jawaban
- String teks manusia, bytes data mentah; ubah dengan
"teks".encode(). base64.b64decode("ZmxhZw==")→b'flag'.- 0, 1, 2.
- (a)
hashlib, (b)requests. 0x52(= 82 = 'R').- B.
7. Misi Berikutnya¶
Lanjut ke F10 — Git & Versioning.
LIGHTSIBER · "Biar komputer yang mengulang; kamu yang berpikir."