– – 在支付当中,购买商品一般分为三步骤:订购、确认信息、付款。
– – 那么这个修改价格具体是修改哪一步时的价格呢?
– – 存在可修改订单状态的接口,比如确认收货接口,确认收货以后订单状态会变成“已完成”。
– – 例子:有如下接口/setorderstatus?orderid=1093&orderstatus=3,orderstatus=1待支付,orderstatus=2已支付, orderstatus=3已完成。利用上述接口,可直接将待支付的订单状态改成已支付。
– – 例如:我购买两件价格一样的商品,购买数量都一样,其中一件数量不变,另一件数量改成负数,正样子合并付款时候就会互相抵消,价格就变成0。
当产品的价格无法修改的时候,我就尝试修改附属值的价值为负值来抵消总费用。
– – 比如一些网站支持很多种支付,比如自家的支付工具,第三方的支付工具,然后每个支付接口值不一样,如果逻辑设计不当,当我随便选择一个点击支付时进行抓包,然后修改其支付接口为一个不存在的接口,如果没做好不存在接口相关处理,那么此时就会支付成功。
– – 首先去产生两个订单,这两个订单商品是不一样的,其价格不一样,如果服务端没有做好这相关的验证,那么在支付的过程当中抓包,修改其订单值为另一个订单值,最后支付,这时就可以用订单一的支付价格买到订单二的商品。
– – 比如订单支付会返现,或者返积分。重复调用支付成功回调的接口,可实现多次返现,或多次返积分。
– – 这个问题如果你在充值时进行修改其支付金额为负数或者0.01等是会显示支付失败的,但是如果你修改其金额为1.00,那么支付就会成功。
– – 这里最低就是1元,1元对应100积分,而你如果修改为0.01,那么对应的积分就是空值了,所以会显示失败,而当你修改为1元,那么1元这个支付接口是存在的,其后面积分数为其它金额的积分数,然后跳转过去支付就会以1元购买到比它多得多的积分数量,也可以是任意积分值。
– – 一些网站比如你购买商品,这里有2个思路修改值,1是直接修改支付金额值为最大值,比如999999999,或者修改附属值,如优惠卷,积分等为999999999,如果这里逻辑设计有问题,那么其支付金额会变为0。
– – 或者利用整数溢出,将购买量改成99999999999999999999999999999999,这样支付金额可能会变成0。
– – 现在可能很少存在这类问题,在支付当中会出现当前用户的ID,比如:username=XXXXX,如果没有加以验证,其支付也是一次性支付没有要求输入密码什么的机制,那么就可以修改这个用户ID为其它用户ID,达到用其他用户的账号进行支付你的商品。
– – 一些网站的一些商品,比如云系列产品支持试用,试用时期一般为7天或者30天,一个账户只能试用一次,试用期间不能再试用,但如果这个试用接口会做好分配那么很容易导致问题的发生。
– – 比如:在支付的时候它URL后面的支付接口是3,而试用接口是4,那么此时你已经使用过了,复制下确认试用时的URL,修改后面的支付接口为3,那么此时就会调用购买支付接口,但是由于你本身这个产品就是试用的,其相应值绑定了这个试用商品,那么金额就肯定是0,那么最后点击支付,你就可以看到支付成功,试用成功,又重复试用了一次,然后他们的试用时间会累加在一起,这就导致了可无限制购买任何产品了。
模拟一个场景:
从网站去提现金钱
总的来说就是提现的请求一次性发送多个,让后台同时处理,这就达到了几倍提款的目的。
– – 手工尝试一次登录后,在某一时间段内无论登录失败多少次,只要不刷新页面 Session 不过期,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。
– – 验证码通常会被隐藏在网站的源码中或者在请求的 Cookie 中,或在 response 数据包中返回。
登录请求包数据: user=admin&pass=1234&vcode=brln
可尝试如下两种绕过方法:
登录请求包数据: user=admin&pass=1234&needcode=1&vcode=brln
可尝试将needcode参数的值改成0
– – 经过测试,如果我们发现网站验证码自身并不存在缺陷,那我们接下来就可以尝试寻找一些其他的登录页面或接口来尝试暴力破解。如隐藏的页面、测试页面、老旧版本的页面等。
– – 渗透测试的过程中,有时候会出现这种情况,系统存在一个万能验证码,如0000、9999,只要输入万能验证码,就可以无视验证码进行暴力破解。这种万能验证码一般是开发人员测试时忘记删掉留下的。
– – 多见于计算类型的验证码,如 1+2=?,这种类型的验证码严格意义上来说不能叫做验证码,多刷新几次验证码,我们可能会发现系统中的算数题目只有那么几道,这种情况下只要将验证码全部下载下来,生成一个 md5 库,然后将前端生成的验证码与本地文件进行对比即可。
– – 在平常的漏洞挖掘过程中,如果我们发现登录的验证码非常简单且易于识别,那我们就可以尝试使用自动化工具来进行登录破解了,如 PKAV 的 HTTP Fuzzer、bp插件等。
– – 当你打开常见的一些需要登录之类的系统,通常系统会自动请求一次验证码,抓包,抓住别放,保持Session不变。
– – 不多说,就是趁着验证码还没过期来进行暴力破解账号密码。
– – 比如有 post 数据包:mobile=18888888888&userid=00001, Cookie中有:codetype=1
– – 在特定步骤,修改 mobile=自己的手机号,自己手机就可以收到别人的验证码,后面再用别人的手机号和接收到的验证码登录;
– – 修改 Cookie 中可疑的参数和值,进行绕过,比如上面修改 codetype=0
– – 举个简单的例子:提交错误的短信验证码,返回包中有: status=false,用 Burpsuite 的 “Do intercept” 功能来拦截响应包,修改响应包 status=true,即可绕过前端判断,成功进入系统。具体还要结合实际的场景,灵活操作。
– – 相当于我再测试平安保险的,发现验证码接口时移动公司的,为了获取验证码就把移动公司给打了。
– – 之前遇到过短信验证码输入9999,就可以登录任意用户账号的漏洞。
为了方便测试以及维护,有的系统会留有万能验证码,上线后还保留着。可能是固定的写在配置文件、js文件或代码中,也可能是随时间变化的。
– – 在没有验证码限制或者一次验证码可以多次使用的地方,使用已知用户对密码进行暴力破解或者用一个通用密码对用户进行暴力破解。
简单的验证码爆破。
– – 会话固定攻击:利用服务器的session不变机制,借他人之手获得认证和授权,冒充他人。
– – Cookie仿冒:修改cookie中的某个参数可以登录其他用户(Chrome插件: EditThisCookie )。
– – 前端加密,可破解,或者根本就不是加密。
username=***&mobilePhone=***&randcodeAjax=6119
ssouid=***&passwd=***