Writeup Aria
RoadMapCyber Security 101

Cryptography

Cryptography Basics

Importance of Cryptography

  • Kriptografi bertujuan utama untuk menjaga keamanan komunikasi meskipun ada pihak penyerang (adversaries).

  • Keamanan dalam kriptografi mencakup kerahasiaan (confidentiality), integritas (integrity), dan keaslian (authenticity) data.

  • Kriptografi adalah ilmu dan praktik untuk melindungi data agar tidak dapat dibaca atau diubah oleh pihak yang tidak berwenang.

  • Dalam kehidupan sehari-hari, kriptografi digunakan tanpa disadari, seperti:

    • Login ke website (misalnya TryHackMe) menggunakan koneksi terenkripsi.
    • Koneksi SSH yang membentuk terowongan aman agar tidak bisa disadap.
    • Perbankan online, di mana sertifikat server diverifikasi untuk mencegah penipuan.
    • Unduhan file, menggunakan hash untuk memastikan file tidak berubah.
  • Pengguna jarang berinteraksi langsung dengan kriptografi, tetapi kriptografi ada di hampir semua sistem digital modern.

  • Perusahaan yang menangani data kartu kredit wajib mematuhi PCI DSS, yang mengharuskan data:

    • Dienkripsi saat disimpan (at rest)
    • Dienkripsi saat dikirim (in motion)
  • Penanganan data medis juga diatur oleh hukum dan standar yang berbeda di tiap negara, seperti:

    • HIPAA & HITECH (Amerika Serikat)
    • GDPR (Uni Eropa)
    • DPA (Inggris)
  • Regulasi-regulasi tersebut menunjukkan bahwa kriptografi adalah kebutuhan wajib, meskipun biasanya tersembunyi dari pengguna akhir.

  • What is the standard required for handling credit card information?

PCI DSS

Plaintext to Ciphertext

  • Plaintext adalah data asli yang masih bisa dibaca, seperti teks “hello”, foto, data kartu kredit, atau rekam medis.

  • Dalam kriptografi, semua data sebelum dienkripsi disebut plaintext, apa pun bentuknya.

  • Plaintext diproses menggunakan fungsi enkripsi bersama dengan sebuah key (kunci).

  • Hasil dari proses enkripsi adalah ciphertext, yaitu data yang sudah diacak dan tidak dapat dibaca.

  • Cipher adalah algoritma atau metode yang digunakan untuk mengubah plaintext menjadi ciphertext dan sebaliknya.

  • Fungsi enkripsi:

    • Input: plaintext + key
    • Output: ciphertext 1768131688861
  • Untuk mendapatkan kembali data asli, ciphertext diproses menggunakan fungsi dekripsi dengan key yang benar.

  • Fungsi dekripsi:

    • Input: ciphertext + key
    • Output: plaintext 1768131697100
  • Ciphertext seharusnya tidak memberikan informasi apa pun tentang isi plaintext, kecuali kira-kira ukurannya.

  • Key (kunci) adalah rangkaian bit rahasia yang digunakan dalam proses enkripsi dan dekripsi.

  • Cipher biasanya bersifat publik, tetapi key harus dirahasiakan (kecuali pada sistem kunci publik/asimetris).

  • Enkripsi adalah proses mengubah plaintext menjadi ciphertext menggunakan cipher dan key.

  • Dekripsi adalah proses kebalikan dari enkripsi, yaitu mengubah ciphertext kembali menjadi plaintext.

  • Tanpa mengetahui key, mendekripsi ciphertext seharusnya mustahil atau sangat tidak layak secara komputasi.

  • What do you call the encrypted plaintext?

ciphertext

  • What do you call the process that returns the plaintext?

decryption

Historical Ciphers

  • Sejarah kriptografi sudah ada sejak 1900 SM di Mesir Kuno.

  • Salah satu cipher sejarah paling sederhana adalah Caesar Cipher, digunakan pada abad ke-1 SM.

  • Caesar Cipher bekerja dengan cara menggeser setiap huruf dalam alfabet sejumlah tertentu.

  • Contoh:

    • Plaintext: TRYHACKME
    • Key: 3 (geser ke kanan 3 huruf)
    • Cipher: Caesar Cipher
    • Hasil enkripsi (ciphertext): WUBKDFNPH
  • Jika huruf mencapai Z, pergeseran akan kembali ke A.

  • Enkripsi dilakukan dengan menggeser huruf ke kanan sesuai key. 1768131977398

  • Dekripsi dilakukan dengan menggeser huruf ke kiri sesuai key untuk mendapatkan plaintext asli.

  • Untuk melakukan dekripsi, dibutuhkan:

    • Ciphertext
    • Key
    • Jenis cipher (Caesar Cipher) 1768131995751
  • Caesar Cipher sangat mudah dipecahkan karena hanya memiliki 25 kemungkinan key.

  • Hal ini memungkinkan terjadinya brute force attack, yaitu mencoba semua kemungkinan key.

  • Karena algoritma cipher bersifat publik dan jumlah key terbatas, Caesar Cipher dianggap tidak aman menurut standar modern. 1768132026385

  • Contoh cipher sejarah lainnya:

    • Vigenère Cipher (abad ke-16)
    • Mesin Enigma (Perang Dunia II)
    • One-Time Pad (Perang Dingin)
  • Caesar Cipher dapat diuji secara interaktif menggunakan alat online seperti Cryptii untuk melihat efek pergeseran huruf.

  • Knowing that XRPCTCRGNEI was encrypted using Caesar Cipher, what is the original plaintext?

ICANENCRYPT

Types of Encryption

🔐 Kategori Utama Enkripsi

Terdapat dua jenis utama enkripsi:

  1. Enkripsi Simetris
  2. Enkripsi Asimetris

🔑 Enkripsi Simetris (Symmetric Encryption)

  • Menggunakan satu key yang sama untuk enkripsi dan dekripsi.
  • Disebut juga private key cryptography.
  • Kunci harus dirahasiakan dan hanya diketahui oleh pihak yang berkomunikasi.

1768132280771

  • Tantangan utama: pendistribusian key secara aman, terutama jika banyak penerima.
  • Contoh kasus: dokumen ber-password tidak aman jika password dikirim lewat email yang sama.
  • Contoh algoritma enkripsi simetris:
    • DES
      • Standar tahun 1977
      • Panjang key 56-bit
      • Berhasil dipecahkan < 24 jam (1999)
    • 3DES
      • DES yang dienkripsi 3 kali
      • Key 168-bit (keamanan efektif 112-bit)
      • Solusi sementara, deprecated sejak 2019
    • AES
      • Standar sejak 2001
      • Panjang key: 128, 192, 256-bit
      • Direkomendasikan untuk sistem modern
  • Banyak cipher simetris lain digunakan, tetapi tidak semuanya menjadi standar resmi.

🔐 Enkripsi Asimetris (Asymmetric Encryption)

  • Menggunakan dua key berbeda:
    • Public key → untuk enkripsi
    • Private key → untuk dekripsi
  • Disebut juga public key cryptography.
  • Data yang dienkripsi dengan public key hanya bisa didekripsi dengan private key.
  • Private key harus dijaga ketat dan tidak boleh dibagikan.
  • Lebih lambat dibanding enkripsi simetris dan menggunakan key lebih besar.

1768132298726

  • Contoh algoritma enkripsi asimetris:

    • RSA
      • Key: 2048-bit (minimum), 3072-bit, 4096-bit
    • Diffie-Hellman
      • Minimum 2048-bit
      • Lebih aman dengan 3072 atau 4096-bit
    • ECC (Elliptic Curve Cryptography)
      • Key lebih pendek
      • 256-bit ECC ≈ 3072-bit RSA (keamanan setara)
  • Berdasarkan masalah matematika yang:

    • Mudah dihitung satu arah
    • Sangat sulit dibalik (secara praktis tidak mungkin)
  • Should you trust DES? (Yea/Nay)

Nay

  • When was AES adopted as an encryption standard?

2001

Basic Math

🔢 Operasi XOR (Exclusive OR)

  • XOR bekerja bit per bit pada bilangan biner.
  • Contoh:
    • 1010 ⊕ 1100 = 0110
  • Aturan dasar XOR:
    • 1 ⊕ 1 = 0
    • 0 ⊕ 1 = 1
    • 1 ⊕ 0 = 1
    • 0 ⊕ 0 = 0

⭐ Sifat Penting XOR

  • A ⊕ A = 0
  • A ⊕ 0 = A
  • Komutatif: A ⊕ B = B ⊕ A
  • Asosiatif: (A ⊕ B) ⊕ C = A ⊕ (B ⊕ C)
  • Sifat-sifat ini membuat XOR sangat berguna dalam kriptografi dan deteksi kesalahan.

🔐 XOR sebagai Enkripsi Simetris

  • Misalkan:
    • P = plaintext
    • K = secret key
    • C = ciphertext
  • Proses enkripsi:
    • C = P ⊕ K
  • Proses dekripsi:
    • C ⊕ K = P
  • Hal ini bekerja karena:
    • K ⊕ K = 0
    • P ⊕ 0 = P
  • XOR dapat menjadi algoritma enkripsi simetris sederhana.
  • Dalam praktik nyata, key harus sepanjang plaintext agar aman.

➗ Operasi Modulo (mod)

  • Modulo adalah sisa hasil pembagian.
  • Ditulis sebagai X % Y atau X mod Y.
  • Contoh:
    • 25 % 5 = 0
    • 23 % 6 = 5
    • 23 % 7 = 2

⚠️ Sifat Penting Modulo

  • Operasi modulo tidak dapat dibalik (non-reversible).
    • Contoh: x % 5 = 4 → ada tak terbatas nilai x yang memenuhi.
  • Hasil modulo selalu:
    • ≥ 0
    • < pembagi
    • Untuk a % n → hasil berada pada rentang 0 sampai n − 1.
  • Operasi modulo sangat penting dalam kriptografi modern, terutama untuk bilangan besar.
  • What’s 1001 ⊕ 1010?

0011

python3
# Python 3.13.9 (tags/v3.13.9:8183fa5, Oct 14 2025, 14:09:13) [MSC v.1944 64 bit (AMD64)] on win32
# Type "help", "copyright", "credits" or "license" for more information.
# Ctrl click to launch VS Code Native REPL
>>> print(118613842 % 9091)
# 3565
  • What’s 118613842%9091?

3565

  • What’s 60%12?

0


Public Key Cryptography Basics

introduction

🔐 Konsep Keamanan dalam Kehidupan & Dunia Digital

  • Authentication (Autentikasi) Memastikan identitas pihak yang diajak berkomunikasi benar dan bukan penyamar.
  • Authenticity (Keaslian) Memastikan pesan benar-benar berasal dari pengirim yang diklaim.
  • Integrity (Integritas) Memastikan data atau pesan tidak diubah selama proses pengiriman.
  • Confidentiality (Kerahasiaan) Memastikan hanya pihak yang berwenang yang dapat mengakses informasi.

