卡在一台机器上进行渗透测试学习,可能是 sudo 利用?
Stuck on a machine for pen-testing learning, possible sudo exploit?
正在纠结一台机器(本来是做笔试训练用的,大学教授给的)
我已经在机器中站稳了脚跟,我已经从 www-data
过渡到 developer
,还有一个叫 jamal
的用户有明显重要的信息来获取 root
,谁是研究的objective。
我设法找到了一个文件夹 /opt/scripts
,其中有两个文件,utils.sh
和 backup.py
。我无法编辑它们,因为我没有权限(即使文件夹受到保护)。
此外,我对 utils.sh
的 sudo 权限是这样的:
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
所以我想我可以使用该程序进入 jamal。对于我所尝试的,在另一个文件夹中创建另一个 echo
并使用反向 shell,更改 $PATH
然后 运行 它与 sudo -E
不起作用。
有什么建议吗?
这是实用程序和备份的代码:
utils.sh
#!/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=
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
#!/usr/bin/python3
from shutil import make_archive
src = '/var/www/html/'
dst = '/tmp/backup'
make_archive(dst, 'gztar', src)
PS: backup.py 创建的文件不包含任何有用的信息:这是我已经得到的所有信息。
我觉得这很危险:
(jamal) SETENV: NOPASSWD: /opt/scripts/utils.sh
^^^^^^^
您的用户 developer
可以 运行 /opt/scripts/utils.sh
作为 Jamal,但也可以在 运行 运行该脚本时选择所有环境变量。 sudoers(5)
明确警告:
Additionally, environment variables set on the command line are not subject to the restrictions imposed by env_check, env_delete, or env_keep. As such, only trusted users should be allowed to set variables in this manner.
怎么会是漏洞? utils.sh
仅使用其本地范围内的绝对路径和函数执行命令,因此使用 PATH
变量的漏洞利用是不可能的。但是,还有其他几种选择。
使用 LD_PRELOAD
预加载库是一种方法:一旦 shell 启动到 运行 utils.sh
,就会加载库。您可以使用初始化代码编译您自己的动态库,它可以满足您的任何需要。
一种更简单的方法是利用 PYTHONPATH
来提供您自己的 shutil.py
模块,并实现包含您的有效负载的 make_archive
。
确切的实现留给 reader ;)
作为练习
正在纠结一台机器(本来是做笔试训练用的,大学教授给的)
我已经在机器中站稳了脚跟,我已经从 www-data
过渡到 developer
,还有一个叫 jamal
的用户有明显重要的信息来获取 root
,谁是研究的objective。
我设法找到了一个文件夹 /opt/scripts
,其中有两个文件,utils.sh
和 backup.py
。我无法编辑它们,因为我没有权限(即使文件夹受到保护)。
此外,我对 utils.sh
的 sudo 权限是这样的:
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
所以我想我可以使用该程序进入 jamal。对于我所尝试的,在另一个文件夹中创建另一个 echo
并使用反向 shell,更改 $PATH
然后 运行 它与 sudo -E
不起作用。
有什么建议吗?
这是实用程序和备份的代码:
utils.sh
#!/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=
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
#!/usr/bin/python3
from shutil import make_archive
src = '/var/www/html/'
dst = '/tmp/backup'
make_archive(dst, 'gztar', src)
PS: backup.py 创建的文件不包含任何有用的信息:这是我已经得到的所有信息。
我觉得这很危险:
(jamal) SETENV: NOPASSWD: /opt/scripts/utils.sh
^^^^^^^
您的用户 developer
可以 运行 /opt/scripts/utils.sh
作为 Jamal,但也可以在 运行 运行该脚本时选择所有环境变量。 sudoers(5)
明确警告:
Additionally, environment variables set on the command line are not subject to the restrictions imposed by env_check, env_delete, or env_keep. As such, only trusted users should be allowed to set variables in this manner.
怎么会是漏洞? utils.sh
仅使用其本地范围内的绝对路径和函数执行命令,因此使用 PATH
变量的漏洞利用是不可能的。但是,还有其他几种选择。
使用 LD_PRELOAD
预加载库是一种方法:一旦 shell 启动到 运行 utils.sh
,就会加载库。您可以使用初始化代码编译您自己的动态库,它可以满足您的任何需要。
一种更简单的方法是利用 PYTHONPATH
来提供您自己的 shutil.py
模块,并实现包含您的有效负载的 make_archive
。
确切的实现留给 reader ;)
作为练习