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

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

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

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

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

二、是否需要验真。

验真:验证用户真实性。

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

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

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

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

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

三、短信或邮箱轰炸

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

四、是否校验用户名

大部分系统的注册模块对注册账号进行校验,用来验证用户名是否已被使用,此时则可通过抓包工具,拦截注册账号校验请求包,比如使用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文件中发现的接口请求参数只有用户名和密码

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

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

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

七、文件上传

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

八、其他

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

注册模块上线前安全测试checklist的更多相关文章

  1. 关于xcode6打包以及上线前企业部署测试的说明 --转自张诚教授微博

    xcode6如何打包 首先clean然后点击归档 点击打包之后保存 点选第一个以后检查相关证书签名 那么我们开发完以后,在上线前如何给别人测试 有2种方法 1.使用299美金的企业开发者账号搭建企业部 ...

  2. IOS AppStore上线前测试

    IOS  AppStore上线前测试 TestFlight Beta ios 8才开始支持. https://developer.apple.com/library/ios/documentation ...

  3. 上线前测试的bug,要不要处理,跟版本的关系

    最近有两个项目是在旧版本上实施的.上线前经过一轮测试后,发现了一些产品(我们的产品确实不稳定) 在这个项目上,修改产品bug是肯定的.但是要不要追踪这些bug? 这就跟版本使用范围有关系了,毕竟要考虑 ...

  4. TestCase--网站注册模块

    对于web测试,注册模块是必测的一个点,所以今天就来总结一下注册模块的测试用例 参考京东的注册页面 测试用例设计如下: 一.功能测试 1.  单击“免费注册”,页面是否正常跳转 2.  直接访问注册页 ...

  5. 【转】python模块分析之unittest测试(五)

    [转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...

  6. CP干货:手机游戏上线前需要准备什么

    转自:http://www.gamelook.com.cn/2015/09/229002 游戏研发完成后游戏该怎样推广?如何找渠道?推广时需要注意什么?下面给大家介绍一下具体流程,可能每个公司的上线流 ...

  7. python基础语法13 内置模块 subprocess,re模块,logging日志记录模块,防止导入模块时自动执行测试功能,包的理论

    subprocess模块: - 可以通过python代码给操作系统终端发送命令, 并且可以返回结果. sub: 子    process: 进程 import subprocess while Tru ...

  8. iOS开发一个用户登录注册模块需要解决的坑

    最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...

  9. PHP+jQuery 注册模块的改进之二:激活链接的URL设置与有效期

    接<PHP+jQuery 注册模块的改进之一>继续修改: ①在注册成功后返回登录邮件页面( maillogin.php ),在页面中用户可以点击链接跳转到自己注册邮箱的登录页面,可以再次发 ...

随机推荐

  1. .NET中的字符串(1):字符串 - 特殊的引用类型

    C# string 特殊的引用类型 .Net 框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一个引用类型,也就是说线程上的堆栈上不会驻留有任何字符串.(译 ...

  2. ZOJ4114 Flipping Game(2019山东省赛)

    有n个开关,有起始状态和终状态,问如果每次必须选m个开关进行改变状态,一共进行k次,那么有多少种方式可以从起始状态到终状态~ #include<bits/stdc++.h> using n ...

  3. 杭电2504 又见GCD

    又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. spark-env.sh增加HADOOP_CONF_DIR使得spark运行文件是hdfs文件

    spark-env.sh增加HADOOP_CONF_DIR使得spark读写的是hdfs文件 刚装了spark,运行wordcount程序,local方式,执行的spark-submit,读和写的文件 ...

  5. pytorch资料

    torchvision是独立于pytorch的关于图像操作的一些方便工具库. torchvision的详细介绍在:https://pypi.org/project/torchvision/ torch ...

  6. 九、web.xml理解

    1.web.xml文件在每个web工程不是必须要有的:     web.xml文件是用来初始化配置信息:比如Welcome页面.servlet.servlet-mapping.filter.liste ...

  7. nyoj 100

    怒刷水题... AC代码: #include <stdio.h> int main() { int x,t,count; scanf("%d",&t); whi ...

  8. Thread的join方法

    一个线程在执行的过程中,可能调用另一个线程,前者可以称为调用线程,后者成为被调用线程. Thread.Join方法的使用场景:调用线程挂起,等待被调用线程执行完毕后,继续执行. 如下案列: 当NewT ...

  9. 关于Action模型驱动无法获取属性的问题

    这两天在练习ssh小项目发现action层怎都无法获取Ajax传过来的json: 1.检查表单name和action定义属性名是否一致 2.get/Set方法 3.表单和属性名的命名问题,驼峰法

  10. JDBC笔记一

    连接池原理 数据库连接池:1.提前创建好多个连接对象,放到缓存中(集合),客户端用时直接从缓存中获取连接 ,用完连接后一定要还回来. 目的:提高数据库访问效率.  模拟代码: package com. ...