⼀、授权和鉴权的区别?
授权:相当于给⼀个通⾏证
鉴权:鉴定是否有权访问(判断有没有通⾏证)
二、为什么要鉴权?
我们如果想要进⼊房⼦之前必须有钥匙,钥匙匹配了我们才能进⼊这个房间,没有鉴权,就好⽐,这房⼦只要有
⼈知道在哪⾥,就可以随意的访问和进⼊,你愿意这么做吗?
那对于软件⽽⾔,也同样需要鉴权,如果没有这样的鉴权机制,那么我如果知道了你的ip,以及请求URL,那么
我就可以随意的访问你的资源
三、软件是怎么鉴权的?
3.1 浏览器项目
⼀般浏览器的项⽬(PC使⽤浏览器打开,⼿机端H5打开)因为都有cookie容器,所以鉴权⼀般基于cookie
(cookie base)
如:login接⼝中返回的数据⼀般会登录成功之后⽣成⼀串序列码放在responseheader中的set-cookie字段
1 / 43.2 手机APP
⼿机APP(⽐如很多Native开发)都是token base,会将服务器返回的校验信息缓存到设备本地存储(类cookie)
常见的处理⽅式,在处理的过程中也会直接返回在response中。
四、鉴权测试测什么?
鉴权测试其实更多的是测试登录之后⽣成的⽤户的唯⼀性标识,使⽤这样的标识去请求其他业务接⼝能否成功;
不带标识、伪造标识,能否绕过鉴权机制等的测试。
4.1 认证绕过(鉴权缺失)
测试⽬的:绕过认证,⽤户是否可以直接访问到本需要权限认证的资源。
测试前提:明确需要鉴权访问的操作的url
测试步骤:
1、录制burp suite请求
2 / 42、注销⽤户登录
3、请求重放(提取需要认证的请求)
(1)直接重放
(2)修改会话标识重放
(3)删除会话标识重放
4、检查以上各种重放是否可以执⾏
预期结果:不能成功执⾏。
4.2 会话随机测试
测试⽬的:Web应⽤程序使⽤业界主流的web容器(Apache、Tomcat、JBoss、WebLogic、NGINX、Jetty、Resin、
WebSphere、IIS)的会话标识⽣成机制⽣成会话标识。如果产品没有使⽤业界主流的Web容器,⾃⼰⽣成会话标识,必须使
⽤安全随机数函数。。
测试步骤:
1、开启BurpSuite⼯具
2、访问登录页⾯,输⼊正确的⽤户名和密码,并登录成功。
3、观察整个登录过程找到response set-cookie字段中携带sessionid的报⽂:因为web⽤户认证登录通过后必须更换会
话标识,所以登录过程⼀定会有response set-cookie字段中携带sessionid的报⽂;⼀般在⽤户名密码登录的
post response报⽂中,也可能存在get报⽂的response中,在这两种response报⽂中的set-cookie字段⾥找。
4、将识别出的报⽂右键点击弹出菜单,选择“Send to Sequencer”,这时看到“Sequencer”标签⾼亮,点击
“Sequencer”标签,可看到请求已⾃动带进“Sequencer”,只需在“cookie”这栏选择请求中的会话标识即可,
基于JavaEE架构的会话标识符⼀般都以JSESSIONID命名,最后点击“Start live capture”开始发送⼤量请求获取⾜
够数量的会话标识符。
5、等待进度条完成后,点击“Analyze now”即可在下⽅看到报告,这时只看红⾊圈部分显⽰“excellent”即可。
预期结果:测试结果显⽰为“excellent”
4.3 纵向越权
测试⽬的:绕过认证授权,低权限⽤户是否可以访问⾼权限才能访问的资源
测试前提:需要明确只有⾼权限⽤户才能访问的接⼝url
测试步骤:
1、 启动BurpSuite测试⼯具。
2、 按照《webservice接⼝清单》H列中识别的只有⾼权限⽤户才能访问的接⼝,⾼权限⽤户登录后进⾏访问,并通过
BurpSuite记录该请求(使⽤repeater功能)。
3、 低权限⽤户登录后,获取低权限⽤户的⽤户标识。
4、 将步骤2中BurpSuite记录的请求,修改为低权限⽤户标识后,进⾏重放(参考AutoRepeater插件,⽤于鉴权的批量
测试)
检查重放的操作是否可以执⾏。
预期结果:不能成功执⾏。
详⻅样例:#231584
3 / 44.4 横向越权
测试⽬的:绕过认证授权,⽤户B是否可以直接访问⽤户A的私有资源。
测试前提:需要明确哪些是⽤户私有数据url
测试步骤:
1、 启动BurpSuite测试⼯具。
2、 按照《webservice接⼝清单》中识别的⽤户私有数据url,⽤户A户登录后访问⽤户A的私有URL数据,并通过
BurpSuite记录该请求(使⽤repeater功能)。
3、 ⽤户B登录后,获取⽤户B的⽤户标识。
4、 将步骤2中BurpSuite记录的请求,修改为⽤户B的⽤户标识后,进⾏重放(参考AutoRepeater插件,⽤于鉴权的批
量测试)
检查重放的操作是否可以正常访问A的URL,如果正常访问,是否可以查看A⽤户的私有信息。
预期结果:不能成功执⾏。
4.5 服务端认证
测试⽬的:⽤户认证是否有在服务端实现
测试步骤:
1、 启动浏览器,打开被测系统的登录⻚⾯。
2、 启动burpsuite⼯具,对⽤户登录的POST请求进⾏拦截。
3、 在步骤1打开的登录界⾯中输⼊正确的认证信息(⽤户名、密码、验证码等),提交登录。
4、 在burpsuite拦截的请求消息中,修改认证信息为错误的内容(如修改为错误的登录密码),点击burpsuite的
“Forward”。
5、检查登录情况。
预期结果:⽤户登录不成功。
4 / 4