☕ Analogi Dunia Nyata (Pertemuan Langsung)

  • Melihat dan mendengar lawan bicara → Authentication
  • Yakin pesan berasal dari orang tersebut → Authenticity
  • Pesan tidak berubah di tengah percakapan → Integrity
  • Bicara pelan dan menjauh dari orang lain → Confidentiality

🌐 Penerapan di Dunia Siber

  • Dalam komunikasi online (chat, pesan, email), kita perlu:
    • Memastikan identitas pengirim
    • Memastikan pesan tidak dimodifikasi
    • Mencegah penyadapan oleh pihak lain

🔑 Peran Kriptografi

  • Enkripsi Simetris (Private Key Cryptography) → Fokus utama pada confidentiality
  • Enkripsi Asimetris (Public Key Cryptography) → Berperan penting dalam:
    • Authentication
    • Authenticity
    • Integrity

Common Use of Asymmetric Encryption

🔑 Pertukaran Kunci dalam Kriptografi

  • Enkripsi asimetris sering digunakan untuk menukar kunci enkripsi simetris.
  • Alasannya:
    • Enkripsi asimetris lebih lambat
    • Enkripsi simetris lebih cepat dan efisien
  • Karena itu, enkripsi asimetris hanya dipakai di awal untuk negosiasi kunci.

❓ Masalah Utama

  • Bagaimana cara berbagi kunci rahasia tanpa mengirimkannya secara terbuka dan disadap?

🔒 Analogi Kotak dan Gembok

  • Kode rahasia → Enkripsi simetris (cipher + key)
  • Gembok → Public key (milik server)
  • Kunci gembok → Private key (milik server)
  • Pesan dikirim dalam kotak terkunci (dienkripsi dengan public key).
  • Hanya pemilik private key yang bisa membukanya.

🧩 Pemetaan Analogi ke Kriptografi

AnalogiSistem Kriptografi
Kode rahasiaEnkripsi simetris (cipher & key)
GembokPublic key
Kunci gembokPrivate key

✅ Inti Konsep

  • Asimetris dipakai sekali di awal untuk berbagi kunci.
  • Setelah itu, komunikasi dilanjutkan dengan enkripsi simetris yang lebih cepat.
  • Keamanan tetap terjaga tanpa mengorbankan performa.
  • In the analogy presented, what real object is analogous to the public key?

Lock

RSA (Rivest–Shamir–Adleman)**

RSA adalah algoritma kriptografi kunci publik (public-key encryption) yang digunakan untuk mengamankan pengiriman data melalui saluran yang tidak aman. Pada saluran seperti ini, diasumsikan bahwa pihak ketiga (penyerang) dapat melakukan penyadapan terhadap komunikasi.

Dasar Matematika Keamanan RSA

Keamanan RSA bergantung pada kesulitan memfaktorkan bilangan besar. Mengalikan dua bilangan prima besar merupakan proses yang relatif mudah, namun menemukan faktor-faktor prima dari hasil perkalian tersebut sangat sulit, terutama jika bilangan yang digunakan sangat besar.

Contoh sederhana:

  • 113 × 127 = 14351 (mudah dihitung)
  • Namun, menentukan bahwa 14351 berasal dari 113 × 127 jauh lebih sulit.

Contoh lain dengan bilangan yang lebih besar:

  • Prima 1: 982451653031
  • Prima 2: 169743212279
  • Hasil perkalian: 166764499494295486767649

Walaupun komputer modern masih mampu memfaktorkan bilangan sebesar ini, bilangan dengan panjang lebih dari 600 digit sangat sulit untuk difaktorkan. Inilah alasan mengapa RSA menggunakan bilangan prima yang sangat besar dalam implementasi nyata (masing-masing sekitar 300 digit atau lebih).

Konsep Kunci Publik dan Kunci Privat

Dalam sistem enkripsi asimetris:

  • Kunci publik diketahui oleh semua pihak dan digunakan untuk enkripsi
  • Kunci privat disimpan secara rahasia dan digunakan untuk dekripsi

Contoh alur komunikasi:

  1. Alice mengenkripsi pesan menggunakan kunci publik Bob
  2. Bob mendekripsi pesan menggunakan kunci privat miliknya

Contoh Numerik RSA (Sederhana)

  1. Bob memilih dua bilangan prima:

    • p = 157
    • q = 199
  2. Menghitung:

    • n = p × q = 31243
    • φ(n) = n − p − q + 1 = 30888
  3. Memilih bilangan:

    • e = 163 (relatif prima terhadap φ(n))
    • d = 379, sehingga e × d ≡ 1 (mod φ(n))
  4. Kunci:

    • Kunci publik: (n, e) = (31243, 163)
    • Kunci privat: (n, d) = (31243, 379)

Proses Enkripsi dan Dekripsi

Misalkan pesan asli (plaintext):

  • x = 13

Enkripsi (oleh Alice):

[
y = x^e \bmod n = 13^{163} \bmod 31243 = 16341
]

Dekripsi (oleh Bob):

[
x = y^d \bmod n = 16341^{379} \bmod 31243 = 13
]

Bob berhasil mendapatkan kembali pesan asli yang dikirim Alice.

Catatan: Contoh ini menggunakan bilangan kecil agar mudah dipahami. Dalam penggunaan nyata, nilai p dan q jauh lebih besar.

RSA dalam CTF (Capture The Flag)

Dalam kompetisi CTF, RSA sering muncul dalam kategori cryptography. Peserta biasanya diminta untuk:

  • Menghitung variabel RSA
  • Memecahkan enkripsi
  • Mendekripsi pesan untuk mendapatkan flag

Variabel penting dalam RSA:

  • p, q → bilangan prima
  • n → hasil p × q
  • e → public exponent
  • d → private exponent
  • m → plaintext (pesan asli)
  • c → ciphertext (hasil enkripsi)

Biasanya soal CTF memberikan sebagian dari variabel-variabel ini, dan tugas peserta adalah menemukan nilai yang hilang atau mendekripsi ciphertext.

Tools yang Berguna untuk RSA CTF

Beberapa tools populer untuk menyelesaikan tantangan RSA:

  • RsaCtfTool (sangat direkomendasikan)
  • rsatool

Tools ini dapat membantu dalam:

  • Faktorisasi n
  • Menghitung d
  • Mendekripsi ciphertext secara otomatis
print(4391 * 6659)
# 29239669
  • Knowing that p = 4391 and q = 6659. What is n?

29239669

p = 4391
q = 6659
n = p * q

Q_n = n - p - q + 1
print(Q_n)
  • Knowing that p = 4391 and q = 6659. What is ϕ(n)?

29228620

Diffie-Hellman Key Exchange

Masalah pada Enkripsi Simetris

Salah satu tantangan utama dalam enkripsi simetris adalah pembagian kunci rahasia. Misalnya, Anda ingin mengirim dokumen yang dilindungi password kepada rekan bisnis untuk membahas strategi rahasia. Pertanyaannya adalah: bagaimana cara mengirim password tersebut dengan aman?

Jika password dikirim melalui saluran yang tidak aman, pihak penyerang dapat:

  • Menyadap isi komunikasi
  • Mengubah pesan
  • Mengambil password

Oleh karena itu, diperlukan mekanisme pertukaran kunci yang aman, meskipun menggunakan saluran komunikasi yang tidak aman.

Diffie-Hellman Key Exchange

Diffie-Hellman Key Exchange (DH) adalah metode kriptografi yang memungkinkan dua pihak untuk:

  • Membentuk kunci rahasia bersama
  • Melalui saluran komunikasi yang tidak aman
  • Tanpa perlu memiliki kunci rahasia sebelumnya
  • Tanpa pihak ketiga dapat mengetahui kunci tersebut

Kunci hasil pertukaran ini kemudian digunakan untuk enkripsi simetris pada komunikasi selanjutnya.

Konsep Dasar Diffie-Hellman

Misalkan Alice dan Bob ingin berkomunikasi secara aman tanpa menggunakan enkripsi asimetris untuk pertukaran kunci.

  • Alice memiliki rahasia A
  • Bob memiliki rahasia B
  • Keduanya berbagi informasi publik C

Asumsi penting:

  1. Jika dua rahasia digabungkan, sangat sulit untuk memisahkannya kembali
  2. Urutan penggabungan tidak memengaruhi hasil

Alice membuat AC, Bob membuat BC, lalu saling bertukar. Kemudian:

  • Alice menggabungkan BC dengan A → ABC
  • Bob menggabungkan AC dengan B → ABC

Hasil akhirnya sama: kunci rahasia bersama.

Proses Diffie-Hellman Secara Numerik

Untuk mempermudah pemahaman, digunakan bilangan kecil (tidak aman untuk penggunaan nyata).

1. Menentukan Parameter Publik

Alice dan Bob menyepakati:

  • Bilangan prima besar p
  • Generator g, dengan 0 < g < p

Contoh:

  • p = 29
  • g = 3

Nilai ini bersifat publik dan dapat diketahui siapa saja.

2. Menentukan Kunci Privat

Masing-masing pihak memilih bilangan rahasia:

  • Alice memilih a = 13
  • Bob memilih b = 15

Nilai ini tidak boleh dibagikan.

3. Menghitung Kunci Publik

Menggunakan rumus:

[
A = g^a \bmod p
]
[
B = g^b \bmod p
]
  • Alice menghitung: [ A = 3^{13} \bmod 29 = 19 ]
  • Bob menghitung: [ B = 3^{15} \bmod 29 = 26 ]

Nilai A dan B adalah kunci publik.

4. Pertukaran Kunci Publik
  • Alice mengirim A = 19 ke Bob
  • Bob mengirim B = 26 ke Alice

Langkah ini disebut key exchange.

5. Menghitung Kunci Rahasia Bersama

Menggunakan kunci publik yang diterima dan kunci privat masing-masing:

  • Alice menghitung: [ B^a \bmod p = 26^{13} \bmod 29 = 10 ]
  • Bob menghitung: [ A^b \bmod p = 19^{15} \bmod 29 = 10 ]

Hasilnya sama: [ g^{ab} \bmod p = 10 ]

Nilai 10 adalah shared secret key yang hanya diketahui Alice dan Bob.

1768135059015

Keamanan Diffie-Hellman

  • Pihak penyadap hanya mengetahui p, g, A, dan B
  • Untuk mendapatkan kunci rahasia, penyerang harus memecahkan Discrete Logarithm Problem
  • Masalah ini sangat sulit jika bilangan yang digunakan cukup besar

Dalam praktik nyata, nilai p biasanya berukuran ratusan hingga ribuan bit, bukan seperti contoh ini.

