SQL注入第三章节数据类型与提交方式
3.1 SQL注入之数据类型
(1)数字型注入点
许多网页链接有类似的结构 http://xxx.com/users.php?id=1。基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字,在大多数的网页中,诸如 查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。这一类的 SQL 语句原型大概为 select * from 表名 where id=1
。若存在注入,我们可以构造出类似于如下的sql注入语句进行爆破:select * from 表名 where id=1 and 1=1
。
(2)字符型注入点
网页链接有类似的结构 http://xxx.com/users.php?name=admin。这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin'
。值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似于如下的sql注入语句进行爆破:select * from 表名 where name='admin' and 1=1 '
。我们需要将这些烦人的引号给处理掉。
(3)搜索型注入点
这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 "keyword=关键字"
有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%'
。若存在注入,我们可以构造出类似于如下的sql注入语句进行爆破:select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'
。
(4) xx型注入点
其他型:也就是由于SQL语句拼接方式不同,在SQL中的实际语句为:select * from 表名 where 字段 like ('')
,其本质为(‘xx’) or 1=1 # ')
常见的闭合符号:’ ‘’ % ( {
3.2 SQL注入之数据提交方式
GET方式注入
get注入方式比较常见,主要是通过url中传输数据到后台,带入到数据库中去执行,可利用联合注入方式直接注入
POST方式注入
post提交方式主要适用于表单的提交,用于登录框的注入
方法:利用BurpSuite抓包进行重放修改内容进行,和get差别是需要借助抓包工具进行测试,返回结果主要为代码,也可转化为网页显示
Request方式注入
概念:超全局变量 PHP中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可以用,这些超全局变量是:
$_REQUEST
(获取GET/POST/COOKIE)COOKIE在新版本已经无法获取了
$_POST
(获取POST传参)
$_GET
(获取GET传参)
$_COOKIE
(获取COOKIE传参)
1$_SERVER
(包含了诸如头部信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组)
HTTP头注入
什么是Header头?
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。 1这两种类型的消息有一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。 HTTP的头域包括通用头,请求头,响应头和实体头四个部分
什么是Header头部注入?
header注入,该注入是指利用后端验证客户端信息(比如常用的cookie验证)或者通过header中获取客户端的一些信息(比如User-Agent用户代理等其他header字段信息),因为这些信息在某些地方是会和其他信息一起存储到数据库中,然后再在前台显示出来,又因为后台没有经过相对应的信息处理所以构成了sql注入。
3.3 SQL注入之靶场案例练习
Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)
用burpsuit,抓包修改参数
联合查询union select测试payload
uname=-admin’ union select 1,2 --+&passwd=admin&submit=Submit
爆库payload
uname=-admin’ union select 1,database() --+&passwd=admin&submit=Submit
Less-20 POST - Cookie injections - Uagent field - Error based (基于错误的cookie头部POST注入)
单引号,报错型,cookie型注入。
存在魔术引号
直接cookie注入,进行绕过
Cookie: uname=-admin' union select 1,2,database()--+