CSRF:跨站请求伪造攻击

SecurityLow 级别分析

核心代码

输入数据,以便Burp代理获得请求参数

      

这里可以将第一行拿出来进行构造链接,

http://202.100.10.129/dvwa/vulnerabilities/brute/?username=111&password=111&Login HTTP/1.1

或者利用burp编写Poc,当我们在Burp中抓到包后,点击右键编写Poc

  

当用户触发这个请求后,

密码就会被修改成111,当然,这样子用户能看到的话,用户就知道了自己的密码被修改,明显很不现实。那么如何在用户不知情的情况下进行修改密码的攻击呢?

我们可以采取构造攻击页面的方式:

在真实情况下,这种方法需要事先在公网上上传一个攻击页面,诱导用户去访问这个页面,这样才能在用户不知情的情况下进行攻击。

没有公网服务器的情况下,可以在本地环境假设这个攻击页面的服务器,这里采用Kali作为这个攻击页面的服务器。

启动Apache服务

当用户访问到这个页面后,会显示不存在,一般情况下,用户都会选择关掉这个页面,没有人去选择查看源码进行分析,这是不现实的,而此时用户的密码已经被我们修改成功,

当用户退出后,下次再登录的时候就会发现已经无法登录了。因为此时密码已经被修改了。

SecurityMedium级别分析

核心代码:

相关函数说明

int eregi(string pattern, string string)

检查string中是否含有pattern(不区分大小写),如果有返回True,反之False。

可以看到,Medium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,即202.100.10.129),希望通过这种机制抵御CSRF攻击

漏洞利用:

既然服务器进行了过滤,通过分析源代码可以得到,它要求http包头的Referer参数的值中必须包含主机名。

方法一:Burpsuite抓包进行修改后再提交给服务器

Ctrl+R发送到repeater,将主机名添加到Referer的后面

预览可以看到,密码已经在用户不知情的情况下被修改

方法二:

将攻击页面名称改为用户主机名202.100.10.129.html (攻击页面放在攻击者自己的服务器里,202.100.10.130/202.100.10.129html),当用户不小心点到这个页面时,会自动执行以下脚本,用途就是更改密码。

用户一般看到404就会关掉,当然地址是可以换成比较隐蔽的形式。

Burpsuite截到的包

SecurityHigh级别分析

核心代码

可以看到,该级别加入了Anti-CSRF token方法来防范CSRF攻击,同时每次随机生成一个token,当用户提交的时候,服务器端会检查token值是否正确,很好的起到了防范作用。不好攻破。不过照样还是可以被利用,可以发现High级别的反CSRF机制,最关键的地方就是要获取token,利用受害者的cookie去修改密码的页面获取关键的token。我们可以试着去构造一个攻击页面,将其放置在攻击者的服务器,引诱受害者访问,从而完成CSRF攻击,下面是代码。

<script type="text/javascript">

function attack()

{

document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;

document.getElementById("transfer").submit();

}

</script>

<iframe src="http://192.168.153.130/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">

</iframe>

<body onload="attack()">

<form method="GET" id="transfer" action="http://192.168.153.130/dvwa/vulnerabilities/csrf">

<input type="hidden" name="password_new" value="password">

<input type="hidden" name="password_conf" value="password">

<input type="hidden" name="user_token" value="">

<input type="hidden" name="Change" value="Change">

</form>

</body>

当受害者不小心点击这个页面后,该网页中的脚本会发生请求,偷偷去访问修改密码的页面,获取页面的Token值,并向服务器发起修改密码的请求。

PS:不过受到同源策略的限制,这种请求是无法正常执行的。简单来说,就是当用户访问被攻击服务器A时,被默默的要求去请求B服务器上的攻击脚本,这怎么可以,吃着自己碗里的还想吃别人碗里的,浏览器不允许这种行为,除非别人主动从他碗里给你夹肉过来。。。。。

故只有将攻击页面(将自己的肉放在别人的碗里,不给你也得给你,皮一下,就是这么个道理。)放在被攻击者的服务器上,让被攻击服务器去请求位于自己服务器上的资源,这当然是没有问题的了。

SecurityImpossible级别

核心代码:

可以看到, Impossible 级别的代码利用PDO 技术防御SQL 注入,至于防护CSRF ,则要求用户输入原始密码(简单粗暴),攻击者在不知道原始密码的情况下,无论如何都无法进行CSRF 攻击。

