Buffer Overflow Itu Apa? Panduan Hands-On
Pelajari cara buffer overflows bekerja dengan contoh C nyata, diagram stack, dan tools untuk melihatnya sendiri.
Buffer overflow terjadi ketika program menulis lebih banyak data ke dalam potongan memori berukuran tetap daripada yang dapat ditampung potongan itu. Byte tambahan tumpah ke memori yang berdekatan, dan tergantung apa yang berada di sebelah buffer itu, Anda bisa merusak variabel, menghancurkan program, atau meretas alur eksekusi sepenuhnya. Ini adalah salah satu kelas bug tertua dalam keamanan perangkat lunak dan masih muncul di CTF, CVE, dan firmware tertanam hari ini.
Pola rentan
Ini adalah contoh klasik dalam C:
#include <string.h>
void greet(char *name) {
char buffer[64];
strcpy(buffer, name);
}
int main(int argc, char **argv) {
greet(argv[1]);
return 0;
}
strcpy menyalin string apa pun yang Anda berikan ke buffer, tanpa pengecekan batas. Jika argv[1] lebih panjang dari 64 byte, salinannya terus berjalan melampaui akhir array. Di stack, buffer berada di bawah variabel lokal lainnya, register yang disimpan, dan akhirnya return address yang memberi tahu CPU kemana melompat setelah greet() selesai. Timpa return address itu dengan alamat yang Anda kontrol, dan Anda mengontrol apa yang berjalan selanjutnya.
Mengapa ini masih dikompilasi dan dijalankan
C dan C++ tidak melakukan pengecekan batas otomatis pada array mentah. Fungsi seperti strcpy, gets, sprintf, dan strcat dengan senang hati menulis melampaui akhir buffer karena mereka hanya peduli tentang null terminator atau panjang sumber, bukan ukuran sebenarnya dari tujuan. Bandingkan itu dengan strncpy atau snprintf, yang mengambil argumen ukuran eksplisit dan berhenti di sana. Kerentanan tidak benar-benar
Ditulis dengan bantuan AI, ditinjau dan dipublikasikan oleh Michal Pilch (CISSP), Korra Studio.
Ini satu catatan dari basis pengetahuan Korra Studio — platform ini memasangkan setiap topik dengan bimbingan privat.
Mulai gratisarrow_forward