教程:http://edu.51cto.com/course/5733.html
经典的登录模块的SQL语句是:
select id from users where username = 'USERNAME' and password = 'PASSWORD'
如果存在SQL注入漏洞,可输入用户名、密码为:' or' 1=1
则生成的SQL语句为:
select id from users where (username = '' or' 1=1') and (password = '' or' 1=1')
这等效于:
select id from users
该语句会获取users表中的每一条记录,一般应用程序会返回第一条记录作为登录用户。而很多系统的第一个用户为管理员
修改一下,输入用户名为' or' 1=1';drop table users;--
则SQL语句变为:
select id from users where (username = '' or' 1=1';drop table users;-- )' and (password = 'PASSWORD')
这会导致users表被删除
判断一个系统是否有SQL注入漏洞的三部曲:
1.在正常的输入值之后加一个',看系统是否有异常;
2.在正常的输入值之后加一个 and 1=1 或 ' and '1'='1 (视具体情况而定),看结果是否与正常的输入相同;
3.在正常的输入值之后加一个 and 1=2 或 ' and '1'='2 (视具体情况而定),看查询结果是否与正常的输入不同。如显示内容为空(程序加上了on error resume next)、出现异常页面、提示BOF或EOF(程序没做任何判断)、提示找不到记录(判断了rs.eof时)。总之,与正常输入的现象不同。以上三个条件都满足则说明系统一定存在SQL注入漏洞;反之则说明不存在SQL注入漏洞