jck28 - 小柒 - 接口安全测试

一,常见接口安全测试工具

1.1,常用工具

  • OWASP ZAP
  • WVS
  • AppScan
  • BurpSuite
  • Sqlma

1.2,安全测试关注维度

  • 传输
    • 敏感信息传递加密
    • 链路加密
  • 接口
    • 访问控制
  • 参数
    • 注入:sql注入、命令注入、文件注入
    • 越权:越过更高权限、越过同级权限

1.3,业务安全常见的checklist

  • 业务数据传输链路分析
    • http是否传输敏感信息
    • tcp等协议是否可被解密
  • 资产安全分析
    • api清单收集:明确敏感信息分级,可访问性验证
    • api参数收集:明确参数分类并针对分析
      * token可遍历
      * 文件上传
      * 身份参数的有效性验

1.4,建立安全测试流程

  • 白盒代码分析:自动化
    • sonar、findbugs等
  • 黑盒扫描机制:自动化
    • zap、wvs、burpsuite、appscan、sqlmap
  • 业务流程安全探索:人工检测
    • burpsuite、za

1.5,安全测试工具burpsuite

burpsuite重要特性

❖ 代理工具(Proxy)
❖ 爬虫(Spider)
❖ 暴力破解(Intruder)
❖ 漏洞扫描(Scanner 付费)
❖ 重放请求(Repeater)
❖ 附属工具(decode comparer)
❖ 扩展定制(Extender

应用场景

❖ 服务端攻击:篡改请求
❖ 客户端攻击:篡改响

二,安全测试场景

2.1 命令注入漏洞

演练环境:

❖ 地址:https://dvwa.ceshiren.com/
❖ 用户名:admin
❖ 密码:passwor

原理

  • 命令注入是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。 当应用程序将用户提供的不安全数据(表格,cookie,HTTP标头等)传递到Shell时,可能会发生命令注入攻击。 在这种攻击中,通常由易受攻击的应用程序以特权执行由攻击者提供的操作系统命令。 由于没有足够的输入验证,因此可能会发生命令注入攻击

常用漏洞利用payload

  • 多语句分号:;
  • 条件执行:&& ||
  • 管道符号: |

示例

2.2 SQL注入漏洞

原理

  • SQL注入(英语:SQL injection),也称SQL注入或SQL注码,是发生于应用程序与数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。

示例

  • 在演练环境输入:1 'union select first_name,last_name from users where user_id=2;-- -
  • 会返回所有的user_id

危害与预防

  • 危害:漏洞可以让黑客无限制的使用SQL,造成数据泄露甚至远程命令执行
  • 预防:使用参数化查询避免数据被混在在指令中

2.3 XSS漏洞

原理

  • 跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
  • XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

常见的攻击payload

*  ><script>alert(document.cookie)</script>
*  ='><script>alert(document.cookie)</script>
*  "><script>alert(document.cookie)</script>
*   <script>alert(document.cookie)</script>
*   <script>alert (vulnerable)</script>
*   %3Cscript%3Ealert('XSS')%3C/script%3E
*   <script>alert('XSS')</script>
*   <img src="javascript:alert('XSS')">
*  <img src="http://888.888.com/999.png" onerror="alert('XSS')">

危害与预防

  • 危害:危害网站上的其他用户,导致被动执行非预期网页脚本
  • 预防:输入输出过滤、利用浏览器安全机制等
  • 检测:可自动化发

2.4 csrf漏洞

原理

  • 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。[1] 跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任
  • 跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

常见的攻击payload

  • 利用url
  • 利用图片请求
  • 利用伪造表

危害与检测

  • 危害:导致用户执行非本意的网站请求
  • 预防:增加token校验、检查referer

2.5 越权访问漏洞

定义

  • 越权,顾名思义,就是超出了权限或权力范围。多数WEB应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这些缺陷来访问未经授权的功能或数据,这就是我们通常说的越权漏洞。攻击者越权后就可以进行一些操作,例如查看敏感信息、进行一些增删改查的操作等等。

越权访问危害

  • 未授权访问通常是会泄露用户信息,系统信息。某些服务和系统中,未授权访问还可以执行系统命令,操作系统文件,导致系统的整体安全遭到破坏。而越权可以分为水平越权和垂直越权。垂直越权漏洞会导致低权限用户用来执行高权限用户的功能,获取高权限用户的账号信息,执行高权限用户的操作功能。水平越权会导致同一层级间的用户可以互相访问到对方的敏感信息,如保存的地址、手机
    号、订单记录。同时还可能会以其他平级权限用户的身份来执行某行功能,如购买,删除,添加,修改等。

防护方式

1、验证需要从前端获取的参数,比如用户ID和角色权限名,对于需要根据前台请求来返回数据的参数进行权限效验。
2、对于固定返回信息可以使用特定链接地址返回,在用户访问时进行权限校验。
3、对于需要修改、新增等功能进行判断,根据当前seesion校验当前用户,参数中只传输修改的用户信息。
4、区分用户和管理员时,不采用某些相同的参数来区别。如dede区分管理和用户都是采用ID值,容易产生问题。
5、对于查询类越权需要对每一次请求的参数做当前用户身份效验,避免水平越权。
6、采用成熟的权限管理框架,如spring security。
7、用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)优先采用在服务端关联session或加密后放在session中的
方式获取。
8、必须采用表单或其他参数提交用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)时,应尽可能采用难以猜
测的构造方式(增加字母及随机数字等)或采用复杂的加密算法加密后提交,应对客户端提交的凭证与会话的权限进行严格的
验证,如提交的产品号码是否为隶属于登录用户的产品号码。
9、对管理功能模块进行严格的权限验证,如非必要建议不对互联网开放或进行网络层的访问控制

2.6 短信邮件轰炸漏洞

常见漏洞点

在应用手机号/邮箱和验证码作为用户登录凭证时,一般涉及到的网站功能点主要包括:

  • 账号注册
  • 首次设置密码时用户身份校验
  • 账号登录(可选验证码方式)
  • 重置密码
  • 绑定手机/邮箱
  • 修改绑定手机/邮箱
  • 免费试用/活动领取/独特功能/反馈处

防护

  1. 服务端限制同一手机号单位时间内的发送次数和时间间隔,如超过限制则根据业务需求进行相应时
    间的禁止限制;
  2. 根据业务特点,设定手机验证码每天的限定发送量,达到限额后自动对相关负责人员进行报警通
    知;
  3. 对每一步的请求验证严格,要以上一步的结果为依据,同时应注意尽量避免攻击者可控;
  4. 绑定图形校验码,将手机验证码和图形校验码进行绑定,防止恶意攻击;
  5. 手机验证码生成6位或者以上的数字+字母组合的验证码,并且保证用后即失效
  6. 禁止用户自定义短信内容
  7. 限制来自一个IP地址的身份验证尝试的次数和频率
  8. 先知同一用户发送次数
  9. 对于每次登录尝试,生成一个新的不可预测的唯一标识符
    10.设定验证码过期时间
  10. 使用单独的验证码来确认每个操作

2.7 文件上传