|
44 | 44 |
|
45 | 45 |
|
46 | 46 |
|
47 | | -- 谈谈1.2.47版本之前的绕过(★★★) |
| 47 | +- 谈谈1.2.47版本之前各个小版本的绕过(★★★) |
48 | 48 |
|
49 | 49 | 首先是利用解析问题可以加括号或大写L绕过低版本,高版本利用了哈希黑名单,之所以要哈希是因为防止黑客进行分析。但黑名单还是被破解了,有师傅找到可以绕过了类。在1.2.47版本中利用缓存绕过 |
50 | 50 |
|
|
56 | 56 |
|
57 | 57 | 除了这种方式,还可以自行实现虚假的`JNDI Server`作为反连平台,用`JdbcRowSetImpl`这样的`Payload`来触发 |
58 | 58 |
|
59 | | -如果不能出网,可以结合不出网的利用方式和中间件的回显手段,执行无害命令检测,或利用报错回显 |
| 59 | +如果不能出网,可以结合不出网的利用方式和中间件的回显手段,执行无害命令检测,或利用报错回显 |
| 60 | + |
| 61 | + |
| 62 | + |
| 63 | +- 谈谈1.2.68版本的绕过(★★) |
| 64 | + |
| 65 | +1.2.68之前的66和67可以利用`JNDI`相关类,比如`Shiro`的`JndiObjectFactory`和`ignite`项目的类 |
| 66 | + |
| 67 | +1.2.68中有一个期望类属性,实现了期望接口的类可以被反序列化 |
| 68 | + |
| 69 | +利用类必须是`expectClass`类的子类或实现类,并且不在黑名单中,即可直接绕过`AutoType`检测,例如常见的`AutoCloseable` |
| 70 | + |
| 71 | +这样的Payload通常第一个`@type`是`AutoCloseable`等合法类,第二个`@type`是恶意类,后续参数是恶意类需要的参数 |
| 72 | + |
| 73 | + |
| 74 | + |
| 75 | +- 谈谈Fastjson的WAF Bypass手段(★★★) |
| 76 | + |
| 77 | +Fastjson默认会去除键值外的空格、\b、\n、\r、\f等字符,同时还会自动将键值进行`unicode`与十六进制解码 |
| 78 | + |
| 79 | +例如针对`@type`的绕过:`\u0040\u0074\u0079\u0070\u0065` |
| 80 | + |
| 81 | +加入特殊字符的绕过:`{\n"@type":"com.sun.rowset.JdbcRowSetImpl"...}` |
| 82 | + |
| 83 | + |
| 84 | + |
| 85 | +- 除了RCE还能有什么利用(★★★) |
| 86 | + |
| 87 | +信息泄露或者ReDoS,参考下方Payload |
| 88 | + |
| 89 | +```json |
| 90 | +{ |
| 91 | + "regex":{ |
| 92 | + "$ref":"$[\blue = /\^[a-zA-Z]+(([a-zA-Z ])?[a-zA-Z]*)*$/]" |
| 93 | + }, |
| 94 | + "blue":"aaaaaaaaaaaaaaaaaaaaaaaaaaaa!" |
| 95 | +} |
| 96 | +``` |
| 97 | + |
| 98 | +还可以实现写文件,例如以下这个针对1.2.68写文件的Payload |
| 99 | + |
| 100 | +```json |
| 101 | +{ |
| 102 | + "@type": "java.lang.AutoCloseable", |
| 103 | + "@type": "java.io.FileOutputStream", |
| 104 | + "file": "/tmp/nonexist", |
| 105 | + "append": "false" |
| 106 | +} |
| 107 | +``` |
| 108 | + |
| 109 | + |
| 110 | + |
| 111 | +- 是否了解自动挖掘Fastjson利用链的方式(★★★★) |
| 112 | + |
| 113 | +利用链主要集中在`getter`和`setter`方法中,如果`getter`或者`setter`的方法中存在一些危险操作比如`JNDI`查询,如果参数可控就可以导致`JNDI`注入 |
| 114 | + |
| 115 | +简单来说,直接搜对应项目中`JNDI`的`lookup`方法,可以基于`ASM`解压分析`Jar`包,这种半自动结合人工审核的方式其实很好用(之前挖到过几个) |
| 116 | + |
| 117 | +进一步来说,全自动的方式可以使用`codeql`或`gadget-inspector`工具来做,主要是加入了污点传递,分析`getter/setter`参数如何传递到`lookup` |
| 118 | + |
| 119 | +关闭全自动分析原理,一般面试官不会问太深入,因为可能涉及到静态分析相关的技术,普通安服崽的面试不会太过深入,如果是实验室可能需要再学习一下 |
0 commit comments