原理分析:
1.Mysql5之后支持触发器,并且在创建触发器后会自动在/var/lib/mysql目录下生成TRG以及TRN文件(Linux下)。
例如,创建如下触发器:
在/var/lib/mysql目录下回生成t.TRG以及t_trigger.TRN文件,内容如下
可以看到t.TRG文件中通过DEFINER来将触发器“绑定”到该触发器的创建用户上,并在执行时拥有该用户的权限。
2.利用mysql用户的file权限(文件读写权限),直接添加触发器TRG以及TRN文件,使其“绑定”到mysql默认管理员root@localhost用户上,触发器文件内容为提升mysql用户权限SQL语句。
3.利用之前发现的栈溢出漏洞来刷新服务器配置使得触发器文件可以被识别,并且在触发器执行时具有root@localhost的权限,以此来提升mysql用户权限。
预防措施:
1.由于该提权方式可以被远程利用,所以管理员应当关闭Mysql远程管理方式,只允许本地用户连接。
2.本着最小权限原则,应当为连接用户配置最小权限,不要分配all,file等高危权限。
以下为exp部分关键代码,经测试5.5版本受影响: