從這篇文章開始,我們就加入了漏洞提升的部分了,這一篇我們來講一講mysql注入的一些騷操作,
之前我們來學習SQL注入的時候說過,SQL注入的本質就是讓資料庫執行我們的SQL陳述句,那么我們SQL注入是不是只要滿足能夠執行就行了?之前我們都是寫的http://127.0.0.1/sqli-labs-master/Less-1/?id=-2' union select 1,password,username from users limit 2,1--+
先不說麻不麻煩,就說防范而言別人如果對password和username關鍵字有過濾不就涼涼了,(“對password和username關鍵字有過濾”等講到waf的時候大家就懂了)
于是我從access偏移注入中領悟到了這種寫法(access偏移注入后面會講):
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2 'union select * from security.users--+--+
先不講原理,我們先來看看效果,
(在這里我們可以清楚的看見我們的賬號和密碼,)
好,我們來講一下原理,
在基礎篇的時候我們講過:union連接的陳述句查詢時需要左右的欄位數相同,
我們在做這個實驗的時候測驗過它左邊是3個欄位數右邊也是,所以說我們select * from security.users的時候它左右是相同的,
那么如果我們遇到不同怎么辦?很簡單加唄我們:select 1,* from security.user
那么有人就會說這也太雞肋了,左邊查詢的欄位數如果再小點不就廢了?但是不妨礙我們理解這種思想,
看到這里大家會不會想——到如果我們在‘后面加一個;再加一句sql陳述句會如何?
例如http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2%27;selec 1,* from security.users--+
實際上這個就叫堆疊注入,
我不知道大家有沒有報什么安全的教學班,反正我在網上沒看到哪個教學班有專門講,
堆疊注入這個東西其實很簡單就是用;讓多個陳述句執行,但是它有一定的限制,就拿這一關舉例,我們可以寫成http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2%27;selec 1,* from security.users--+
但是當我們這樣寫了后,我們會發現頁面并沒有反應,這是為什么呢?(如下圖)
是不是我們陳述句有問題呢?
其實不是,這個的問題和原始碼有關,
如圖,我們是用mysql_query()接收的sql陳述句,而mysql_query()它本身只能執行一句sql陳述句,所以就會出錯,
那么我們應該怎么辦?網上有文章說把mysql_query()換為mysqli_multi_query()就可以執行多條sql陳述句查詢,其實這種方法也有問題,mysqli_multi_query()的回傳型別為布爾型放在這里根本不行,那么,我們怎么辦?
我們總不可能把原始碼全部改了吧?既然改變不了它,我們就改變自己——換一關不就行了,頭別那么鐵,
所以,我們換到38關就行了,
來我們再試試,(如圖)
為什么它還是沒結果呢?
這個時候我們應該想一想它的原理,它原理是執行了多句sql陳述句,而我們的前端只能回復前面一句sql陳述句的結果,
估計之前學的好的同學就會想到報錯注入,但是,報錯注入本質上是一句sql陳述句,報錯也是讓那一句SQL陳述句報錯,
那么,這個時候大家這不是很懵圈?
你說這也不行那也不行,那到底它有什么用?
這個時候我們就應該打開思路了,我們既然不能查詢,那么我們可不可以洗掉或者插入?
來,我們來試試http://127.0.0.1/sqli-labs-master/Less-38/index.php?id=1%27;insert%20into%20users(id,username,password)%20values%20(%2716%27,%27a%27,%27a%27)--+


插入成功,
總結一下:堆疊注入雖然沒法查詢,但是它對資料庫的破壞性不能小視,
注:堆疊注入的局限性太大了,且注重破壞,建議少嘗試,
(ps:馬上過年了,祝各位看官新年快樂,過年這段時間我就不更新了,但是還是求各位看官給點評論和關注哦!)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258659.html
標籤:其他
上一篇:Java~集合中的fail-fast(快速失敗)機制
下一篇:Linux系統安全及應用
