WEB漏洞-逻辑越权之登录脆弱及支付篡改

QQ截图20220211093334.jpg

http数据密文传输

  • 在网页表单发送到服务器的之前,有些网站会对特定信息进行加密发送,比如登录框的密码

QQ截图20220214142516.jpg

采用抓包工具爆破密码

  • 如果密码在传输过程中加密,那么在进行字典爆破的时候也需要加密传输

QQ截图20220214142932.jpg

  • 载入字典

QQ截图20220214142945.jpg

  • 贫经验,分析密码为MD5加密

QQ截图20220214143106.jpg

  • 返回302,说明有跳转,爆破成功

QQ截图20220214143118.jpg

Cookie 脆弱点验证修改测试

尝试登录

QQ截图20220214145952.jpg

输入正确密码后跳转页面,参数为index

QQ截图20220214150019.jpg

抓包分析(这里post提交的数据没有加密)

QQ截图20220214150039.jpg

源代码分析

这里index传参r,判断传递的参数file是为空还是为index,如果是index,就执行file文件下的传递参数的文件。这里只有等于index路径才能跳转

QQ截图20220214150156.jpg

如果r=index,在跳转管理员执行/files/index.php文件,文件开头包含了验证,防止用户直接登录URL路径进入管理员后台

QQ截图20220214150221.jpg

查看登录验证,判断用户的cookie,如果为空,就跳转到登录界面。(漏洞产生:只要cookie有数据,就可以访问)

QQ截图20220214150314.jpg

cookie修改user不为空(要访http://192.168.102.143:8456/admin/?r=index)

QQ截图20220214150509.jpg

发现登录成功,而且用户这里没有显示admin,而是为空

QQ截图20220214150529.jpg

实战条件下,如何去分析漏洞

  1. 没有源码,去找cookie脆弱点十分困难的
  2. 如果有特殊值,如user=admin,可以尝试修改,看是不是可以登录到其它用户,如user=text
  3. 可以根据这个漏洞,去搜索采用熊海CMS的网站是否存在cookie脆弱的漏洞

QQ截图20220214151209.jpg

数据篡改安全问题

  1. 修改支付价格
  2. 修改支付状态
  3. 修改购买数量
  4. 修改附属值
  5. 修改支付接口
  6. 多重替换支付
  7. 重复支付
  8. 最小额支付
  9. 值为最大值支付问题
  10. 越权支付
  11. 无限制适用
  12. 修改优惠价格
  • 之所以列出这些漏洞,其实不是存在一个,而是网站的设计者很难从这么多方面去考虑支付问题,从而可以发现漏洞
  • 商品购买流程:选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付
  • 常见篡改参数:商品编号 ID,购买价格,购买数量,支付方式,订单号,支付状态等
  • 常见修改方法:替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等

购买产品,并且抓包分析(数量问题造成金额减少)

QQ截图20220214154747.jpg

抓包分析sku_id=2(多半为商品的编号id),num=2为要购买商品的数量

QQ截图20220214154908.jpg

将数量改为-1

QQ截图20220214154942.jpg

发现支付价格变为了0元

QQ截图20220214154953.jpg

更改订单编号(以b的价格来买a),假如购买商品a一件,在提交订单的时候抓取数据包

QQ截图20220214155319.jpg

抓取到数据包(获取到了订单编号)

QQ截图20220214155812.jpg

提交后页面回显

QQ截图20220214155829.jpg

购买另外一件产品

QQ截图20220214155845.jpg

抓包,修改为之前商品的订单编号

QQ截图20220214155903.jpg

发现原来998元变成了9999999,这里可以反向操作,将贵的订单变成便宜的订单,漏洞的产生,要看它有没有订单编号的检测

QQ截图20220214155938.jpg

修改价格/商品

QQ截图20220214160011.jpg

购买2个抓取数据包

  • qty数量,price价格
  • /index.php?m=Member&a=gobuy&iscart=0&id=70&name=%E5%A4%A7%E7%B1%B3%E6%89%8B%E6%9C%BACMS&qty=2&price=5400>ype=%E7%81%B0%E8%89%B2&pic=/Public/Uploads/thumb/thumb_1393218295.jpg

QQ截图20220214160106.jpg

修改价格为1元

QQ截图20220214160123.jpg

发现订单总价改变

QQ截图20220214160141.jpg

购买另外一件商品

QQ截图20220214160158.jpg

抓取数据包

  • /index.php?m=Member&a=gobuy&iscart=0&id=127&name=%E5%A4%A7%E7%B1%B3%E6%B5%8B%E8%AF%95%E4%BA%A7%E5%93%81&qty=1&price=6000>ype=%E7%81%B0%E8%89%B2&pic=/Public/Uploads/thumb/thumb_1393218295.jpg

QQ截图20220214160225.jpg

对比分析数据包变量含义

  • pic商品图像
  • gtype商品类型(在同一个分类里面,一样)
  • 不同之处(idname

将6000元的商品的idname改为5400产品的

QQ截图20220214160642.jpg

这里变成了以6000元购买5400的产品(反过来可以以低价商品购买高价的商品(将id和name改为高价的商品的))

QQ截图20220214160702.jpg

替换支付(修改支付接口)

QQ截图20220214160728.jpg

抓包分析,提交的路径传递参数s为支付的借接口(这里提交了接口和订单编号)

QQ截图20220214160813.jpg

  • index.php?s=/wap/pay/wchatQrcodePay
  • index.php?s=/wap/pay/alipay
  • 总结:$pay_name=$_GET['s'],存在传递参数的才能修改支付接口,如果是固定的话也不行。在这里将参数s变为其它接口就可以修改支付端
  • 如链接到一个外部网站:index.php?s=http://www.xiaodi8.com/alipay调用其他的支付接口(支付的钱支付到别人的地方)

支付状态

  • 与支付接口类似,确认支付成功是返回什么(1),失败返回什么(2),根据返回值伪造已经支付成功

漏洞产生的原理

  • 没有去检测数量和价格的唯一性,如6000价格是存储到数据库里,但是这里的价格是直接以post提交的(可以修改),这里应该在接受传参的时候,和数据库的价格比对进行过滤,或者直接用数据库的值(具体操作我也不清楚)
  • 安全的做法:以数据库的数据值为准
  • 数据包的唯一性判断(token):第一个数据包购买成功,如果没有检测数据包的唯一性,那么从这个成功的数据包还能再次购买成功
  • 漏洞的产生方面:业务逻辑层面