SQL注入基础 - 判断注入类型及闭合方式

文章目录

  • 请求方式
    • GET请求
    • POST请求
  • 注入方式
    • 手工注入
      • 判断是否有注入点
        • GET:
        • POST:
      • 判断闭合方式
        • 数值型
        • 字符型
    • 自动注入

请求方式

GET请求

注释方式:-- 或者–+

这是比较常见的请求方式,以sqli-labs为例,前10关都是GET的请求方式

我比较菜,我的理解就是在url中进行注入测试

POST请求

注释方式:#

一般登录界面会使用POST方式,sqli-labs的10 - 20关都是POST的请求方式

我比较菜,我的理解就是你要不就在登录框进行注入
SQL注入基础 - 判断注入类型及闭合方式_第1张图片
要不就使用HackerBar的POST Data方式(因为这个我没用过,我也不知道怎么用)

在这里插入图片描述我一般比较习惯在burp中进行注入点的测试

SQL注入基础 - 判断注入类型及闭合方式_第2张图片
抓包后修改最后一行的内容即可

注入方式

手工注入

判断是否有注入点

一般可能存在注入点的地方就是

  1. GET请求:url中传参
  2. POST请求:表单提交

GET:

在一些页面,比如说文章列表,商品列表,有类似?id=1的那些地方

以sqli-labs的第一关为例,当我们输入id=1的时候,页面显示正常
SQL注入基础 - 判断注入类型及闭合方式_第3张图片
当我们输入id=1‘的时候,只要他页面有变化,那就是这里可能存在注入点
SQL注入基础 - 判断注入类型及闭合方式_第4张图片

但是这里具体是要填id=1‘,还是id=1“,或者是id=1’),那就涉及到闭合方式的判断了。这个下面会提到

POST:

这里一般都是那种登录框,登录框有用户名和密码两个框,这两个框都有可能存在注入点

以第11关为例

输入用户名密码后,页面显示正常
SQL注入基础 - 判断注入类型及闭合方式_第5张图片随便加一个单引号,页面发生变化
SQL注入基础 - 判断注入类型及闭合方式_第6张图片
证明username存在可能存在注入点,我们再试一下password那里
SQL注入基础 - 判断注入类型及闭合方式_第7张图片
页面也是发生了变化的,说明也可能是注入点

判断闭合方式

GET请求和POST请求只是注入的地方不一样,这里就以POST请求(lesson-11)为例,因为GET网上的教程太多了,而且多多少少有点脑瘫

算了我还是用lesson-1为例吧,不然我挂burp代理没法写博客了,[打脸]

当我们在浏览器把参数传到后台之后,后台会进行处理,处理完了会有一系列逻辑去操作数据库

不知道大家有没有想过,为什么在处理的时候,把id直接以数值的形式赋值给id变量也可以$id=id,以字符型赋值也可以id='id',双引号,括号,都可以

那是因为在访问数据的时候,不管你怎么写,只要成对出现都可以访问成功,所以在后端处理的时候可以随心所欲
SQL注入基础 - 判断注入类型及闭合方式_第8张图片因此,后台处理手段想怎么弄就怎么弄,这才有了sql注入时候的注入检测,因为闭合方式并不唯一

数值型

数值型是没有所谓的闭合方式的,后台代码代码中不对参数做处理,直接将id的值赋值给id变量

详情可以看lesson-2的源代码

这种比较好判断:

http://43.247.91.228:84/Less-2/?id=1

页面正常
SQL注入基础 - 判断注入类型及闭合方式_第9张图片构造一个不可能的id值,-1、9999999都可以

43.247.91.228:84/Less-2/?id=99999 

页面变化
SQL注入基础 - 判断注入类型及闭合方式_第10张图片
其实此时基本可以确定,id这个位置存在数值型注入漏洞了
但是我看那些大佬都喜欢再验证一波

43.247.91.228:84/Less-2/?id=1 and 1=1

页面显示正常
SQL注入基础 - 判断注入类型及闭合方式_第11张图片

43.247.91.228:84/Less-2/?id=1 and 1=2

页面显示就变了
SQL注入基础 - 判断注入类型及闭合方式_第12张图片
或者你还可以再用or验证一下(反正一般我都是不验这么多)

http://43.247.91.228:84/Less-2/?id=1 or 1=1

页面正常显示
SQL注入基础 - 判断注入类型及闭合方式_第13张图片
这下就可以放心了,这里确实存在数值的注入漏洞

字符型

就如上边所说,闭合方式有很多种,我们需要挨个猜

常见的闭合方式有成对的' '” “( )

以及他们的组合类似于(' ')这种

判断具体是哪种,只能挨个试,这里lesson-1为例,我们知道他的闭合方式就是单引号,所以

http://43.247.91.228:84/Less-1/?id=1

页面正常
SQL注入基础 - 判断注入类型及闭合方式_第14张图片

http://43.247.91.228:84/Less-1/?id=1'

页面发生变化
SQL注入基础 - 判断注入类型及闭合方式_第15张图片

http://43.247.91.228:84/Less-1/?id=1' or '1'='1'--+

或者

http://43.247.91.228:84/Less-1/?id=1' --+

页面再次正常
SQL注入基础 - 判断注入类型及闭合方式_第16张图片
ok,单引号的闭合

这次我们来实际操作一下

以lesson-3为例

假设我们不知道他的闭合方式,我们一点测试

先测试是不是数字型
SQL注入基础 - 判断注入类型及闭合方式_第17张图片
SQL注入基础 - 判断注入类型及闭合方式_第18张图片
到这里我就能知道,这已经可能存在注入点了
继续测试
SQL注入基础 - 判断注入类型及闭合方式_第19张图片
SQL注入基础 - 判断注入类型及闭合方式_第20张图片
已经是and 1=2了,页面依然正常,ok,不是数字型

测试一下,是不是单引号闭合

SQL注入基础 - 判断注入类型及闭合方式_第21张图片
SQL注入基础 - 判断注入类型及闭合方式_第22张图片
将后边注释掉了,依然是错的。

证明这个单引号不能和php后端代码构成闭合,所以不是单引号

试一下双引号

SQL注入基础 - 判断注入类型及闭合方式_第23张图片
居然加了双引号页面依然显示正常,这种情况或者是这里不存在sql注入漏洞,或者就是后台将双引号过滤掉了

下面说的可能不太严谨,不过大概就是那个意思

因为刚刚测试单引号的时候页面明显变化了,所以这里一定是有注入漏洞的。而且没有过滤单引号,但是过滤的双引号,所以猜测闭合方式和单引号有关系但是和双引号没关系

试一下(' ')这个组合,唉,没办法,手工注入就是得这么一直试

哦吼~页面报错,有戏

SQL注入基础 - 判断注入类型及闭合方式_第24张图片ok,有可能是(' ')这样闭合的,没错,只能是有可能

然后我们再进行验证
SQL注入基础 - 判断注入类型及闭合方式_第25张图片
ok,实锤了

这篇文章不涉及怎么获取数据库信息,我觉得那些东西自行百度sqli-labs闯关教程就可以找到

我是觉得我最开始学的时候,关于类型和闭合方式,网上那些文章都说的不清楚,所以本文只教你”前戏“

自动注入

这个就真的方便了

根本不需要自己去判断什么东西

大家自行百度吧,我先溜了

你可能感兴趣的:(web安全)