文章目录
一、可读shadow文件利用提权
ls -al /etc/shadow # 查看文件属性,确保当前用户对shadow文件具有可读权限
cat /etc/shadow | grep ':\$' # 查看shadow文件夹,grep相当于过滤器,后面接过滤条件
在
/etc/shadow
文件中,每个用户的密码都是用一个特定的哈希函数加密的。为了避免密码被轻易破解,Linux 系统会使用不同的哈希函数来加密密码。而$y$
中的y
字符则表示使用的是哪种哈希函数,不同的哈希函数对应不同的字符。以下是一些常见的 $y$ 值及其对应的哈希函数:
$1$
表示使用的是MD5
哈希函数;$2$
或$2a$
表示使用的是Blowfish
哈希函数;$5$
表示使用的是SHA-256
哈希函数;$6$
表示使用的是SHA-512
哈希函数。
sudo john --wordlist=/usr/share/wordlist/rockyou.txt hash.txt # john进行破解
二、可写shadow文件利用提权
思路:写入
cp /etc/shadow /tmp/shadow.bak # 备份重要文件
mkpasswd -m sha-512 123456 # 生成hash,hash算法为sha-512
# 替换/etc/shadow中root的密码
mkpasswd
是linux中专门用来生成密码hash的工具,-m
用来指定hash算法。
三、可写passwd文件利用提权
提权肯定最先关注root用户,现代的linux发行版中,密码hash都是存储在/etc/shadow
中,/etc/passwd
中并不直接存储密码hash,通常用X
来占位,但是还是可以直接将密码写入/etcpasswd
中,尝试提权。也就是一个优先级的问题,先读取passwd,再读取shadow文件。
cp /etc/passwd /tmp/passwd.bak # 备份文件
openssl passwd <明文> # openssl passwd生成密码的hash值
# 替换/etc/passwd中的X
生成hash时,也可以用
mkpasswd
,但是passwd文件中生成hash时最好用openssl passwd
,再shadow文件中生成hash用mkpasswd
。
四、sudo环境变量提权
当用whoami
命令查看当前用户的用户名时,显示whoami:无法找到id值为XXX的用户
。原因:当前用没有权限读取/etc/passwd
或者/etc/shadow
。解决方法:修改文件权限,chmod 644 /etc/passwd。
配置环境
adduser test # root用户下新增test用户
# 补充
sudo adduser test sudo # 将test用户添加到sudo组中
sudo deluser test sudo # 将test用户从sudo组中删除
vim /etc/sudoers # 使用root用户编/etc/sudoers文件,/etc/sudoers文件是sudo命令的配置文件
# 添加
Defaults env_keep+=LD_PRELOAD
test ALL=(ALL:ALL) NOPASSWD:/usr/bin/find # 简单来说,用户test可以使用sudo命令执行find命令
test
用户只允许执行sudo find
,其他sudo命令不允许执行。
实验
使用test
用户登录到系统,使用sudo -l
查看当前用户能够以root用户身份执行哪些命令,其实就是看他能执行哪些sudo命令。这里的话,test用户只允许执行sudo find
,且不需要密码
Defaults env_reset
表示默认会重置环境变量,因此自定义的变量会在 sudo 环境中失效,也就不会获取正确的变量值。env_keep
配置项,用于保留部分环境变量不被重置,需要保留的变量就写入双引号之中。secure_path
配置项,其中包含的路径将被当做sudo
环境的PATH
变量使用。也就是说如果在 sudo 环境无法找到某些命令,那么可以将这些命令的路径加入该配置项之中。LD_PRELOAD
是一个环境变量,用于指定在程序加载时预加载的共享库。这个环境变量允许用户在运行程序之前,通过指定预加载的共享库,修改程序的行为。当设置LD_PRELOAD
环境变量时,指定的共享库将在程序加载时优先于其他库加载,并将其函数和符号替换为预加载的库中的函数和符号。LD:Linking Dynamic.
也就是说我们在使用sudo find
命令时,会以root用户的身份执行命令,同时环境变量中的自定义变量将失效,而且执行sudo find
命令之前,会加载共享库文件,共享库文件的路径由LD_PRELOAD
指定。
1、关于
/bin
、/sbin
、/usr/sbin
、/usr/bin
文件夹:
- 从命令功能角度:
/sbin
下的命令属于基本的系统命令,如shutdown
,reboot
,用于启动系统,修复系统。/bin
下存放一些普通的基本命令,如ls
,chmod
等,这些命令在Linux系统里的配置文件脚本里经常用到。- 从用户权限的角度:
/sbin
目录下的命令通常只有管理员才可以运行。/bin
下的命令管理员和一般的用户都可以使用。/usr/sbin
存放的一些非必须的系统命令;/usr/bin
存放