Sql blind Injection
本文关键字:Injection blind Sql | 更新日期: 2023-09-27 18:26:16
我有一个基于c#表单的web应用程序。当我通过Acunetix网络扫描仪扫描应用程序时,它会在添加模块部分给我一个盲目的sql注入。Acunteix生成的报告是
POST (multipart) input ctl00$ContentPlaceHolder1$ddlRecommendoffer was set to -87
POST /
这个ddlRecommendoffer是一个下拉列表,它从数据库中获取值,当我将表单存储在数据库中时,我会将该下拉列表的值作为获取
ddlRecommendoffer.SelectedValue.ToString()
DDL值最好是int(数据库中的行Id)
我正在使用一个带有参数的存储过程将其插入数据库,这应该会停止Sql注入,但为什么它会在该字段上向我显示BLIND Sql注入。。
当注入尝试没有直接反馈时,例如当SQL语句的结果没有返回给用户时,SQL注入被称为盲注入。
如果您的应用程序使用以下参数动态构建查询,尽管您使用的是存储过程,但它可能仍然存在漏洞:
Create Procedure sp_EmployeeSelect
@EmployeeName NVarchar(100)
AS
Declare @SQLQuery AS NVarchar(4000)
SET @SQLQuery = 'SELECT * FROM tblEmployees
WHERE EmployeeName LIKE ''%' + @EmployeeName + '%'''
EXECUTE sp_executesql @SQLQuery
GO
在这里,您仍然可以通过EmployeeName注入SQL,因为它的格式/转义不正确。
然而,使用参数化形式是安全的:
Create Procedure sp_EmployeeSelect
@EmployeeName NVarchar(100)
AS
Declare @SQLQuery AS NVarchar(4000)
Declare @ParamDefinition AS NVarchar(2000)
SET @SQLQuery = 'SELECT * FROM tblEmployees
WHERE EmployeeName LIKE ''%'' + @EmployeeName + ''%'''
SET @ParamDefinition = '@EmployeeName NVarchar(100)'
EXECUTE sp_executesql @SQLQuery, @ParamDefinition,
@EmployeeName
GO