Admin' or '1' = '1
这样就可以利用已知的Admin账号,不输入密码就能登录系统。因为给预期的SQL语句注入了额外的语句,所以实际上提交到SQL Server数据库执行的语句变成了如下所示的语句:
select count(*) from user where LogonName = 'Admin' or '1'='1' and Password=''
由于1=1是恒等的,因此返回的结果肯定为真,从而干扰了用户信息的正常验证,导致能绕过密码验证而登录系统。
技巧:检查是否存在SQL语句注入漏洞的最好办法是代码审查,查看所有涉及SQL语句提交的地方,是否正确处理了用户输入的字符串。
3.缓冲区溢出
不仅仅是连上Internet的软件系统才会有安全问题,个人软件系统或公司内部的软件系统也存在安全问题,这些安全问题不会导致信用卡密码的泄漏,但是可能导致工作成果的丢失。如果软件系统是采用C语言这类容易产生缓冲区溢出漏洞的语言开发的话,作为测试人员就要注意检查可能造成系统崩溃的安全问题了。
例如,下面的两行C语言代码就可能造成缓冲区的溢出问题:
char buf[20];
gets(buf);
如果使用gets函数来从stdin读入数据,则可能出现缓冲区溢出的问题。另外一个例子如下:
char buf[20];
char prefix[] = "http://";
strcpy(buf,prefix);
strncat(buf,path,sizeof(buf));
这里问题出现在sizeof的参数不应该是整个buf的大小,而是buf的剩余空间大小。
技巧:测试人员需要对每一个用户可能输入的地方尝试不同长度的数据输入,以验证程序在各种情况下正确地处理了用户的输入数据,而不会导致异常或溢出问题。或者通过代码审查来发现这些问题。还可以利用一些工具来帮助检查这类问题,例如AppVerifier等。
文章来源于领测软件测试网 https://www.ltesting.net/