This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

Difference between revisions of "OS Command Injection"

From OWASP
Jump to: navigation, search
(Redirected page to Command Injection)
 
(7 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Template:Attack}}
+
#REDIRECT [[Command Injection]]
 
 
==Description==
 
 
 
An OS command injection attack occurs when an attacker attempts to execute system level commands through a vulnerable application. Applications are considered vulnerable to the OS command injection attack if they utilize user input in a system level command.
 
 
 
==Examples ==
 
 
 
The following trivial code snippets are vulnerable to OS command injection on the Unix/Linux platform:
 
 
 
:* C:
 
 
 
#include <stdlib.h>
 
#include <stdio.h>
 
#include <string.h>
 
 
int main(int argc, char **argv)
 
{
 
      char command[256];
 
 
      if(argc != 2) {
 
          printf("Error: Please enter a program to time!\n");
 
          return -1;
 
      }
 
 
      memset(&command, 0, sizeof(command));
 
 
      strcat(command, "time ./");
 
      strcat(command, argv[1]);
 
 
      system(command);
 
      return 0;
 
}
 
 
 
:* If this were a suid binary, consider the case when an attacker enters the following: 'ls; cat /etc/shadow'. In the Unix environment, shell commands are separated by a semi-colon. We now can execute system commands at will!
 
 
 
:* Java:
 
 
 
import java.util.*;
 
import java.io.*;
 
 
public class Exec
 
{
 
      public static void main(String args[])
 
      {
 
          try
 
          {
 
                Runtime rt = Runtime.getRuntime();
 
                Process proc = rt.exec("time ./" + args[0]);
 
          }
 
          catch(Exception e)
 
          {
 
                e.printStackTrace();
 
          }
 
      }
 
}
 
 
 
:* The same situation applies to the Java program as it did to the C program. An attacker has the ability to execute arbitrary system level commands through your application.
 
 
 
==Related Threats==
 
 
 
==Related Attacks==
 
 
 
==Related Vulnerabilities==
 
 
 
==Related Countermeasures==
 
 
 
Ideally, a developer should use existing API for their language. For example (Java): Rather than use Runtime.exec() to issue a 'mail' command, use the available Java API located at javax.mail.*
 
 
 
If no such available API exists, the developer should scrub all input for malicious characters. Implementing a positive security model would be most efficient. Typically, it is much easier to define the legal characters than the illegal characters.
 
 
 
==Categories==
 
 
 
{{Template:Stub}}
 
 
 
[[Category:Injection Attack]]
 

Latest revision as of 18:09, 7 August 2016

Redirect to: