-
Sophos XG防火墙身份验证绕过漏洞(CVE-2022-1040)利用分析
0x00 前言 CVE-2022-1040是一个Sophos XG防火墙的身份验证绕过漏洞,漏洞细节可参考《CVE-2022-1040 Sophos XG Firewall Authentication bypass》,本文仅在此文章的基础上补全文中未提到的技术细节。 0x01 简介 本文将要介绍以下内容: 本地恢复带有漏洞的调试环境 OpCode的寻找方法 WAN和VPN区域的利用思路 开启login disclaimer切断利用链 0x02 本地恢复带有漏洞的调试环境 在本地搭建漏洞环境时,如果自动更新了补丁,可通过以下方式恢复成带有漏洞的调试环境: 编辑文件/usr/share/webconsole/WEB-INF/web.xml 定位以下内容: <filter> <filter-name>RequestCheckFilter</filter-name> <filter-class>cyberoam.sessionmanagement.RequestCheckFilter</filter-class> </filter> <filter-mapping> <filter-name>RequestCheckFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 这里使用RequestCheckFilter用来过滤request请求中JSON参数是否包含不可见字符 可以手动删除以上代码,恢复成带有漏洞的调试环境 无法直接修改文件/usr/share/webconsole/WEB-INF/web.xml 在修改文件前需要重新挂载:mount -o remount,rw / 再次修改文件即可 0x03 OpCode的寻找方法 原文中提到:CSC端大概有1200种模式在运行,其中有161种模式的响应类型为2 这里可以通过反编译EventBean.class找到如下代码: select opcode,mode,waitforresponse,operationtype,responsetype,requesttype,opcodetype,responsetimeout,entityid,beanname,syncable,comprotocol,query,requestname from tblcrevent order by mode 经过分析后,响应类型对应的应该为requesttype,而不是responsetype...
-
Sophos XG漏洞调试环境搭建
0x00 前言 Sophos UTM和Sophos XG是两款不同的产品,前者偏向于通用威胁管理,后者偏向于硬件防火墙。本文将要介绍Sophos XG漏洞调试环境的搭建方法。 0x01 简介 本文将要介绍以下内容: 环境搭建 jetty调试环境搭建 csc配置文件解密 Postgresql数据库查询 0x02 基础知识 架构如下图 注: 图片引用自https://codewhitesec.blogspot.com/2020/07/sophos-xg-tale-of-unfortunate-re.html 总的来说,分为以下三部分: Jetty:处理Web数据,将数据转发至csc作进一步处理 csc:主程序:加载Perl Packages,实现主要功能 Postgresql:用来存储数据 我在实际研究过程中,这三部分遇到了以下问题: Jetty:添加调试信息后无法启动java csc:csc加载Perl Packages后会自动删除,无法获得Perl Packages的实现细节 Postgresql:用户权限低,无法查询数据库表 下面将要逐个介绍三个问题的解决方法 0x03 环境搭建 参考资料: https://docs.sophos.com/nsg/sophos-firewall/18.5/Help/en-us/webhelp/onlinehelp/VirtualAndSoftwareAppliancesHelp/VMware/VMwareInstall/index.html 1.下载安装包 官方网站默认只提供最新版本的下载,但是可以通过猜测正确的版本号下载旧版本 例如18.5.3 Virtual Installers: Firewall OS for VMware: https://download.sophos.com/network/SophosFirewall/installers/VI-18.5.3_MR-3.VMW-408.zip 18.5.2 Virtual Installers: Firewall OS for...
-
Zimbra-SOAP-API开发指南3——操作邮件
0x00 前言 在之前的文章《Zimbra SOAP API开发指南》和《Zimbra-SOAP-API开发指南2》介绍了Zimbra SOAP API的调用方法,开源代码Zimbra_SOAP_API_Manage。 本文将要在此基础上扩充功能,添加邮件操作的相关功能。 0x01 简介 本文将要介绍以下内容: 查看邮件 发送邮件 删除邮件 0x02 查看邮件 Zimbra SOAP API说明文档:https://files.zimbra.com/docs/soap_api/9.0.0/api-reference/index.html 结合Zimbra SOAP API说明文档和调试结果得出以下实现流程: 调用Search命令获得邮件对应的Item id,通过Item id作为邮件的识别标志 获得Item id后可以对邮件做进一步操作,如查看邮件细节、移动邮件、删除邮件等 1.获得邮件对应的Item id 需要使用Search命令 说明文档:https://files.zimbra.com/docs/soap_api/8.8.15/api-reference/zimbraMail/Search.html 需要用到以下参数: (1)query 表示查看的位置,示例如下: 查看收件箱:<query>in:inbox</query> 查看发件箱:<query>in:sent</query> 查看垃圾箱:<query>in:trash</query> (2)limit 表示返回的查询结果数量,示例如下: 指定返回数量为10:<limit>10</limit> 如果不指定该属性,默认为10 测试代码: def searchinbox_request(uri,token): request_body="""<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <context xmlns="urn:zimbra"> <authToken>{token}</authToken>...
-
渗透基础——Exchange版本探测的优化
0x00 前言 在上篇文章《渗透基础——Exchange版本探测和漏洞检测》介绍了通过Python进行版本探测的两种方法,在版本识别上,首先从官网获得已知的版本信息,将版本信息存储在列表中,然后通过字符串匹配的方式获得Exchange版本的详细信息。开源的代码Exchange_GetVersion_MatchVul.py反馈很好。但是这个方法存在一个缺点:需要定期访问官网,手动更新扫描脚本中的版本信息列表。 为了进一步提高效率,本文介绍另外一种实现方法,通过访问官网,从返回数据中直接提取出详细的版本信息,优点是不再需要定期更新脚本。 0x01 简介 本文将要介绍以下内容: 通过BeautifulSoup解析网页数据 实现细节 开源代码 0x02 通过BeautifulSoup解析网页数据 BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,可以提高开发效率 安装: pip install bs4 1.基本使用 在Python实现上,需要先通过requests库获取网页内容,再调用BeautifulSoup进行解析 测试代码: from bs4 import BeautifulSoup import requests import urllib3 urllib3.disable_warnings() url = "https://docs.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36", } response...
-
渗透技巧——从VMware ESXI横向移动到Windows虚拟机
0x00 前言 假定以下测试环境:我们获得了内网VMware ESXI的控制权限,发现VMware ESXI上安装了Windows域控服务器。 本文仅在技术研究的角度介绍从VMware ESXI横向移动到该Windows域控服务器的方法,结合利用思路,给出防御检测的方法。 0x02 简介 本文将要介绍以下内容: 利用思路 常用命令 实现方法 0x03 利用思路 通过VMware ESXI管理虚拟机,创建快照文件,从快照文件中提取出有价值的信息。 0x04 常用命令 1.查看虚拟机版本 vmware -vl 2.用户信息相关 (1)查看所有用户 esxcli system account list (2)查看管理员用户 esxcli system permission list (3)添加用户 esxcli system account add -i test1 -p Password@1 -c Password@1 (4)将普通用户添加成管理员用户 esxcli system permission set -i...
-
Lsassy二次开发——添加dump方法
0x00 前言 在之前的文章《渗透基础——远程从lsass.exe进程导出凭据》介绍了Lsassy的用法,Lsassy能够实现远程从lsass.exe进程导出凭据。本文将要在Lsassy的基础上进行二次开发,添加一个导出凭据的方法,记录细节。 0x01 简介 本文将要介绍以下内容: 二次开发的细节 开源代码 0x02 导出凭据的方法 在之前的文章《渗透基础——从lsass.exe进程导出凭据》提到过使用RPC控制lsass加载SSP的方式向lsass.exe进程注入dll,由dll来实现dump的功能,这个方法是Lsassy缺少的 这个方法共分为两部分: (1)加载器 使用RPC控制lsass进程加载dll文件 可参考XPN开源的代码: https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e 在编译代码时,为了提高通用性,编译选项选择在静态库中使用MFC,在原代码的基础上添加如下代码: #pragma comment(lib, "Rpcrt4.lib") 编译代码生成文件rpcloader.exe (2)dll文件 dll文件实现从lsass.exe进程导出凭据,代码可参考: https://github.com/outflanknl/Dumpert/blob/master/Dumpert-DLL/Outflank-Dumpert-DLL/Dumpert.c dll加载时会将dump文件保存为c:\windows\Temp\dumpert.dmp 编译代码生成文件dumpert.dll 经过以上操作,得到文件rpcloader.exe和dumpert.dll,作为二次开发的准备 0x03 二次开发的细节 1.添加一个需要指定文件路径的dump方法 格式参考:https://github.com/Hackndo/lsassy/blob/master/lsassy/dumpmethod/dummy.py.tpl 根据参考格式写出模块代码,我这里额外做了一些标记,细节如下: from lsassy.dumpmethod import IDumpMethod, Dependency class DumpMethod(IDumpMethod): custom_dump_path_support = False custom_dump_name_support = False dump_name = "dumpert.dmp" //进程dump文件保存的文件名 dump_share...
-
Sophos UTM利用分析——清除Last WebAdmin Sessions记录
0x00 前言 对于Sophos UTM设备,在web管理页面中,Last WebAdmin Sessions会记录用户每次登录的信息,本文仅在技术研究的角度介绍清除指定Last WebAdmin Sessions记录的方法,记录研究细节。 0x01 简介 本文将要介绍以下内容: 研究过程 实现方法 0x02 Last WebAdmin Sessions简介 在web管理页面中,选中Management后会显示Last WebAdmin Sessions记录,如下图 记录包括以下内容: User:登录用户名 Start:登录时间 State:退出时间 IP address:登录IP Changelog:修改的配置 对于Changelog,点击Show,会显示修改的配置,如下图 默认配置下,Last WebAdmin Sessions会显示最近的20条记录 0x03 研究过程 1.尝试修改/var/confd/var/storage/cfg 在上篇文章《Sophos UTM利用分析——导出配置文件》提到,/var/confd/var/storage/cfg存储Sophos UTM的配置信息,所以猜测通过修改/var/confd/var/storage/cfg文件可以实现Last WebAdmin Sessions记录的清除 /var/confd/var/storage/cfg的文件格式为Perl Storable files,这里使用StorableEdit来编辑文件 向Sophos UTM上传文件storableedit-1.5.pl,执行命令: ./storableedit-1.5.pl cfg 结果如下图 解析出的文件结构同使用SophosUTM_ConfigParser.py导出的结果一致 查看配置信息,命令如下: cd...
-
渗透基础——获得域用户的登录信息
0x00 前言 在域渗透中,获得了域控制器权限后,需要获得域用户的登录信息,包括域用户登录的IP地址和登录时间。通常使用的方法是查看域控制器的登录日志(Eventid=4624)。然而,人工从登录日志(Eventid=4624)中筛选出域用户登录的IP地址和登录时间需要耗费大量时间,不仅无效数据多,而且需要多次判断,所以我们需要编写程序来实现这个功能。 在实际使用过程中,为了能够适配多种环境,还需要支持本地和多种协议的远程登录。于是本文将要分享我的实现方法,开源两个工具,记录细节。 0x01 简介 本文将要介绍以下内容: 通过EventLogSession实现 通过WMI实现 开源代码 0x02 通过EventLogSession实现 通过查询资料发现,通过EventLogSession不仅支持解析本地日志内容,还支持通过RPC远程解析日志,下面介绍关于EventLogSession的开发细节 1.输出Eventid=4624的日志内容 C Sharp实现代码: using System; using System.Diagnostics.Eventing.Reader; namespace Test1 { class Program { static void Main(string[] args) { var session = new EventLogSession(); string LogName = "Security"; string XPathQuery = "*[System/EventID=4624]"; EventLogQuery eventLogQuery = new EventLogQuery(LogName, PathType.LogName,...
-
Sophos UTM利用分析——导出配置文件
0x00 前言 对于Sophos UTM设备,介绍利用方法的资料很少,本文将要介绍从零研究导出配置文件的过程,记录细节,开源利用脚本。 0x01 简介 本文将要介绍以下内容: Sophos UTM测试环境搭建 导出配置文件的研究过程 开源脚本 0x02 Sophos UTM测试环境搭建 1.下载镜像 下载页面:https://www.sophos.com/en-us/support/downloads/utm-downloads 这里选择版本9.711-5.1,分别有以下两个镜像文件: ssi-9.711-5.1.iso,需要在Sophos设备上安装,如果直接在VM中安装,会提示"No appliance hardware has been detected" on appliance hardware asg-9.711-5.1.iso,可在VM中安装 测试环境使用VMware搭建,所以下载asg-9.711-5.1.iso 2.安装镜像 配置好后等待系统重启,访问配置页面:https://<ip>:4444/ 设置admin account password,作为登录配置页面的用户名和口令 3.配置 需要填入License 4.开启ssh登录 进入配置页面后,依次选择Management->System Settings->Shell Access,分别设置root用户和loginuser用户的口令 如下图 5.允许root用户口令登录ssh sed -i "s/PermitRootLogin no/PermitRootLogin yes /g" /etc/ssh/sshd_config /var/mdw/scripts/sshd restart...
-
渗透基础——远程从lsass.exe进程导出凭据
0x00 前言 在之前文章《渗透基础——从lsass.exe进程导出凭据》介绍了本地导出凭据的方法,而在渗透测试中,经常遇到的情况是需要远程导出凭据,本文将要介绍远程导出凭据的思路和方法,记录细节 0x01 简介 本文将要介绍以下内容: 思路 实现方法 lsassy介绍 0x02 思路 在远程导出凭据时,需要考虑以下几点: (1)需要实现远程命令执行,关于远程命令执行,可以参考之前的文章《在远程系统上执行程序的技术整理》 (2)由于保护措施的限制,不同环境需要不同的导出方法 (3)远程导出lsass进程的dump文件后,通常会选择将dump文件复制到本地,解析得到口令hash,而有的时候lsass进程的dump文件很大,所以需要考虑传输文件的效率 (4)对于多个系统,重复劳动太多,效率不高 综合以上几点,我们需要一个方便快捷的方法:支持多种导出方法,能够直接解析出口令hash,操作自动化以提高效率 这里可以使用开源工具Lsassy,地址为:https://github.com/Hackndo/lsassy 0x03 lsassy介绍 1.安装使用 安装命令: pip install lsassy 测试命令: lsassy -u Administrator -p Password1 192.168.1.1 在输出上,使用termcolor添加了颜色显示,在默认Windows cmd下无法正常显示颜色,会导致显示格式不友好,存在一些乱码 为了解决Windows下格式乱码的问题,可以修改<Python>\lib\site-packages\lsassy\logger.py,代码如下: import logging import os import sys class LsassyFormatter(logging.Formatter): def __init__(self): logging.Formatter.__init__(self, '%(bullet)s %(threadName)s %(message)s', None)...