跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

Sophos XG漏洞调试环境搭建


CHQ1d

推荐的帖子

0x00 前言

索福思UTM和索福思XG是两款不同的产品,前者偏向于通用威胁管理,后者偏向于硬件防火墙。本文将要介绍索福思XG漏洞调试环境的搭建方法。

0x01 简介

本文将要介绍以下内容:

环境搭建

码头调试环境搭建

乡村基配置文件解密

一种数据库系统数据库查询

0x02 基础知识

架构如下图

1-1.png

注:

图片引用自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

配置如下图

1-2.png

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远程调试

如下图

1-3.png

在调试过程中,如果遇到无法下断点的情况,重启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,如下图

2-1.png

切换到十六进制视图,如下图

2-2.png

将/_conf/csc修改为/var/aaaaa,如下图

2-3.png

右键选择应用更改

依次选择编辑-补丁程序-将补丁应用到输入文件.-好吧,生成新的文件乡村基

(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,如下图

2-4.png

配置文件导出成功

(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调试环境过程中一些问题的解决方法。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...