Cmd Injection
Where Would You Find Command Injection
In the following places:
Text boxes that take in input
Hidden URLs that take input
E.g.
/execute/command-nameOr through queries e.g.
/location?parameter=commandWhen using URLs, remember to URL encode the characters that aren’t accepted
Hidden ports:
Some frameworks open debug ports that take in arbitrary commands
Overview
Use command line symbols within the input to alter the executed command
Pay close attention to functions within an application that tend to be performed by an OS command
Two forms exist, blind command injection --> you do not see the returned output, and non-blind cmd injection --> the system command output gets returned back to you
Ensure you use the proper system commands per the OS
cat vs type
ping -c vs ping -n #ping -n causes an infinte ping loop in linux
ls vs dirTry to start with reading a world readable file

Non-Blind CMD Inj.
At the most basic level:
Use command line symbols within the input to alter the executed command
Once you have identified a potential injection point, use command line symbols within the input to alter the executed command

Once you have exploited non-blind cmd injection, escalate to a reverse shell.
Blind CMD Injection
Identification
ICMP and DNS are useful to determine blind cmd injection
Can also try to ping yourself, however many corporate environments have firewalls in place to stop this, so doesn't always mean blind cmd injection isn't taking place
Use
tcpdumpto capture theicmpecho requests.


This proves blind cmd injection, escalate to reverse shell
Burp Collaborator
Launch Burp, and choose:

Press
Poll Nowto see if the request came through

If the above worked, move down to Data Exfil section
Data Exfil via DNS and Burp Collaborator
Once you have your Burp Collaborator Domain, try your command injection
Press Poll now and you should have something returned like this:
Then type the following in your local terminal
If this fails as
Invalid Base32add 1, or 2 equal signs at the end for padding
Bypassing Character Blocklist with ffuf
If you see that some special characters are banned, create a burp request to the resource you want to test
It should be a post request
Identify the parameter that it is using to post the data to the server
Swap out the command injection attempt that is getting blocked in the burp request with:
Save the burp request to your local machine in a file
You usually will have to ignore the
&character as many webservers will think you are going to pass in another parameterNow that you have your results back you must filter out the most common side that you see being returned
-fs 724Can comma seperate filter size i.e. you see alot of 724 and 726 returned saying that character you posted is blocked
-fs 724,726Ensure you also
-mc allor match code to see all the different http status codes returned, look for 5XX errorsIf you see errors on:
IFS Bypass No Spaces CmdInjection
whitespace bypass
can see above that the username (our injection point) cannot contain spaces, we can use
{IFS}to bypass this restriction and get cmd injectionGaining a reverse shell, encode your payload and have it decode and execute to avoid special character issues
Last updated