【Hack The Box】OpenKeyS


[toc]

简介

  • Machine IP:10.10.10.199

靶机攻击思路如下:

通过目录扫描发现swp文件,分析文件发现auth.php源码和用户名,然后利用CVE-2019-19521绕过登录,接着伪造Cookie获取用户的SSH私钥,利用该文件登录目标主机,最后利用CVE-2019-19520权限提升漏洞成功提升至root权限。

信息收集

端口扫描

首先进行端口扫描:

nmap -T4 -F -sV 10.10.10.199
  • -F:快速扫描
  • -sV:扫描端口上运行服务的版本

image-20201129200457267

现目标主机上开启了22端口和80端口,分别运行着OpenSSH服务和OpenBSD httpd服务。

OpenBSD是一个多平台的,基于4.4BSD的类UNIX操作系统,是BSD衍生出的三种免费操作系统(另外两种是NetBSD和FreeBSD)之一,被称为世界上最安全的操作系统。专案领导人 Theo de Raadt在1995年发起了OpenBSD 专案,希望创造一个注重安全的操作系统。

外网初探

我们访问目标主机的80端口,发现一个登录框:

image-20201129201112337

尝试弱口令爆破与sql注入都没有任何结果。查看源码,发现提示:

image-20201129201754021

让我们找回我们的ssh私钥,结合之前端口扫描的结果,应该是让我们通过网站的漏洞来获取一个ssh私钥进行ssh登录,从而获取服务端的控制权。

除此之外,再无其他帮助。我们只能扫描目录,看看还有什么页面:

image-20201129202154034

如上图,我们在includes目录中发现了一个auth.php和其swp的备份文件auth.php.swp,我们访问auth.php:

image-20201129202339983

如上图所示,并未发现有用的信息。

我们继续访问auth.php.swp:

image-20201129202435152

如上图所示,发现了部分源码,我们用wget将auth.php.swp下载到我们本地:

image-20201129202555387

然后用vim -r命令将该.swp备份文件修复:

vim -r auth.php.swp

得到如下源码:

image-20201129202726779

<?php

function authenticate($username, $password)   // 自定义了一个authenticate函数
{
    $cmd = escapeshellcmd("../auth_helpers/check_auth " . $username . " " . $password); 
    // escapeshellcmd函数对输入的用户名和密码中的特殊字符进行转义
    system($cmd, $retcode);   
    return $retcode;   // // 用服务端的/auth_helpers/check_auth程序对用户登录进行验证,并返回一个状态码
}

function is_active_session()    // 该函数用于检查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
{
    $_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'];    // 该处的username是用户可控的
}

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


?>

上面的代码涉及到了服务端本地的一个check_auth程序,改程序用于对用户的登录进行验证,我们将该check_auth程序用wget下载到本地:

image-20201129203447241

用file命令查看该文件类型:

image-20201129203522967

发现该文件是个64位的ELF二进制可执行程序,调用了动态链接库/usr/libexec/ld.so,但是我不会分析。

通过查找网上的资料,我找到了最近的OpenBSD漏洞,即OpenBSD身份验证绕过和权限提升漏洞:

  • CVE-2019-19519(本地特权升级)
  • CVE-2019-19520(本地特权升级)
  • CVE-2019-19521(身份验证绕过)
  • CVE-2019-19522(本地特权升级)

OpenBSD是一个以安全为目的而开发的开源操作系统,但2019年却被曝出四个高危级别的漏洞。其中一个涉及BSD授权框架(OpenBSD操作系统依靠BSD身份验证框架进行身份验证)中的身份认证绕过,其他三个漏洞和非法提权有关,可让本地用户或某些恶意软件获得某个组乃至root用户的权限。

这些漏洞是本周早些时候由Qualys Research Labs发现并报告的,在不到40小时之内,OpenBSD的开发人员就发布了针对OpenBSD 6.5OpenBSD 6.6的安全补丁。

详情请参考:

https://www.freebuf.com/column/222213.html

https://www.secpod.com/blog/openbsd-authentication-bypass-and-local-privilege-escalation-vulnerabilities/

我们先尝试OpenBSD认证绕过漏洞(CVE-2019-19521)。

身份验证绕过漏洞的根源在于OpenBSD身份验证框架解析用户名时的缺陷(可能涉及smtpd、ldapd、radiusd、su或sshd等登录服务)。在利用这个漏洞时,远程攻击者若要登录某个服务,只需把用户名设为 -schallenge-schallenge: passwd ,密码随机即可。这是因为用户名之前的连字符(-)欺骗OpenBSD将后面的值解释为命令行选项,而不是用户名。此时,OpenBSD的身份验证框架会将 -schallenge解析为 -s challenge ,这会迫使系统默认忽略身份验证的挑战协议,最终导致身份验证绕过。

