Sql注入基础复习
- 有赞点赞,没赞请看完后补票…
- 此文章为干货,但务必实战,自主搭建靶场sql-labs供使用
- (http://47.94.22.226/sqli-labs/)
SQL 注入经常出现的地方
(用户输入数据和后端数据库产生交互的地方)
- 内部实现 / 流程的角度
url 传参、表单 post、Cookie、User-Agent、X-Forwarded-For…
- 常用业务点注入
新闻 / 商品等查询处、用户注册 / 登陆处、修改用户资料时、找回密码处、搜索框…
判断闭合方式–有回显和无回显
闭合方式’ " () (‘x’) ((‘x’)) (“x”) ((“x”)) (()) ‘%x%’-------
(创造错误,使用转义字符或大数等,无法判断闭合方式时,要多方面求证)
有回显:
2’ and ‘1’=‘1,若返回结果为id=2时的值,则说明注入类型为’,若返回结果为id=1时的值,说明注入类型为’)
原因:
注入类型为’时,所构造的sql语句为’2’ and ‘1’=‘1’,返回的值为’2’,所以所查询的结果为id=2。注入类型为’)时,所构造的sql语句为(‘2’ and ‘1’=‘1’),这时会把括号内的值当做布尔值处理。括号内的值为0,最终返回id=1(数字型和字符型的根本在于闭合方式不同,还是在于探究闭合方式)
无回显:(排除法,一些典型特征闭合方式基本固定)
搜索select * from table1 where username like ‘% x %’;
插入数据insert into table1 (username,password,xx1,xx2) values(‘zj’,‘123’,‘xx1’,‘xx2’);
Sql注入的基本步骤
* 步骤1:
推断数据库语法大概是什么(通过确认语法才能判断大概的闭合方式)
查询、POST、GET、插入
例如查询语法:
select * from [某个表] where id = [参数] limit 0,1;
select * from [某个表] where id = ‘2’ limit 0,1;
* 步骤2:
让他报错,显示自己的闭合方式,确认请求方式GET/POST
select * from [某个表] where id = ‘2’ limit 0,1;
1’ LIMIT 0,1
’ " ') ") )) ")) ')) +没有闭合
* 步骤3:
验证目标的闭合方式—至关重要
select * from [某个表] where id = ’ 2’–