Diffie-Hellman dan RSA

Diffie-Hellman sering digunakan bersamaan dengan RSA:

  • Diffie-Hellman
    • Digunakan untuk key agreement
    • Menghasilkan shared secret
  • RSA
    • Digunakan untuk:
      • Digital signature
      • Autentikasi
      • Key transport

RSA membantu memastikan identitas pihak yang berkomunikasi, sehingga mencegah serangan Man-in-the-Middle (MITM), di mana penyerang berpura-pura menjadi Bob atau Alice.

Kesimpulan

  • Diffie-Hellman memungkinkan pertukaran kunci rahasia melalui saluran tidak aman
  • Tidak memerlukan kunci awal yang telah dibagikan
  • Sangat penting dalam protokol keamanan modern
  • Biasanya dikombinasikan dengan RSA untuk solusi keamanan yang lengkap

POW

pow adalah fungsi dalam Python yang digunakan untuk menghitung pangkat dengan operasi modulo. Fungsi ini memiliki tiga argumen: basis (base), eksponen (exponent), dan modulus (modulus). Sintaksnya adalah sebagai berikut:

p = 29
g = 5
a = 12

# pow adalah fungsi pangkat dengan modulo
# rumus: pow(base, exponent, modulus)
# pow = (g^a) mod p
# contoh: (5^12) mod 29
# 5^12 = 244140625
# 244140625 mod 29 = 28
A = pow(g, a, p)
print(A)
  • Consider p = 29, g = 5, a = 12. What is A?

7

p = 29
g = 5
b = 17

B = pow(g, b, p)
# urutanya (g^b) mod p
print(B)
# 9
  • Consider p = 29, g = 5, b = 17. What is B?

9

p = 29
a = 12
B = 9

b_key = pow(B, a, p)
# urutanya (B^a) mod p
print(b_key)
# 24
  • Knowing that p = 29, a = 12, and you have B from the second question, what is the key calculated by Bob? (key = Ba mod p)

24

p = 29
b = 17
A = 7

a_key = pow(A, b, p)
# urutanya (A^b) mod p
print(a_key)
  • Knowing that p = 29, b = 17, and you have A from the first question, what is the key calculated by Alice? (key = Ab mod p)

24

SSH

Autentikasi Server (SSH)

Saat pertama kali terhubung ke server via SSH, client akan menampilkan peringatan bahwa identitas server belum dikenal. SSH meminta konfirmasi apakah kita mengenali fingerprint kunci publik server.

  • Algoritma seperti ED25519 digunakan untuk tanda tangan digital
  • Peringatan ini muncul karena ada kemungkinan Man-in-the-Middle (MITM) attack
  • Jika pengguna memilih yes, fingerprint server akan disimpan di known_hosts
  • Pada koneksi berikutnya, SSH akan menolak koneksi jika fingerprint berubah

Tujuannya adalah memastikan kita terhubung ke server yang benar.

Autentikasi Client (Pengguna)

Setelah server terverifikasi, client harus membuktikan identitasnya. Metode autentikasi SSH:

  • Username & password (kurang aman)
  • SSH Key Authentication (direkomendasikan)

SSH key authentication menggunakan:

  • Public key → disimpan di server
  • Private key → disimpan oleh client

Algoritma SSH Key

Beberapa algoritma yang didukung ssh-keygen:

  • DSA → algoritma tanda tangan digital (sudah jarang digunakan)
    • Ukuran kunci tetap 1024-bit (tidak aman)
  • ECDSA → versi elliptic curve dari DSA
    • Lebih aman dari DSA, tetapi kurang populer
  • Ed25519 → modern, cepat, dan aman (direkomendasikan)
    • Ukuran kunci tetap 256-bit
  • Versi -SK → menggunakan hardware security key
    • Lebih aman, tetapi memerlukan perangkat khusus
  • RSA → masih digunakan, tetapi ukuran kunci lebih besar
    • Direkomendasikan minimal 2048-bit, lebih baik 3072-bit atau 4096-bit

Pembuatan SSH Key

Perintah umum:

ssh-keygen -t ed25519
# Generating public/private ed25519 key pair.
# Enter file in which to save the key (/home/strategos/.ssh/id_ed25519):
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
# Your identification has been saved in /home/strategos/.ssh/id_ed25519
# Your public key has been saved in /home/strategos/.ssh/id_ed25519.pub
# The key fingerprint is:
# SHA256:4S4DQvRfp52UuNwg++nTcWlnITEJTbMcCU0N8UYC1do strategos@g5000
# The key's random art image is:
# +--[ED25519 256]--+
# |  .       +XXB.  |
# | . .     . oBBo  |
# |  . . . = + o=o  |
# | .   . * X .o.E  |
# |  . . o S +  o . |
# |   . . o .. + o  |
# |      o +. + o   |
# |       +. .      |
# |        ..       |
# +----[SHA256]-----+

Hasil:

  • Private key → ~/.ssh/id_ed25519
  • Public key → ~/.ssh/id_ed25519.pub
cat id_ed25519.pub
# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINqNMqNhpXZGt6T8Q8bOplyTeldfWq3T3RyNJTmTMJq9 strategos@g5000
cat id_ed25519
# -----BEGIN OPENSSH PRIVATE KEY-----
# b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
# QyNTUxOQAAACDajTKjYaV2Rrek/EPGzqZck3pXX1qt090cjSU5kzCavQAAAJA+E+ajPhPm
# owAAAAtzc2gtZWQyNTUxOQAAACDajTKjYaV2Rrek/EPGzqZck3pXX1qt090cjSU5kzCavQ
# AAAEB981T2ngdoNm8gEzRU35bGHofqRMjfo5egxl0/9fap/NqNMqNhpXZGt6T8Q8bOplyT
# eldfWq3T3RyNJTmTMJq9AAAACm9xYWJAZzUwMDABAgM=
# -----END OPENSSH PRIVATE KEY-----

Passphrase (opsional):

  • Digunakan untuk melindungi private key
  • Tidak dikirim ke server
  • Hanya untuk mendekripsi private key secara lokal

Keamanan SSH Private Key

  • Private key harus dijaga seperti password
  • Jangan pernah dibagikan
  • Jika terenkripsi, masih bisa diserang dengan tools seperti John the Ripper
  • Gunakan passphrase yang kuat

Permission yang benar:

  • Private key: 600 (hanya bisa dibaca oleh pemilik)
  • Jika salah, SSH akan mengabaikan key

Menggunakan key:

ssh -i privateKey user@host

authorized_keys

  • File: ~/.ssh/authorized_keys
  • Berisi public key yang diizinkan login ke server
  • Jika key authentication aktif, server mencocokkan public key dengan private key client
  • Disarankan hanya key authentication untuk akses root (tanpa password)

SSH Keys dalam CTF & Pentest

SSH keys sering digunakan untuk:

  • Meng-upgrade reverse shell menjadi shell stabil
  • Menyediakan backdoor dengan menambahkan public key ke authorized_keys
  • Menghindari masalah reverse shell (Ctrl+C, tab completion, dll)

Catatan:

  • User seperti www-data biasanya tidak bisa login via SSH
  • User biasa atau root umumnya bisa

1768137673764

  • Check the SSH Private Key in ~/Public-Crypto-Basics/Task-5. What algorithm does the key use?

RSA

Digital Signatures and Certificates

Tanda Tangan di Dunia Digital

Di dunia nyata, tanda tangan digunakan untuk:

  • Menyetujui syarat dan ketentuan
  • Mengotorisasi transaksi
  • Mengonfirmasi penerimaan dokumen atau barang

Namun, di dunia digital, tanda tangan fisik, cap, atau sidik jari tidak dapat digunakan. Oleh karena itu, dibutuhkan digital signature (tanda tangan digital).

Apa Itu Digital Signature?

Digital signature adalah mekanisme kriptografi untuk:

  • Memverifikasi keaslian (authenticity) dokumen
  • Menjamin keutuhan (integrity) data
  • Membuktikan siapa yang menandatangani

Digital signature menggunakan kriptografi kunci publik (asymmetric cryptography):

  • Dokumen ditandatangani menggunakan private key
  • Tanda tangan diverifikasi menggunakan public key

Karena hanya pemilik private key yang bisa membuat tanda tangan tersebut, maka tanda tangan digital dapat membuktikan identitas penandatangan. Di banyak negara, tanda tangan digital memiliki nilai hukum yang sama dengan tanda tangan fisik.

Cara Kerja Digital Signature (Sederhana)

Bentuk paling sederhana:

  1. Dokumen di-hash
  2. Hash dienkripsi menggunakan private key
  3. Hasil enkripsi dikirim bersama dokumen
  4. Penerima:
    • Mendekripsi hash menggunakan public key
    • Membandingkan dengan hash dokumen yang diterima

Jika hash cocok:

  • Dokumen tidak diubah
  • Dokumen benar ditandatangani oleh pemilik private key

Pendekatan ini jauh lebih aman dibandingkan sekadar menempel gambar tanda tangan, karena gambar tidak menjamin integritas dokumen.

Digital Signature vs Electronic Signature

  • Electronic signature:

    • Biasanya hanya gambar tanda tangan
    • Mudah dipalsukan
    • Tidak menjamin integritas
  • Digital signature:

    • Menggunakan kriptografi
    • Menjamin integritas dan keaslian
    • Aman dan dapat diverifikasi

Dalam konteks keamanan, yang dimaksud signature adalah digital signature berbasis kriptografi, bukan sekadar gambar.

Sertifikat Digital (Certificates)

Certificate digunakan untuk:

  • Membuktikan identitas secara digital
  • Mengaitkan public key dengan identitas pemiliknya

Penggunaan paling umum adalah pada HTTPS (TLS).

  • Contoh:
    • Bagaimana browser tahu bahwa server yang diakses benar-benar tryhackme.com dan bukan server palsu?
  • Jawabannya: sertifikat digital.

Chain of Trust (Rantai Kepercayaan)

Sertifikat bekerja menggunakan rantai kepercayaan:

  1. Website memiliki sertifikat
  2. Sertifikat ditandatangani oleh organisasi
  3. Organisasi dipercaya oleh Certificate Authority (CA)
  4. Root CA dipercaya oleh sistem operasi dan browser

Browser sudah memiliki daftar Root CA tepercaya sejak instalasi. Jika rantai kepercayaan valid, browser akan mempercayai sertifikat tersebut.

TLS Certificate untuk Website

Untuk menggunakan HTTPS:

  • Website harus memiliki TLS certificate
  • Sertifikat bisa didapat dari CA berbayar (tahunan)
  • Atau gratis dari Let’s Encrypt untuk domain yang dimiliki

Saat ini, penggunaan HTTPS sudah menjadi standar keamanan website modern.

