由於對SQL注入不太熟悉,所以就自己搭建了一個sqli-labs的平臺.
記錄一下自己的學習過程
首先我們要了解一下常規mysql數據庫的信息
information_schema() ------ 是mysql自帶的數據庫,記錄了數據庫各種信息
schemata ------ 包含各種數據庫名信息
tables ------ 各種表名
columns ------ 字段名
下面開始注入
id=1時顯示正常,加入單引號看看,報錯了
報錯的信息爲 near ''1'' LIMIT 0,1' ,拆分開就是 ' '1' ' LIMIT 0,1 ' ,可以看到1的那裏多了一個單引號而且已經閉合了.所以就要把後面的那個引號註釋掉(ps:之前不理解的時候會想,可以直接不用加引號 然後構造payload,但是發現這樣子構造語句不能查詢到,是因爲永遠都在''裏面了)
下面開始猜字段長度
猜到字段長度只有3
然後查看回顯位置
發現並沒有正確的顯示回顯位置,(當時候這裏也不懂爲什麼,然後上網查看了一下,是源代碼那裏調用函數的問題)
百度了一下,mysql_fetch_array() 函數從結果集中取得一行作爲關聯數組,或數字數組,或二者兼有,大概意思就是說只顯示一行的數據= =.因爲他的查詢語句是"SELECT * FROM users WHERE id='$id' LIMIT 0,1",所以把左邊的弄爲空集(即id那裏不能大雨等於1,此外str,float等等都可以)
下面繼續進行查詢,構造payload爲localhost/sqli-labs/Less-1/?id=-1' union select 1,2,3 from information_schema.schemata--+
可以看到回顯位置了
下面進行常規的注入操作.先查看當前的數據庫名和版本
可以看到當前的數據庫名爲security,版本是5.7
繼續進行查詢數據庫名
查詢到全部的數據庫名,然後選security進行爆破
在security數據庫中查詢表名
看到存在users表,就直接破解
可以看到username和password,直接爆破
最後就把users中所有的用戶名和密碼查詢出來了
總結:這次做了sqli-labs的lesson1,感覺思路清晰不少,一步步地進行注入,學會看報錯信息和猜其本身的查詢代碼,不過還是要繼續努力O(∩_∩)O~~