SQL注入時,需要從MySQL的某個表中匯出某些資料。一般來說,要想匯出資料,你必須知道表名、列名,而這兩個名字在某些情況下可能你並不知道。
例如,對於版本小於5.0的MySQL資料庫,以及部分有WAF干擾的版本大於5.0的MySQL資料庫,你就無法輕易獲得表名、列名。
在這種情況下,也許你會放棄,僅僅注入出資料庫名字,證明漏洞存在就結束。
我和我的隊友@aboul3la一起,建立了一個數據庫環境來模擬被攻擊的目標,並透過大量的嘗試最終找到了一個可行方法。 首先展示一下目標表users
我們可以看到,這次表的列名有“name”、“password”、“email”、“出birthday”和“added”。 下一步,我們輸入一個注入中經常使用的探明列數的查詢句式
很好,我們可以注意到,查詢結果中的列的名稱從name、password、email、birthdate替換為1、2、3、4、5、6,這主要是因為前面的查詢語句select 1,2,3,4,5,6。 下一步我們就可以根據查詢結果中的新的列名提取資料,而針對的資料表就是以上的查詢結果。 使用查詢語句select4from (select 1,2,3,4,5,6 union select * from users)redforce;你就可以將選出第4列資料,也就是電子郵件地址,
然後依次select 3,select 2等等。如果要將其帶入實際的注入環境中,我們可以融合產生如下payload-1 union select 1,(select`4`from (select 1,2,3,4,5,6 union select * from users)a limit 1,1)-- -。你可以透過不停的修改列名1,2,3,4來提取資料。
總而言之 透過這種將未知原列名轉換為其他值的方法,你就可以注入出所有的資料。 最終payload
SQL注入時,需要從MySQL的某個表中匯出某些資料。一般來說,要想匯出資料,你必須知道表名、列名,而這兩個名字在某些情況下可能你並不知道。
例如,對於版本小於5.0的MySQL資料庫,以及部分有WAF干擾的版本大於5.0的MySQL資料庫,你就無法輕易獲得表名、列名。
在這種情況下,也許你會放棄,僅僅注入出資料庫名字,證明漏洞存在就結束。
無列名注入我和我的隊友@aboul3la一起,建立了一個數據庫環境來模擬被攻擊的目標,並透過大量的嘗試最終找到了一個可行方法。 首先展示一下目標表users
我們可以看到,這次表的列名有“name”、“password”、“email”、“出birthday”和“added”。 下一步,我們輸入一個注入中經常使用的探明列數的查詢句式
很好,我們可以注意到,查詢結果中的列的名稱從name、password、email、birthdate替換為1、2、3、4、5、6,這主要是因為前面的查詢語句select 1,2,3,4,5,6。 下一步我們就可以根據查詢結果中的新的列名提取資料,而針對的資料表就是以上的查詢結果。 使用查詢語句select4from (select 1,2,3,4,5,6 union select * from users)redforce;你就可以將選出第4列資料,也就是電子郵件地址,
然後依次select 3,select 2等等。如果要將其帶入實際的注入環境中,我們可以融合產生如下payload-1 union select 1,(select`4`from (select 1,2,3,4,5,6 union select * from users)a limit 1,1)-- -。你可以透過不停的修改列名1,2,3,4來提取資料。
總而言之 透過這種將未知原列名轉換為其他值的方法,你就可以注入出所有的資料。 最終payload