安全测试系列(1):基本概念

安全测试简介

安全测试是在软件产品开发基本完成时,验证产品是否符合安全需求定义和产品质量标准以及对非法入侵渗透的防范能力的过程,理论上来讲,只要有足够的时间和资源,没有无法进入的系统,因此,系统安全设计的准则是使非法侵入的代价超过被保护信息的价值

安全测试目的

  • 增强程序的健壮性
  • 预防非法用户的攻击
  • 保证使用者的信息安全
  • 使非法入侵的代价超过对系统维护的价值

安全测试与功能测试、渗透测试的区别

安全测试与功能测试的区别:

  • 目标不同:功能测试以发现BUG为目标;安全测试以发现安全隐患为目标
  • 假设条件不同:功能测试假设导致问题的数据是用户不小心造成的,接口一般只考虑用户界面;安全测试假设导致问题的数据是攻击者处心积虑构造的,需要考虑所有可能的攻击途径
  • 思考域不同:功能测试以系统所具有的功能为思考域;安全测试的思考域不但包括系统的功能,还有系统的机制、外部环境、应用与数据自身安全风险与安全属性等
  • 问题发现模式不同:功能测试以违反功能定义为判断依据;安全测试以违反权限与能力的约束为判断依据

安全测试与渗透测试的区别:

  • 出发点差异:渗透测试是以成功入侵系统,证明系统存在安全问题为出发点;而安全测试则是以发现系统所有可能的安全隐患为出发点
  • 视角差异:渗透测试是以攻击者的角度来看待和思考问题,安全测试则是站在防护者角度思考问题,尽量发现所有可能被攻击者利用的安全隐患,并指导其进行修复
  • 覆盖性差异:渗透测试只选取几个点作为测试的目标,而安全测试是在分析系统架构并找出系统所有可能的攻击界面后进行的具有完备性的测试
  • 成本差异:安全测试需要对系统的功能、系统所采用的技术以及系统的架构等进行分析,所以较渗透测试需要投入更多的时间和人力
  • 解决方案差异:渗透测试无法提供有针对性的解决方案;而安全测试会站在开发者的角度分析问题的成因,提供更有效的解决方案

常见安全漏洞

XSS(Cross Site Script)

XSS(Cross Site Script),跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。比如恶意攻击者将一段获取Cookie的脚本持久化到页面后,正常用户访问该页面后其Cookie信息就会被攻击者获取

CSRF(Cross-site Request Forgery)

CSRF (Cross-site Request Forgery),跨站点请求伪造。通常指在某个恶意站点的页面上,促使访问者请求你的网站的某个URL(GET,POST 提交方式均可),从而达到改变服务器端数据的目的。这一类攻击依赖于你的网页中的表单,脆弱的表单很容易受到攻击。比如用户A试图通过链接盗取B账号的资金,直接向银行发送:http://bank.example/withdraw?account=B&amount=1000000&for=A并不会成功,但是如果诱导用户B通过点击链接在B的客户端向银行发送该请求,则如果B在刚好访问过银行相关页面,session尚未过期,则结合浏览器中B的cookie,则该请求则会生效,而且的确是由B发起申请的

SQL 注入

SQL Injection就是向服务器端提交事先准备好的数据,拼凑出攻击者想要的SQL语句,以改变数据库操作执行计划

通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
select * from users where username='' or 1=1#' and password=md5('')
等价于
select * from users where username='' or 1=1
SQL注入采用的' OR 1=1 # 是什么意思呢?
最后一个#号有什么意义呢?
SELECT * FROM test WHERE name='' OR 1=1 #' AND age='20'
这后面写的 #' 是什么意思呢?
解释:可以注释掉后面的一行SQL代码
相当于去掉了一个where条件
MySQL 注释, 过滤掉后面的SQL语句,使其不起作用
因为1=1永远是都是成立的,即where子句总是为真,将该sql进一步简化之后,等价于如下select语句:
select * from users 没错,该sql语句的作用是检索users表中的所有字段
怎么防止就说对用户输入进行校验,不要动态拼接SQL

URL跳转

