shadow和passwd文件利用
第一招:可读shadow文件利用
进行枚举
1 | root@hkYlKHuBStjmCx:~# ls -liah /etc/shadow |
发现可读
在旧版本中,密码均存储在/etc/passwd文件中,在新版Linux的环境下,/etc/passwd中不会存储密码有关数据,只会以一个x来表示:密码以hash值的形式存储在/etc/shadow文件中
/etc/passwd首行
1 | root:x:0:0:root:/root:/usr/bin/zsh |
/etc/passwd文件的密码hash存储样式
1 | root:$5$FajNLQa0$Z/ZMlCLIPg7C2.c74JIx11vR2JjqREGfBH0TtFqcz/0:20440:0:99999:7::: |
可以直接把我们想看的用户的用户名密码什么的直接过滤出来,然后进行爆破
1 | root@hkYlKHuBStjmCx:~# cat /etc/shadow | grep ':\$' |
使用john自动识别加密类型进行爆破即可
第二招:可写shadow文件利用
枚举发现可写,由于我们要对shadow文件进行操作,此处需要进行一个备份
1 | cp /etc/shadow /tmp/shadow.bak |
读取密码hash值,使用hash-identifier识别hash加密的类型
1 | hash-identifier "$5$FajNLQa0$Z/ZMlCLIPg7C2.c74JIx11vR2JjqREGfBH0TtFqcz." |
然后使用mkpasswd来生成对应加密类型的hash值
1 | mkpasswd -m sha-512 KwanshAndTwansh |
然后替换到shadow文件中,即可登录root
第三招:可写passwd文件利用提权
枚举发现passwd可写
备份passwd文件
1 | cp /etc/passwd /tmp/passwd.bak |
openssl生成新的密码hash
1 | openssl passwd KwansgAndTwansh |
然后编辑,用生成的hash换掉passwd中的占位符x,即可登录root
sudo环境变量提权
这个很经典了
1 | sudo -l |
有的命令有读取任意文件或者提权的洞,可以通过提权全书查看
提权全书
或者说利用预加载LD_PRELOAD(这个我还没学明白)
自动任务文件权限提权
检查自动任务
1 | crontab -l |
检查确定定时执行的文件的权限,若是可写,那就很nice了,可以直接写入一些指令弹shell
若定时任务为root权限执行的,弹回来的shell就是root的权限检查crontab中的PATH路径,若不是绝对路径,那么可以试试直接路径劫持
1 | PATH=/home/user:/usr/local/sbin |
然后本来可以写入的定时文件shell.sh是在/usr/local/sbin目录下,但是呢,定时任务执行的是没有绝对路径的shell.sh
根据定时任务中,会优先找PATH路径中靠前的路径的文件来执行,所以是自动将path中的路径都查找一下,找到了shell.sh就立刻执行,那么我们可以在家目录下写入shell.sh,那么就可以劫持路径