WEB漏洞-逻辑越权之登录脆弱及支付篡改
http数据密文传输
- 在网页表单发送到服务器的之前,有些网站会对特定信息进行加密发送,比如登录框的密码
采用抓包工具爆破密码
- 如果密码在传输过程中加密,那么在进行字典爆破的时候也需要加密传输
- 载入字典
- 贫经验,分析密码为MD5加密
- 返回302,说明有跳转,爆破成功
Cookie 脆弱点验证修改测试
尝试登录
输入正确密码后跳转页面,参数为index
抓包分析(这里post提交的数据没有加密)
源代码分析
这里index传参r,判断传递的参数file是为空还是为index,如果是index,就执行file文件下的传递参数的文件。这里只有等于index路径才能跳转
如果
r=index
,在跳转管理员执行/files/index.php
文件,文件开头包含了验证,防止用户直接登录URL路径进入管理员后台
查看登录验证,判断用户的cookie,如果为空,就跳转到登录界面。(漏洞产生:只要cookie有数据,就可以访问)
cookie修改user不为空(要访http://192.168.102.143:8456/admin/?r=index)
发现登录成功,而且用户这里没有显示admin,而是为空
实战条件下,如何去分析漏洞
- 没有源码,去找cookie脆弱点十分困难的
- 如果有特殊值,如
user=admin
,可以尝试修改,看是不是可以登录到其它用户,如user=text
- 可以根据这个漏洞,去搜索采用熊海CMS的网站是否存在cookie脆弱的漏洞
数据篡改安全问题
- 修改支付价格
- 修改支付状态
- 修改购买数量
- 修改附属值
- 修改支付接口
- 多重替换支付
- 重复支付
- 最小额支付
- 值为最大值支付问题
- 越权支付
- 无限制适用
- 修改优惠价格
- 之所以列出这些漏洞,其实不是存在一个,而是网站的设计者很难从这么多方面去考虑支付问题,从而可以发现漏洞
- 商品购买流程:选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付
- 常见篡改参数:商品编号 ID,购买价格,购买数量,支付方式,订单号,支付状态等
- 常见修改方法:替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等
购买产品,并且抓包分析(数量问题造成金额减少)
抓包分析
sku_id=2
(多半为商品的编号id),num=2
为要购买商品的数量
将数量改为
-1
发现支付价格变为了0元
更改订单编号(以b的价格来买a),假如购买商品a一件,在提交订单的时候抓取数据包
抓取到数据包(获取到了订单编号)
提交后页面回显
购买另外一件产品
抓包,修改为之前商品的订单编号
发现原来998元变成了9999999,这里可以反向操作,将贵的订单变成便宜的订单,漏洞的产生,要看它有没有订单编号的检测
修改价格/商品
购买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
修改价格为1元
发现订单总价改变
购买另外一件商品
抓取数据包
/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
对比分析数据包变量含义
pic
商品图像gtype
商品类型(在同一个分类里面,一样)- 不同之处(
id
,name
)
将6000元的商品的
id
和name
改为5400产品的
这里变成了以6000元购买5400的产品(反过来可以以低价商品购买高价的商品(将id和name改为高价的商品的))
替换支付(修改支付接口)
抓包分析,提交的路径传递参数s为支付的借接口(这里提交了接口和订单编号)
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):第一个数据包购买成功,如果没有检测数据包的唯一性,那么从这个成功的数据包还能再次购买成功
- 漏洞的产生方面:业务逻辑层面
0 条评论