Kesimpulan Singkat

  • Digital signature menjamin keaslian dan keutuhan data
  • Menggunakan private key untuk menandatangani
  • Diverifikasi menggunakan public key
  • Certificate menghubungkan identitas dengan public key
  • HTTPS bergantung pada sertifikat dan chain of trust
  • Let’s Encrypt menyediakan sertifikat TLS gratis
  • What does a remote web server use to prove itself to the client?

certificate

  • What would you use to get a free TLS certificate for your website?

Let's Encrypt

PGP and GPG

PGP dan GPG

PGP (Pretty Good Privacy) adalah perangkat lunak yang digunakan untuk:

  • Enkripsi file
  • Enkripsi email
  • Digital signature
  • Verifikasi integritas data

GnuPG (GPG) adalah implementasi open-source dari standar OpenPGP dan merupakan versi PGP yang paling umum digunakan saat ini.

Fungsi Utama GPG

GPG sering digunakan untuk:

  • Melindungi kerahasiaan email (enkripsi)
  • Menandatangani email untuk menjamin integritas dan keaslian
  • Mengamankan file secara lokal
  • Verifikasi identitas pengirim

Pembuatan GPG Key

GPG menggunakan pasangan kunci:

  • Public key → dibagikan ke orang lain
  • Private key → disimpan rahasia

Perintah pembuatan key:

gpg --full-gen-key
# gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH
# This is free software: you are free to change and redistribute it.
# There is NO WARRANTY, to the extent permitted by law.

# Please select what kind of key you want:
#    (1) RSA and RSA
#    (2) DSA and Elgamal
#    (3) DSA (sign only)
#    (4) RSA (sign only)
#    (9) ECC (sign and encrypt) *default*
#   (10) ECC (sign only)
#   (14) Existing key from card
Your selection? 9
# Please select which elliptic curve you want:
#    (1) Curve 25519 *default*
#    (4) NIST P-384
#    (6) Brainpool P-256
Your selection? 1
# Please specify how long the key should be valid.
#          0 = key does not expire
#       <n>  = key expires in n days
#       <n>w = key expires in n weeks
#       <n>m = key expires in n months
#       <n>y = key expires in n years
Key is valid for? (0)
# Key does not expire at all
Is this correct? (y/N) y

# GnuPG needs to construct a user ID to identify your key.

Real name: strategos
Email address: strategos@tryhackme.thm
# [...]
# pub   ed25519 2024-08-29 [SC]
#       AB7E6AA87B6A8E0D159CA7FFE5E63DBD5F83D5ED
# uid                      Strategos <strategos@tryhackme.thm>
# sub   cv25519 2024-08-29 [E]

Saat membuat key, pengguna menentukan:

  • Jenis penggunaan: sign, encrypt, atau keduanya
  • Algoritma kriptografi (RSA, DSA, ECC, dll.)
  • Kurva elliptic (misalnya Curve25519)
  • Masa berlaku key
  • Identitas pengguna (nama dan email)

Contoh hasil:

  • Public key: ed25519
  • Subkey enkripsi: cv25519
  • User ID: nama dan email

Keamanan GPG Key

  • Private key dapat dilindungi passphrase

  • Passphrase berfungsi untuk mendekripsi private key, bukan dikirim ke pihak lain

  • Private key harus dibackup dan disimpan dengan aman

  • Jika private key terenkripsi, passphrase dapat diserang menggunakan:

    • John the Ripper
    • gpg2john (dalam konteks CTF)

Penggunaan GPG dalam Praktik

Berbagi Public Key
  • Public key dibagikan ke kontak
  • Kontak mengenkripsi pesan menggunakan public key kita
Dekripsi Pesan
  • Kita mendekripsi pesan menggunakan private key

Perintah umum:

gpg --decrypt file.gpg

Backup dan Restore GPG Key

Jika berpindah ke perangkat baru:

  1. Import private key dari backup
gpg --import backup.key
  1. Setelah diimport, kita bisa kembali mendekripsi pesan lama

Backup key sangat penting karena tanpa private key, pesan terenkripsi tidak bisa dibuka kembali.

GPG dalam CTF

Dalam CTF, GPG sering digunakan untuk:

  • Mendekripsi file terenkripsi
  • Menghadapi private key yang diproteksi passphrase
  • Melatih pemahaman kriptografi praktis
ls
# message.gpg  tryhackme.key

gpg --import tryhackme.key
# gpg: key FFA4B5252BAEB2E6: "TryHackMe (Example Key)" not changed
# gpg: key FFA4B5252BAEB2E6: secret key imported
# gpg: Total number processed: 1
# gpg:              unchanged: 1
# gpg:       secret keys read: 1
# gpg:  secret keys unchanged: 1

gpg --decrypt message.gpg
# gpg: encrypted with rsa1024 key, ID 2A0A5FDC5081B1C5, created 2020-06-30
#       "TryHackMe (Example Key)"
# You decrypted the file!
# The secret word is Pineapple.
  • Use GPG to decrypt the message in ~/Public-Crypto-Basics/Task-7. What secret word does the message hold?

Pineapple

Hashing Basics

Hash Functions

  • Hash ≠ Enkripsi: Hash tidak pakai kunci dan tidak bisa dibalik ke input asal.
  • Fungsi hash mengubah data ukuran bebas jadi output ukuran tetap (digest).
  • Perubahan 1 bit saja pada input → hasil hash berubah drastis (avalanche effect).
  • Contoh: huruf T dan U beda 1 bit, tapi MD5, SHA1, SHA-256 hasilnya sangat berbeda.
  • Output hash biasanya ditampilkan dalam hexadecimal.
  • Hashing penting untuk:
    • Integritas data
    • Penyimpanan password (server menyimpan hash, bukan password asli)
  • Hash collision: dua input berbeda menghasilkan hash yang sama.
    • Tidak bisa dihindari secara teori (pigeonhole principle)
    • Tapi hash yang baik membuat peluangnya sangat kecil
  • MD5 & SHA1 sudah tidak aman (collision bisa direkayasa)
  • Jangan gunakan MD5/SHA1 untuk password atau keamanan → pakai SHA-256 ke atas (atau bcrypt/argon2 untuk password).
strategos@g5000 ~> cat file1.txt
# T⏎
strategos@g5000 ~> cat file2.txt
# U⏎
strategos@g5000 ~> hexdump -C file1.txt
# 00000000  54                                                |T|
# 00000001
strategos@g5000 ~> hexdump -C file2.txt
# 00000000  55                                                |U|
# 00000001
strategos@g5000 ~> md5sum *.txt
# b9ece18c950afbfa6b0fdbfa4ff731d3  file1.txt
# 4c614360da93c0a041b22e537de151eb  file2.txt
strategos@g5000 ~> sha1sum *.txt
# c2c53d66948214258a26ca9ca845d7ac0c17f8e7  file1.txt
# b2c7c0caa10a0cca5ea7d69e54018ae0c0389dd6  file2.txt
strategos@g5000 ~> sha256sum *.txt
# e632b7095b0bf32c260fa4c539e9fd7b852d0de454e9be26f24d0d6f91d069d3  file1.txt
# a25513c7e0f6eaa80a3337ee18081b9e2ed09e00af8531c8f7bb2542764027e7  file2.txt
cd Hashing-Basics/Task-2
sha256sum passport.jpg
# 77148c6f605a8df855f2b764bcc3be749d7db814f5f79134d2aa539a64b61f02  passport.jpg

md5sum passport.jpg
# 5c58ca24e8f64c058e2eda9928fd0f97  passport.jpg

echo "5c58ca24e8f64c058e2eda9928fd0f97" | wc -c
33
# ada 33 huruf termasuk newline -> 32
# 1 byte -> 2 hex characters
# jadi MD5 output size = 16 bytes
  • What is the SHA256 hash of the passport.jpg file in ~/Hashing-Basics/Task-2?

77148c6f605a8df855f2b764bcc3be749d7db814f5f79134d2aa539a64b61f02

  • What is the output size in bytes of the MD5 hash function?

16

8 * 32
  • If you have an 8-bit hash output, how many possible hash values are there?

256

Insecure Password Storage for Authentication

  • Hashing dalam cyber security terutama digunakan untuk:
    • Penyimpanan password (autentikasi)
    • Menjaga integritas data
  • Autentikasi ≠ password manager Autentikasi hanya perlu memverifikasi, bukan mengembalikan password asli.

Praktik Penyimpanan Password yang Tidak Aman:

  1. Plaintext (teks asli)
    • Sangat berbahaya
    • Contoh: RockYou breach → 14+ juta password bocor (rockyou.txt)
  2. Enkripsi yang sudah usang (deprecated)
    • Contoh: Adobe
    • Password bisa didekripsi kembali
    • Password hint disimpan plaintext (kadang isinya password)
  3. Hashing tidak aman
    • Contoh: LinkedIn (2012)
    • Menggunakan SHA-1
    • Tanpa salt, sehingga mudah di-crack dengan rainbow table

Intinya: Password tidak boleh disimpan plaintext, tidak dienkripsi, dan tidak di-hash dengan algoritma lemah tanpa salt. Gunakan hashing modern + salt (bcrypt, Argon2, dll).

head -n 20 /usr/share/wordlists/rockyou.txt
# 123456
# [...]
# qwerty
  • What is the 20th password in rockyou.txt?

qwerty

Using Hashing for Secure Password Storage

  • Password sebaiknya disimpan sebagai hash, bukan plaintext → kalau database bocor, attacker tetap harus crack password.
  • Masalah tanpa salt:
    • Password sama → hash sama
    • Sekali satu hash di-crack, bisa buka banyak akun
    • Rentan rainbow table
  • Rainbow table:
    • Tabel hash ↔ password
    • Lebih cepat daripada brute-force
    • Digunakan oleh situs seperti CrackStation untuk hash tanpa salt
  • Solusi: Salt
    • Nilai acak & unik per user
    • Ditambahkan ke password sebelum di-hash
    • Password sama → hash tetap berbeda
    • Salt tidak perlu dirahasiakan
  • Algoritma yang aman:
    • Argon2, bcrypt, scrypt, PBKDF2
    • Biasanya auto-handle salt
  • Praktik aman penyimpanan password:
    1. Pilih hash yang kuat
    2. Tambahkan salt unik
    3. Hash password + salt
    4. Simpan hash + salt
  • Kenapa tidak enkripsi?
    • Enkripsi butuh key
    • Jika key bocor → semua password bisa dibuka
    • Hashing lebih aman untuk autentikasi

