5.1 订单ID篡改测试
5.1.1 测试原理和方法
在有电子交易业务的网站中,用户登录后可以下订单购买相应产品,购买成功后,用户可以查看订单的详情。当开发人员没有考虑登录后用户间权限隔离的问题时,就会导致平行权限绕过漏洞。攻击者只需注册一个普通账户,就可以通过篡改、遍历订单id,获得其他用户订单详情,其中多数会包括用户的姓名、身份证、地址、电话号码等敏感隐私信息。黑色产业链中的攻击者通常会利用此漏洞得到这些隐私信息。
5.1.2 测试过程
靶场:5_1.zip
URL:http://192.168.0.101/5_1/login.html
2.burp抓包修改保单号policyNo=P000002,即可越权查看用户lisi保单内容
3.Intruder模块标记policyNo变量000001部分,从000001遍历到000100
4.在返回的数据包中,包含全部在界面中被隐藏的身份证号等敏感信息,获取20位用户敏感数据
5.1.3 修复建议
后台查看订单时要通过Session机制判断用户身份,做好平行权限控制,服务端需要校验相应订单是否和登录者的身份一致,如发现不一致则拒绝请求,防止平行权限绕过漏洞泄露用户敏感个人隐私信息。
5.2 手机号码篡改测试
5.2.1 测试原理和方法
手机号通常可以代表一个用户身份。当请求中发现有手机号参数时,我们可以试着修改它,测试是否存在越权漏洞。系统登录功能一般先判断用户名和密码是否正确,然后通过Session机制赋予用户令牌。但是在登录后的某些功能点,开发者很容易忽略登录用户的权限问题。所以当我们用A的手机号登录后操作某些功能时,抓包或通过其他方式尝试篡改手机号,即可对这类问题进行测试。
5.2.2 测试过程
靶场:5_2.zip
URL:http://192.168.0.107/5_2/login.php
1、手机号:15333333333,密码:123456,登录,目前状态:正常状态
2、手机号:18888888888,密码:123456,登录,目前状态:正常状态
3、15333333333登录,burp抓包,点击挂失按钮,修改username参数为18888888888
4、浏览器显示“尊敬的 18888888888 用户,您申请挂失将立即生效,请确认办理。”
5、在登录页面输入用户名:18888888888,密码:123456,发现18888888888状态变成“挂失”
5.2.3 修复建议
后台请求要通过Session机制判断用户身份,如果需要客户端传输手机号码,则服务端需要校验手机号是否和登录者的身份一致。如发现不一致则拒绝请求,防止平行权限绕过。另外,对于手机App程序,不要过于相信从手机中直接读取的手机号码,还是要做常规的身份认证,规范登录流程,防止未授权登录。
5.3 用户ID篡改测试
5.3.1 测试原理和方法
从开发的角度,用户登录后查看个人信息时,需要通过sessionid判定用户身份,然后显示相应用户的个人信息。但有时我们发现在GET或POST请求中有userid这类参数传输,并且后台通过此参数显示对应用户隐私信息,这就导致了攻击者可以通过篡改用户ID越权访问其他用户隐私信息。黑色产业链中的攻击者也喜欢利用此类漏洞非法收集个人信息。
5.3.2 测试过程
靶场:5_3.zip
URL:http://192.168.0.108/5_3/index.php?deliverId=1
1.burp抓包,将deliverId参数值“1”修改为“2”
2.发包后返回了deliverId=2的收货人信息
5.3.3 修复建议
后台功能请求要通过Session机制判断用户身份,不要相信客户端传来的用户ID。如果确实需要客户端传输userid,则服务端需要校验userid是否和登录者的Session身份一致,如发现不一致则拒绝请求,防止被攻击者篡改,未授权访问他人账号内容。
5.4 邮箱和用户篡改测试
5.4.1 测试原理和方法
在发送邮件或站内消息时,篡改其中的发件人参数,导致攻击者可以伪造发信人进行钓鱼攻击等操作,这也是一种平行权限绕过漏洞。用户登录成功后拥有发信权限,开发者就信任了客户端传来的发件人参数,导致业务安全问题出现。
5.4.2 测试过程
靶场:5_4.zip
靶场下载链接:5_4.zip
URL:http://192.168.2.14/5_4/login.php
1.登陆页面,用户名:user0,密码:M8weHI3B
2.下拉框选择user6发送消息
3.burp抓包修改发件人参数sender
4.登录收件人user6账号,用户名:user6,密码:P7uoVb1N,发现发件人被篡改成功
5.4.3 修复建议
用户登录后写信、发送消息时要通过Session机制判断用户身份。如果需要客户端传输邮箱、发件人,服务端需要校验邮箱、发件人是否和登录者的身份一致,如发现不一致则拒绝请求,防止被攻击者篡改用于钓鱼攻击。
5.5 商品编号篡改测试
5.5.1 测试原理和方法
在交易支付类型的业务中,最常见的业务漏洞就是修改商品金额。例如在生成商品订单、跳转支付页面时,修改HTTP请求中的金额参数,可以实现1分买充值卡、1元买特斯拉等操作。此类攻击很难从流量中匹配识别出来,通常只有在事后财务结算时发现大额账务问题,才会被发现。此时,攻击者可能已经通过该漏洞获得了大量利益。如果金额较小或财务审核不严,攻击者则可能细水长流,从中获得持续的利益。事后发现此类漏洞,就大大增加了追责的难度和成本。此类业务漏洞的利用方法,攻击者除了直接篡改商品金额,还可以篡改商品编号,同样会造成实际支付金额与商品不对应,但又交易成功的情况。攻击者可以利用此业务漏洞以低价购买高价的物品。
5.5.2 测试过程
靶场:5_5.zip
靶场下载链接:5_5.zip
URL:http://192.168.2.14/5_5/index.php
1.兑换礼品,当前金币数量:10
2.礼品1-立即兑换,抓包修改为30金币礼品的礼品号,goods_id=3
3.兑换成功并在订单信息显示,当前金币数量:-20
5.5.3 修复建议
建议商品金额不要在客户端传入,防止被篡改。如果确实需要在客户端传输金额,则服务端在收到请求后必须检查商品价格和交易金额是否一致,或对支付金额做签名校验,若不一致则阻止该交易。
5.6 竞争条件测试
5.6.1 测试原理和方法
竞争条件通常是在操作系统编程时会遇到的安全问题:当两个或多个进程试图在同一时刻访问共享内存,或读写某些共享数据时,最后的竞争结果取决于线程执行的顺序(线程运行时序),称为竞争条件(Race Conditions)。
5.6.2 测试过程
靶场:upload-labs
靶场下载链接:upload-labs
URL:http://192.168.2.14/upload-labs/Pass-18/index.php
1.首先上传一张正常图片获取文件路径
URL:http://192.168.2.14/upload-labs/upload/4820231007140838.jpg
2.上传phpinfo文件burp拦截数据包
3.请求包发送到Intruder模块,payload type设置为null,payload options设置为continue indefinitely,无限发送请求包,并在options中将threads线程修改为30
4.在另一个主机浏览器中访问index.php,burp Intruder模块,payload type设置为null,payload options设置为continue indefinitely,成功访问到phpinfo页面
URL:http:///192.168.2.14/upload-labs/upload/index.php
5.6.3 修复建议
在处理订单、支付等关键业务时,使用悲观锁或乐观锁保证事务的ACID特性(原子性、一致性、隔离性、持久性),并避免数据脏读(一个事务读取了另一个事务未提交的数据),解决竞争条件和并发操作可能带来的相关业务问题。