被困在机器上进行渗透测试学习,可能是 sudo 漏洞吗?

问题描述

我正在努力使用机器(它旨在用于渗透测试培训,这是大学教授提供的)。

我已经在机器上找到了立足点,我已经从 www-data 传递到 developer,还有另一个名为 jamal用户具有明确的重要信息来获取 {{1 }},谁是研究的目标。

我设法找到了一个文件root,其中有两个文件 /opt/scriptsutils.sh。我无法编辑它们,因为我没有权限(即使文件夹受保护)。

此外,我对 backup.py 拥有 sudo 权限,如下所示:

utils.sh

所以我想我可以使用该程序进入贾马尔。对于我尝试过的,使用反向外壳在另一个文件夹中创建另一个 Matching Defaults entries for developer on app4: env_reset,mail_badpass,secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User developer may run the following commands on app4: (jamal) SETENV: nopASSWD: /opt/scripts/utils.sh ,更改 echo 然后用 $PATH 运行它不起作用。 有什么建议吗?

这是utils和backup的代码

utils.sh

sudo -E

backup.py

#!/bin/bash

view_users()
{
    /usr/bin/w
}

view_crontab()
{
    /usr/bin/crontab -l
}


backup_web()
{
    if [ "$EUID" -eq 1001 ]
    then
        echo "Running backup script..."
        /opt/scripts/backup.py &
    else
        echo "Insufficient privileges."
    fi
}


# Non-interactive way
if [ $# -eq 1 ]
then
    option=$1
    case $option in
        1) view_users ;;
        2) view_crontab ;;
        3) backup_web ;;

        *) echo "UnkNown option." >&2
    esac

    exit 0
fi


# Interactive way,to be called from the command line
options=("View logged in users"
         "View crontab"
         "Backup web data"
         "Quit")

echo
echo "[[[ System Administration Menu ]]]"
ps3="Choose an option: "
COLUMNS=11
select opt in "${options[@]}"; do
    case $REPLY in
        1) view_users ; break ;;
        2) view_crontab ; break ;;
        3) backup_web ; break ;;
        4) echo "Bye!" ; break ;;

        *) echo "UnkNown option." >&2
    esac
done

exit 0

PS:backup.py 创建的文件不包含任何有用的信息:这是我已经获得的所有信息。

解决方法

这对我来说很危险:

    (jamal) SETENV: NOPASSWD: /opt/scripts/utils.sh
            ^^^^^^^

您的用户 developer 可以作为 Jamal 运行 /opt/scripts/utils.sh,但也可以在运行该脚本时选择所有环境变量。 sudoers(5) 明确警告:

此外,在命令行上设置的环境变量不受 env_check、env_delete 或 env_keep 施加的限制。因此,应该只允许受信任的用户以这种方式设置变量。

这是一个怎样的漏洞? utils.sh 仅使用绝对路径和来自其本地范围的函数执行命令,因此使用 PATH 变量的漏洞利用是不可能的。但是,还有其他几种选择。

使用 LD_PRELOAD 预加载库是一种方式:一旦 shell 开始运行 utils.sh 就会加载库。您可以使用初始化代码编译您自己的动态库,您可以根据需要执行任何操作。

一种更简单的方法是利用 PYTHONPATH 来提供您自己的 shutil.py 模块,以及包含您的有效负载的 make_archive 实现。

确切的实现留给读者作为练习;)