【Web攻防-12】CSRF跨站请求伪造&Referer同源&Token校验&复用删除置空&联动上传或XSS

WEB攻防-CSRF利用-原理&构造

原理

登录受信任网站A,并在本地生成Cookie,在不登出A的情况下,访问危险网站B

!

CSRF 功能点

  • 删除帐户
  • 更改电子邮件
  • 如果不需要旧密码,请更改密码
  • 如果您的目标支持角色,请添加新管理员
  • 更改正常信息,名字,姓氏等……
  • 类似复选框的接收通知
  • 更改个人资料图片/删除它

检测与利用

  • 检测:黑盒手工利用测试,白盒看代码检验(有无token,来源检验等)
  • 生成:BurpSuite->Engagement tools->Generate CSRF Poc
  • 利用:将文件放置自己的站点下,诱使受害者访问(或配合XSS触发访问)

案例-CSRF利用-无防护

步骤1:生成csrf-poc

登陆网站1,添加账号

然后复制HTML代码后,创建一个HTML文件放进去,最后把这个HTML 文件放在“恶意网站”上

或者说直接放在网站首页,只要一访问恶意网站就触发

步骤2:使目标访问poc

访问“恶意网站”下的csrf poc

原理

把添加用户的数据包放置在了网站2“恶意网站”上,访问就触发数据包

条件

  • 必须访问得了
  • 与当前浏览器策略有关
  • 如果会话还存在着,(后台没有退出登陆)就会触发

WEB攻防-CSRF防御-同源策略

CSRF利用-同源策略防护

原理:同源策略检测数据包,只能由同一个地址产生和发送,因为csrf是由另一个站点发送的,所以启用同源策略可阻止大部分csrf

同源策略原理

原理:等值判断

<?php
$flag='i love xiaodi';

$refer= $_SERVER['HTTP_REFERER'];
echo $refer;
if($refer=="http://www.xiaodi8.com"){
    echo $flag;
}else{
    echo 'nimeide';
}

当访问数据包是从”http://www.xiaodi8.com”发出的时候,输出flag,即”i love xiaodi”

否则输出”nimeide”

绕过:抓包修改Referer字段

原理:当仅自己浏览器访问时,没有Referer字段(为空)

当使用baidu作为跳转时,字段内容为”www.baidu.com“

所以,修改Referer字段内容为所需要的”http://www.xiaodi8.com”,即可得到所想要的内容

防护措施

检测Referer字段,阻止跨站请求

正常添加账号

跨站非法添加

判断同源:(匹配判断)

匹配判断同源的安全问题

制作csrf poc

将poc放在另一个网站上,删除刚才创建的用户后,尝试访问

被来源检测了,用户也没有添加,csrf失败

绕过办法:修改数据包,伪造来源

创建用户抓包生成poc

将poc放在另一个网站上

访问该网页,抓包改包

发送后重新刷新发现增加了一个用户

实战问题:实战中无法操作目标主机进行来源伪造 –> 无法伪造来源

判断同源的匹配判断 绕过

绕过1:规则匹配绕过问题(代码逻辑不严谨)
  • 方法1:功能逻辑绕过 置空来源:在生成的html代码前加上 <meta name="referrer" content="no-referrer"> 访问后刷新直接绕过,增加了一个用户
  • 方法2:匹配机制绕过 匹配机制:http://xx.xx.xx.xx/http://xx.xx.xx.xx 第一个为外部链接,第二个为同源链接,同源判断使用匹配判断了第二个链接合法就放行了 将自己网站文件夹强制命名为对应网站链接,将poc置于其中 如何强制命名有待实验,结果如下: 或在网上申请一个高仿域名,如www.baidu.com就申请www.xxxbaidu.com
绕过2:配合文件上传绕过(严谨使用同源绕过)
绕过3:配合存储XSS绕过(严谨使用同源绕过)

WEB攻防-CSRF防御-Token校验防护

Token更难绕过

每一个操作都有一个编号(Token),再次重复操作就无效 — > 保证了数据包的唯一性

测试

绕过

  • 将Token参数值复用(代码逻辑不严谨)–> 不实用
  • 将Token参数删除(代码逻辑不严谨)–> 首先测试
  • 将Token参数值置空(代码逻辑不严谨) –> 首先测试

实验

以上实验没有考虑token带来的影响,看似有csrf漏洞,实则可能没有 –> 因为都是在本地“自导自演”

再次实验

  • 受害者目标:本地firefox浏览器模拟
  • 攻击者: 1.创建一个受害者访问界面:http://192.168.10.201/ 实际为公网地址 2.创建一个和受害者访问目标网站一样的网站源码(触发访问的数据包的形成条件):本地搭建,然后模拟测试数据包 在本地模拟了用户常见数据包的提取和修改 用bp制作poc(已内置当前模拟的token) 1.html 将制作好的html放置在http://192.168.10.201/ 下 等着受害者访问http://192.168.10.201/1.html
  • 问题:利用失败
  • 原因token校验不通过 — > 本地自己实验时,token没有变过 –> 当实际情况下,token改变,校验不通过(先不考虑同源策略影响)

虽然看似token值已经被设置一样了,但是对应受害用户不是使用这个token — > 校验不通过

受害者自己的token明显与刚才模拟生成的不一样,如果是这个token就能实现攻击 — > 不现实


总结

CSRF测试手法:

首先判断有无防护 –> 有防护 –>抓包查看是不是有相关token校验内容 –> 有token防护 –>尝试删除token或置空

–>没有token防护 –>有同源策略 –> 尝试同源策略绕过

–>有token防护,还有同源策略 –> 基本不用测试了


本节知识点&CSRF思维导图

Web攻防-CSRF-原理&检测&利用&防御

Web攻防-CSRF-防御-Referer策略隐患

Web攻防-CSRF-防御-Token校验策略隐患

十二亿七千光年
暂无评论

发送评论 编辑评论


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