JSON注入与CSRF漏洞原理与复现

JSON注入与CSRF漏洞原理与复现

1、 JSON(JavaScript Object Notation)JavaScript对象表示法

2、 它是一种数据格式,而不是一种编程语言

3、 JSON的语法:

有三种类型的值:简单值,对象,数组;

关于JSON的写法:

表示对象(使用JS的对象字面量书写):

{

“name”:”John”,

“age”:40

}

(属性名必须使用双引号,末尾没有分号结束,允许嵌入书写,也就是值允许为一个对象)

{

“name”:{

“age”:10,

“sex”:’w’},

“address”:”wuhan”

}

表示数组:

[25,”john”,”man” ]—(数组中也可以嵌套对象)

4、 JS提供的JSON全局变量对象

含有2个方法:stringify()和parse(),分别表示将对象转换为JSON和将JSON转化成对象;

使用方法:JSON.stringify(对象)和JSON.parse(字符串);

关于stringify()的过滤序列化:

在第二参数处,传入想要序列化的属性名称数组,则只会有相应的属性名被序列化;

例如:person对象有name,age,sex三个属性

使用JSON.stringify(person,[“name”]);—表示序列化之后返回的字符串只有name属性,也就是{“name”:”…”};

也可以传入函数:function(key,value),如果返回undefined,则表示不进行该项的序列化;

第三个参数表示缩进,传入数字或者字符串,来进行缩进,因为stringify序列化之后的对象字符串不会分行

toJSON()方法:返回其自身的JSON数据格式;

parse()方法第二个参数也可以传入函数,也是key-value;

使用PHP格式化成JSON:

两个函数:

json_encode(对象):将对象转化成json格式数据;

json_decode(字符串):将JSON字符串更换成对象;

(json_decode()第二个参数可以指定true,则返回一个数组)

JSON注入:(一般结合于SQL注入,由JSON注入语句引发SQL注入漏洞)

将传入的json格式的字符串使用json_decode解析相应的数组或者对象,再调用JSON中存储的信息,进行相应的SQL查询;

(上述代码,需要构造的就是$username)

构造相应的伪代码的时候,需要注意对特殊字符的转义;

例如:

进行尝试:在这里插入图片描述在这里插入图片描述
继续进行构造json:
在这里插入图片描述(最终,就可以进行SQL语句的注入。。。。。需要注意的是,在构造的语句中,中间的双引号必须使用转义字符)-------JSON语法中,时要使用双引号的
CSRF:(跨站请求伪造)
原理:利用用户已经登录的状态,诱导用户访问恶意网站,从而实现cookie的盗用,伪造用户身份向目标站点发送请求;
(构造的恶意网站会带有一个向目标服务器发送请求的URL,由于是用户访问恶意网站,从而也就实现了用户会将cookie发送到目标服务器,从而导致恶意的请求)

两种常见的方法:

1、 GET请求的漏洞

以pikachu平台的CSRF为例:

在这里插入图片描述

(使用kevin登录,点击修改个人信息)

在这里插入图片描述

这里直接点击submit,抓包查看发送的get请求头:

在这里插入图片描述

(可以发现sex值对应women等等,刚好与上面的需要修改的信息匹配,构造恶意的链接,将sex的值改为man)

在这里插入图片描述

(在同一浏览器访问这个页面,再去查看自身的属性)

在这里插入图片描述

会发现sex属性变为了men,也就是引发了CSRF漏洞
2、 使用POST请求
(这个漏洞需要引导用户点击提交表单)
大致原理与上面相似;在这里插入图片描述
抓包分析,请求的字段都是post请求,这里就需要构造表单提交,诱导用户点击表单;(可以使用点击劫持漏洞)在这里插入图片描述
在这里插入图片描述
(好像也可以不用引诱,直接使用JS隐藏直接提交表单)
CSRF跨站请求伪造的一个特殊例子:JSON劫持
防御方法:
指定只能从指定的网站跳转访问;

猜你喜欢

转载自blog.csdn.net/gental_z/article/details/103540498