在Google.com中输入
site:testfire.net inurl:login
得到后台登陆的url
点击进入,随便输入用户名密码显示错误
可见网站没有对用户输人进行最基本的过滤处理,而且,根据图所示的出错信息,
已经大概能够猜测出网站进行用户验证时使用的SQL语句应该类似于:
SELECT * FROM [users] WHERE username 一? AND password=?
这种验证语句是极为危险的,因为可以通过构造特殊的变量值使得该查询条件表达式
结果永远为真。回到登录页面,在Username字段中输入“admin'OR'l",在Password字段
中输入“test'OR'1”,再次单击Login按钮,如下图所示。没想到吧,有时候进入网站后
台就这么简单!
已经大概能够猜测出网站进行用户验证时使用的SQL语句应该类似于:
SELECT * FROM [users] WHERE username 一? AND password=?
这种验证语句是极为危险的,因为可以通过构造特殊的变量值使得该查询条件表达式
结果永远为真。回到登录页面,在Username字段中输入“admin'OR'l",在Password字段
中输入“test'OR'1”,再次单击Login按钮,如下图所示。没想到吧,有时候进入网站后
台就这么简单!
能够成功登陆是因为验证SQL语句变成:
SELECT * FROM [users] WHERE username= 'admin' OR '1' AND password='test' OR '1'
根据SQL 中逻辑运算的优先级,OR低于AND,最后的OR'I'永远成立,所以该条件表 达 式结 果总 是 true,此 SQL 语 句 等 同 于 :
SELECT * FROM [users]
如果你对各种数据库的SQL语法很熟悉,也可以通过构造一些特殊的SQL来绕过验
本例中也可以在Username字段中输入“test'OR 1=1- --",在Password字段中输入任意
值试一下。