Hash Password 02c75fb22c75b23dc963c7eb91a062cc zxcvbnm b0baee9d279d34fa1dfd71aadb908c3f 11111 c44a471bd78cc6c2fea32b9fe028d30a asdfghjkl d0199f51d2728db6011945145a1b607a basketball dcddb75469b4b4875094e14561e573d8 000000 e10adc3949ba59abbe56e057f20f883e 123456 e19d5cd5af0378da05f63f891c7467af abcd1234 e99a18c428cb38d5f260853678922e03 abc123 fcea920f7412b5da7be0cf42b8c93759 1234567 4c5923b6a6fac7b7355f53bfe2b8f8c1 inS3CyourP4$$

  • Manually check the hash “4c5923b6a6fac7b7355f53bfe2b8f8c1” using the rainbow table above.

inS3CyourP4$$

tools online

tryhackme

  • Should you encrypt passwords in password-verification systems? Yea/Nay

Nay

Recognising Password Hashes

  • Offensive security hashing: mulai dari hash → identifikasi jenis hash → crack → dapatkan password.
  • Tool identifikasi hash (hashID, dll) tidak selalu akuratkonteks itu penting (misalnya: hash dari web app → lebih mungkin MD5 daripada NTLM).
  • Linux password hashes:
    • Disimpan di /etc/shadow (hanya root bisa baca)
    • Format:
      username:$prefix$options$salt$hash:...
      • y indicates the hash algorithm used, yescrypt
      • j9T is a parameter passed to the algorithm
      • 76UzfgEM5PnymhQ7TlJey1 is the salt used
      • /OOSg64dhfF.TigVPdzqiFang6uZA4QA1pzzegKdVm4 is the hash value
    • Prefix menunjukkan algoritma hash
  • Prefix hash Linux (kuat → lemah):
    • $y$ → yescrypt (default modern)
    • $gy$ → gost-yescrypt
    • $7$ → scrypt
    • $2b$ / $2y$ / $2a$ → bcrypt
    • $6$ → sha512crypt
    • $md5 / $1$ → MD5-based (lama & lemah)
  • Contoh shadow file:
    • Ada algoritma, parameter, salt, dan hash
  • Windows password hashes:
    • Menggunakan NTLM (turunan MD4)
    • Disimpan di SAM
    • Bisa di-dump pakai tool seperti mimikatz
    • Hash terlihat mirip MD4/MD5, jadi konteks sangat krusial
  • Kesimpulan:
    • Jangan cuma mengandalkan tool
    • Analisis konteks + riset itu kunci
    • Referensi penting: Hashcat Example Hashes
man 5 crypt
  #  yescrypt
  #      yescrypt is a scalable passphrase hashing scheme designed by Solar Designer, which
  #      is based on Colin Percival's scrypt.  Recommended for new hashes.

  #      Prefix
  #          "$y$"

  #      Hashed passphrase format
  #          \$y\$[./A-Za-z0-9]+\$[./A-Za-z0-9]{,86}\$[./A-Za-z0-9]{43}

  #      Maximum passphrase length
  #          unlimited

  #      Hash size
  #          256 bits
  • What is the hash size in yescrypt?

256

 hashcat --help | grep Cisco
  #  2410 | Cisco-ASA MD5                                              | Operating System
  #  9200 | Cisco-IOS $8$ (PBKDF2-SHA256)                              | Operating System
  #  9300 | Cisco-IOS $9$ (scrypt)                                     | Operating System
  #  5700 | Cisco-IOS type 4 (SHA256)                                  | Operating System
  #  2400 | Cisco-PIX MD5                                              | Operating System
  #   500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)                  | Operating System
  • What’s the Hash-Mode listed for Cisco-ASA MD5?
    • Check the Hashcat Example Hashes page.

2410

  • What hashing algorithm is used in Cisco-IOS if it starts with $9$?

scrypt

Password Cracking

  • Hash tidak bisa didekripsi → hanya bisa di-crack dengan mencoba banyak password lalu membandingkan hash.

  • Salt tidak mencegah cracking, tapi:

    • Membuat rainbow table tidak efektif
    • Harus hash satu per satu per salt
  • Tools umum untuk cracking:

    • Hashcat (GPU & CPU)
    • John the Ripper (CPU)
  • GPU cracking:

    • GPU sangat cepat untuk hash tertentu
    • Algoritma seperti bcrypt sengaja dibuat lambat di GPU
  • VM kurang ideal untuk cracking:

    • Biasanya tidak akses GPU
    • Ada penurunan performa
    • Lebih baik jalankan Hashcat di host OS
  • John the Ripper:

    • Jalan di VM
    • Tetap lebih cepat di host OS
  • Hashcat basic syntax:

    hashcat -m <hash_type> -a <attack_mode> hashfile wordlist

    Contoh:

    hashcat -m 3200 -a 0 hash.txt rockyou.txt
  • Intinya:

    • Salt = proteksi dari rainbow table, bukan dari cracking
    • GPU sangat berpengaruh kecuali hash yang memang dibuat lambat
    • Pilih tool & environment yang tepat untuk efisiensi
cd ~/Hashing-Basics/Task-6
cat hash1.txt
# $2a$06$7yoU3Ng8dHTXphAg913cyO6Bjs3K5lBnwq5FJyA6d01pMSrddr1ZG

jika dilihat di pola nya $2a$06$... berarti bcrypt dengan cost 06

hashcat -m 3200 -a 0 hash1.txt /usr/share/wordlists/rockyou.txt
# $2a$06$7yoU3Ng8dHTXphAg913cyO6Bjs3K5lBnwq5FJyA6d01pMSrddr1ZG:85208520
  • Use hashcat to crack the hash, $2a$06$7yoU3Ng8dHTXphAg913cyO6Bjs3K5lBnwq5FJyA6d01pMSrddr1ZG, saved in ~/Hashing-Basics/Task-6/hash1.txt.

85208520

cat hash2.txt
# 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1

hashcat -m 1400 -a 0 hash2.txt /usr/share/wordlists/rockyou.txt
# 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1:halloween

jika dilihat di pola nya 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1 berarti sha2-256

  • Use hashcat to crack the SHA2-256 hash, 9eb7ee7f551d2f0ac684981bd1f1e2fa4a37590199636753efe614d4db30e8e1, saved in saved in ~/Hashing-Basics/Task-6/hash2.txt.

halloween

cat hash3.txt
# $6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0

hashcat -m 1800 -a 0 hash3.txt /usr/share/wordlists/rockyou.txt
# $6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0:spaceman
  • Use hashcat to crack the hash, $6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0, saved in ~/Hashing-Basics/Task-6/hash3.txt.

spaceman

cat hash4.txt
# b6b0d451bbf6fed658659a9e7e5598fe

hashcat -m 0 -a 0 hash4.txt /usr/share/wordlists/rockyou.txt

1768144004561

  • Crack the hash, b6b0d451bbf6fed658659a9e7e5598fe, saved in ~/Hashing-Basics/Task-6/hash4.txt.
    • You will need to use an online service.

funforyou

Hashing for Integrity Checking

  • Hashing untuk integritas data:
    • Data sama → hash sama
    • Perubahan 1 bit → hash berubah drastis
    • Dipakai untuk memastikan file tidak dimodifikasi
  • Contoh penggunaan:
    • Verifikasi file download (ISO, software)
    • Bandingkan hash lokal dengan hash resmi (mis. SHA-256)
  • Deteksi file duplikat:
    • File dengan hash sama → file identik

HMAC (Keyed Hash MAC):

  • Hash + secret key

  • Menjamin:

    • Integritas (data tidak berubah)
    • Autentikasi (pengirim valid)
  • Cara kerja HMAC (ringkas):

    • Gabungkan message + key dengan operasi XOR
    • Hash dua kali
    • Hasil → HMAC value (ukuran tetap)
  • Rumus HMAC:

    HMAC(K, M) = H((K ⊕ opad) || H((K ⊕ ipad) || M))
  • Intinya:

    • Hash → cek keutuhan file
    • HMAC → cek keutuhan + keaslian data

1768144048884

cd ~/Hashing-Basics/Task-7
sha256sum libgcrypt-1.11.0.tar.bz2
09120c9867ce7f2081d6aaa1775386b98c2f2f246135761aae47d81f58685b9c  libgcrypt-1.11.0.tar.bz2
  • What is SHA256 hash of libgcrypt-1.11.0.tar.bz2 found in ~/Hashing-Basics/Task-7?

09120c9867ce7f2081d6aaa1775386b98c2f2f246135761aae47d81f58685b9c

hashcat --help | grep HMAC
    #  50 | HMAC-MD5 (key = $pass)                                     | Raw Hash authenticated
    #  60 | HMAC-MD5 (key = $salt)                                     | Raw Hash authenticated
    # 150 | HMAC-SHA1 (key = $pass)                                    | Raw Hash authenticated
    # 160 | HMAC-SHA1 (key = $salt)                                    | Raw Hash authenticated
  #  1450 | HMAC-SHA256 (key = $pass)                                  | Raw Hash authenticated
  #  1460 | HMAC-SHA256 (key = $salt)                                  | Raw Hash authenticated
  #  1750 | HMAC-SHA512 (key = $pass)                                  | Raw Hash authenticated
  • What’s the hashcat mode number for HMAC-SHA512 (key = $pass)?

1750

Conclusion

echo "RU5jb2RlREVjb2RlCg==" | base64 -d
# ENcodeDEcode
  • Use base64 to decode RU5jb2RlREVjb2RlCg==, saved as decode-this.txt in ~/Hashing-Basics/Task-8. What is the original word?

ENcodeDEcode

John the Ripper: The Basics

Basic Terms

Hash adalah cara mengubah data dengan panjang bebas menjadi nilai dengan panjang tetap menggunakan algoritma tertentu. Proses ini menyembunyikan data asli dan hasilnya disebut hash value. Contoh algoritma hash: MD4, MD5, SHA1, NTLM. Input berbeda akan menghasilkan hash yang berbeda, tetapi panjang hash selalu tetap.

Keamanan Hash

  • Hash bersifat one-way: mudah membuat hash dari input, sangat sulit mengembalikan hash ke data asli.
  • Ini berkaitan dengan konsep P vs NP:
    • P: masalah yang bisa diselesaikan dengan cepat (contoh: menghitung hash).
    • NP: masalah yang solusinya sulit dicari, meskipun mudah dicek (contoh: membalik hash).
  • Karena itu, meng-unhash secara langsung tidak realistis secara komputasi.

Cracking Hash

  • Walaupun tidak bisa dibalik langsung, hash masih bisa di-crack dengan cara dictionary attack.
  • Caranya: men-hash banyak kata dari daftar (wordlist), lalu membandingkan hasilnya dengan hash target.
  • Jika cocok, maka kata tersebut adalah password aslinya.

John the Ripper

  • John the Ripper (John) adalah tool untuk melakukan brute force dan dictionary attack pada berbagai jenis hash.
  • Room ini fokus pada versi John the Ripper Jumbo, versi yang paling lengkap dan populer.
  • What is the most popular extended version of John the Ripper?

Jumbo John

Setting Up Your System

