爆庫:
爆下乙個庫:
http://duck/index.asp.id=10 union select top 1 schema_name from information_schema.schemata where table_name not in ('庫名')--
爆表:
爆下乙個表
爆欄位:
爆下乙個字段
爆字段裡的內容
更新欄位裡的內容
在注射的時候,access和mysql環境下,我們通常是通過union來獲取資料的。但是遇到mssql環境,union很多時候都行不通,如果頁面不報錯,openrowset不可用,往往時候就只有暴力了。這樣多不好,大家都是文明人,怎麼可以用這麼野蠻的手段呢?研究了一下,mssql中的union選擇主要有以下幾個方面的限制。
第乙個是varchar/nvarchar和int型別的字段union到一起會強制轉換出錯。這個可以去看superhei大牛n久以前的文章,用and 1=2 把union前面的結果集置空就可以解決了。
第二個是當前面語句選擇的字段有text、ntext 或者image格式的時候,不能用distinct 方式來選擇,而帶union的語句必然是以distinct 方式來選擇的。這也是為什麼很多搜尋型的注射點可以用union猜解的原因,因為搜尋點的語句很少會選到前面三種格式的字段。image是二進位制格式,一般不會出現在需要回顯的sql語句中。這種限制前段時間也看到牛淫給出了解決方法,union後面跟乙個all,即union all就搞定了。真是神奇啊,牛淫就是牛淫。
最後還有乙個限制是text/ntext 與 int型別的字段 union到一起時並不相容,會報運算元型別衝突的錯誤,就算用1=2把union前面語句的結果置空也一樣。前幾天突然想到,union的時候我們經常用1,2,3……之類的常數來補齊相差的列數。這時候後面的語句選擇的都是int型別的字段,遇到前面有text/ntext的字段當然會出錯,如果加上引號呢,即'1』,'2』,'3』……的形式?這時候後面的字段都是char或者varchar的型別了,應該就不會出錯了。如果注射點過濾了引號怎麼辦?因為mssql對16進製制格式的支援不是太好,很多地方用16進製制必須declare――set,那就用char吧,即and 1=2 union all select char(49),char(50)……的形式。
突了了大部份限制的語句
and 1=2 union all select char(49),char(50),null,null;--
null也可以正常執行,不過沒有回顯,不好判斷回顯的列數。
一般union遇到問題都是有text或者ntext欄位,image的很少遇到
可以先null完之後再乙個個用1,2,3,4代替,這樣就能逼出image型別的列鳥
MSSQL 如何高效查詢表的總記錄數
如何高效查詢表的總記錄數?總結 整理 馬克 首先想到的自然是在表主鍵上應用count函式來查詢了,這個是目前使用最多的方法,沒有之一 select count 1 rows from product 這裡再給出一些其它方法,這些方法或多或少會有一些限制,或者看起來不是那麼 完美 但依然有一定的借鑑意...
超級醜數 用堆查詢解決
利用堆排序很容易進行查詢 質數又稱素數。乙個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數 否則稱為合數。質因數 素因數或質因子 在數論裡是指能整除給定正整數的質數。除了1以外,兩個沒有其他共同質因子的正整數稱為互質。因為1沒有質因子,1與任何正整數 包括1本身 都是互質 把只包...
超級醜數 用查詢的api解決
質數又稱素數。乙個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數 否則稱為合數。質因數 素因數或質因子 在數論裡是指能整除給定正整數的質數。除了1以外,兩個沒有其他共同質因子的正整數稱為互質。因為1沒有質因子,1與任何正整數 包括1本身 都是互質 把只包含質因子2 3和5的數稱作...