简介
CSRF是一种攻击,它迫使最终用户在当前已通过身份验证的web应用程序上执行不想要的操作。借助一点社会工程的帮助(例如通过电子邮件/聊天发送链接),攻击者可能会迫使web应用程序的用户执行攻击者所选择的操作。
一个成功的CSRF攻击可以在正常用户的情况下损害最终用户数据和操作。如果目标终端用户是管理员帐户,这可能会危及整个web应用程序。
这种攻击也可以称为“XSRF”,类似于“跨站点脚本编写(XSS)”,它们经常一起使用。
CSRF与XSS区别
CSRF是借助用户的权限完成攻击,攻击者并没有拿到用户的权限。目标构造修改个人信息的链接,利用lucy在登录状态下点击此链接达到修改信息的目的。
XSS直接盗取了用户的权限,然后实施破坏。攻击者利用XSS盗取了目标的Cookie,登录lucy的后台,再修改相关信息。
Low级
解析
stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )
stripos() :数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
HTTP Referer:是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
SERVER_NAME:是要访问的主机名
过滤规则为http包头的Referer参数的值中是否包含主机名
过程
伪造链接
一旦用户点击链接,就会出现红字:提示密码改变了
这样我们就成功地将密码更改为password了
当然,我们可以将链接修饰一下,毕竟这样一看就能看出来。
比如我们可以在网上找一个短链接生成器
得到这个链接:http://5l8.cn/ffHx0
伪装一下:Change
也可以构造一个html界面
<img src="http://192.168.224.135/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#" border="0"style="display:none;"/>
<h1>404<h1>
<h2>file not found.<h2>
看似是一个失效界面,实际已经改掉了密码。
Medium级
解析
与low难度一样,没有token,这时候,我们可以看一下源代码比起low级多了
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
stripos()
函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。HTTP Referer
是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。SERVER_NAME
是要访问的主机名
过滤规则为http包头的Referer参数的值中是否包含主机名
过程
抓包
会发现有一栏Referer,就是该页面的url
Referer: http://192.168.224.135/dvwa/vulnerabilities/csrf/
开启抓包拦截、接着使用此前构造的链接尝试会发现报文里没有REferer
我们在报文里加上,然后放行
提示密码修改成功
High级&Impossible级
略
GitHub Discussions