注意:CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,所以如果受害者之前用Chrome浏览器登录的这个系统,而用搜狗浏览器点击这个链接,攻击是不会触发的,因为搜狗浏览器并不能利用Chrome浏览器的cookie。

DVWA之CSRF的更多相关文章

  1. DVWA之CSRF(跨站请求伪造攻击)

    目录 Low Middle High Impossible Low 源代码: <?php if( isset( $_GET[ 'Change' ] ) ) { // Get input $pas ...

  2. DVWA笔记之三:CSRF

    CSRF与XSS不同,它称为跨站请求伪造,它是利用其他页面的恶意脚本来加载访问或操作存在CSRF的漏洞的可信网站. 1.Low级别 核心代码如下: <?php  if( isset( $_GET ...

  3. 反射型XSS+文件上传+CSRF—DVWA

    在学习的过程中,想到将几种漏洞进行组合练习,记录下学习过程.大佬请绕过!谢谢!! 测试环境:DVWA,安装方法参考上一篇:https://www.cnblogs.com/aq-ry/p/9220584 ...

  4. 2. DVWA亲测CSRF漏洞

    DVWA登陆      用户名:admin   密码:password Low级: 查看源代码: <?php if (isset($_GET['Change'])) { // Turn requ ...

  5. DVWA全级别之CSRF(跨站请求伪造)

    CSRF(Cross-site request forgery)  CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息( ...

  6. 浅谈CSRF漏洞

    前言: 看完小迪老师的CSRF漏洞讲解.感觉不行 就自己百度学习.这是总结出来的.   歌曲:   正文: CSRF与xss和像,但是两个是完全不一样的东西. xss攻击(跨站脚本攻击)储存型的XSS ...

  7. CSRF 漏洞测试

    CSRF简介: CSRF中文名:跨站请求伪造,英文译为:Cross-site request forgery,CSRF攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息 ...

  8. DVWA v1.9 新手指南

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  9. 苏醒的巨人----CSRF

    一.CSRF 跨站请求伪造(Cross-Site Request Forgery,CSRF)是指利用 受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点 击恶意链接或者访问包含攻击代码的页 ...

随机推荐

  1. STP配置和选路规则

    1.用四台S3700交换机,2台PC机,组建网络拓扑 2.对mengyu-S1进行设置 (1)在交换机启用生成树(华为交换机默认启用MSTP),将交换机的STP模式更改为普通生成树STP: (2)配置 ...

  2. CSP-S 2019图论总结

    CSP-S 2019图论总结 一.最短路问题 模板 Floyd算法 void floyd() { memset(map,0x3f,sizeof(map)); for(int i=1;i<=n;i ...

  3. xargs 用法理解

    原来一直不理解,linux shell下 xargs和 管道的区别: 1.管道在linux shell用得比较广泛,管道常常用来组合两个及以上的命令,共同完成一个功能: 比如:我们要统计某一个文件有多 ...

  4. Vue 变异方法unshift&pop&shift

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【2019.7.20 NOIP模拟赛 T1】A(A)(暴搜)

    打表+暴搜 这道题目,显然是需要打表的,不过打表的方式可以有很多. 我是打了两个表,分别表示每个数字所需的火柴棒根数以及从一个数字到另一个数字,除了需要去除或加入的火柴棒外,至少需要几根火柴棒. 然后 ...

  6. java.util.concurrent各组件分析 一 sun.misc.Unsafe

    java.util.concurrent各组件分析 一 sun.misc.Unsafe 说到concurrent包也叫并发包,该包下主要是线程操作,方便的进行并发编程,提到并发那么锁自然是不可缺少的, ...

  7. 【shell脚本】定时备份数据库===dbbackup.sh

    定时备份数据库是很有必要的 一.脚本内容 [root@localhost dbbackup]# cat dbbackup.sh #!/bin/bash #备份数据库 mysqldump -uroot ...

  8. 使用Node.js时如何引入jQuery

    使用Node.js时如何引入jQuery 首先安装jQuery依赖 npm install jquery 然后安装jsdom npm install jsdom 引入jQuery 新版正确的依赖方式 ...

  9. Quartz的配置与使用

    什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为 ...

  10. layui + mvc + ajax 导出Excel功能

    为了更方便,没基础的伙伴更容易理解,我尽量详细简便 省了很多代码,一步一步的试 自己引入文件 1. html 前端视图代码 Layui的数据绑定 全部代码 @{ Layout = null; } &l ...