注释方式:-- 或者–+
这是比较常见的请求方式,以sqli-labs为例,前10关都是GET的请求方式
我比较菜,我的理解就是在url中进行注入测试
注释方式:#
一般登录界面会使用POST方式,sqli-labs的10 - 20关都是POST的请求方式
我比较菜,我的理解就是你要不就在登录框进行注入
要不就使用HackerBar的POST Data方式(因为这个我没用过,我也不知道怎么用)
一般可能存在注入点的地方就是
在一些页面,比如说文章列表,商品列表,有类似?id=1的那些地方
以sqli-labs的第一关为例,当我们输入id=1的时候,页面显示正常
当我们输入id=1‘的时候,只要他页面有变化,那就是这里可能存在注入点
但是这里具体是要填id=1‘,还是id=1“,或者是id=1’),那就涉及到闭合方式的判断了。这个下面会提到
这里一般都是那种登录框,登录框有用户名和密码两个框,这两个框都有可能存在注入点
以第11关为例
输入用户名密码后,页面显示正常
随便加一个单引号,页面发生变化
证明username存在可能存在注入点,我们再试一下password那里
页面也是发生了变化的,说明也可能是注入点
GET请求和POST请求只是注入的地方不一样,这里就以POST请求(lesson-11)为例,因为GET网上的教程太多了,而且多多少少有点脑瘫
算了我还是用lesson-1为例吧,不然我挂burp代理没法写博客了,[打脸]
当我们在浏览器把参数传到后台之后,后台会进行处理,处理完了会有一系列逻辑去操作数据库
不知道大家有没有想过,为什么在处理的时候,把id直接以数值的形式赋值给id变量也可以$id=id
,以字符型赋值也可以id='id'
,双引号,括号,都可以
那是因为在访问数据的时候,不管你怎么写,只要成对出现都可以访问成功,所以在后端处理的时候可以随心所欲
因此,后台处理手段想怎么弄就怎么弄,这才有了sql注入时候的注入检测,因为闭合方式并不唯一
数值型是没有所谓的闭合方式的,后台代码代码中不对参数做处理,直接将id的值赋值给id变量
详情可以看lesson-2的源代码
这种比较好判断:
http://43.247.91.228:84/Less-2/?id=1
页面正常
构造一个不可能的id值,-1、9999999都可以
43.247.91.228:84/Less-2/?id=99999
页面变化
其实此时基本可以确定,id这个位置存在数值型注入漏洞了
但是我看那些大佬都喜欢再验证一波
43.247.91.228:84/Less-2/?id=1 and 1=1
43.247.91.228:84/Less-2/?id=1 and 1=2
页面显示就变了
或者你还可以再用or验证一下(反正一般我都是不验这么多)
http://43.247.91.228:84/Less-2/?id=1 or 1=1
就如上边所说,闭合方式有很多种,我们需要挨个猜
常见的闭合方式有成对的' '
、” “
、( )
以及他们的组合类似于(' ')
这种
判断具体是哪种,只能挨个试,这里lesson-1为例,我们知道他的闭合方式就是单引号,所以
http://43.247.91.228:84/Less-1/?id=1
http://43.247.91.228:84/Less-1/?id=1'
http://43.247.91.228:84/Less-1/?id=1' or '1'='1'--+
或者
http://43.247.91.228:84/Less-1/?id=1' --+
这次我们来实际操作一下
以lesson-3为例
假设我们不知道他的闭合方式,我们一点测试
先测试是不是数字型
到这里我就能知道,这已经可能存在注入点了
继续测试
已经是and 1=2
了,页面依然正常,ok,不是数字型
测试一下,是不是单引号闭合
证明这个单引号不能和php后端代码构成闭合,所以不是单引号
试一下双引号
居然加了双引号页面依然显示正常,这种情况或者是这里不存在sql注入漏洞,或者就是后台将双引号过滤掉了
下面说的可能不太严谨,不过大概就是那个意思
因为刚刚测试单引号的时候页面明显变化了,所以这里一定是有注入漏洞的。而且没有过滤单引号,但是过滤的双引号,所以猜测闭合方式和单引号有关系但是和双引号没关系
试一下(' ')
这个组合,唉,没办法,手工注入就是得这么一直试
哦吼~页面报错,有戏
这篇文章不涉及怎么获取数据库信息,我觉得那些东西自行百度sqli-labs闯关教程就可以找到
我是觉得我最开始学的时候,关于类型和闭合方式,网上那些文章都说的不清楚,所以本文只教你”前戏“
这个就真的方便了
根本不需要自己去判断什么东西
大家自行百度吧,我先溜了