首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >被困在一台笔试学习机器上,可能会被利用?

被困在一台笔试学习机器上,可能会被利用?
EN

Stack Overflow用户
提问于 2021-02-04 13:50:18
回答 1查看 370关注 0票数 0

我正在为一台机器而挣扎(这台机器是用来进行笔试训练的,这是由大学教授提供的)。

我在这台机器上站稳了脚跟,我从www-data转到了developer,还有另一个名为jamal的用户,它提供了非常重要的信息来获取root,而root正是这项研究的目标。

我设法找到了一个文件夹/opt/scripts,其中有两个文件,utils.shbackup.py。因为我没有特权(甚至文件夹也是受保护的),所以我不能编辑它们。

此外,我在utils.sh上也有这样的许可:

代码语言:javascript
复制
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,然后在sudo -E不工作时运行它。有什么建议吗?

下面是实用程序和备份的代码:

utils.sh

代码语言:javascript
复制
#!/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

backup.py

代码语言:javascript
复制
#!/usr/bin/python3

from shutil import make_archive

src = '/var/www/html/'

dst = '/tmp/backup'

make_archive(dst, 'gztar', src)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 14:13:54

这在我看来很危险:

代码语言:javascript
复制
    (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预装库是一种方法:库一开始运行utils.sh就会加载。您可以使用初始化代码编译您自己的动态库,这些代码可以执行您需要的任何操作。

一种更容易的方法是利用PYTHONPATH为您自己的shutil.py模块提供一个包含有效负载的make_archive实现。

具体实现是留给读者的练习;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66047000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档