Web应用安全测试-业务逻辑缺陷

Web应用安全测试-业务逻辑缺陷

密码修改/重置流程跨越

漏洞描述:密码修改功能常采用分步骤方式来实现,攻击者在未知原始密码的情况下绕过某些检验步骤修改用户密码。

测试方法:

  1. 完成修改/重置密码的正常流程;
  2. 绕过检验原密码等步骤,直接访问输入新密码页面,输入新密码,修改/重置密码。

风险分析:有些密码修改/重置流程采用step=1、step=2类似的方式实现,如果应用校验不全面,攻击者可绕过前面的步骤,直接访问最后一步,输入新密码进行修改/重置。

风险等级:

高危:绕过原密码验证或绕过验证码

修复方案:一次性填写校验信息(原始密码、新密码等)后再提交修改/重置密码请求。

注意事项:暂无

负值反冲

漏洞描述:应用程序未校验订单数据的取值范围,交易存在负值反冲。

测试方法:提交订单时拦截请求,修改订单参数为负数,如商品单价、数量、总价等。

风险分析:通过篡改订单参数,使得订单金额为负值,在使用余额支付时余额反而增加。

风险等级:

高危:未对数据进行校验,导致业务数据被污染。

修复方案:

  1. 服务器端在生成交易订单时,商品的价格从数据库中取出,禁止使用客户端发送的商品价格。
  2. 服务器端对客户端提交的交易数据(如商品ID、商品数量、商品价格等)的取值范围进行校验,将商品ID和商品价格与数据库中的数据对比校验,商品数量为大于零的整型数。
  3. 服务器端在生成支付订单时,对支付订单中影响支付金额的所有因素(比如商品ID、商品数量、商品价格、订单编号等)进行签名,对客户端提交的支付订单进行校验。

注意事项:暂无

正负值对冲

漏洞描述:应用程序未校验订单数据的取值范围,交易存在正负值对冲。

测试方法:提交订单(包含多种商品)时拦截请求,修改部分商品的单价或数量,保证订单总金额为正数。

风险分析:由于应用会校验订单总金额的取值范围,所以在保证该条件满足的前提下,修改个别商品的数量,达到正负值对冲。

风险等级:

高危:未对数据进行校验,导致业务数据被污染。

修复方案:

  1. 服务器端在生成交易订单时,商品的价格从数据库中取出,禁止使用客户端发送的商品价格。
  2. 服务器端对客户端提交的交易数据(如商品ID、商品数量、商品价格等)的取值范围进行校验,将商品ID和商品价格与数据库中的数据对比校验,商品数量为大于零的整型数。
  3. 服务器端在生成支付订单时,对支付订单中影响支付金额的所有因素(比如商品ID、商品数量、商品价格、订单编号等)进行签名,对客户端提交的支付订单进行校验。

注意事项:暂无

业务流程跳跃

漏洞描述:业务逻辑流程分步骤进行且能越过中间校验步骤直接进行后续操作,导致中间校验等步骤失效。

测试方法:

  1. 首先完成正常的业务逻辑步骤,获取每一个步骤的请求;
  2. 绕过中间步骤,直接访问最后一个或几个验证请求,看是否可绕过。

风险分析:攻击者可利用该漏洞绕过业务流程检测,进行非法修改他人密码等危险操作。

风险等级:

高危:绕过前面的校验步骤,直接跳转至后面的校验步骤。

修复方案:建议在不影响业务的前提下,在Session中添加对每一步流程页面的校验标志位,在新步骤页面浏览过程中,仅能够顺序执行页面校验,不可进行跳步操作,例如:页面二完成后,应更新Flag=3,则仅能够打开页面三。

注意事项:暂无

通配符注入

漏洞描述:允许使用通配符构造语句查询数据库,导致拒绝服务攻击问题。

测试方法:模糊查询时输入第一个字符'%'或'_',sql会遍历全表,导致应用访问缓慢。

风险分析:SQL中通配符的使用如下:

%包含零个或多个字符的任意字符串。

_任何单个字符。

[]指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。

[^]不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符。

在模糊查询LIKE中,对于输入数据中的通配符必须转义,否则会造成客户想查询包含这些特殊字符的数据时,这些特殊字符却被解析为通配符,数据库响应缓慢,导致拒绝服务攻击。

风险等级:

中危:通配符注入引发数据库响应缓慢

修复方案:有两种将通配符转义为普通字符的方法:

1)   使用ESCAPE关键字定义转义符(通用)

在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:

       

 WHERE ColumnA LIKE '%5/%%' ESCAPE '/'

2)   在方括号 ([ ]) 中只包含通配符本身,或要搜索破折号 (-) 而不是用它指定搜索范围,请将破折号指定为方括号内的第一个字符。例如:

符号

含义

LIKE '5[%]'

5%

LIKE '5%'

5 后跟 0 个或多个字符的字符串

LIKE '[_]n'

_n

LIKE '[ [ ]'

[

LIKE ']'

]   (右括号不需要转义)

所以,对输入参数的关键字过滤后,还需要做下面转换确保LIKE的正确执行

private static string ConvertSqlForLike(string sql)

{

sql = sql.Replace("[",

"[[]");

// 这句话一定要在下面两个语句之前,否则作为转义符的方括号会被当作数据被再次处理

sql = sql.Replace("_",

"[_]");

sql = sql.Replace("%",

"[%]");

returnsql;

}

注意事项:暂无

相关推荐

  1. 业务逻辑业务安全

    2024-06-18 04:02:02       16 阅读
  2. OWASP Web 安全测试指南-Web 应用程序安全测试

    2024-06-18 04:02:02       39 阅读
  3. openresty安装并使用lua进行业务逻辑处理

    2024-06-18 04:02:02       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 04:02:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 04:02:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 04:02:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 04:02:02       20 阅读

热门阅读

  1. Aeron:Online Resources

    2024-06-18 04:02:02       8 阅读
  2. 安卓gradel下载失败解决方案

    2024-06-18 04:02:02       8 阅读
  3. 实战

    实战

    2024-06-18 04:02:02      9 阅读
  4. 力扣719.找出第K小的数对距离

    2024-06-18 04:02:02       10 阅读
  5. 10月,2024北京养老展,北京老年生活用品展览会

    2024-06-18 04:02:02       9 阅读
  6. python之面向对象编程

    2024-06-18 04:02:02       9 阅读
  7. Python2.7中os.path模块常用函数记录

    2024-06-18 04:02:02       7 阅读