Ywc

安全测试之我见

Word count: 2.5k / Reading time: 8 min
2020/08/28 Share

业务安全测试

安全测试

漏洞功能点

登录认证处

暴力破解

[测试方法]
常常使用 Bp 结合字典对账号密码进行暴力破解

  • 小技巧:
    intercept is on关闭的时候浏览器的请求依然会经过 Bp 只是不被拦截,所有的请求可以在 history 中查看

[修复建议]
1.设置登录验证码,并在尝试登录后改变,同时验证码的强度不能过低,防止攻击者使用 OCR 识别
2.设置登录失败次数限制,相同用户五分钟内失败6次则三小时内禁止登录
3.可增加手机短信校验等辅助校验方式

本地加密传输测试

[测试方法]
(1)首先查看是否使用了 SSL(HTTPS),如果没有使用 SSL 的话,使用 Bp 获登录数据包,查看是否存在明文传输
(2)如果是使用了 SSL 可以使用 wireshark 抓包看一下是不是真的加密了

搜索处

1、SQL注入
2、XSS
3、SSRF

留言处

1、XSS
2、SSRF
3、越权

删除处

1、CSRF
2、SSRF

修改密码处

1、CSRF
2、越权

修改信息处

1、CSRF
2、越权

订单处

1、越权

  • 遍历订单信息、修改操作

2、CSRF

文件上传处

1、文件上传XSS
2、普通上传

漏洞类型

SQL注入

漏洞原理

原理:开发者在编写操作数据库代码时,直接将外部可控的参数拼接到SQL语句中,没有经过任何过滤就直接放入数据库引擎执行。
把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

危害:

测试方法

手工&自动化工具一把梭
SQL注入漏洞测试的方式总结

修复建议

使用标准化的数据库查询语句API接口,进行参数过滤,转义等方式防止用户输入恶意字符

XSS

漏洞原理

XSS的漏洞主要成因是后端接收参数时未经过滤,导致参数改变了HTML的结构,从而被浏览器或后端代码执行

测试方法

找到一个存在问题的地方,提交一下代码,如果出现弹窗或者打开开发者,发现报错,即为XSS漏洞
获取流量,对流量进行分析,比如Xray

修复建议

a、在服务器端检查敏感的HTML代码,对敏感字符进行转义
b、接入xss过滤平台

越权漏洞

水平越权:普通用户之间操作可互相影响
垂直越权:低权限用户能操作高权限用户才能操作的东西

Bp 抓包查看并修改低权限用户的身份信息为同等权限的其他用户或者是高权限用户后进行重放
或用低权限的账户去访问高权限的账户的数据,一般是通过访问接口来进行测试
如果成功则说明漏洞存在

首先需要确认身份认证的字段,确认确认等字段进行认证,然后更换认证字段的数值,进行测试越权
如:测试通过Authorization字段进行认证,首先需要删除如cookie字段的认证,然后看是否有回显
若有,则表示Authorization字段是唯一认证,可直接进行测试
若无,则需要删除cookie字段的数值进行排查,确认cookie中是否有一些字段和Authorization一起认证,然后修改对应的字段进行测试

水平越权

漏洞原理

水平权限漏洞一般出现在一个用户对象关联多个其他对象(订单、地址等)、并且要实现对关联对象的CRUD的时候。开发容易习惯性的在生成CRUD表单(或AJAX请求)的时候根据认证过的用户身份来找出其有权限的被操作对象id,提供入口,然后让用户提交请求,并根据这个id来操作相关对象。在处理CRUD请求时,往往默认只有有权限的用户才能得到入口,进而才能操作相关对象,因此就不再校验权限了。可悲剧的是大多数对象的ID都被设置为自增整型,所以攻击者只要对相关id加1、减1、直至遍历,就可以操作其他用户所关联的对象了。

测试方法

修改参数的值,若能看到其他账户的数据,即为水平越权

漏洞示例:

1
getAddress.do?addressId=12345

攻击者修改addressId即可得到他人的address信息

