برنامههایی که نوشته میشوند عموما دارای باگ یا آسیبپذیری هستند. پیدا کردن برنامهای که دارای باگ یا آسیبپذیری نباشد کار دشواری است. یک نرم افزار در صورت داشتن باگ یا آسیبپذیری، در شرایطی رفتارهای نامعمولی از خود نشان میدهد. مثلا ممکن است یک برنامه در ازای گرفتن یک رشته متنی با طول معمولی پیامی را نمایش دهد. اما ممکن است است اگر رشته متنی که به عنوان ورودی به آن داده میشود بزرگتر از حد معمولی باشد، رفتار دیگری از خود نشان دهد. مثلا یک قسمت از حافظه را دچار مشکل کند. از این باگها و آسیبپذیریها میتوان با اهداف بدخواهانه استفاده کرد. تکه برنامه، فرمان یا دادهی ورودیای که از باگ یا آسیبپذیری نرم افزار استفاده میکند اکسپلویت نامیده میشود. درواقع اکسپلویت رفتاری از برنامه را دنبال میکند که هدف توسعه دهنده برنامه نبودهاست. در صورتی که مهاجم استفاده موثری از باگ یا آسیبپذیری داشته باشد، اصطلاحا گفته میشود باگ یا آسیبپذیری نرم افزار اکسپلویت شده است. این رفتار نامعمول میتواند منجر به دسترسی غیرمجاز به سیستم یا تخریب سیستم شود.
اکسپلویتها به دو دسته محلی (Local) و را دور (Remote) تقسیم میشوند. اکسپلویت راه دور همان اکسپلویت محلی است با این تفاوت که قابلیتهای شبکهای به آن اضافه شده است. اکسپلویتهای محلی را روی شبکههای محلی تست میکنند و درصورت موفق بودن به آن امکانات شبکهای اضافه میکنند تا بتوانند روی هاستهای راه دور از آنها استفاده کنند. چند متد معروف اکسپلویتینگ عبارتند از: سرریز بافر (Buffer Overflow)، تزریق (Injection) و حلقه زمان (Time Loop).