逻辑越权-登陆脆弱及支付篡改

1.HTTP/HTTPS传输

HTTP:是超文本传输协议,信息是明文传输,数据未加密,端口80

HTTPS:使用密文传输,数据加密,有CA证书,与HTTP相比安全性更高

2.登陆点爆破破解

1.判断网站协议类型

首先判断目标网站是HTTP协议还是HTTPS协议,一般HTTP基本是明文传输,HTTPS是密文传输,但是HTTP的明文传输不是绝对的,有的网站他的HTTP协议但是他还是加密的,具体位置具体对待,主要HTTP最终有没有进行加密是开发人员在开发的时候的代码决定的。但是HTTPS最主要的就是传输的数据是加密的。

2.利用思路

如果碰到http的网站,通过判断后发现他的数据没有加密的话,可以使用暴力破解的方式进行爆破。如果碰到的是http或者https你判断后发现他对数据进行加密了,那么你要识别出他加密的方式,把你使用到的爆破字典的内容,也进行对应的加密方式转换后在进行爆破。比如说你识别出一个网站的加密方式是MD5,那么就将你的明文字典转换成MD5的方式,在进行爆破,以此类推

需要注意的地方:如果他使用了加密的方式(不管他是http还是https),就是密文,你非上去用明文的字典爆破那么肯定是爆破不出来的,切记一定要转换后在使用

演示案例,借助bp工具

推荐爆破字典https://github.com/zxcvbn001/password_brute_dictionary

扫描二维码关注公众号,回复: 14914863 查看本文章

1.随便 输入一个错误的密码

2.开始bp进行抓包

抓取到数据包

3.把这个页面发送到Intruder模块进行爆破 

 

 4.把bp自动设置的变量清除掉,在把你需要设置的目标设置未一个变量

 

 5.点击Payloads模块

 6.设置你要使用的爆破 字典

 7.如果是没有加密的话就可以直接开始爆破了,如果加密的话把你明文的字典转换成他的加密方式的类型,假设我这个是MD5

 7查看明文爆破和经过转换后的密文爆破效果

明文爆破后,以页面返回的长度来确定密码是123456

 在来看看密文

可以看出密文转换后的密文是这样的,这里没有爆破出密码就是因为他的数据类型是明文没有进行加密,所以爆破不出结果,他是明文类型就要以明文方式爆破,他是密文那就确定他的加密形式,在把明文转换成他使用的加密新式

3.Cookie脆弱点验证修改测试

 漏洞产生原理:代码问题,没有对cookie进行严格意义的验证

演示案例: 熊海cms1.0

 url:http://127.0.0.1/xhcms/admin./?r=login

这是一个后台登陆的页面,进行管理员的身份验证后就会跳转到?r=index管理的界面

url:    http://127.0.0.1/xhcms/admin./?r=index

(由于我没有登陆账号所以打开?r=index这个界面,他会自动退出回到登陆的页面)


从代码层面分析

首先我们先打开index.php这个文件  这个是网站的入口看一下源码

 

 这里使用的文件包含,包含了files目录下面的index.php文件

查看files/index这个文件的源码

此时这里又包含了一个 checklogin.php

查看一下checklogin.php的源代码

 从源码中可以判断,他只对cookie是否为空进行判断判断,如果为空的话那么就执行下面的代码,在跳转到登入的界面输入管理员账号的密码。那么说明只要给cookie一个值,让他不为空就可以进入了键名=user 键值随便写 。

使用BP抓包尝试一下

url:http://127.0.0.1/xhcms/admin./?r=index 

 

 成功进入后台


判断Cookie脆弱点的两种方式。

1。白盒(从代码审计中分析出)

拿xhcms未例,他的网站进口?r=index,他只对cookie的值进行了判断,没有做更严格的过滤导致的这个漏洞。

2.黑盒 (通过数据包的参数值)

在看不到源码的情况下,我们可以看数据包的情况,看数据包的Cookie值有没有可以操作的地方,假如说你登入进去了,发现数据包中的cookie:user=admin,那么我们猜测把admin修改成test,那么这个test对应的会不会就是test这个账户呢,这个就是在测试cookie在没有源码的情况下的方式,就是看数据包的参数,如果参数没有和网站有相关的,那么这个测试就没有办法了

4. 数据篡改安全问题

漏洞产生原因:数据没有以数据库为准

举个例子:价格一个商品,他的价格是6000元,攻击者把他经过抓包修改皇后,他修改成了1就是1,那就说明他不是以数据库这个值为准,网站刚体现出来的价格是查询的数据库的值,然后体现界面上,但是一旦发现有人去篡改这个值,网站就会以这个更改的为准

