绕过SQL字符黑名单过滤

问题描述 投票:0回答:1

我正在研究网络安全课程,其中包含对SQL Server 2000主机的挑战。

我泄漏了一个asp文件,其中包含登录页面的源,该文件包含一个硬编码查询,该查询从用户那里获取用户名和密码,然后继续查询数据库...

sSql = "SELECT * FROM Users where user_name='" & username & "' and user_password='"&password&"'"

在执行此操作之前,通过以下方法对用户输入进行循环过滤,删除...

' " - & % / \ | > 

replace(myString, "&", "")

[我要做的是转义包含用户名或密码的字符串,中断正在开发的查询,并用我自己的字符串中断,然后注释掉其余部分以使其保持“有效”。为了逃避黑名单,我正在尝试传递SUBSTRING,它将将一系列十六进制字符解码为有效的嵌套查询。

我已经在沙盒VB脚本中测试了这两个部分,以检查对编码字符串的处理,并在在线MSSQL仿真器here中运行该字符串,并很好地对查询进行解码。

注意:仿真器是Sql Server 2014 Express Edition而不是2K。 2K找不到一个]

我希望这很有道理!

这是我要通过的内容,每个角色都希望实现的内容...

编码查询:

SELECT CONVERT(VARCHAR(60), SUBSTRING(0x22273B2053454C454354202A2066726F6D207573657273205748455245206E616D65203D2061646D696E3B202D2D20, 1, 96))

翻译为(带有空格):

"'; SELECT * from users WHERE name = admin; -- 

我的设想是,在处理SUBSTRING之后形成以下总体查询:sSql = "SELECT * FROM Users where user_name='""'; SELECT * from users WHERE name = admin; -- & username & "' and user_password='"&password&"'"

我希望在恶意请求上形成双引号和单引号会破坏字符串,随后的分号将在不引起异常的情况下终止请求,然后导致服务器处理我的查询并丢弃不必要的余数。

然后我的问题是,从SQL Server 2000的角度来看,这种方法是否有效?还是我对服务器如何接收和处理查询的假设不正确?

security sql-injection sql-server-2000
1个回答
0
投票

否-处理方式不允许您以此方式进行攻击。使用您的有效负载,字符串最终将是:

© www.soinside.com 2019 - 2024. All rights reserved.