基础知识

CSRF漏洞基础知识

靶场实验(DVWA)

DVWA security:low

查看源码

<?phpif( isset( $_GET[ 'Change' ] ) ) {// Get input$pass_new  = $_GET[ 'password_new' ];$pass_conf = $_GET[ 'password_conf' ];// Do the passwords match?if( $pass_new == $pass_conf ) {// They do!$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass_new = md5( $pass_new );// Update the database$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// Feedback for the userecho "<pre>Password Changed.</pre>";}else {// Issue with passwords matchingecho "<pre>Passwords did not match.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

发现源码对csrf漏洞没有进行防御,输入一次新密码然后再确认一次就可以改密码。

那么我们现在模拟攻击者的视角,将内容填写,并且抓包

 发现这里是使用GET请求进行传递变量的,所以第一种攻击手段就是可以发送url给受害者,但是如果直接发送下面这个链接会太过于明显

http://localhost/DVWA-master/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change

可以利用短地址进行伪装,这里可以百度搜索百度短地址

http://af0.cn/GzPRv

然后我们现在模拟受害者点击这个恶意地址

发现受害者的密码被成功修改了,但是这种方法可以看出,受害者也可以发现自己的密码被进行了修改,所以介绍下面一种方法,隐蔽性更强。

把构造好的html页面放到公网上。

诱导受害者访问这个html页面,这个页面也可以添加元素修改为中奖页面,并且访问后跳转到其他页面,隐蔽性更强

后面就不再详细列出实验步骤,主要说明防御手段和绕过手段

DVWA security:medium

<?phpif( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
}
其余部分和上面一样
?> 

防御手段:验证Referer

$_SERVER['HTTP_REFERER']:PHP中获取链接到当前页面的前一页面的url链接地址,即HTTP数据包中的Referer参数的值。$_SERVER['SERVER_NAME']:PHP中获取服务器主机的名称,即HTTP数据包中的Host参数的值。

可以看到,Medium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME

如果使用上面的手段不进行绕过的化,['HTTP_REFERER']的值是“攻击者构造的html的地址”['SERVER_NAME']的值是“受害者的主机名称”,所以可以得知攻击者和受害者肯定不是同局域网下的。

那么如果想通过上面的防御措施,首先我们是无法修改受害者的主机名称的,但是我们可以将构造的html文件的名字改为“受害者的主机.html”,这样受害者的主机就被包括在referer中了

DVWA security:medium

添加随机token值,并验证

查看源码

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' )

发现代码中多了这一段内容,这就是验证用户的token。

High 的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。

CSRF漏洞利用以及防御手段(详细解释)相关推荐

  1. 【CSRF技巧拓展】————1、用代码来细说Csrf漏洞危害以及防御

    0x01 CSRF介绍: CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或者Session Riding ...

  2. redis 漏洞利用与防御

    前言 ​ Redis在大公司被大量应用,通过笔者的研究发现,目前在互联网上已经出现Redis未经授权病毒似自动攻击,攻击成功后会对内网进行扫描.控制.感染以及用来进行挖矿.勒索等恶意行为,早期网上曾经 ...

  3. csrf漏洞防御方案_变量覆盖漏洞利用及防御方案

    一.漏洞简介 变量覆盖漏洞是指攻击者使用自定义的变量去覆盖源代码中的变量,从而改变代码逻辑,实现攻击目的的一种漏洞.通常来说,单独的变量覆盖漏洞很难有利用价值,但是在与其他应用代码或漏洞结合后,其造成 ...

  4. 从CSRF原理到CMS漏洞利用

    文章目录 0x01 基础知识: 1.CSRF漏洞简介: 2.与XSS的区别: 3.攻击的细节: 4.常见的攻击类型: 4.1.GET类型的CSRF: 4.2.POST类型的CSRF: 0x02 CSR ...

  5. linux内核提取ret2usr,Linux内核漏洞利用技术详解 Part 2

    前言 在上一篇文章中,我们不仅为读者详细介绍了如何搭建环境,还通过一个具体的例子演示了最简单的内核漏洞利用技术:ret2usr.在本文中,我们将逐步启用更多的安全防御机制,即SMEP.KPTI和SMA ...

  6. WordPress 5.1.1 发布,修复 CSRF 漏洞

    WordPress 5.1.1 已经发布,这是一个安全和维护版本.WordPress 5.1.1 包含了 14 个问题修复和功能增强,修复了一个可能引发跨站脚本攻击的评论 CSRF 漏洞,完整更新包括 ...

  7. php Wrapper LFI,LFI漏洞利用总结(转载)

    主要涉及到的函数 include(),require().include_once(),require_once() magic_quotes_gpc().allow_url_fopen().allo ...

  8. csrf漏洞防御方案_CSRF原理实战及防御手段

    注:本文仅供学习参考 csrf定义: CSRF跨站点请求伪造(Cross-Site Request Forgery)攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是 ...

  9. [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)及防御详解

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. Jdk1.6 JUC源码解析(1)-atomic-AtomicXXX
  2. tensorflow学习(6.Alexnet实现及猫狗分类)
  3. 【译】在Android中保护数据-加密大数据
  4. 1069: [SCOI2007]最大土地面积 - BZOJ
  5. php mysql管理_MySQL 连接与管理
  6. python技巧(2)--碾平列表和列表去重
  7. maven报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:x.x.x:test
  8. 圆形取景框 相机_据说这款设备可以使老旧单反相机解决无线联机拍摄方案
  9. 基于系统的流量控制(Qos)
  10. 【过拟合】防止模型过拟合的必备方法!
  11. 正则表达式:re.match、re.search、re.sub、re.compile、findall、re.finditer、re.split
  12. css盒子模型实验报告总结_前端知识点总结——盒子模型
  13. 各种音频视频编解码详细介绍
  14. Python: 模糊综合评价法
  15. 微信小游戏开发-飞机大战【源码赠送】
  16. 28335之GPIO输入
  17. Python数据分析实战01-商铺数据的清洗和存储(附资源文件)
  18. sql update
  19. GVIDO MUSIC向德意志唱片公司成立120周年 Special Gala Concert Presented by 小泽征尔 斋藤纪念管弦乐团提供赞助
  20. 支配节点树及其构建算法 Dominator-tree and its Construction Algorithms

热门文章

  1. 如何用python计算函数的值域_(Max第一篇)Python基础代数运算大全
  2. 激光三角测距原理概述
  3. 联想笔记本电脑没声音,显卡驱动正常,驱动人生教你扬声器安装程序unknown如何解决?
  4. ubuntu NVIDIA CC sanity check failed:
  5. 南宁发展重点向南 五象湖标志性建筑“五象塔”落成
  6. IOS 发布被拒 PLA 1.2问题 整个过程介绍 03 个人账户升级公司账户
  7. 从设计哲学对比波卡与Cosmos
  8. CatBoost参数解释
  9. TCP/IP之大明王朝邮差
  10. Java链表的书_JAVA实现双向链表的增删功能,完整代码package linked;class LinkedTable{ }public class Linke...