WEB攻防之业务安全测试--学习

一、背景

        业务安全测试通常是指针对业务运行的软、硬件平台(操作系统、数据库、中间件 等),业务系统自身(软件或设备)和业务所提供的服务进行安全测试,保护业务系统免 受安全威胁,以验证业务系统符合安全需求定义和安全标准的过程。本书所涉及的业务安 全主要是系统自身和所提供服务的安全,即针对业务系统中的业务流程、业务逻辑设计、 业务权限和业务数据及相关支撑系统及后台管理平台与业务相关的支撑功能、管理流程等 方面的安全测试,深度挖掘业务安全漏洞,并提供相关整改修复建议,从关注具体业务功 能的正确呈现、安全运营角度出发,增强用户业务系统的安全性。 传统安全测试主要依靠基于漏洞类型的自动化扫描检测,辅以人工测试,来发现如 SQL 注入、XSS、任意文件上传、远程命令执行等传统类型的漏洞,这种方式往往容易忽 略业务系统的业务流程设计缺陷、业务逻辑、业务数据流转、业务权限、业务数据等方面 的安全风险。过度依赖基于漏洞的传统安全测试方式脱离了业务系统本身,不与业务数据 相关联,很难发现业务层面的漏洞,企业很可能因为简单的业务逻辑漏洞而蒙受巨大损 失。

二、登录模块测试

2.1、登录认证模块测试

2.1.1 测试原理及方法(暴力测试)

        暴力测试是指针对应用系统用户登录账户与密码进行的穷举测试,针对账号或密码进行逐一比较,直至找出正确的账户与密码。

一般分为已下三种情况:

  • 已知账户,加载密码字典进行穷举(可用burpsuite的intruder模块的狙击手模式)
  • 未知账户,加载账户字典,并结合密码字典进行穷举测试。(可用burpsuite的intruder模块的攻击锤模式)
  • 未知账户和密码的情况下,利用账户密码字典进行穷举测试。(可用burpsuite的intruder模块的集束炸弹模式)
2.1.2 测试过程

使用burpsuite进行相关的登录认证问题测试,选择不通payload测试模式。

2.1.3 修复建议

(1)增加验证码,登录失败一次,验证码变换一次。

(2)配置登录失败次数限制策略,如在同一用户尝试登录的情况下,5 分钟内连续 登录失败超过 6 次,则禁止此用户在 3 小时内登录系统。

(3)在条件允许的情况下,增加手机接收短信验证码或邮箱接收邮件验证码,实现 双因素认证的防暴力破解机制。

2.2、本地加密传输测试

2.2.1 测试原理及方法

        本地加密传输加密测试是针对客户端与服务器的数据传输,查看数据是否采用加密方式加密,传统加密方式就是ssl进行加密处理,特殊敏感信息进行非明文传输,使用加密传输的方式。

2.2.2 测试过程

可使用bp进行抓包测试,也可以使用wireshark进行抓包

2.2.2 修复建议

在架设web应用的服务器上部署有效的ssl证书服务

敏感信息从客户端传输到服务端时进行加密处理禁止明文传输(根据公司内部数据分类确定敏感数据等级来选择相应的数据传输方式)

2.3、SESSION测试

2.3.1 session会话固定测试
2.3.1.1 测试原理和方法

session是应用系统针对浏览器客户端身份认证的属性标识,在用户退出应用系统时应将客户端session认证属性标识清空;如果未能清空客户端session标识,在下次登录系统时,系统会重复利用该session标识进行认证会话。攻击者可利用该漏洞生成固定session会话,并诱骗用户利用攻击者生成的固定会话进行系统登录,从而导致用户会话认证被窃取。

2.3.1.2 测试过程

在注销退出系统时,对当前浏览器授权sessionid值进行记录。再次登录系统,将本次授权的sessionid值与上次进行对比校验。判断服务器是否使用与上次相同的sessionid值进行授权认证,若使用相同sessionid值则存在固定会话风险

可使用bp进行相关sessionid的求证。

2.3.1.3 修复建议

在客户端登录系统时,应首先判断客户端是否提交浏览器的留存 Session 认证会话属 性标识,客户端提交此信息至服务器时,应及时销毁浏览器留存的 Session 认证会话,并 要求客户端浏览器重新生成 Session 认证会话属性标识。

2.3.2 session 会话注销测试
2.3.2.1 测试原理及方法

Session 是应用系统对浏览器客户端身份认证的属性标识,在用户注销或退出应用系 统时,系统应将客户端 Session 认证属性标识清空。如果未能清空 Session 认证会话,该认 证会话将持续有效,此时攻击者获得该 Session 认证会话会导致用户权限被盗取。

2.3.2.2 测试过程

该项测试主要在用户注销退出系统授权后,判断授权认证sessionid值是否依然有效。若授权认证sessionid依然有效则存在风险

2.3.2.3 修复建议

在用户注销或退出应用时,服务器应及时销毁session认证会话并清空客户端浏览器session属性标识。

