0x00:前言
上周做渗透,有一个 sql 注入,负责安全审核的人给开发说你们的程序既然还有 sql 注入,我一年也看不见几个。这句话让我又再次深刻的认识到,渗透测试常规的一些注入跨站漏洞不如以前那么盛了,有点经验的开发写东西都会去考虑到了,再加上修复方法也在逐渐的完善,逻辑类的东西也应该并重的去测。
0x01:分类
我把逻辑类的问题大概总结了一下,大概可以分为十个模块,分别是登录认证模块测试、业务办理模块测试、业务授权访问模块测试、输入 / 输出模块测试、回退模块测试、验证码机制测试、业务数据安全测试、业务流程乱序测试、密码找回模块测试、业务接口调用模块测试。
这次记录的是第三个模块业务授权访问模块。
0x02:业务授权访问模块测试
1,未授权访问
测试方法:访问一个地址,且这个地址是需要认证身份后才可以访问的,随后把这个地址复制到其他浏览器,若能成功访问,则存在此问题。
经验之谈:这个未授权访问常见的地方是一些下载或导出表等功能,测试的时候可以不用复制地址到其他浏览器,之所以复制到其他浏览器其目的在于怕同一个浏览器有缓存而导致测试不准确,如果电脑只有一个浏览器,这时候可以打开隐私浏览记录,测试效果是一样的。
那不常见的地址在哪,在说不常见的地方时,再说一下未授权访问的测试方法,除了复制 url 外,很多人也会发送到 repeater 然后删除 cookie 的值去 go,以此来判断是否具有未授权访问这个问题。
不常用的地方理由后台有一个对信息增加或删除的功能,这时候基本考虑到的是 sql 注入、xss,csrf 等常见的问题然后去测,其实也会存在未授权的问题,很多时候,类似这样的功能发送到 repeater 后,删除 cookie 然后 go 一下,你会发现服务器返回的是成功的结果,而且数据确实已经被删除或者增加了,但有一个问题,你把这个 url 复制到浏览器时它会自动跳转到登录页面,那这算不算未授权访问?
一般情况下,删除 cookie 还能操作就是有问题,可以验证一下,怎么验证呢,firefox 有一个插件叫 hackbar,打开这个插件把 url 复制进去,执行看结果,如果能成功那就是存在问题,不成功就不存在。
之所以 url 会调到登录页,而 repeater 会成功操作,却别在于 url 访问时你没有制定请求的方式到底是 post 还是 get,另外请求的一些参数也没有指定,然后导致让你登录。而 hackbar 你指定其请求方式,然后把参数加进去,这时候你在请求相当于是没有 cookie 的,如果成功那就是有问题。
修复方法:对于未授权访问的页面做 session 认证,并对每一个 url 做身份鉴别,正确校验用户 id 和 token。
2,越权测试
测试方法:在测水平越权时,通常会拦截一些包然后查看能证明身份的东西,例如 id 为 1,这时候改为 2 就会返回 2 的内容,则可以证明存在水平越权。在测试垂直越权时,通常是普通用户登录后,查看一些功能时把能证明身份的东西进行修改,例如 user 为 test,这时候改为 admin,如果成功返回管理员的相关信息,则存在垂直越权。
经验之谈:这个和上一章记录的业务办理模块可以结合起来,在测一些业务办理功能时,修改各个参数时,就可以顺便证明是否有越权的问题。
修复方法:服务端校验身份唯一性。
0x03:总结
业务授权访问模块就有两个:未授权访问和越权。后续会继续记录其他的模块。
更多关于代码审计、WEB渗透、网络安全的运维的知识,请关注微信公众号:发哥微课堂。