全文内容来自陈晓光、胡兵、张作峰《web攻防之业务安全实战指南》,为本人阅读时摘取的学习笔记,特此说明。
一、业务环节存在的安全风险
业务使用者可见的业务
身份认证环节是否存在完整的验证机制、数据一致性校验机制、session和cookie校验机制;验证码是否可绕过、暴破和SQL注入等。
二、支持系统存在的安全风险
1.用户访问控制机制是否完善,水平和垂直越权
2.系统内加密存储机制是否完善,业务数据是否明文
3.业务接口是否可未授权访问/调用,调用是否可重放,是否可遍历,接口调用的参数是否可篡改
三、业务环节间存在的安全风险
1.系统流程是否乱序导致环节可绕过、回退或请求可无限重放
2.环节间串书的数据是否有一致性校验,是否可篡改
四、支持系统间存在的安全风险
1.系统间数据传输是否加密,参数是否可被篡改
2.输入参数过滤机制是否完善(SQL注入、xss、代码执行)
五、业务环节与支持系统间存在的安全风险
1.数据传输是否加密,加密方式是否完善
2.是否前端加密,简单的MD5加密
3.多线程并发请求机制是否完善
4.服务器端逻辑与数据库读写时序问题、竞争条件漏洞
5.输入参数过滤机制
一、暴力破解
修复: 增加验证码;失败次数限制;手机验证码或邮箱验证码
二、本地加密传输(是否使用SSL加密处理)
步骤:
① wireshark抓包,选择与公网连接的本地网卡并开启数据捕获功能
② 访问https网站,输入用户名密码提交
③ 在wireshark中查看数据包,分析数据包内容,是否加密
修复: 部署有效的SSL证书服务
三、session
步骤: 比对两次登录的sessionID值是否相同(burpsuite)
修复: 登录时先判断客户端是否提交浏览器留存的session认证会话属性标识,若是,应及时销毁认证会话并生成新的session认证会话属性标识
步骤: 已登录状态burpsuite抓包,发送到repeater模块,退出登录后go一下,查看是否解除session
修复: 注销或退出登录时,服务器应及时销毁session认证会话并清空浏览器session会话
步骤: 已登录状态burpsuite抓包,发送到repeater模块,30分钟误操作后go一下
修复: 对每个session会话设置生命周期,降低因会话认证时间过长而泄露信息的风险
四、cookie仿冒
步骤: 抓包修改cookieID,看是否可越权访问
修复: 对客户端标识的用户敏感信息数据,使用session会话认证的方式,避免仿冒
五、密文比对认证
步骤: 抓包查看密码加密方式,判断是否为前端加密,如MD5,可在intruder中payload processing中添加密码处理类型进行暴力破解
修复: 在服务器端进行密码加密及比对
六、登录失败信息
修复: 登录失败提示语句进行统一模糊描述
一、订单ID篡改
步骤: 注册一普通账号,修改遍历订单ID,获取其他用户订单详情(平行越权)
修复: 查看订单是通过session判断用户身份,做好平行权限控制
二、手机号码篡改
步骤: 抓包修改手机号码,之后进行越权判断
修复: 通过session机制判断身份,还需校验手机号与登录者身份是否一致
三、用户ID篡改
步骤: POST或GET请求中参数ID,修改ID,遍历用户
修复: 通过session机制判断身份,如果必须用userID参数,要判断与session是否一致
四、邮箱和用户篡改
步骤: 抓包修改发件人
修复: 通过session机制判断身份,如需传输邮件,要判断发件人与session一致
五、商品编号篡改
步骤: 提交订单时,抓包修改商品标号,导致商品与价格不符却交易成功
修复: 金额不在客户端传入,防止被篡改,如必要,则务必检查交易金额与商品价格或对支付金额做签名校验
六、竞争条件
定义: 操作系统中,多个进程试图同一时刻访问共享内存或读写共享数据,其竞争结果取决于线程执行的顺序(线程运行的时序);web中指服务端逻辑数据库读写存在时序问题时就存在竞争条件漏洞,通常利用多线程并发请求,在数据库中余额字段更新前多次兑换或购买商品,从中获利
步骤: 提交订单是抓包,设置多个线程放包,个别请求可成功
修复: 处理订单支付等关键操作是使用乐观锁或悲观锁保证事务的ACID(原子性、一致性、隔离性、持久性),并避免数据脏读(未提交数据时就读取另一事务)
一、未授权访问
步骤: 登录某应用访问需要通过认证的页面,切换浏览器后直接访问,查看能否成功访问
修复: 对未授权访问页面做session认证,并对用户访问的每一个URL做身份鉴别
二、越权
修复: 服务端校验身份唯一性,自己的身份只能增删改查自己的信息
一、SQL注入
二、xss
三、命令执行
步骤: 正常流程提交修改后,可回退上一流程再次提交(增加服务器负荷或被他人修改)
修复: 判断某一步骤是否是上一步骤发起,若不是则返回错误
一、验证码暴力破解: 对验证码进行暴力破解
修复: 设置验证码失效时间及失败尝试错误
二、验证码重复使用
步骤: 抓取携带验证码的数据包重复提交
修复: 验证码在一次认证成功后,服务端清空认证成功的session
三、 验证码客户端回显: 验证码在客户端生成(手机验证码/邮件验证码),F12查看
修复: 采用服务端生成验证码的机制,并设置验证码时效性、西机型、一次性
四、验证码绕过: 修改返回包信息
修复: 服务端增加验证码认证机制,对客户端提交的验证码进行二次校验
五、验证码自动识别
修复: 增加背景元素干扰;字符字体进行扭曲粘连;使用公式逻辑验证代替验证码;验证码与使用者相关,如联系人头像、购买过的商品等
一、商品支付金额修改
修复: 商品信息如金额、折扣等原始数据校验应来自于服务器端,不应接受客户端传来的值
二、商品订购数量篡改: 负数或零
修复: 产生异常的交易行为时直接限制、阻断
三、前端JS限制绕过: 限制数量
修复: 服务器校验;跨平台支付调用接口,要做好数据的完整性校验,确保一致性
四、请求重放: 一次购买多次收货
步骤: 抓取订购请求,观察订购相同商品的请求是否有不同的随机token或可变参数,若有则检查变化和失效情况,是否唯一有效,尝试重放看是否能够成功
修复: 每次订单token不应能重复提交,每次提交都对其对应的各项信息做强校验
五、业务上限: 查询到超出预期的信息,订购或兑换到超出预期范围的商品
修复: 每次提交都对其对应的各项信息做强校验