逻辑越权漏洞测试方法和未授权访问
逻辑越权有两种,一种是垂直越权,一种是水平越权,关系如下图:
如果你是用户1,通过修改数据包之类的操作,获取了用户2的个人信息,或者做到了用户2的操作,比如说你本是用户1却使用了用户2的账号发表了一个评论,这本该是用户2才能做的事,这就是水平越权的意思。
如果你是用户1,通过修改数据包的操作,获取了管理员的信息,或者做到了只有管理员才能做到的事情,比如禁言谁,删除其它用户的作品等,这就是垂直越权的意思。
未授权访问: 比如说你没有账户,而你想访问的资源是需要用户登录注册才能看到的,可你通过修改数据包或者其它操作,获取到了这些资源,这算是未授权。
未授权访问和垂直越权访问的区别:
未授权访问是指用户没有通过身份验证访问资源的情况,而垂直越权访问是指已经通过身份验证,但试图越权访问资源的情况。
如果不好区分的话,那就直接叫未授权吧。
在测试过程中,如果你的目标量不多那就不需要用工具去测试这些逻辑越权的问题,手工测试更加方便,如果你的目标很大,那就只好用工具了。我列出几个,如有需要具体用法自行搜索
1、检测插件:
https://github.com/smxiazi/xia_Yue
2、检测项目:
https://github.com/ztosec/secscan-authcheck
https://github.com/y1nglamore/IDOR_detect_tool
测试逻辑越权漏洞和未授权访问漏洞的方法:
-
抓取数据包,观察数据包中跟身份凭据相关的参数,比如username,ID值等;如果对方是加密过后发送的,那么你还需要在前端JS代码中逆向出对方的加密算法,如果没加密那就直接试着把id这种类型参数的值改成其它的,用枚举的方法看看会不会响应意料之外的东西。
怎么逆向出网站JS加密算法我前面也讲过可以看看,以及如果目标不允许调试怎么办:
js逆向·找到登录时目标网站的加密算法的几种方式-CSDN博客
JS反调试绕过&JS代码混淆&JSFUCK编码_jsfuck解密-CSDN博客
比如上面这张数据库里的表就很能说明这个问题,如果参数名叫admin_ok的值为1的话,usertype值为3的话,就说明这是一个管理员。那我们在数据包里抓取下来把原本的普通用户的对应值修改成这个,那就是逻辑越权了。当然大多数实际情况验证的肯定比这个强,我只是举个例子说明。
-
如果对方数据包中带有Token,那要么直接不管继续测试,要么把Token的值删除掉,要么连参数名连带参数值都删除掉,这么测就是了。
-
还可以用工具,在前端js代码里,去发现更多的目标网站地址,试着去访问,如果那个地址原本是需要登录或者原本是需要管理员才能访问的,你发现了,你访问到了。那就是一个未授权访问漏洞了。前端JS代码可能会用webpack打包,那我们也可以用类似工具去发现比如:PackerFuzzer这个工具,详细教程:
-
除了在js里发现更多子目录,还可以用目录扫描,爬虫的方式去发现,然后都去试着访问一下,看看是否有未授权的页面可以访问到。如果嫌结果太多,就把发现的URL整理到字典里去用BP批量跑,观察响应码,200或许是可以正常访问的,403可能就是提示页面不存在,或者你没有权限访问的问题。怎么用BP工具批量访问URL呢?详情如下:
把请求的地址设置为一个变量,然后加载字典就行了。
BP的站点地图里也会显示分析出来的目标网站的目录结构,可以关注一下: