CHQ1d 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 索福思UTM和索福思XG是两款不同的产品,前者偏向于通用威胁管理,后者偏向于硬件防火墙。本文将要介绍索福思XG漏洞调试环境的搭建方法。 0x01 简介 本文将要介绍以下内容: 环境搭建 码头调试环境搭建 乡村基配置文件解密 一种数据库系统数据库查询 0x02 基础知识 架构如下图 注: 图片引用自https://代码白色秒。博格斯波特。com/2020/07/sophos-XG-tale-of-faultry-re。超文本标记语言 总的来说,分为以下三部分: 码头:处理网数据,将数据转发至乡村基作进一步处理 csc:主程序:加载Perl语言包,实现主要功能 Postgresql:用来存储数据 我在实际研究过程中,这三部分遇到了以下问题: 码头:添加调试信息后无法启动Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站) csc:csc加载Perl语言包后会自动删除,无法获得Perl语言包的实现细节 Postgresql:用户权限低,无法查询数据库表 下面将要逐个介绍三个问题的解决方法 0x03 环境搭建 参考资料: https://份文件。索福思。com/NSG/sophos-firewall/18.5/Help/en-us/web Help/online Help/virtualandsoftware appliances Help/VMware/VMware install/index。超文本标记语言 1.下载安装包 官方网站默认只提供最新版本的下载,但是可以通过猜测正确的版本号下载旧版本 例如18.5.3虚拟安装程序:用于VMware的防火墙操作系统: https://下载。索福思。com/network/sophos firewall/installers/VI-18。5 .3 _ MR-3 .VMW-408.zip 18.5.2虚拟安装程序:用于VMware的防火墙操作系统: https://下载。索福思。com/network/sophos firewall/installers/VI-18。5 .2 _ MR-2 .VMW-380.zip 2.导入VMware Workstation 下载得到活力文件,解压后运行sf _虚拟。ovf 3.VMware Workstation网卡配置 需要添加两个网卡虚拟机网络七和虚拟机网络8、虚拟机网络七设置为仅限主机和虚拟机网络8设置为纳特,具体方法如下: (1)VMnet7 打开VMware工作站,依次选择编辑-虚拟网络编辑器. 加法网络.-虚拟机网络七 虚拟机网络七设置为: 类型:仅限主机 子网地址:172.16.16.0 (2)VMnet8 虚拟机网络8设置为: 类型:NAT 4.Sophos XG网卡配置 网络适配器设置为虚拟机网络七 网络适配器2设置为虚拟机网络8 网络适配器3设置为虚拟机网络8 配置如下图 5.启动Sophos XG 默认登录口令:管理 6.查看IP地址 依次输入1.网络配置-1。界面形状 得到局域网的互联网协议(互联网协议的缩写)为172.16.16.16 7.进入Web配置页面进行激活 浏览器访问https://172.16.16.16:4444 注册页面选择:我没有序列号(开始试用) 按照提示进行注册 注册成功后,重新访问https://172.16.16.16:4444进行配置 0x04 jetty调试环境搭建 1.查看Java进程相关信息 执行命令:ps ww|grep java 输出: Java 3238 923 root 1393m 264m S/lib/JVM/Java-11-open JDK/bin/Java-xmx 384m-xms 12m-XSS 256k-XX:MaxMetaspaceSize=100m-dhybrid。已启用=false-djna。tmpdir=/tmp/Java-djava。io。tmpdir=/tmp/Java-dsun。jnu。编码=UTF-8-d文件。编码=UTF-8-贾瓦。awt。无头=真 从输出中得到Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)版本为java-11-openjdk 2.定位配置文件 配置文件路径为/usr/bin/jetty,内容如下: #!/bin/sh if[' $ { RAM } '==' 2GB '];然后 heap_size=256 elif[' $ { RAM } '==' 4GB '];然后 heap_size=384 其他 heap_size=512 船方不负担装货费用 混合启用=假 if[$ HYBRID _ ENABLED=true];然后 HYBRID _ ENABLED=` opcode gethainfo-s no sync | grep-q ' hamode=1 ' echo ' true ' | | echo ' false ' ` 1 船方不负担装货费用 如果[!-d/tmp/Java];然后 mkdir /tmp/java 船方不负担装货费用 /scripts/umnt _ mount _ dir。sh ' JVM ' '/tmp/Java ' '装载' ## #太阳。jnu。编码=UTF 8文件。编码需要系统属性,否则某些java APIs无法读取文件名中包含双字节字符的文件。 ## exec/lib/JVM/Java-11-open JDK/bin/Java-Xmx $ { heap _ size } m-xms 12m-XSS 256k '-XX:MaxMetaspaceSize=100m ' '-dhybrid。ENABLED=$ { HYBRID _ ENABLED }“”-djna。tmpdir=/tmp/Java ' '-DJ ava。io。tmpdir=/tmp/Java ' '-dsun。jnu。编码=UTF-8 ' '-dfile。编码=UTF-8 ' '-DJ阿瓦。awt。无头=真 /scripts/umnt _ mount _ dir。sh ' JVM ' '/tmp/Java ' 退出$? 3.添加调试参数 修改文件属性:安装-哦,rw,重新安装/ 在高级管理人员所在行添加调试参数:'-代理库:jdwp=transport=dt _ socket,server=y,suspend=n,address=*:8000 ' 4.重启服务 执行命令:service tomcat:restart -ds nosync 查看服务状态:service -S | grep tomcat 发现雄猫状态为停止 为了获得详细的报错信息,直接运行/usr/bin/jetty 输出: 虚拟机初始化期间出错 在库路径上找不到代理库jdwp,错误为:libjdwp.so:无法打开共享对象文件:没有这样的文件或目录 发现是JDK的问题,这里选择替换一个完整的JDK 5.替换JDK 下载JDK 11号。0 .15 _ Linux-x64 _ bin。焦油。地面零点并上传至索福思XG 备份原文件夹:CP-r/lib/JVM/Java-11-打开JDK/lib/JVM/Java-11-打开JDK _备份 将JDK 11号。0 .15 _ Linux-x64 _ bin。焦油。地面零点解压:tar zxvf/tmp/JDK-11。0 .15 _ Linux-x64 _ bin。焦油。地面零点 替换/lib/jvm/java-11-openjdk: rm -rf /lib/jvm/java-11-openjdk JDK-11。0 .15/lib/JVM/Java-11-打开JDK 6.再次重启服务 执行命令:service tomcat:restart -ds nosync 查看服务状态:service -S | grep tomcat 发现雄猫状态为运转 确认参数被修改,执行命令:ps ww|grep java 输出: Java 1827 923 root 1454m 158m S/lib/JVM/Java-11-open JDK/bin/Java-xmx 384m-xms 12m-XSS 256k-XX:MaxMetaspaceSize=100m-dhybrid。已启用=false-djna。tmpdir=/tmp/Java-agent lib:jdwp=transport=dt _ socket,server=y,suspend=n,address=*:8000-djava。io。tmp目录=/Java-Java 7.修改防火墙规则 执行命令:iptables -I输入-p TCP-d端口8000 -j接受 8.使用IDEA远程调试 如下图 在调试过程中,如果遇到无法下断点的情况,重启Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)服务即可:service tomcat:restart -ds nosync 0x05 csc配置文件解密 查看乡村基进程相关信息 执行命令:ps ww|grep csc 部分输出: CSC 859 1 root 25916 23600s CSC-L 3-w-c/_ conf/cscconf。箱子 CSC 869 859 root 8628 452s CSC-L 3-w-c/_ conf/cscconf。箱子 CFS 870 859 root 34736 29380s { CFS } CSC-L 3-w-c/_ conf/cscconf。箱子 listener 871 859 root 21752 15088s { listener } CSC-L 3-w-c/_ conf/cscconf。箱子 lcdd 889 871 root 21108 13556s { lcdd } CSC-L 3-w-c/_ conf/cscconf。箱子 postgres 890 871 root 29712 25040s { postgres } CSC-L 3-w-c/_ conf/cscconf。箱子 sigdb 891 871 root 26756 23208s { sigdb } CSC-L 3-w-c/_ conf/cscconf。箱子 报告db 892 871 root 26756 23104S {报告db } CSC-L 3-w-c/_ conf/cscconf。箱子 a沃伦SMTP 893 871 root 25916 22296S { a沃伦SMTP } CSC-L 3-w-c/_ conf/cscconf。箱子 乡村基进程读取/_conf/cscconf.bin作为配置文件,而/_conf/cscconf.bin是一个加密的文件,所以这里需要对/_conf/cscconf.bin进行解密 这里我采用的方法是通过国际开发协会修改程序代码,改变实现逻辑,导出解密后的配置文件 使用国际开发协会加载csc,查看主()函数的实现逻辑,部分代码: 有符号int __cdecl csc_main(int a1,char *const *a2) { //* * * *忽略代码*****// if ( strlen(v14) 4) { v4=strlen(14节); 如果(!strcmp(v14[v4 - 4],' .bin ')) { extract _ conf((int)v 14); v17=1; v14='/_ conf/CSC/CSC。conf '; } } //* * * *忽略代码*****// 如果(第17版) 系统( RM-RF/_ conf/CSC/CSC/_ conf/CSC/CSC。conf/_ conf/CSC/CSC conf/_ conf/CSC/constants。conf/_ conf/CSC/CSC conf焦油。' g ' z/_ conf/CSC/global。conf/_ conf/CSC/CFS conf/_ conf/CSC/service/_ conf/CSC/bind _ file _ list '); //* * * *忽略代码*****// } 分析以上代码,csc先调用extract_conf()函数导出配置,最后执行系统命令RM-RF/_ conf/CSC/CSC/_ conf/CSC/CSC。conf/_ conf/CSC/CSC conf/_ conf/CSC/constants。conf/_ conf/CSC/CSC conf焦油。gz/_ conf/CSC/CSC/global。conf/_ conf/CSC/CFS conf/_ conf/CSC/service/_ conf/CSC/bind _ file _ list删除配置文件,导致我们无法直接获得相关配置文件 查看extract_conf()函数的实现代码: 无符号int __cdecl extract_conf(int a1) { int v2//[esp 18h] [ebp-10h] 无符号int v3//[esp 1Ch] [ebp-Ch] v3=_ _ readgsdword(0x14u); system(' mount-make-private/_ conf/CSC '); if ( mount('none ','/_conf/csc ',' tmpfs ',0,0)) { puts(“装载tmpfs失败"); 出口(70); } v2=sub_8052494(a1,'/_ conf/CSC/cscconf。焦油。gz’); 如果(v2==-1) { printf('无法读取文件%s\n ',a1); 出口(70); } 如果(v2==-2) { printf('无法读取文件2 %s\n ',a1); 出口(70); } 系统(' tar-zxf/_ conf/CSC/cscconf。焦油。gz-C/_ conf/CSC’); 返回_ _ readgsdword(0x14u)^ v3; } 分析以上代码,csc先调用sub_8052494()函数对/_conf/csc/cscconf.tar.gz进行解密,接着执行系统命令tar-zxf/_ conf/CSC/CSC conf。焦油。gz-C/_ conf/CSC将配置文件释放到文件夹/_conf/csc 综合以上分析,我们可以采取以下方式导出配置文件:修改乡村基程序,将释放路径/_conf/csc修改为另一路径,例如/var/aaaaa,那么,csc在删除配置文件时,由于指定了固定的绝对路径,导致无法删除新的文件夹,这样我们就能从中获得完整的配置文件 具体的实现方法如下: (1)修改csc 使用国际开发协会加载csc,查看出口,找到提取_确认,双击进入国际开发协会视图,定位到字符串tar-zxf/_ conf/CSC/CSC conf。焦油。gz-C/_ conf/CSC,如下图 切换到十六进制视图,如下图 将/_conf/csc修改为/var/aaaaa,如下图 右键选择应用更改 依次选择编辑-补丁程序-将补丁应用到输入文件.-好吧,生成新的文件乡村基 (2)替换csc 通过嘘登录,上传新的文件csc,保存至/tmp/csc 备份乡村基并进行替换,执行以下命令: 安装-哦,rw,重新安装/ CP/usr/bin/CSC/usr/bin/CSC _原始 mkdir /var/aaaaa cp /tmp/csc /usr/bin/csc chmod 755 /usr/bin/csc ll /usr/bin/csc 重新启动 (3)确认配置文件是否导出成功 等待系统重启,进入底层壳,依次输入5.设备管理-3。高级外壳 查看文件夹/var/aaaaa,如下图 配置文件导出成功 (4)恢复csc 安装-哦,rw,重新安装/ CP/usr/bin/csc _原件/usr/bin/CSC 重新启动 (5)下载配置文件 通过嘘登录,下载文件夹/var/aaaaa中的内容 0x06 Postgresql数据库查询 查看端口信息,执行命令:netstat -tulpen |grep postgres 输出: tcp 0 0 127.0.0.1:5432 0.0.0.0:*列表EN 65534 3800 1087/postgres tcp 0 0 127.0.0.1:5433 0.0.0.0:*列表EN 65534 5846 1182/postgres tcp 0 0 127.0.0.1:5434 0.0.0.0:*列表EN 65534 5813 1161/postgres 通过搜索,发现以上三个数据库的连接信息依次对应以下三个文件: /usr/share/web控制台/属性/连接池。稳频发电机(发生器)(constant frequency generator的缩写) /usr/share/web console/properties/connectionpoolforreports。稳频发电机(发生器)(constant frequency generator的缩写) /usr/share/web console/properties/connectionpoolforsignature。稳频发电机(发生器)(constant frequency generator的缩写) 文件中的配置信息如下: JDBCConnectionURL=JDBC:PostgreSQL://127。0 .0 .1:5432/法人?user=pgrouserautoReconnect=true JDBCConnectionURL=JDBC:PostgreSQL://127。0 .0 .1:5433/iviewdb?user=pgrouserautoReconnect=true JDBCConnectionURL=JDBC:PostgreSQL://127。0 .0 .1:5434/签名?user=pgrouserautoReconnect=true 测试命令1: psql -p 5432公司-采购人员 公司=\d 输出: 错误:关系pg_class的权限被拒绝 提示没有权限 测试命令2: psql -p 5432公司-采购人员 select * from tbluser 能够获得用户信息 注: 将用户pgrouser换成没有人具体相同的权限 从以上信息得知,用户pgrouser和没有人都不是根用户,功能受限,下面尝试寻找根用户 对解密的乡村基配置文件进行检测,定位到\service\postgres.csc,关键文件内容: ' EXEC/bin/sync cmd '/sbin/pg _ dump-U pg root corporate-a-disable-triggers-t tblhavmac-f/tmp/corp hav MAC ' ' EXEC/bin/sync cmd '/sbin/pg _ dump-U pg root corporate-a-disable-triggers-t TBL接口-t tblip地址-f/tmp/corp ifdb ' ' EXEC/bin/sync cmd '/sbin/pg _ dump-U pg root corporate-a-disable-triggers-n config-T tblliveslvpnuses-T tblhbcloudcredential-f/tmp/corp db ' 找到关键用户pgroot 测试命令3: psql -U pgroot -d公司 \d 执行成功 0x07 小结 本文介绍了在搭建索福思XG调试环境过程中一些问题的解决方法。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子