Tools yang digunakan

  • John the Ripper versi Jumbo (Jumbo John)
  • Wordlist RockYou

Jika menggunakan AttackBox atau VM bawaan, John sudah terpasang, jadi tidak perlu instalasi manual. Versi selain Jumbo bisa tidak memiliki tools penting seperti zip2john dan rar2john.

Instalasi John the Ripper

  • Jumbo John adalah versi John paling lengkap dan paling umum digunakan.
  • AttackBox, Kali Linux, dan VM bawaan sudah menyertakan Jumbo John.
  • Cek instalasi dengan perintah:
    john
    Jika muncul info versi (misalnya John the Ripper 1.9.0-jumbo), berarti sudah terpasang.

Linux lain

  • Bisa install via repository:
    • Ubuntu: sudo apt install john
    • Fedora: sudo dnf install john
  • Namun versi repo biasanya bukan Jumbo, sehingga fiturnya terbatas.
  • Untuk fitur lengkap → build dari source (Jumbo John).

Windows

  • Instal dengan mengunduh binary Jumbo John sesuai arsitektur (32-bit / 64-bit).

Wordlist

  • Wordlist digunakan untuk dictionary attack, yaitu mencoba banyak kata untuk dicocokkan dengan hash.
  • Lokasi wordlist di Kali / AttackBox:
    /usr/share/wordlists

RockYou

  • rockyou.txt adalah wordlist populer dari kebocoran data tahun 2009.
  • Digunakan untuk semua task di room ini.
  • Jika belum ada, bisa diambil dari SecLists → Passwords → Leaked-Databases.
  • Jika masih terkompresi, ekstrak dengan:
    tar xvzf rockyou.txt.tar.gz
    atau gunakan 7z
    7z x rockyou.txt.gz

Akses Virtual Machine

  • VM bisa dijalankan langsung via Start Machine.
  • Bisa juga akses lewat SSH:
    • IP: 10.48.186.221
    • Username: user
    • Password: Tryhackme123!
  • Which website’s breach was the rockyou.txt wordlist created from?

rockyou.com

Cracking Basic Hashes

Sintaks Dasar John

john [options] [file]
  • john → menjalankan John the Ripper
  • options → mode / pengaturan cracking
  • file → file yang berisi hash target

Automatic Cracking

  • John bisa mendeteksi jenis hash secara otomatis dan mencoba memecahkannya.
  • Cocok jika tidak tahu tipe hash, tapi tidak selalu akurat.

Perintah:

john --wordlist=/path/wordlist file_hash.txt

Contoh:

john --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt

Identifikasi Hash

  • Jika auto-detect gagal, hash bisa diidentifikasi dulu.
  • Bisa pakai:
    • Online hash identifier
    • hash-identifier (Python tool)

Langkah singkat:

  1. Download hash-id.py
  2. Jalankan dengan python3 hash-id.py
  3. Masukkan hash → dapat daftar kemungkinan format (misalnya MD5)
wget https://gitlab.com/kalilinux/packages/hash-identifier/-/raw/kali/master/hash-id.py
python3 hash-id.py

Format-Specific Cracking

  • Setelah tahu jenis hash, tentukan format secara manual agar lebih akurat.

Perintah:

john --format=[format] --wordlist=/path/wordlist file_hash.txt

Contoh:

john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash_to_crack.txt
  • Hash standar (seperti MD5) biasanya pakai prefix raw-raw-md5
  • Cek format yang tersedia dengan:
    john --list=formats
  • Cari format tertentu:
    john --list=formats | grep -i md5

Answer Qustions

cd John-the-Ripper-The-Basics/Task04
cat hash1.txt
# 2e728dd31fb5949bc39cac5a9f066498

python3 hash-id.py
# --------------------------------------------------
HASH: 2e728dd31fb5949bc39cac5a9f066498
# Possible Hashs:
# [+] MD5
# [+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))
  • What type of hash is hash1.txt?

md5

john --list=formats | grep -iF "md5"
# DF2-HMAC-SHA1, PBKDF2-HMAC-SHA256,
# PBKDF2-HMAC-SHA512, PDF, PEM, pfx, pgpdisk, pgpsda, pgpwde, phpass, PHPS,
# PHPS2, pix-md5, PKZIP, po, postgres, PST, PuTTY, pwsafe, qnx, RACF,
# RACF-KDFAES, radius, RAdmin, RAKP, rar, RAR5, Raw-SHA512, Raw-Blake2,
# Raw-Keccak, Raw-Keccak-256, Raw-MD4, Raw-MD5, Raw-MD5u, Raw-SHA1,
# Raw-SHA384, restic, ripemd-128, ripemd-160, rsvp, RVARY, Siemens-S7,
# skein-256, skein-512, skey, SL3, SM3, Snefru-128, Snefru-256, LastPass, SNMP,
# solarwinds, SSH, sspr, Stribog-256, Stribog-512, STRIP, SunMD5, SybaseASE,
# Sybase-PROP, tacacs-plus, tcp-md5, telegram, tezos, Tiger, timeroast,
# tc_aes_xts, tc_ripemd160, tc_ripemd160boot, tc_sha512, tc_whirlpool, vdi,
# OpenVMS, vmx, VNC, vtp, wbb3, whirlpool, whirlpool0, whirlpool1, wpapsk,
# wpapsk-pmk, xmpp-scram, xsha, xsha512, zed, ZIP, ZipMonster, plaintext,
# has-160, HMAC-MD5, HMAC-SHA1, HMAC-SHA224, HMAC-SHA256, HMAC-SHA384,
# HMAC-SHA512, dummy, crypt

john --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt hash1.txt
# biscuit          (?)
  • What is the cracked value of hash1.txt?

biscuit

cat hash2.txt
# 1A732667F3917C0F4AA98BB13011B9090C6F8065
cat hash3.txt
# D7F4D3CCEE7ACD3DD7FAD3AC2BE2AAE9C44F4E9B7FB802D73136D4C53920140A
cat hash4.txt
# c5a60cc6bbba781c601c5402755ae1044bbf45b78d1183cbf2ca1c865b6c792cf3c6b87791344986c8a832a0f9ca8d0b4afd3d9421a149d57075e1b4e93f90bf

python3 hash-id.py
# --------------------------------------------------
HASH: 1A732667F3917C0F4AA98BB13011B9090C6F8065
# Possible Hashs:
# [+] SHA-1
# [+] MySQL5 - SHA-1(SHA-1($pass))
# --------------------------------------------------
HASH: D7F4D3CCEE7ACD3DD7FAD3AC2BE2AAE9C44F4E9B7FB802D73136D4C53920140A
# Possible Hashs:
# [+] SHA-256
# [+] Haval-256
# --------------------------------------------------
HASH: c5a60cc6bbba781c601c5402755ae1044bbf45b78d1183cbf2ca1c865b6c792cf3c6b87791344986c8a832a0f9ca8d0b4afd3d9421a149d57075e1b4e93f90bf
# Possible Hashs:
# [+] SHA-512
# [+] Whirlpool
john --list=formats | grep -iF "sha1"
# tripcode, AndroidBackup, adxcrypt, agilekeychain, aix-ssha1, aix-ssha256,
# aix-ssha512, andOTP, ansible, argon2, armory, as400-des, as400-ssha1,
# sha1crypt, sha256crypt, sha512crypt, Citrix_NS10, dahua, dashlane,
# krb5asrep, krb5pa-sha1, krb5pa-md5, krb5tgs, krb5tgs-sha1, krb5-17, krb5-18,
# 430 formats (151 dynamic formats shown as just "dynamic_n" here)
# mschapv2-naive, mssql, mssql05, mssql12, multibit, mysqlna, mysql-sha1,
# netntlm-naive, net-sha1, nk, notes, md5ns, nsec3, NT, NT-long, o10glogon,
# PBKDF2-HMAC-MD4, PBKDF2-HMAC-MD5, PBKDF2-HMAC-SHA1, PBKDF2-HMAC-SHA256,
# Raw-Keccak, Raw-Keccak-256, Raw-MD4, Raw-MD5, Raw-MD5u, Raw-SHA1,
# Raw-SHA1-AxCrypt, Raw-SHA1-Linkedin, Raw-SHA224, Raw-SHA256, Raw-SHA3,
# Salted-SHA1, SSHA512, sapb, sapg, saph, sappse, securezip, 7z, Signal, SIP,
# has-160, HMAC-MD5, HMAC-SHA1, HMAC-SHA224, HMAC-SHA256, HMAC-SHA384,

john --list=formats | grep -iF "sha256"
# tripcode, AndroidBackup, adxcrypt, agilekeychain, aix-ssha1, aix-ssha256,
# sha1crypt, sha256crypt, sha512crypt, Citrix_NS10, dahua, dashlane,
# 430 formats (151 dynamic formats shown as just "dynamic_n" here)
# PBKDF2-HMAC-MD4, PBKDF2-HMAC-MD5, PBKDF2-HMAC-SHA1, PBKDF2-HMAC-SHA256,
# Raw-SHA1-AxCrypt, Raw-SHA1-Linkedin, Raw-SHA224, Raw-SHA256, Raw-SHA3,
# has-160, HMAC-MD5, HMAC-SHA1, HMAC-SHA224, HMAC-SHA256, HMAC-SHA384,

john --list=formats | grep -iF "whirlpool"
# 430 formats (151 dynamic formats shown as just "dynamic_n" here)
# tc_aes_xts, tc_ripemd160, tc_ripemd160boot, tc_sha512, tc_whirlpool, vdi,
# OpenVMS, vmx, VNC, vtp, wbb3, whirlpool, whirlpool0, whirlpool1, wpapsk,
john --format=raw-sha1 --wordlist=/usr/share/wordlists/rockyou.txt hash2.txt
# kangeroo         (?)

john --format=raw-sha256 --wordlist=/usr/share/wordlists/rockyou.txt hash3.txt
# microphone       (?)

john --format=whirlpool --wordlist=/usr/share/wordlists/rockyou.txt hash4.txt
# colossal         (?)
  • What type of hash is hash2.txt?
    • Write the name without the dash “-”.

sha1

  • What is the cracked value of hash2.txt?

kangeroo

  • What type of hash is hash3.txt?
    • Write the name without the dash “-”

sha256

  • What is the cracked value of hash3.txt?

microphone

  • What type of hash is hash4.txt?
    • It is not SHA-512.

whirlpool

  • What is the cracked value of hash4.txt?
    • You won’t need the “raw” prefix for this one.

colossal

Cracking Windows Authentication Hashes

Ringkasan NTLM / NTHash

  • Authentication hashes adalah hash password yang disimpan oleh sistem operasi.
  • Hash ini sering ditemui saat pentest atau red team, terutama setelah mendapat akses privileged.
  • Hash bisa dicoba di-crack dengan brute force / dictionary attack menggunakan John the Ripper.