于是,我们在登陆框中输入:

  • 用户名:-schallenge
  • 密码:随便

来测试CVE-2019-19521漏洞是否存在:

image-20201130102037204

image-20201130102107311

如上图所示,登录成功,但是显示没有这个用户的SSH秘钥,看来我们要用指定的用户进行登录。

我们再回到之前的auth.php.swp

vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件。这个文件是一个临时交换文件,用来备份缓冲区中的内容。如果原文件名是data,那么swp文件名就是.data.swp。如果文件正常退出,则此文件自动删除。需要注意的是如果你并没有对文件进行修改,而只是读取文件,是不会产生swp文件的。

我们用Linux上的strings命令,查看一下该文件中所有的可打印字符:

image-20201130102949435

我们发现了一个“jennifer”单词,这会不会是用户名呢。下面我们想办法登录“jennifer”用户,由于之前我们在auth.php的源码中发现了session中有一个可控的参数username:

image-20201130160423995

所以我们直接在控制台中尝试修改cookie,添加一个名为username,值为jennifer的变量,如下图,登陆成功并获得了OpenSSH key:

image-20201130160844058

有了jennifer用户的ssh私钥,我们就可以进行ssh免密登陆了。

SSH使用自定义私钥进行登录:

ssh -i /目录/id_rsa username@IP
  • -i:指定了私钥文件的路径

我们将jennifer用户的ssh私钥复制下来,保存在~/.ssh/id_rsa中,然后设置其权限为600,然后执行如下命令连接目标服务器:

ssh -i id_rsa jennifer@10.10.10.199

image-20201130162639961

如上图,成功获得jennifer用户的shell,但该用户的权限较低,所以我们要想办法提权。

权限提升

我们查看目标主机的内核版本发现是OpenBSD 6.6:

image-20201130165124090

我们在网上找到了一个OpenBSD 6.x版本的权限提上漏洞(CVE-2019-19726)。OpenBSD 6.6及之前版本中存在该安全漏洞,本地攻击者可利用该漏洞将权限提升至root,进而以该权限执行自己的库代码。

我们在exploit-db上面搜到了该提权漏洞的exploit,经测试,未能利用成功:

image-20201130173136518

我们再回到之前OpenBSD爆出来的那四个漏洞,其中三个是特权提升的:

  • CVE-2019-19519(本地特权升级)
  • CVE-2019-19520(本地特权升级)
  • CVE-2019-19521(身份验证绕过)
  • CVE-2019-19522(本地特权升级)

我们先尝试CVE-2019-19519本地特权提升漏洞,该漏洞是由于 su 命令的一个主要功能存在逻辑错误,本地用户可以利用 su-L 选项实现任何用户的登录类,通常不包括root,所以我们略过。

我们尝试CVE-2019-19520本地特权提升漏洞,该漏洞由于dlopen()中对环境路径的使用不当,默认安装在OpenBSD上的xlock可让本地用户将权限提升到auth组。

https://github.com/bcoles/local-exploits 上面下载CVE-2019-19520的利用脚本。

然后利用scp命令将该利用脚本上传到目标主机中:

Linux scp 命令用于 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

scp -i id_rsa /root/openbsd-authroot jennifer@10.10.10.199:/home/jennifer/openbsd-authroot

如上图,上传成功:

image-20201130171302751

然后在目标主机上执行该脚本:

image-20201130171605793

如上图所示,成功获取root权限。

Ending……

31462668aa9877be1d2d6612d93bfd8b

参考:

https://www.freebuf.com/column/222213.html

https://www.secpod.com/blog/openbsd-authentication-bypass-and-local-privilege-escalation-vulnerabilities/


Author: WHOAMI
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source WHOAMI !
评论
 Previous
【Hack The Box】Omni 【Hack The Box】Omni
[toc] 简介 Machine IP:10.10.10.204 这是一台Windows IoT靶机。通过nmap的结果确定该主机的操作系统类型,进而找到Windows IoT的新漏洞,利用该漏洞直接获得SYSTEM权限。 信息收集端口
2020-11-30
Next 
Web渗透测试:信息收集篇 Web渗透测试:信息收集篇
渗透测试,是渗透测试工程师完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标网络、主机、应用的安全作深入的探测,帮助企业挖掘出正常业务流程中的安全缺陷和漏洞,助力企业先于黑客发现安全风险,防患于未然。
2020-11-30
  TOC