修复方案

  1. 在web层的逻辑中做鉴权
    这个是最直接有效的修复方案:在web层的逻辑中做鉴权,检查提交CRUD请求的操作者(通过session信息得到)与目标对象的权限所有者(查数据库)是否一致,如果不一致则阻断。这个方案实现成本低、能确保漏洞的修复质量,缺点是增加了一次查库操作。我之前一直用这种方案来对已发生的水平权限漏洞做紧急修复。
  2. 把权限的控制转移到数据接口层中
    最正规的方案:把权限的控制转移到数据接口层中,避免出现select/update/delete … where addressID=#addressID#的SQL语句,使用selectt/update/delete… where addressID=#addressID# and ownerId=#userId#来代替,要求web层在调用数据接口层的接口时额外提供userid,而这个userid在web层看来只能通过seesion来取到。这样在面对水平权限攻击时,web层的开发者不用额外花精力去注意鉴权的事情,也不需要增加一个SQL来专门判断权限——如果权限不对的话,那个and条件就满足不了,SQL自然就找不到相关对象去操作。而且这个方案对于一个接口多个地方使用的情况也比较有利,不需要每个地方都鉴权了。
    但这个方案的缺陷在于实现起来要改动底层的设计,所以不适合作为修复方案,更适合作为统一的控制方案在最开始设计时就注意这方面的问题。
  3. 在生成表单时,增加一个token参数
    在生成表单时,增加一个token参数,即token=md5(addressId+sessionId+key);在处理请求时,用addressId、sessionId和key来验证token。

垂直越权

漏洞原理

测试方法

用低权限的账户去访问高权限的账户的数据
一般就是修改token,通过接口来进行测试

修复方案

对需要权限的页面进行 SESSION 认证,对用户访问的每一个 URL 做身份鉴别

正确校验用户的身份和 token

文件上传漏洞

漏洞原理

文件上传是一种数据与代码分理原则的攻击

原理网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门,通过脚本文件获得了执行服务器端命令的能力

危害: 恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件。

  • 上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行
  • 上传文件是Flash的策略文件crossdo-main.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似)
  • 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行
  • 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈

测试方法

上传一个文件,通过一些方法绕过客户端和服务端的校验,具体方法总结如下:
文件上传漏洞总结

修复建议

  • 文件扩展名服务端校验:判断文件类型,增加黑名单逻辑
  • 文件内容服务端校验
  • 上传文件重命名:使用随机数改写文件名跟路径
  • 上传文件路径隐藏.
  • 单独设置文件服务器的域名
  • 文件上传的目录设置为不可执行,文件上传后会放到独立的存储上,做静态文件处理。

学习文章

基于全流量权限漏洞检测技术

问题记录

token未及时失效问题记录

token在主页,无法进行刷新token并发处理

设置autherization字段进行验证
登录一次刷新一次 定期10分钟刷新

XSS漏洞的修复

接入工具XSS过滤器

Reference

业务Web漏洞攻击与防御的思考
水平越权的修复方案

CATALOG
  1. 1. 业务安全测试
  2. 2. 漏洞功能点
    1. 2.1. 登录认证处
      1. 2.1.1. 暴力破解
      2. 2.1.2. 本地加密传输测试
    2. 2.2. 搜索处
    3. 2.3. 留言处
    4. 2.4. 删除处
    5. 2.5. 修改密码处
    6. 2.6. 修改信息处
    7. 2.7. 订单处
    8. 2.8. 文件上传处
  3. 3. 漏洞类型
    1. 3.1. SQL注入
      1. 3.1.1. 漏洞原理
      2. 3.1.2. 测试方法
      3. 3.1.3. 修复建议
    2. 3.2. XSS
      1. 3.2.1. 漏洞原理
      2. 3.2.2. 测试方法
      3. 3.2.3. 修复建议
    3. 3.3. 越权漏洞
      1. 3.3.1. 水平越权
        1. 3.3.1.1. 漏洞原理
        2. 3.3.1.2. 测试方法
        3. 3.3.1.3. 修复方案
      2. 3.3.2. 垂直越权
        1. 3.3.2.1. 漏洞原理
        2. 3.3.2.2. 测试方法
        3. 3.3.2.3. 修复方案
    4. 3.4. 文件上传漏洞
      1. 3.4.1. 漏洞原理
      2. 3.4.2. 测试方法
      3. 3.4.3. 修复建议
  4. 4. 学习文章
  5. 5. 问题记录
    1. 5.1. token未及时失效问题记录
    2. 5.2. XSS漏洞的修复
  6. 6. Reference