@@ -24,7 +24,7 @@ https://github.com/cn-panda/JavaCodeAudit
24
24
25
25
导入项目,可以得到以下目录:
26
26
27
- ![ image-20200611101308954 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200611101308954 .png)
27
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/1 .png?raw=true )
28
28
29
29
项目是一个简单调用类方法去执行相关操作的实现。在 servlet 层接受到请求后,调用 rceTest中的CommandFound函数,该函数接受三个参数:command、method、str,command 为要执行的命令类,method 为要执行的方法,str 为要执行的内容。
30
30
@@ -60,11 +60,11 @@ RCE 出现的场景比较多,如:
60
60
61
61
拿上述项目举例,首先看看项目的具体实现:
62
62
63
- ![ image-20200611223924441 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200611223924441 .png)
63
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/2 .png?raw=true )
64
64
65
65
command 为请求的类,method 为请求类的方法,str 为请求类的参数,服务端接收这三个参数后执行 method 的具体方法,如上图所示,首先找到 ` com.sec.pojo.Command ` 类,然后找到该类中的` AddCommand ` 方法,最后根据这个方法的需要,传入指定的参数` [add] ` 。
66
66
67
- < img src = " /Users/ panda/Library/Application Support/typora-user-images/image-20200612103803571 .png" alt = " image-20200612103803571 " style = " zoom : 50 % ; " />
67
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/3 .png?raw=true )
68
68
69
69
项目的实现内容很简单,就是接收参数-->执行操作,下面我们来看这是怎么实现的。在` recTest.java ` 中,存在如下代码:
70
70
@@ -102,7 +102,7 @@ public void CommandFound(HttpServletRequest req, HttpServletResponse resp) throw
102
102
103
103
有心的朋友可能发现了,上述代码中没有出现任何一个可执行函数(如exec()、system()等),但是却存在 RCE 漏洞。如下图所示:
104
104
105
- ![ image-20200612112613979 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200612112613979 .png)
105
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/4 .png?raw=true )
106
106
107
107
可以发现,由于代码对于我们传入的类、传入类的方法、传入类的参数没有做任何限制,从而导致了 RCE 漏洞,这也是RCE 漏洞可能出现场景中的第二项。
108
108
@@ -130,17 +130,11 @@ CVE 地址:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-1871
130
130
131
131
值得注意的是,在这个漏洞的CVE 介绍中提到:”仅当未正确配置Java安全管理器时,这才是漏洞。“但其实这个漏洞有两个不同的点,如下图,当我们在Metasploit中搜索 cve-2010 -1871时:
132
132
133
- ![ image-20200629103124108 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200629103124108 .png)
133
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/5 .png?raw=true )
134
134
135
135
存在两个exploit,首先看第一个` auxiliary/admin/http/jboss_seam_exec ` 的配置
136
136
137
- ![ image-20200629103232160] (/Users/panda/Library/Application Support/typora-user-images/image-20200629103232160.png)
138
-
139
- 可以看到其实这个exploit 利用的点在` /seam-booking/home.seam `
140
-
141
- 而` exploit/multi/http/jboss_seam_upload_exec ` 的配置:
142
-
143
- ![ image-20200629103359432] (/Users/panda/Library/Application Support/typora-user-images/image-20200629103359432.png)
137
+ ![ 1.png] ( https://github.com/cn-panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/7.png?raw=true )
144
138
145
139
这个 exploit 利用点在` /admin-console.login.seam ` ,当配置了java安全管理器后,该漏洞利用不成功。
146
140
@@ -214,7 +208,7 @@ export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
214
208
* 解压` JBoss-seam 2.2.0.CR1.zip `
215
209
* 将解压后的文件放在jboss 目录下,如下图所示:
216
210
217
- ![ image-20200629111309879 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200629111309879 .png)
211
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/8 .png?raw=true )
218
212
219
213
* 进入` /jboss-seam ` 目录,编辑` build.properties ` 文件,在文件尾行加入以下代码:
220
214
@@ -225,25 +219,17 @@ jboss.home /home/panda/www/jboss
225
219
226
220
* 进入` jboss-seam/examples/booking ` 目录,然后执行安装命令:` ant deploy ` ,程序会自动安装,如下图所示:
227
221
228
- < img src = " /Users/ panda/Library/Application Support/typora-user-images/image-20200629111620575 .png" alt = " image-20200629111620575 " style = " zoom : 50 % ; " />
222
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/9 .png?raw=true )
229
223
230
224
安装完毕后在进入jboss 安装的根目录下的` bin ` 文件,执行` ./run.sh ` 命令,如下图所示:
231
225
232
- ![ image-20200629111757555 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200629111757555 .png)
226
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/10 .png?raw=true )
233
227
234
228
安装完毕后,在本机环境即可打开该站点,如下图所示:
235
229
236
- ![ image-20200629112442833] (/Users/panda/Library/Application Support/typora-user-images/image-20200629112442833.png)
237
-
238
- ![ image-20200629112512426] (/Users/panda/Library/Application Support/typora-user-images/image-20200629112512426.png)
239
-
240
- ####3 、案例漏洞分析
241
-
242
- 本案例漏洞的原因是因为JBoss EL表达式解析的问题导致了表达式注入。漏洞文件为:` jboss-seam/examples/booking/exploded-archives/jboss-seam-booking.ear/jboss-seam.jar `
243
-
244
- 反编译后可以得到源码,目录如下:
230
+ ![ 1.png] ( https://github.com/cn-panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/11.png?raw=true )
245
231
246
- ![ image-20200706101132378 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200706101132378 .png)
232
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/13 .png?raw=true )
247
233
248
234
在本目录下的/navigation/Pages.java 文件是漏洞的入口,关键代码如下:
249
235
@@ -326,7 +312,7 @@ private static boolean isOutcomeViewId(String outcome) {
326
312
327
313
整个漏洞流程如下图所示:
328
314
329
- ![ 14 ] (/Users/ panda/Desktop/Java 代码审计学习/java 代码审计入门 - 05/ img/14.png)
315
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/ img/14.png?raw=true )
330
316
331
317
漏洞的逻辑线上面介绍的比较清楚了,下面的关键是如何构建我们想要的 JBoss EL 表达式。JBoss EL 表达式是在 Java EL 表达式基础上的增强。比如说我们想进行参数绑定,那么可以:
332
318
@@ -399,7 +385,7 @@ expressions.getClass().forName('java.lang.Runtime').getDeclaredMethod('getRuntim
399
385
400
386
执行效果如下:
401
387
402
- ![ image-20200707211334356 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200707211334356 .png)
388
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/15 .png?raw=true )
403
389
404
390
网上也有其他形式的 payload,首先使用` getDeclaredMethods() ` 得到所有方法,然后采用数组的形式调用指定方法。
405
391
@@ -409,7 +395,7 @@ expressions.getClass().forName('java.lang.Runtime').getDeclaredMethod('getRuntim
409
395
/seam-booking/home.seam?actionOutcome=/test.xhtml?xxx=%23{expressions.getClass().forName('java.lang.Runtime').getDeclaredMethods()[0]}
410
396
```
411
397
412
- ![ image-20200707213038246 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200707213038246 .png)
398
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/16 .png?raw=true )
413
399
414
400
返回的是:
415
401
@@ -434,7 +420,7 @@ untime').getDeclaredMethods()[6].invoke(null), 'gnome-calculator')}
434
420
435
421
执行效果:
436
422
437
- ![ image-20200707212611658 ] (/Users/ panda/Library/Application Support/typora-user-images/image-20200707212611658 .png)
423
+ ![ 1.png ] ( https://github.com/cn- panda/JavaCodeAudit/blob/master/%E3%80%9005%E3%80%91RCE%20%E6%BC%8F%E6%B4%9E%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E9%99%85%E6%A1%88%E4%BE%8B%E4%BB%8B%E7%BB%8D/img/17 .png?raw=true )
438
424
439
425
440
426
0 commit comments