常见篡改参数

1.购买数量

如果在页面中,你抓取不到他这个金额,假设这个金额是5000,可能这个5000在代码中是固定写死的,所以你抓取不到,但是数量不会写死,我们就可以将数量修成-1 等其他的负数

案例演示:NIUSHOP

商品的界面

首先我们先确定一下数量在数据包的参数,修改一个比较显眼的值 

修改后,开启BP抓包 

可以看出这是数量,把他进行修改成-1 看看什么效果

修改完成后放包

 

 


2.订单号

下两个订单一个是A订单1000元B订单5000元,以A订单的价格去买B订单。首先在A订单下一个1000的订单,在提交生成后的一个订单,将A的订单编号进行拦截下来。放出去或者给他丢 了,在打开一个B订单,在最后提交B订单的订单编号和A订单的编号进行替换,就可以以A订单的价格买到B订单的东西了 

演示案例:NIUSHOP

首先下一个A的订单1000元

放包放包 

 

确定提交订单 ,抓包。这里的数据包一定要拦截下来!

 

第一个个数据包,从字母的意思来说这是创建订单的请求,放出去。

这里从字面意思来看就是支付和订单编号的数据包了,把他拦截下来,发到Repeater模块中记录下来。

 在把这个数据包放出去。或者丢弃都行。

在下一个B订单5000元

 

 放包

 

抓包,提交订单。 

创建订单,放出去。 

这里 重点!!把之前A订单的编号和这个编号进行替换 

替换完成后,放包 

此时就以A订单的编号购买了B订单。

 


3.购买价格。

演示案例:damicms

开启抓包点击立即购买

 

在数据包中可以看到价格在数据包中可以抓取包,尝试修改金额,我把他修改成1,看看能不能更改成功 

修改成功,这里造成的原因就是因为,他商品的价格不是以数据库为准,虽然刚开始在展示的5400的价格是从数据库查询出来的,但是经过抓包修改后,成功的修改成功,说明一旦有人去修改他,他就会以最终更改的结果为准。 

4.商品编号id和名称

假如说如果价格和数量都不能修改,改如何操作?

目的 以5400的价格购买6000的手机。

首先先下一个6000的订单,把数据包发 送到Repeater模块中,记录下来。

600价格数据包

 在下一个5400的订单,开启bp抓取数据包。

 对比这两个数据包不同的地方。

 可以看出id和名字不同,那我们就拿6000的数据包的id和名字和5400的数据进行替换,看看是否能在价格和数量都操作不了的情况下,以5400的价格购买到6000的订单产品。

修改完成,放包,开始期待会不会又什么效果了噢~~ 

修改成功!!以5400的价格购买了6000的订单产品。 

5.支付方式-接口

付款的时候一般有3种付款方式,微信支付,支付宝支付,第三方支付,他们这就涉及到接口了,

因为每个支付接口的值不一样,如果逻辑上设计不当,那么攻击者随便选择一个点击支付时进行抓包,然后修改其接口为一个不存在的第三方接口,如果没有做好不存在的接口相关处理,那么此时就会支付成功。 就会支付到第三方接口去。

比如说我们现在的目标网站使用的支付接口的参数是

index.php?s=/wap/pay/wchatQrcodePay 微信支付

index.php?s=/wap/pay/alipay 支付宝支付

假如说对方代码中有以下代码

$pay_name=$_GET["s"];

$_pay_name=$_GET["s"];如果这个s的值可以来自用户输入,那么他的接口的可能就会被篡改。

 攻击者可能会把值修改成他们自己的一个接口比如说是

index.php?s=http://hhh.com/alipay  
 

如果请求的是这个值,那么想当与就是调用是http://hhh.com/alipay 这个接口,

就相等于对方付钱会付到这个接口 来。

可参考挖洞技巧:支付漏洞之总结 - SecPulse.COM | 安全脉搏


防御方案:使用Token。价格以数据库为准,数量不能以数据库为准,因为数量是不确定的因素

,也不会在数据库中体现,但是可以进行判断,比如使用库存,这个库存的值就会在数据库里面,他可以进行换算,比如说你购买一件,他就会在数据库减少一件,并且检测数量不能为负数,只能为0以上的值,在对购买商品的数量会和库存的数量进行对比,看看能不能对比的上,在次进行判断


猜你喜欢

转载自blog.csdn.net/m0_72755466/article/details/128890784