一、 数据类型
1、数字型注入点人。
许多网页链接有类似的结构http://xox.com/users.php?id=1基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id类型为数字,在大多数的网页中,诸如查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。这一类的SQL语句原型大概为
select * from表名 where id=1若存在注入,我们可以构造出类似与如下的sq注入语句进行爆破: select * from表名where id=1 and 1=1
2、字符型注入点
网页链接有类似的结构http://xox.com/users,php?name=admin这种形式,其注入点name类型为字符类型,所以叫字符型注入点。这一类的SQL语句原型大概为select * from表名 where name= 'admin’值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破: select * from表名 where name= ‘admin’ and 1=1’我们需要将这些烦人的引号给处理掉。
注意:mysql中,如果是字符型,那么输入的在1后边的内容都会被过滤掉。
例:
sqllabs第一关中,url中输入id=1’有报错,说明此时为字符型注入点。
此时的sql语句为
select * from users where id='1''
3、搜索型注入点
这是一类特殊的注入类型。这类注入主要是指在进行数据搜素时没过滤搜索参数,一般在链接地址中有"**keyword=**关键字”有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的SQL语句,其原形大致为: select * from表名 where字段like’%关键字%'若存在注入,我们可以构造出类似与如下的sq注入语句进行爆破: select * from表名where字段like “%测试%’ and “%1%”=”%1%"
注意:**%**代表通配符
例:(以pikachu中的搜索型注入为例)
此时的sql语句为:
select * from user where like '%y%';
而当输入**y%’ or 1=1#**时,就可以查出所有的信息
此时的sql语句为:
select * from user where like '%y%' or 1=1#%';
# 输入的%与前边的%形成闭合,or 1=1 使得肯定成立,而#会将后边的字符进行注释,使得不执行
4、其他型注入
其他型:本质就是由于SQL语句拼接方式不同
常见的闭合符号:’"%( {
例:在上边的例子中,如果系统内的sql语句为select * from user where like (’%y%’ ); 那么,在进行注入时我们就需要输入一个)与前边的(形成闭合。此时的sql语句为:select * from user where like (’%y%’) or 1=1#%’ );
二、提交方式
1、GET方式注入
get注入方式比较常见,主要是通过url中传输数据到后台,带入到数据库中去执行,可利用联合注入方式直接注入
之前文章中sqllabs中第二关的例子就为get方式
2、POST方式注入
post提交方式主要适用于表单的提交,用于登录框的注入
方法:利用BurpSuite抓包进行重放修改内容进行,和get差别是需要借助抓包工具进行测试,返回结果主要为代码,也可转化为网页显示
3、Request方式注入
概念:超全局变量PHP中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可以用,这些超全局变量是:
REQUEST(获取GET/POST/COOKIE)COOKIE在新版本已经无法获取了
_POST(获取POST传参)
GET(获取GET传参)
_COOKIE(获取COOKIE传参)
$_SERVER(包含了诸如头部信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组)
SERVER详解