2.3.3 session 会话超时时间测试
2.3.3.1 测试原理和方法

在用户成功登录系统获得 Session 认证会话后,该 Session 认证会话应具有生命周期, 即用户在成功登录系统后,如果在固定时间内(例如 10 分钟)该用户与服务器无任何交互 操作,应销毁该用户 Session 认证会话信息,要求用户重新登录系统认证。

2.3.3.2 测试过程

对系统会话授权认证时长进行测试,并根据系统承载业务需求分享判断当前系统会话授权认证时间是否过长。

2.3.3.3 修复建议

对每个生成的session认证会话配置生命周期(常规业务系统建议30分钟内),从而降低因用户会话认证时间过长从而导致的信息泄露风险。

2.4、cookie仿冒测试

2.4.1 测试原理及方法

服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在cookie种,并发给客户端进行存储;攻击者通过尝试修改cookie的身份标识,从而仿冒其他用户身份的目的,并拥有相关用户的所有权限。

2.4.2 测试过程

对系统会话授权认证cookie中会话身份认证标识进行篡改测试,通过篡改身份认证标识来判断能否改变用户身份会话。

工具使用burpsuite中放到重放模块进行cookie篡改尝试。

2.4.3 修复建议

建议对客户端标识的用户敏感信息数据,使用session会话认证方式,避免被他人仿冒身份。

2.5、密文比对认证测试

2.5.1 测试原理和方法

系统登录时,密码加密流程一般是将账户和密码发至服务器,服务器将密码进行hash加密和数据库里存储的加密值进行对比,如果加密值相同,则判定用户提交密码正确。此流程会泄露密码加密方式,导致出现安全隐患(如MD5加密方式) 

2.5.2 测试过程

对系统敏感数据加密流程测试,判断加密过程或方法是否为客户端加密方式测试如图:

将密码进行密文转换(加密在客户端完成时,常见于使用MD5加密)

2.5.3 修复建议

将密码加密过程及密文对比放置在后台执行;不要使用MD5进行加密方式。

2.6、登录失败信息测试

2.6.1 测试原理和方法

在用户登录系统失败时,系统会在显示页面显示用户登录失败信息,禁止出现用户名不存在、密码错误等明确信息;最好提示是“密码、口令错误”等间接提示信息来防止攻击者针对性的暴力破解口令的测试。

三、业务办理模块测试

3.1、订单ID篡改测试

3.1.1 测试原理及方法

在有电子交易的网站中,用户登录后可以下单购买相应产品,购买成功后可查看订单详情。当开发人员没有考虑登录后用户间的权限隔离问题,就会导致平行权限绕过漏洞。攻击者只需注册一个普通用户通过遍历订单id获取其他用户订单详情(身份证、地址、电话等)隐私信息;泄露后可助产黑色产业链的风气。

3.1.2 测试过程

登录系统,获取订单信息,获取多个观察规律,修改一下进行重放,也可使用bp进行攻击。

3.1.3 修复建议

后台查看订单时通过session机制判断用户身份,做好平行权限控制,服务端需要校验相应订单是否和登录者身份一致,不一致就拒绝请求,防止平行越权导致的用户信息泄露。

3.2、手机号篡改测试

3.2.1 测试原理及方法

当请求中存在手机号参数时我们可以尝试修改,来测试是否存在越权漏洞;系统登录功能一般是先判断用户名和密码是否正确,然后通过session机制赋予用户令牌;但在登录的某些功能点,开发忽略登录用户的权限问题;所以当我们用用户A的手机号登录后操作某些功能时,抓包篡改手机号即可完成这类问题的测试。

3.2.2 测试过程

攻击者登录后,在操作某些功能时,抓包或通过其他方式尝试篡改手机号进行 测试;

3.2.3 修复建议

后台请求要通过session机制判断用户身份,如果需要客户端传入手机号码,则服务端需要校验手机号是否和登录者一致。如发现不一致则拒绝请求,防止平行越权的产生;另对于手机app程序,不要过于相信从手机中直接读取的手机号码,还是要做常规的身份认证,规范登录流程,防止未授权登录。

3.3、用户ID篡改测试

3.3.1 测试原理及方法

从开发角度,用户登录后查看个人信息时,通过sessionid判断用户身份,然后显示用户个人信息;但有时我们发现在GET或POST请求中有userid这类参数传输,并且在后台通过此参数显示对应用户的隐私信息,这就可以导致攻击者通过篡改用户id越权访问其他用户信息;这就导致用户信息泄露助涨黑色产业。

3.3.2 测试过程

攻击者注册一个普通用户,然后遍历ID,获得其他用户信息。

常见场景:商城、快递,订单系统。

3.3.3 修复建议

后台请求通过session机制判断用户身份,不要相信客户端传来的用户id。如确实需要userid则需添加校验当前id和登录者id是否一致,不一致则拒绝请求。

3.4、邮箱和用户篡改测试

3.4.1 测试原理及方法

