HTTP:是超文本传输协议,信息是明文传输,数据未加密,端口80
HTTPS:使用密文传输,数据加密,有CA证书,与HTTP相比安全性更高
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
1.随便 输入一个错误的密码
2.开始bp进行抓包
抓取到数据包
3.把这个页面发送到Intruder模块进行爆破
4.把bp自动设置的变量清除掉,在把你需要设置的目标设置未一个变量
5.点击Payloads模块
6.设置你要使用的爆破 字典
7.如果是没有加密的话就可以直接开始爆破了,如果加密的话把你明文的字典转换成他的加密方式的类型,假设我这个是MD5
7查看明文爆破和经过转换后的密文爆破效果
明文爆破后,以页面返回的长度来确定密码是123456
在来看看密文
可以看出密文转换后的密文是这样的,这里没有爆破出密码就是因为他的数据类型是明文没有进行加密,所以爆破不出结果,他是明文类型就要以明文方式爆破,他是密文那就确定他的加密形式,在把明文转换成他使用的加密新式
漏洞产生原理:代码问题,没有对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
从源码中可以判断,他只对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在没有源码的情况下的方式,就是看数据包的参数,如果参数没有和网站有相关的,那么这个测试就没有办法了
漏洞产生原因:数据没有以数据库为准
举个例子:价格一个商品,他的价格是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模块中,记录下来。
在下一个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以上的值,在对购买商品的数量会和库存的数量进行对比,看看能不能对比的上,在次进行判断