注册模块上线前安全测试checklist

  • A+
所属分类:未分类

许多应用系统都有注册模块,正常用户通过注册功能,获得应用系统使用权限;而非法用户通过注册模块,则是为了达到不可告人的目的,非法用户可以通过注册模块与服务端进行交互(一切用户输入都不可信),因此系统上线前,有必要对注册模块进行重点测试。

一、注册模块是否面向大众

根据系统业务需求,分析注册模块面向群体;如果是面向大众,则注册模块应该放在显而易见的地方;比如freebuf的注册功能

注册模块上线前安全测试checklist

重点要强调一下面向内部的注册功能,此时注册模块应该是尽可能的隐藏起来。对内部注册模块隐藏的是否完美,上线前就必须进行测试。红军视角(黑盒测试):通过目录扫描、审查源代码、爬取js文件,发现隐藏的用户注册接口,比如未删除的注释,还可借助社工思维,比如登录地址为www.xxx.com/userLogin,可猜测注册地址为www.xxx.com/userRegist;蓝军视角(白盒测试):直接找开发人员要注册模块地址,检视改地址是否易猜解。

如下截图,就是通过查看源代码,发现系统存在内部使用的注册模块,已被注释,通过检查js文件,发现注册接口地址,以及部分参数。

注册模块上线前安全测试checklist

注册模块上线前安全测试checklist

二、是否需要验真。

验真:验证用户真实性。

检查系统是否需要通过手机、或者邮箱进行验真。验真方式不限,有些是通过短信或者邮箱验证码,有些是直接将下一步的注册地址发送到邮箱。为什么要求验真呢,这可有效防止恶意注册、杜绝僵尸账号,特别是羊毛党,平时养一批僵尸账号,有活动时则启用(虽然现在的羊毛党也有钱,舍得买手机号,但多多少少增加了他们的成本)。

发送短信验证码时,可通过拦截响应包,查看服务端是否有把验证码直接返回给客户端,如果直接返回给客户端,则可以冒用他人的身份,进行注册,绕过验真。

如果系统有人脸识别功能,则需测试人脸识别的健壮性(是否能被绕过),蓝军视角:直接通过工具制作动态图片或者小视频,取到的绕过方法,可以参考:在AE中制作人脸识别动画简要步骤疯狂的身fenzheng:一张身fenzheng如何攻破人脸识别技术(shenfenzheng会被河蟹)。

检查验真是否是在前端进行。如果是在前端,尝试将返回包中代表验真结果的参数值,类似code=-1改为code=0或者1,status=false改为status=true。

如果系统提供稍后验真功能,用户可以稍后验真直接进入系统,此时则需要检查是否存在越权漏洞,防止因权限限制不严,导致越权获取只有验真后才具有的权限。

注册模块上线前安全测试checklist

三、短信或邮箱轰炸

因为有短信或者邮箱验证码,因此会有短信或邮箱轰炸的风险。这不仅会影响用户,而且会消耗企业的短信费用。测试时,通过抓包工具burpsuite,重放验证码发送请求包(以防只在前端进行时间间隔和次数校验),测试验证码是否有发送时间间隔限制和数目限制。现在大家一般采用的时间间隔是60s,次数是5次。

注册模块上线前安全测试checklist

四、是否校验用户名

大部分系统的注册模块对注册账号进行校验,用来验证用户名是否已被使用,此时则可通过抓包工具,拦截注册账号校验请求包,比如使用burpsuite的Intruder模块,字典为常用用户名,对用户名进行遍历,再对遍历出来的用户名进行弱口令爆破。

当未对注册用户名进行校验时,则存在二次注册风险,可尝试用于密码重置,甚至导致整个账号被覆盖。因此红军视角测试时,需要谨慎,蓝军则直接要来已存在的用户进行快速验证即可。

验证用户是否存在的select语句未作过滤时,则可能会存在SQL注入漏洞。

五、SQL和XSS测试

对注册模块进行sql和xss测试,红军视角:当用户名长度未做限制时,可重点测试用户名(昵称、地址等也要进行测试),以前xss流行时,就对用户名插入各种xss的pauload,进行盲打;而SQL注入,则可能存在insert注入风险,或者二次注入(一开始注册时,insert有进行过滤,但是登录账号后,查看个人信息时,未对参数进行过滤,导致触发sql注入攻击,这个比较有难度);蓝军视角,则来的容易的多,直接代码审计即可。

注册时,当使用的insert语句未作过滤时,比如原始sql语句是(参考地址在SQL注入之insert注入

insert into member(username,pw,sex,phonenum,email,address) values('wangwu',md5('a'),'a','aa','a','a')

此时则可以构造如下sql注入payload,获取数据库用户名

insert into member(username,pw,sex,phonenum,email,address) values('wangwu'or updatexml(1,concat(0x7e,(users())),0) or'',md5('a'),'a','aa','a','a')

注册时,当输入框有长度限制,可以尝试f12修改输入框的长度,或者通过拼接技术,将xss的payload拆分到好几个输入框,从而验证是否存在xss漏洞。

六、是否可以注册成管理员

遇到过一个这样的系统,从js文件中发现的接口请求参数只有用户名和密码

注册模块上线前安全测试checklist

虽然能注册成功,但是登陆进去,就一个修改密码和查看个人信息的功能

注册模块上线前安全测试checklist

注册模块上线前安全测试checklist

测试时,想着能否发现越权,后面点击个人信息时也是空白,但是响应包中有报错信息,提示角色不存在

注册模块上线前安全测试checklist

看到role_id这个参数,于是重新注册,注册请求包中,添加参数role_id,并将role_id设置为1(一般管理员角色id=1),重新注册成功,从而获得管理员权限。

注册模块上线前安全测试checklist

注册模块上线前安全测试checklist

七、文件上传

部分系统注册时,有文件上传功能,比如头像、营业执照;此时则需要对上传功能进行任意文件上传测试。

八、其他

当注册请求包请求参数是xml格式,则要进行XXE测试;如果是json格式,不妨试试fastjson命令执行这类漏洞。

*本文原创作者:freebuf01 ,本文属于FreeBuf原创奖励计划,未经许可禁止转载

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: