前言:
在一次众测中,发现了企业一处边缘资产,看了一下网站,主要功能是线上的销售交易,感觉像是比较老的站点了,账号注册比较友好,直接注册俩账号开始干。
正文:
1.测试了网站的注册,购买商品等功能后未发现有啥问题,但发现"我的订单"功能处对未付款的订单也进行了记录,产生了订单号,对订单进行删除操作抓包发现,网站会话使用cookie机制且body中只有一个将要被删除的订单号字段。

2.退出A账号,使用B账号登录网站,产生一个未付款的订单,接着对账单进行删除,抓包,将订单号修改为A账号订单号82790,提示删除成功。为了验证B账号是否真的从数据库将A订单删除,需要登录A账号进行验证,使用另一个浏览器登录A账号(测逻辑、越权、未授权这类漏洞通常注册两个网站账号,分别两个浏览器登录这样能够较快的确定漏洞)

3.登录A账号查看,82790订单确实被B账号越权删除掉了,但毕竟是未支付的订单,危害有限,我看着"已支付"列表还是空空如也,一狠心,向A账号网站余额怒冲0.01元订单号为82774(商品订单最便宜的都是98,我不是怕厂商不给我退,我是余额不足,但网站有充值的功能,我就冲了1毛钱,这里的重点是:在挖逻辑漏洞需要留意网站的一些功能,这样测能达到经济利益最大化,符合社会主义价值观)

4.使用B账户再次进行删除订单操作,发现已付款、未付款删除接口都是一个,可以将订单号直接修改为A账号已付款82774,删除成功,不难发现网站的定单号生成是由有规律的,可以对订单号进行遍历,对网站任意订单进行删除。

5.正当我开心的写报告准备提交漏洞时,无意间发现了一处网站会话逻辑漏洞,当我用B账户去删除A账户的订单成功后,A账户的会话会被B账户覆盖掉A可以对B进行任意操作(要是反过来多好,第一次越权修改"未付款"订单就出现了,我以为是我误操作,第二次才确认有问题),因为网站没有控制单用户登录(单用户简单说就是网站一个账户只能存在一个会话信息,后登陆的人会踢掉前面登陆的人),导致B修改A账户的信息时,服务器误以为是B账户,并将B记账户的cookie信息返回给A将Acookie信息覆盖掉了,对没看错,攻击者的账号沦陷了。
结尾:
目前厂商已经修复该漏洞,并控制了单用户登录,其实逻辑类漏洞不需要有多少技术含量,最多的是细心和耐心,分享一次挖洞的心路历程,废话有点多,各位表哥多担待,如有问题欢迎留言交流学习。
本文迁移自知识星球“火线Zone”