首先,我們先介紹一下,mysql的資料庫的結構,這個對於理解mysql注入非常重要。
information_schema資料庫是在mysql的版本5.0之後產生的,乙個虛擬資料庫,物理上並不存在。這個資料庫記錄了整個資料庫的資訊,所有的庫,所有的表,所有的列名等等。
首先我們了解一下 information_schema資料庫裡面重要的表:schemata,tables,columns,在這次手工注入裡面我們只需要理解這三張表就好了,所以我就重點介紹一下這三張表。
貼一下三張表的結構:
schema表中比較重要的字段就是schema_name,記錄了所有的資料庫的名稱。
tables也只展示重要字段(我個人認為的重要字段),通過tables中的table_name欄位可以讀取出某個資料庫中所有的表,當然也可以讀取所有資料庫中所有的表~~~
column表我也只展示重要的字段,通過column_name和table_name我就可以查出這個資料表的所有的欄位名稱。
理論上知道了表名和欄位名,我們就可以查字段內容,所以一起來實踐一下!
首先我們找到疑似注入點的地方:
我們簡單判斷一下是否存在注入點(這是靶場,不存在注入點你猜我為啥叫靶場呢):
判斷是否存在注入點的payload為:
and 1=1(頁面返回正確)
and 1=2(頁面木有返回或報錯)
原因是我們的輸入的and 1=2也拼接進sql語句中,當然會引起查詢報錯啦。
首先,我們看到這個頁面,測一下頁面查的那個資料表有多少個字段。為什麼要測字段呢,因為我們要判斷頁面上的內容是由返回結果的幾個字段組成的。因為這裡查的是新聞嘛,或許我表內一條新聞的記錄有id,標題、正文、作者、時間等等,但是我url就傳乙個id進去,所以可能頁面是對返回的記錄選擇某幾個欄位去顯示。我們要判斷這個出現在**,這樣子才能構造我們的查詢語句。
我們嘗試的查詢語句為: order by n(n依次取1,2,3,4,5)
當n小於5時,頁面都能正常的返回,不正常的檢查一下是不是拼錯了。但是n等於5時,頁面啥也沒返回。
既然我們知道了有4列,查資料庫一般是一條一條查嘛,傳乙個id進去找一條記錄肯定會返回四個字段,但是我們要判斷一下,頁面上顯示的是哪些字段。
這個時候我們用到的查詢語句為:
and 1=2 union select 1,2,3,4
union是聯合查詢的意思,就是資料庫查詢會執行union前後兩條語句,為了不讓查詢返回的記錄干擾我們,於是我們讓union前面的語句報錯,就是加乙個條件and1=2,所以只會返回第二條語句的結果,也就是1,2,3,4,然後頁面變成了下面這樣子。
很明顯標題是返回記錄的第二個字段,內容是第三個字段。然後我們要登入的賬號密碼,那肯定不是在這個查通知的表裡面查,通知的表裡面一般只有通知。所以我們要找到存賬號密碼的那個資料表。
然後我們要想辦法找到存賬戶密碼的資料表,那我們可以找到資料庫下所有的資料表來判斷。
這裡插一下幾個mysql常用函式:
因為我們的這次注入用的information_schema庫是要在大於5.0版本的mysql才有。
我們查一查當前資料庫和版本:
然後我們找到mozhe_discuz_stormgroup這個資料庫裡面的所有的表名稱:
and 1=2 union select 1,table_name,3,4 from information_schema.tables where table_schema='mozhe_discuz_stormgroup' limit n,1(n從0開始,依次取1,2,3...若是沒有的話,則頁面報錯)
我們得到的一共兩張表,stormgroup_member,notice。
我們查出stormgroup_member表所有的列名:
and 1=2 union select 1,column_name,3,4 from information_schema.columns where table_name='stormgroup_member' limit n,1(n從0開始依次加一直到頁面報錯可以遍歷所有的列名)
遍歷出該資料表的所有的字段為,id,name,password,status.
然後我們查一下表的內容:
and 1=2 union select 1,name,password,4 from stormgroup_member where status=1 limit 0,1
這裡不要忘記判斷status,也就是賬號的狀態,有些賬號可能被禁了。
登陸成功~
這次的靶場聯絡就到這裡結束了。
墨者靶場 初級 SQL過濾字元後手工注入漏洞測試
安全工程師 墨者 最近在練習sql手工注入漏洞,自己剛搭建好乙個靶場環境apache php mysql,php 對客戶端提交的引數做了些許過濾。來感受過濾過後的sql手工注入吧。1 掌握sql注入原理 2 了解手工注入的方法 3 了解字串的url加解密 4 了解sql注入常用注釋字元 5 了解sq...
mysql手工注入
元資料庫 information schema其中儲存著其他所有資料庫的資訊 其中的表非常多 schemata 存放所有資料庫的名字 tables 用於存放所有資料表的名字 columns 存放所有欄位的名字 這些表裡面存放的資訊非常多,如果用select from tables 查詢會出現非常多劫...
sqli labs靶場做題記錄(手工注入版)
get注入 1.第一關 單引號字元型注入,有報錯,有回顯,採用聯合查詢注入 2.第二關 單引號數字型注入,有報錯,有回顯,採用聯合查詢注入 3.第三關 有括號的單引號字元型注入,有報錯有回顯,採用聯合查詢注入 4.第四關 有括號的雙引號字元型注入,有報錯有回顯,採用聯合查詢注入 5.第五關 6.第六...