NTHash / NTLM

  • NTLM (NTHash) adalah format hash yang digunakan oleh Windows modern untuk menyimpan password user dan service.
  • Nama NTLM berasal dari:
    • NT = New Technology (Windows NT)
    • LM = format hash lama Windows (sudah deprecated)

Penyimpanan Hash di Windows

  • Windows menyimpan hash di:
    • SAM (Security Account Manager) → akun lokal
    • NTDS.dit → akun Active Directory
  • Hash bisa diambil menggunakan tools seperti:
    • Mimikatz
    • Dump SAM database
    • Dump NTDS.dit (AD)

Crack vs Pass-the-Hash

  • Tidak selalu perlu crack hash:
    • Bisa langsung pakai Pass-the-Hash (PtH) untuk login.
  • Hash cracking berguna jika:
    • Password lemah
    • Ingin mendapatkan plaintext password
cd John-the-Ripper-The-Basics/Task05
cat ntlm.txt
# 5460C85BD858A11475115D2DD3A82333

john --list=formats | grep -iF ntlm
# mysql, net-ah, nethalflm, netlm, netlmv2, net-md5, netntlmv2, netntlm,
# netntlm-naive, net-sha1, nk, notes, md5ns, nsec3, NT, NT-long, o10glogon,
# 430 formats (151 dynamic formats shown as just "dynamic_n" here)

john --format=nt --wordlist=/usr/share/wordlists/rockyou.txt ntlm.txt
# mushroom         (?)
  • What do we need to set the --format flag to in order to crack this hash?

nt

  • What is the cracked value of this password?

mushroom

Cracking /etc/shadow Hashes

/etc/shadow

  • File di Linux yang menyimpan hash password user.
  • Juga berisi info lain (umur password, last change, dll).
  • Hanya bisa diakses root, jadi perlu hak akses tinggi.
  • Jika berhasil didapat, hash bisa dicoba di-crack.

Unshadow

  • John tidak bisa langsung membaca /etc/shadow.
  • Perlu menggabungkan /etc/passwd dan /etc/shadow.
    • etc/passwd: root:x:0:0::/root:/bin/bash
    • etc/shadow: root:$6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0:18295:0:99999:7:::
  • Digunakan tool bawaan John: unshadow.

Sintaks:

unshadow passwd_file shadow_file

Contoh:

unshadow local_passwd local_shadow > unshadowed.txt
  • Bisa pakai:
    • File /etc/passwd dan /etc/shadow utuh
    • Atau hanya baris user target (misalnya root)

Cracking Hash

  • File hasil unshadow langsung bisa diberikan ke John.
  • Biasanya tidak perlu auto-detect, karena format sudah jelas.
  • Hash Linux modern umumnya SHA-512 (sha512crypt).

Perintah:

john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt unshadowed.txt
cd John-the-Ripper-The-Basics/Task06
cat local_shadow
# root:$6$Ha.d5nGupBm29pYr$yugXSk24ZljLTAZZagtGwpSQhb3F2DOJtnHrvk7HI2ma4GsuioHp8sm3LJiRJpKfIf7lZQ29qgtH17Q/JDpYM/:18576::::::
cat local_passwd
# root:x:0:0::/root:/bin/bash

unshadow local_passwd local_shadow > unshadowed.txt
cat unshadowed.txt
# root:$6$Ha.d5nGupBm29pYr$yugXSk24ZljLTAZZagtGwpSQhb3F2DOJtnHrvk7HI2ma4GsuioHp8sm3LJiRJpKfIf7lZQ29qgtH17Q/JDpYM/:0:0::/root:/bin/bash
john --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
# 1234             (root)

john etc_hashes.txt --show
# root:1234:18576::::::
  • What is the root password?

1234

Single Crack Mode

Single Crack Mode pada John the Ripper

Selama ini, kita menggunakan wordlist mode pada John untuk melakukan brute-force hash sederhana maupun kompleks. Namun, John juga memiliki mode lain yang disebut Single Crack Mode.

Dalam mode ini, John hanya menggunakan informasi dari username untuk menebak kemungkinan password secara heuristik, dengan cara memodifikasi huruf dan angka yang terdapat pada username tersebut.

Word Mangling

Single Crack Mode bekerja menggunakan teknik yang disebut word mangling.

Sebagai contoh, jika username adalah “Markus”, maka kemungkinan password yang dihasilkan antara lain:

  • Markus1, Markus2, Markus3, dan seterusnya
  • MArkus, MARkus, MARKus, dan variasi huruf besar lainnya
  • Markus!, Markus$, Markus*, dan simbol lain

John membangun wordlist berdasarkan informasi yang diberikan, lalu menerapkan mangling rules untuk memodifikasi kata awal menjadi berbagai variasi password yang relevan. Teknik ini memanfaatkan kebiasaan pengguna yang sering membuat password berdasarkan username atau informasi akun mereka.

GECOS

John juga mendukung word mangling menggunakan GECOS field pada sistem UNIX dan Linux.

GECOS (General Electric Comprehensive Operating System) merupakan field kelima pada file /etc/passwd, yang dipisahkan dengan tanda titik dua :. Field ini berisi informasi umum pengguna, seperti nama lengkap, nomor kantor, dan nomor telepon.

John dapat memanfaatkan informasi dari GECOS, seperti nama lengkap atau direktori home, untuk menambahkan variasi kata ke dalam wordlist saat melakukan cracking pada hash /etc/shadow menggunakan single crack mode.

Menggunakan Single Crack Mode

Untuk menggunakan Single Crack Mode, sintaksnya hampir sama dengan mode lainnya:

john --single --format=[format] [path to file]

Penjelasan:

  • --single : Mengaktifkan single crack mode
  • --format=[format] : Menentukan format hash yang digunakan

Contoh penggunaan:

john --single --format=raw-sha256 hashes.txt

Catatan Format File pada Single Crack Mode

Agar John dapat mengenali username, hash harus diawali dengan nama user. Contoh isi file sebelum:

1efee03cdcb96d90ad48ccc7b8666033

Diubah menjadi:

mike:1efee03cdcb96d90ad48ccc7b8666033

Answer Questions

cd ~/John-the-Ripper-The-Basics/Task07
cat hash07.txt
# 7bf6d9bb82bed1302f331fc6b816aada

python3 ../Task03/hash-id.py
# --------------------------------------------------
HASH: 7bf6d9bb82bed1302f331fc6b816aada
# Possible Hashs:
# [+] MD5
# [+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

ubah hash dengan menambhakan username joker di depan hash

echo "joker:7bf6d9bb82bed1302f331fc6b816aada" > hash.txt

lalu lakukan crqack dengan singgle mode

john --single --format=raw-md5 hash.txt
john --show --format=raw-md5 hash.txt
# joker:Jok3r
  • What is Joker’s password?
    • Remember to identify the hash type.

Jok3r

Custom Rules

Apa itu Custom Rules?

Setelah mempelajari Single Crack Mode pada John, kamu mungkin mulai memiliki gambaran tentang pola mangling yang sering digunakan pada password, atau pola password pribadi yang sering dipakai dan bisa direplikasi.

Kabar baiknya, John memungkinkan kita membuat aturan sendiri (Custom Rules), yang akan digunakan untuk menghasilkan password secara dinamis. Fitur ini sangat berguna ketika kita memiliki informasi tambahan tentang struktur password target.

Custom Rules yang Umum Digunakan

Banyak organisasi menerapkan kebijakan kompleksitas password untuk mencegah serangan dictionary attack. Misalnya, password harus mengandung minimal:

  • Huruf kecil
  • Huruf besar
  • Angka
  • Simbol

Karena itu, password sederhana seperti polopassword biasanya akan ditolak. Sebagai gantinya, banyak pengguna membuat password seperti:

Polopassword1!

Pola ini sangat umum:

  • Huruf pertama kapital
  • Angka di akhir
  • Diikuti simbol

Meskipun password ini memenuhi syarat kompleksitas, pengguna cenderung konsisten dan mudah ditebak dalam penempatan simbol dan angka. Pola yang dapat diingat ini sering digunakan berulang kali, dan inilah yang bisa kita eksploitasi sebagai attacker.

Cara Membuat Custom Rules

Custom Rules didefinisikan di file john.conf.

Lokasi file:

  • TryHackMe AttackBox:
    /opt/john/john.conf
  • Instalasi lokal (package manager / source):
    /etc/john/john.conf

Kita akan menggunakan contoh password Polopassword1! sebagai target pola.

Sintaks Dasar Custom Rules

Baris pertama digunakan untuk memberi nama rule:

[List.Rules:THMRules]

Nama ini nantinya dipanggil sebagai argumen saat menjalankan John.

Modifier yang Umum Digunakan

Beberapa modifier penting:

  • Az : Menambahkan karakter di akhir kata
  • A0 : Menambahkan karakter di awal kata
  • c : Mengubah huruf menjadi kapital secara posisi

Modifier ini bisa digabungkan sesuai kebutuhan.

Character Set

Karakter yang akan ditambahkan didefinisikan menggunakan tanda kurung siku [ ] dan diletakkan di dalam tanda kutip " ".

Contoh character set:

  • [0-9] : Angka 0 sampai 9
  • [0] : Hanya angka 0
  • [A-z] : Huruf besar dan kecil
  • [A-Z] : Huruf besar saja
  • [a-z] : Huruf kecil saja
  • [!£$%@] : Simbol ! £ $ % @

Contoh Custom Rule

Untuk menghasilkan password seperti Polopassword1! dari kata polopassword, rule-nya adalah:

[List.Rules:PoloPassword]
cAz"[0-9] [!£$%@]"

Penjelasan:

  • c : Mengkapitalkan huruf pertama
  • Az : Menambahkan karakter di akhir kata
  • [0-9] : Menambahkan satu angka
  • [!£$%@] : Menambahkan satu simbol

Menggunakan Custom Rules

Custom Rule dapat digunakan dengan flag:

--rule=PoloPassword

Contoh perintah lengkap:

john --wordlist=[path to wordlist] --rule=PoloPassword [path to file]

Catatan Tambahan

  • Membaca pola password dengan mengucapkannya secara verbal sering membantu saat menulis rule
  • Jumbo John sudah memiliki banyak custom rules bawaan
  • Jika terjadi error sintaks, coba lihat rule bawaan di sekitar baris 678 pada file john.conf
cat /opt/john/john.conf
cat /opt/john/john.conf | grep -A 10 "List.Rules"

: john --wordlist=[path to wordlist] --rule=PoloPassword [path to file]
  • What do custom rules allow us to exploit?

password complexity predictability

  • What rule would we use to add all capital letters to the end of the word?
    • Remember that Az appends to the end of the word while "[A-Z]" refers to the uppercase letters.