在发送邮件或站内消息时,篡改其中发件人的参数,导致攻击者伪造发信人进行钓鱼攻击等操作,这也是一种平行权限绕过漏洞;用户登录成功后拥有发信权限,开发者就信任了客户端传来的发件人参数。导致业务安全问题出现。

3.4.2 测试过程

攻击者篡改发信请求,可伪造发信人,发送钓鱼信件。

常用于钓鱼:收集该公司员工邮件;在编写邮件内容进行发送时修改发件人信息为,该员工邮件即可成功

修改发件人参数inputForm并发送

3.4.3 修复建议

用户登录后写信、发送消息要通过session机制判断用户身份;如需要客户端传输邮箱、发件人,服务端需要校验邮箱、发件人和登录者身份一致,如发现不一致,则拒绝请求,防止被钓鱼攻击。

3.5、商品编号篡改测试

3.5.1 测试原理及方法

在交易支付类型业务中,最常见的业务漏洞就是修改商品金额;

常见场景:生成订单跳转到支付时修改http请求金额参数;除了直接篡改商品金额还可以篡改商品编号。

危害:可实现1分买充值卡;此类攻击很难从流量中匹配出来,通常只有事后财务结算时发现大额财务问题;此时攻击者已通过该漏洞获取大量利益。

3.5.2 测试过程

攻击者提交订单时,抓包篡改商品编号,导致商品与价格不对应但交易成功。

3.5.3 修复建议

建议商品金额不要再客户端传入,方式篡改;如需要再客户端传输金额,则服务端再收到请求后必须检查商品价格和交易金额是否一致,或对支付金额做签名校验,若不一致则阻止交易。

3.6、竞争条件测试

3.6.1 测试原理及方法

竞争条件通常是在操作系统编程时会遇到的安全问题;当两个或多个进程试图再同一时刻访问共享内存,或读取某些共享数据时,最后的竞争结果取决于线程执行顺序(线程运行时序)称为竞争条件;

web中在服务端逻辑与数据库读写存在时许问题时,就有可能存在条件竞争漏洞;

攻击者通常利用多线程并发请求,在数据库中的余额字段更新之前,多次兑换积分或购买商品,从中获取利益。

如已下代码片段:

已下为chatgpt修改过的代码

// 假设已连接到数据库,$link 是 MySQLi 连接资源 或 PDO 对象
$id = (int) $_POST['id']; // 需要确保ID是从POST中获取且已转换为整数
$amount = (float) $_POST['amount']; // 同样需要确保金额是从POST中获取且已转换为浮点数

// 使用预处理语句以防止SQL注入
$stmt = $link->prepare("SELECT credit FROM Users WHERE id=?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();

$row = $result->fetch_assoc();

if ($row && $row['credit'] >= $amount) {
    $new_credit = $row['credit'] - $amount;

    // 准备并执行更新语句
    $stmtUpdate = $link->prepare("UPDATE Users SET credit=? WHERE id=?");
    $stmtUpdate->bind_param("di", $new_credit, $id);

    if ($stmtUpdate->execute()) {
        // 更新成功,可以在此处添加更多逻辑
    } else {
        // 更新失败,处理错误
    }
} else {
    // 查询无结果或信用不足时,处理相应逻辑
}

// 不忘记关闭语句
$stmt->close();
$stmtUpdate->close();
3.6.2 测试过程

攻击者在提交订单时抓包,然后设置很多线程重放此包,在众多请求中,个别请求有可能争取绕过金额、次数的判断,交易成功,攻击者从中获利。

3.6.3 修复建议

在处理订单、支付等关键业务时,使用悲观锁或乐观锁保证事务的ACID特性(原子性,一致性,隔离性,持久性),并避免数据脏读(一个事务读取了另一个事务未提交的数据,解决竞争条件和并发操作可能带来的相关业务问题)

四、业务授权访问模块

4.1、非授权访问测试

4.1.1 测试原理及方法

非授权访问是指用户在没有通过认证授权的情况下;能直接访问那些需要通过认证才能访问的用户页面信息。可以尝试登录后台之后,将相关的页面连接复制到其他浏览器或者电脑上访问,观察是否能正常访问。

4.1.2 测试过程

攻击者登录某应用访问需要通过认证的页面,切换浏览器再次访问此页面,成功访问则存在未授权访问漏洞。

4.1.3 修复建议

未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户直接访问。从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露,所以对未授权访问页面做session认证,并对用户访问的每一个URL做身份鉴别,正确的检验用户ID及Token。

4.2、越权测试

4.2.1测试原理及方法

越权一般为水平越权和垂直越权,水平越权导致相同权限用户可以相互访问;垂直越权是指地权限用户可以访问高权限用户内容。

水平越权的测试方法主要是看能否通过A用户操作影响B用户。

垂直越权测试方法的基本思路是地权限用户越权高权限用户的功能,比如普通用户可以使用管理员功能。

4.2.2 测试方法

水平测试:正常更改或者查看A账户信息,抓包或更改账户身份ID,成功查看同权限其他账户业务信息。

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值