赞
踩
本质上是把用户输入的数据当代码进行执行
两个关键条件即:
1.用户能控制输入
2.原本程序要执行的代码与用户的输入进行了拼接
如执行以下代码:
$id = $_GET['id'];
$query = "select * from information where id = "id" limit 0,1";
变量id的值由用户提交,在正常情况下,假如用户输入的是1,那么SQL语句会执行:
select * from information where id = 1 limit 0,1
但是假如用户输入一段有SQL语义的语句,比如:
1 or 1 =1 %23
那么,SQL语句在实际的执行时就会如下:
select * from information where id = 1 or 1 = 1 %23
满足了上述条件,用户可以控制变量id,原本要执行的代码,拼接了用户的输入。
一切可以与数据库进行交互的地方都有可能出现
根据数据传输方式分为:GET型、POST型、COOKIE型。
根据数据类型分为:数字型、字符型。
根据注入模式分为:
基于联合查询的注入模式
基于报错的注入模式
基于布尔的盲注
基于时间的盲注
堆叠查询的注入模式
1.求闭合字符
2.选择注入模式
3.爆数据库
4.爆表名
5.爆列名
6.爆字段
单行注释,#后直接加内容:select user();#this is a cmmect
单行注释,–后面需加空格:select user();-- this is a commect
多行注释,/**/中见可以跨行:
select user();/*this is a cmmect*/
或:
select user();/*this is a
cmmect*/ +1;
select /*!user()*/;
或者
/*!50001 select user()*/;
内联注释是MySQL数据库为了保持与其他数据库兼容,特意新添加的功能 。
为了避免从MySQL中导出的SQL语句被其他数据库使用,它把一些 MySQL特有的语句放在 /*! … */ 中,这些语句在不兼容的数据库中使用时便不会执行。而MySQL自身却能识别执行。
/*50001 */表示数据库版本>=5.00.01时中间的语句才会执行。
在SQL注入中,内联注释常用来绕过waf。
union 操作符用于拼接两个或者多select查询语句union中的每个查询必须拥有相同的列数
如:select 1 union select 2 union select 3;
可以执行成功
但是select 1,2 union select 3;
执行会报错
order by 语句用于根据指定的列对结果集进行排序。
order by语句默认按照升序对记录进行排序.
select * from information; --正常显示结果
select * from infoemation order by 3; --以第三列结
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。