An Exploit (from the verb to exploit, in the meaning of using something to one’s own advantage) is a piece of software, a chunk of data, or sequence of commands that takes advantage of a bug, glitch or vulnerability in order to cause unintended or unanticipated behaviour to occur on computer software, hardware, or something electronic (usually computerised). Such behavior frequently includes such things as gaining control of a computer system or allowing privilege escalation or a denial-of-service attack.
Classification
A 'local exploit' requires prior access to the vulnerable system and usually increases the privileges of the person running the exploit past those granted by the system administrator.
Exploits against client applications also exist, usually consisting of modified servers that send an exploit if accessed with client application. Exploits against client applications may also require some interaction with the user and thus may be used in combination with social engineering method. Another classification is by the action against vulnerable system: unauthorized data access, arbitrary code execution, denial of service.
Many exploits are designed to provide superuser-level access to a computer system. However, it is also possible to use several exploits, first to gain low-level access, then to escalate privileges repeatedly until one reaches root.
Normally a single exploit can only take advantage of a specific software vulnerability. Often, when an exploit is published, the vulnerability is fixed through a patch and the exploit becomes obsolete for newer versions of the software. This is the reason why some blackhat hackers do not publish their exploits but keep them private to themselves or other hackers. Such exploits are referred to as 'zero day exploits' and to obtain access to such exploits is the primary desire of unskilled attackers, often nicknamed script kiddies.
Local Exploit
A local exploit is a vulnerability in a Linux system that allows an ordinary user to gain root privileges by performing a certain sequence of actions. Generally these exploits occur when a privileged application contains a bug which does not perform sufficient checks on the user before executing a command with root access.
Local exploits do not by themselves allow intruders into the system, since an ordinary user account is needed first. However it is often possible to gain this user access to a system if a password policy is not enforced or if the system provide user accounts as a service, for example web hosting servers.
Local and remote are not enough. There are also "local" problems where the data is coming from a remote server. Email clients, web browsers, etc. are run by the user, as the user, but they process untrusted data. So I see it something like (from highest to lowest severity):
- remotely exploitable server
- remotely exploitable client
- locally exploitable server running as root or system user
- locally exploitable server running as the user
- locally exploitable client or non-networked program (suid/sgid)
- often-used directly or in scripts, locally exploitable client or non-networked program (non-suid, non-sgid)
- rarely-used directory or in scripts, locally exploitable client or non-networked program (non-suid, non-sgid)
Not all exploits are the same. Many allow running arbitrary code. But some only allow reading or deleting files. Futhermore you have to take DoS attacks into account.
- arbitrary execution as root
- file or memory viewing as root
- file deletion or modification as root
- arbitrary execution as a system user
- file or memory viewing as a system user
- file deletion or modification as a system user
- arbitrary execution as a user
- file or memory viewing as a user
- file deletion or modification as a user
- system-wide denial of service (crash, lockup, etc.)
- permanent (until manual intervention) remotely visible denial of service
- temporary remotely visible denial of service
- partial remotely visible denial of service (performance impact only)
- other permanent (until manual intervention) denial of service
- other temporary denial of service
- other partial denial of service (performance impact only)