Az"[A-Z]"

  • What flag would we use to call a custom rule called THMRules?

--rule=THMRules

Cracking Password Protected Zip Files

Cracking Password Zip File dengan John the Ripper

Benar! John the Ripper dapat digunakan untuk memecahkan password pada file Zip yang dilindungi password. Sama seperti sebelumnya, kita menggunakan tool tambahan dalam paket John untuk mengubah file Zip ke format yang bisa dipahami oleh John, lalu menggunakan sintaks John yang sudah familiar.

Zip2John

Mirip dengan tool unshadow, kita menggunakan zip2john untuk mengonversi file Zip menjadi format hash yang dapat dibaca dan di-crack oleh John.

Sintaks utama:

zip2john [options] [zip file] > [output file]

Penjelasan:

  • [options] : Opsi checksum tambahan (biasanya tidak diperlukan)
  • [zip file] : Path ke file Zip yang ingin diambil hash-nya
  • > : Mengarahkan output ke file lain
  • [output file] : File untuk menyimpan hash hasil konversi

Contoh penggunaan:

zip2john zipfile.zip > zip_hash.txt

Proses Cracking

Setelah hash Zip berhasil dibuat menggunakan zip2john, file output tersebut dapat langsung diberikan ke John, sama seperti saat menggunakan unshadow.

Contoh perintah:

john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt

John akan menggunakan wordlist untuk mencoba memecahkan password file Zip tersebut.

Answer Questions

cd ~/John-the-Ripper-The-Basics/Task09
file secure.zip
# secure.zip: Zip archive data, at least v1.0 to extract, compression method=store

zip2john secure.zip > zip_hash.txt
cat zip_hash.txt
# secure.zip/zippy/flag.txt:$pkzip$1*2*2*0*26*1a*849ab5a6*0*48*0*26*b689*964fa5a31f8cefe8e6b3456b578d66a08489def78128450ccf07c28dfa6c197fd148f696e3a2*$/pkzip$:zippy/flag.txt:secure.zip::secure.zip

john --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt
# pass123          (secure.zip/zippy/flag.txt)

unzip secure.zip
cat zippy/flag.txt
# THM{w3ll_d0n3_h4sh_r0y4l}
  • What is the password for the secure.zip file?

pass123

  • What is the contents of the flag inside the zip file?

THM{w3ll_d0n3_h4sh_r0y4l}

Cracking Password-Protected RAR Archives

Cracking Password pada File RAR

Kita dapat menggunakan proses yang mirip dengan cracking file Zip untuk mendapatkan password pada arsip RAR. File RAR merupakan file terkompresi yang dibuat menggunakan WinRAR, dan fungsinya sama seperti Zip, yaitu mengompres folder dan file.

Rar2John

Hampir sama dengan zip2john, kita menggunakan tool rar2john untuk mengonversi file RAR ke dalam format hash yang dapat dipahami oleh John.

Sintaks dasar:

rar2john [rar file] > [output file]

Penjelasan:

  • rar2john : Menjalankan tool rar2john
  • [rar file] : Path ke file RAR yang ingin diambil hash-nya
  • > : Mengarahkan output ke file lain
  • [output file] : File yang menyimpan hasil output

Contoh penggunaan:

/opt/john/rar2john rarfile.rar > rar_hash.txt

Proses Cracking

Setelah hash dibuat menggunakan rar2john, file output tersebut dapat langsung digunakan oleh John, sama seperti saat menggunakan zip2john.

Contoh perintah:

john --wordlist=/usr/share/wordlists/rockyou.txt rar_hash.txt

John akan mencoba memecahkan password file RAR menggunakan wordlist yang diberikan.

Answer Questions

cd ~/John-the-Ripper-The-Basics/Task10
file secure.rar
# secure.rar: RAR archive data, v5

rar2john secure.rar > rar_hash.txt
cat rar_hash.txt
# secure.rar:$rar5$16$b7b0ffc959b2bc55ffb712fc0293159b$15$4f7de6eb8d17078f4b3c0ce650de32ff$8$ebd10bb79dbfb9f8

john --wordlist=/usr/share/wordlists/rockyou.txt rar_hash.txt
# password         (secure.rar)

unrar x secure.rar
# pass: password

cat flag.txt
# THM{r4r_4rch1ve5_th15_t1m3}
  • What is the password for the secure.rar file?

password

  • What are the contents of the flag inside the rar file?
    • You may need to install a utility called unrar.

THM{r4r_4rch1ve5_th15_t1m3}

Cracking SSH Keys with John

Cracking Password SSH Private Key

Baik, tidak ada lagi arsip file 😄 Sekarang kita akan membahas satu penggunaan John lainnya yang cukup sering muncul dalam challenge CTF, yaitu memecahkan password SSH private key (id_rsa).

Secara default, SSH menggunakan password untuk autentikasi. Namun, SSH juga mendukung key-based authentication, di mana kita menggunakan private key (id_rsa) untuk login ke mesin remote.

Biasanya, private key ini dilindungi oleh password, dan di sinilah John the Ripper digunakan untuk memecahkan password tersebut agar kita bisa login ke SSH menggunakan key.

SSH2John

Seperti sebelumnya, kita membutuhkan tool konversi. Tool ini bernama ssh2john, yang berfungsi mengubah file id_rsa private key menjadi format hash yang dapat diproses oleh John.

Jika ssh2john tidak terpasang:

  • AttackBox:
    python3 /opt/john/ssh2john.py
  • Kali Linux:
    python /usr/share/john/ssh2john.py

Sintaks dasar:

ssh2john [id_rsa private key file] > [output file]

Penjelasan:

  • ssh2john : Menjalankan tool ssh2john
  • [id_rsa private key file] : Path ke file id_rsa
  • > : Mengarahkan output ke file lain
  • [output file] : File untuk menyimpan hasil hash

Contoh penggunaan:

/opt/john/ssh2john.py id_rsa > id_rsa_hash.txt

Proses Cracking

Setelah hash berhasil dibuat menggunakan ssh2john, file output tersebut dapat langsung digunakan oleh John, sama seperti pada rar2john dan zip2john.

Contoh perintah:

john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash.txt

John akan mencoba memecahkan password private key menggunakan wordlist yang diberikan.

Answer Questions

cd ~/John-the-Ripper-The-Basics/Task11
cat id_rsa

locate ssh2john
# /opt/john/ssh2john.py
/opt/john/ssh2john.py id_rsa > ssh_hash.txt

john --wordlist=/usr/share/wordlists/rockyou.txt ssh_hash.txt
# mango            (id_rsa)
  • What is the SSH private key password?

mango

On this page

Cryptography BasicsImportance of CryptographyPlaintext to CiphertextHistorical CiphersTypes of Encryption🔐 Kategori Utama Enkripsi🔑 Enkripsi Simetris (Symmetric Encryption)🔐 Enkripsi Asimetris (Asymmetric Encryption)Basic Math🔢 Operasi XOR (Exclusive OR)⭐ Sifat Penting XOR🔐 XOR sebagai Enkripsi Simetris➗ Operasi Modulo (mod)⚠️ Sifat Penting ModuloPublic Key Cryptography Basicsintroduction🔐 Konsep Keamanan dalam Kehidupan & Dunia Digital☕ Analogi Dunia Nyata (Pertemuan Langsung)🌐 Penerapan di Dunia Siber🔑 Peran KriptografiCommon Use of Asymmetric Encryption🔑 Pertukaran Kunci dalam Kriptografi❓ Masalah Utama🔒 Analogi Kotak dan Gembok🧩 Pemetaan Analogi ke Kriptografi✅ Inti KonsepRSA (Rivest–Shamir–Adleman)**Dasar Matematika Keamanan RSAKonsep Kunci Publik dan Kunci PrivatContoh Numerik RSA (Sederhana)Proses Enkripsi dan DekripsiEnkripsi (oleh Alice):Dekripsi (oleh Bob):RSA dalam CTF (Capture The Flag)Tools yang Berguna untuk RSA CTFDiffie-Hellman Key ExchangeMasalah pada Enkripsi SimetrisDiffie-Hellman Key ExchangeKonsep Dasar Diffie-HellmanProses Diffie-Hellman Secara Numerik1. Menentukan Parameter Publik2. Menentukan Kunci Privat3. Menghitung Kunci Publik4. Pertukaran Kunci Publik5. Menghitung Kunci Rahasia BersamaKeamanan Diffie-HellmanDiffie-Hellman dan RSAKesimpulanPOWSSHAutentikasi Server (SSH)Autentikasi Client (Pengguna)Algoritma SSH KeyPembuatan SSH KeyKeamanan SSH Private Keyauthorized_keysSSH Keys dalam CTF & PentestDigital Signatures and CertificatesTanda Tangan di Dunia DigitalApa Itu Digital Signature?Cara Kerja Digital Signature (Sederhana)Digital Signature vs Electronic SignatureSertifikat Digital (Certificates)Chain of Trust (Rantai Kepercayaan)TLS Certificate untuk WebsiteKesimpulan SingkatPGP and GPGPGP dan GPGFungsi Utama GPGPembuatan GPG KeyKeamanan GPG KeyPenggunaan GPG dalam PraktikBerbagi Public KeyDekripsi PesanBackup dan Restore GPG KeyGPG dalam CTFHashing BasicsHash FunctionsInsecure Password Storage for AuthenticationUsing Hashing for Secure Password StorageRecognising Password HashesPassword CrackingHashing for Integrity CheckingHMAC (Keyed Hash MAC):ConclusionJohn the Ripper: The BasicsBasic TermsKeamanan HashCracking HashJohn the RipperSetting Up Your SystemInstalasi John the RipperWordlistAkses Virtual MachineCracking Basic HashesAutomatic CrackingIdentifikasi HashFormat-Specific CrackingAnswer QustionsCracking Windows Authentication HashesRingkasan NTLM / NTHashNTHash / NTLMPenyimpanan Hash di WindowsCrack vs Pass-the-HashCracking /etc/shadow HashesUnshadowCracking HashSingle Crack ModeSingle Crack Mode pada John the RipperWord ManglingGECOSMenggunakan Single Crack ModeCatatan Format File pada Single Crack ModeAnswer QuestionsCustom RulesApa itu Custom Rules?Custom Rules yang Umum DigunakanCara Membuat Custom RulesSintaks Dasar Custom RulesModifier yang Umum DigunakanCharacter SetContoh Custom RuleMenggunakan Custom RulesCatatan TambahanCracking Password Protected Zip FilesCracking Password Zip File dengan John the RipperZip2JohnProses CrackingAnswer QuestionsCracking Password-Protected RAR ArchivesCracking Password pada File RARRar2JohnProses CrackingAnswer QuestionsCracking SSH Keys with JohnCracking Password SSH Private KeySSH2JohnProses CrackingAnswer Questions