URL跳转的应用很广,在这里我们只局限于可以修改URL地址的跳转,比如正确登录后的跳转到之前页。这个之前页的URL地址就是可以修改的,是不确定的。URL Redirect的主要威胁在于钓鱼网站,恶意用户可以利用URL Redirect将有恶意跳转的URL转发给其他用户,而此URL同时能顺利逃过域名检测,比如login.a.com/?Done= http://ha.ckers.org/ 如果URL Redirect检测不严格,登录之后即跳转到http://ha.ckers.org

AccessControl

这里的访问控制主要是一些越权操作漏洞。Access Control主要包括了水平权限和垂直权限两种,水平权限是指能访问其他用户受保护的内容,从权限关系的角度来看,这种情况突破了权限的水平约束。垂直权限问题就是访问需要更高授权的资源,比如未登录用户能够访问需要登录的资源,普通用户访问须管理员权限的资源等,从权限关系的角度看,这种情况是突破了权限的垂直约束,获取到了更高权限。
比如有个url为:https://w.b.com/contact/detail.info?cid=XXX,XXX为一个联系人的ID,当用户登录XXX=1000时,用户恶意修改了cid后就能任意获取到其他联系人的信息,即使该联系人并不是该用户的联系人,比如修改ID为2222,那么2222的用户信息被获取了,但是他并不是当前用户。这就是一个AccessControl漏洞

上传下载文件

安全威胁:File upload,任意文件上传威胁。
Web应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允许的范围内,就把文件保存在服务器上,导致恶意用户可以上传任意文件,甚至上传脚本木马到web服务器上,直接控制web服务器。因此需要对每个上传需求点都要明确允许上传的文件类型,程序实现时要在服务器端对文件进行类型检测。同时上传的文件要保存至没具有代码执行能力的专门存储服务器上,不能保存在Web应用目录下。对于上传的图片类型的文件,必须要进行图片格式化,即将图片读入再重新生成一张新的图片

常用安全测试工具

常用安全测试用例

登录权限验证

  • 密码密文显示:输入密码,查看密码是否以密文的形式显示
  • 密码设置:设置密码时输入简单的密码如123
  • 修改密码:修改密码时使用原密码
  • 密码输入错误上限:连续10次输入错误密码
  • 自动退出:30分钟不操作页面

跨站请求伪造(CSRF)

  • 使用burpsuite拦截HTTP请求
  • 在Request-Raw中右击选择Engagement tools-Generate CSRF PoC
  • 复制CSRF html内的内容到本地进行访问

输入验证

  • 输入很大的数值:如:999999999999/-99999999999
  • 输入超长字符:如:41294123128312412412
  • 输入特殊字符:如:~!@#$%^&*()_+<>:”{}|
  • 输入空格(字符中间空格,字符前后空格):如:12 3,123 , 123
  • 输入特殊字符:如:NULL,null,0x0d 0x0a
  • 输入不符合格式的字符:如:数量的输入框输入负数/文字
  • 输入跨站脚本(XSS):如:输入<script type="text/javascript">alert(“1”)</script>
  • 输入sql语句:如:‘or 1=1 (输入后查询变为select * from users where username=’’ or 1=1 等价于 select * from users

上传文件

  • 上传.exe文件:选择.exe的文件上传
  • 上传过大文件:上传图片中选择100M的文件
  • 上传过小文件:选择0 字节大小的文件
  • 修改文件扩展名上传:将.xlsx文件后缀修改成.jpg后是否可以上传至图片
  • 上传中断:上传过程中中断上传

URL

  • 特殊页面URL直接访问:复制仅管理员可以访问的地址,退出登录后,再次直接输入地址访问
  • 修改URL参数访问:带有数字的URL,修改数字是否可以直接跳转到别的账号的页面
  • 输入跨站脚本(XSS):输入<script type="text/javascript">alert(“1”)</script>

BurpSuite扫描测试

  1. 打开burpsuite工具
  2. 保持监听功能开启,在浏览器内访问需要测试的URL
  3. 在proxy的intercep的raw区域右击选择“Do an active scan(激活主动扫描)”
  4. 对扫描结果的问题进行人工验证来复现并筛选实际存在的BUG
  5. 提交验证后实际存在的BUG
posted @ 2021-06-28 08:01  Cstzar  阅读(70)  评论(0编辑  收藏  举报