Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/ryanpohlner/arcgis-web-shell
权限提升漏洞利用Web应用程序漏洞利用后渗透利用渗透测试红队远程访问工具Payload 开发
GitHubryanpohlner/arcgis-web-shell

arcgis-web-shell

ArcGIS Enterprise 地理处理服务,用于发布可执行命令的 Python 工具箱。

查看仓库
5284个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

通过地理处理服务实现的 ArcGIS Web Shell

本仓库包含一个 ArcGIS 地理处理服务定义,该定义将 Python 工具箱发布为命令执行任务。它仅用于经授权的安全测试。

请勿在未获得明确授权的系统上发布或使用此服务。地理处理服务以 ArcGIS Server 服务账户身份运行服务器端代码,因此本项目可创建一个类似 Web Shell 的接口来访问主机。

这是什么

主要产物是 ArcGIS_Shell,这是一个带有一个输入参数的 Python 工具箱任务:

command

当任务运行时,服务器通过操作系统 shell 执行该命令,并通过 ArcGIS 任务结果返回正常的控制台输出。

该仓库包含两个预构建的 ArcGIS 服务定义文件:

ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd

它还包括提取出的服务定义文件夹:

ArcGIS_Shell_10.9.1_and_earlier/
ArcGIS_Shell_11_or_later/

这些文件夹包含 ArcGIS 打包进 .sd 归档文件的文件,其中包括嵌入的 ArcGIS_Shell.pyt 文件。在更改服务定义时,编辑提取出的文件夹,然后使用 package_sd.py 重新构建 .sd 文件。

服务定义

ArcGIS 服务定义(.sd)是一种打包的部署产物。它包含服务元数据、配置、工具箱或地图资源,以及 ArcGIS Server 发布服务所需的支持文件。

在本仓库中,每个 .sd 都是一个使用 ArcGIS 兼容压缩设置的 7-Zip 归档文件:

-ms=off
-m0=LZMA:d=14

这两个服务定义文件夹的主要区别在于 ArcGIS 打包版本:

10.9.1 and earlier: p20 paths, offlineSDVersion10x, ArcGIS 2.9 schema
11 or later:        p30 paths, offlineSDVersion11,  ArcGIS 3.1 schema

内嵌的 Python 工具箱逻辑在两者中完全相同。

地理处理服务

ArcGIS 地理处理服务通常用于通过 HTTP 暴露 GIS 分析工作流。一个常见的工作流是:

  1. 在 ArcGIS Pro 中编写 Python 工具箱、模型或脚本工具。
  2. 将其发布为地理处理服务。
  3. 从 ArcGIS 客户端、Web 应用或 REST 客户端调用该服务。
  4. 让 ArcGIS Server 运行该工具并返回结果。

合法示例包括裁剪要素、运行网络分析、处理栅格、生成报告以及执行批量 GIS 转换。

重要的安全属性在于,地理处理任务在服务器端执行 Python。如果已发布的任务接受用户控制的输入并将其传入危险的原语(例如 subprocess.run(..., shell=True)),该地理处理任务就会变成一个命令执行接口。这正是本项目所演示的内容。

为什么这可以被滥用

Shell 任务接受一个名为 command 的字符串参数。Python 工具箱会在 ArcGIS Server 主机上运行该命令,并在任务结果中返回 stdout/stderr。

这意味着,拥有发布或管理 ArcGIS 地理处理服务权限的操作者,可以通过正常的 ArcGIS 功能创建一个类似 Web Shell 的服务。该命令在 ArcGIS Server 进程账户的安全上下文中运行。

该服务还启用了 ArcGIS 的 Uploads 能力。这会暴露服务的上传端点:

/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads
/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/upload

ArcGIS Server 将上传内容存储在站点系统目录中,通常位于类似以下路径下:

<arcgisserver>/directories/arcgissystem/arcgisuploads/<itemID>

具体路径取决于 ArcGIS Server 目录配置。管理员可以通过以下方式查看已上传的项目:

https://<server>/arcgis/admin/uploads?f=pjson

不要手动修改或删除 arcgissystem 中的文件。请通过 REST 或 Administrator Directory 删除上传项。

通过 ArcGIS Server Manager 发布

使用与目标 ArcGIS 版本匹配的 .sd 文件:

ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd

典型的 Server Manager 流程:

  1. 打开 ArcGIS Server Manager:

    https://<server>/arcgis/manager
    
  2. 使用有权发布服务的账户登录。这通常包括 portaladmin。

  3. 转到 Services。

  4. 点击 Publish Service。

  5. 上传与 ArcGIS 版本对应的 .sd 文件。点击 Next。

  6. 在“Specify properties for your new service”页面上,根据需要修改服务名称。点击 Next。

  7. 在“Share your services with”页面上,无需勾选任何复选框。点击 Publish。

  8. 服务会自动启动。点击服务名称,然后点击 Capabilities,再点击 REST URL。

要删除服务,请点击服务名称旁边的“X”。

预构建的 .sd 文件已包含:

"capabilities": "Uploads"

它们还包含用于测试的广泛上传设置:

"maxUploadFileSize": "2048",
"allowedUploadFileTypes": "<broad explicit extension list>"

maxUploadFileSize 以 MB 为单位。该扩展名列表为评估工作有意设置得较为宽泛,但它仍然是一个显式的允许列表,而不是真正的“允许一切”通配符。

使用 REST Web GUI

发布后,在 ArcGIS REST Services Directory 中打开该服务:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer

如果服务发布在某个文件夹内,请包含该文件夹名称:

https://<server>/arcgis/rest/services/<folder>/ArcGIS_Shell/GPServer

打开任务:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/Shell

点击 Execute Task。

设置你的命令并提交表单。任务结果应包含命令输出。

输出为 JSON 格式,因此换行符会被转义(\r\n)。你需要对多行输出进行后处理。

由于该任务使用操作系统 shell,因此 shell 内置命令可以正常工作:

dir
echo test
whoami /groups

在 Linux 目标上,使用 Linux 命令:

id
uname -a
pwd

上传文件

打开 uploads 资源:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads

点击 Upload Item,或直接前往:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/upload

如果启用了上传功能,REST Web GUI 应显示文件选择器。

使用该表单选择文件并提交上传。响应中包含一个 itemID。

使用以下命令检查已上传的项目:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/<itemID>

使用以下命令删除已上传的项目:

https://<server>/arcgis/rest/services/ArcGIS_Shell/GPServer/uploads/<itemID>/delete

使用该页面上的 REST Web 表单提交删除操作。

上传的文件同样受 ArcGIS Server 系统目录清理策略的约束。默认的系统目录清理期限通常为 24 小时,但管理员可以更改。

在磁盘上查找已上传的文件

ArcGIS 将服务上传文件存储在 ArcGIS Server 站点系统目录中,而不是在服务文件夹中,也不在 .sd 包内。常见位置是:

<server-directories-root>/arcgissystem/arcgisuploads/<itemID>/

常见 Windows 布局:

C:\arcgisserver\directories\arcgissystem\arcgisuploads\<itemID>\

常见 Linux 布局:

/arcgis/server/usr/directories/arcgissystem/arcgisuploads/<itemID>/

这些只是示例。确切路径取决于 ArcGIS Server 站点目录的配置方式。

要查找确切的磁盘路径,请打开 Administrator Directory:

https://<server>/arcgis/admin/uploads?f=pjson

查找已上传项的 itemID。该条目应包含类似以下内容的字段:

{
  "itemID": "if4582d33-f10a-41fe-85bc-cf2e2880c46e",
  "itemName": "authorized_test_binary.exe",
  "pathOnServer": "c:\\arcgisserver\\directories\\arcgissystem\\arcgisuploads\\if4582d33-f10a-41fe-85bc-cf2e2880c46e",
  "committed": true
}

pathOnServer 是上传项目录。上传的文件通常位于该目录内并使用 itemName,因此完整文件路径通常是:

<pathOnServer>\<itemName>

对于上面的示例:

C:\arcgisserver\directories\arcgissystem\arcgisuploads\if4582d33-f10a-41fe-85bc-cf2e2880c46e\authorized_test_binary.exe

在 Linux 上:

/arcgis/server/usr/directories/arcgissystem/arcgisuploads/if4582d33-f10a-41fe-85bc-cf2e2880c46e/authorized_test_binary

对于经授权的渗透测试,如果你上传了一个评估二进制文件,然后希望 Shell 任务与其交互,这就是你需要的路径。首先确定 itemID,然后从 Administrator Directory 获取 pathOnServer,再将其与 itemName 组合。如果确切文件名不明确,请在运行任何内容之前使用 Shell 任务列出上传项目目录:

dir "C:\arcgisserver\directories\arcgissystem\arcgisuploads\<itemID>"

或在 Linux 上:

ls -la "/arcgis/server/usr/directories/arcgissystem/arcgisuploads/<itemID>"

不要手动从 arcgissystem 中删除文件。请使用服务上传删除页面或 Administrator Directory,以便 ArcGIS 保持其上传元数据一致。

重建服务定义

安装 7-Zip。

Windows:

winget install 7zip.7zip

Kali/Debian:

sudo apt update
sudo apt install p7zip-full

重新构建两个 .sd 文件:

python3 package_sd.py ArcGIS_Shell_10.9.1_and_earlier
python3 package_sd.py ArcGIS_Shell_11_or_later

在 Windows 上:

python .\package_sd.py .\ArcGIS_Shell_10.9.1_and_earlier
python .\package_sd.py .\ArcGIS_Shell_11_or_later

如果 7-Zip 不在 PATH 中,请显式传入其路径:

python3 package_sd.py ArcGIS_Shell_11_or_later --seven-zip /usr/bin/7z

打包程序会将解压文件夹的内容归档到 .sd 根目录下。它不包含该文件夹本身。

文件布局

ArcGIS_Shell.pyt
package_sd.py
ArcGIS_Shell_10.9.1_and_earlier.sd
ArcGIS_Shell_11_or_later.sd
ArcGIS_Shell_10.9.1_and_earlier/
ArcGIS_Shell_11_or_later/

.sd 文件是你发布的内容。提取出的文件夹是你编辑并用 package_sd.py 重新打包的内容(如有需要)。ArcGIS_Shell.pyt 包含在 .sd 文件和提取出的文件夹中,它仅放在仓库根目录以便于审阅。

2026 年 6 月 ArcGIS 安全公告背景

Esri 的 2026 年 6 月 ArcGIS 安全公告 描述了针对 ArcGIS Enterprise 账户恢复配置的活跃攻击。

该公告特别指出:

  • 内置的 ArcGIS Enterprise 账户恢复功能正被攻击。
  • CVE-2026-13020,一种弱密码恢复机制,涉及 Portal for ArcGIS 12.1 及更早版本中基于安全问题的密码重置。
  • CVE-2026-13019,在受影响版本中启用基于电子邮件的重置并未完全阻止默认的安全问题重置端点。
  • Esri 建议应用 Portal for ArcGIS Security 2026 Update 2 补丁,尽可能使用 SAML/OIDC,避免使用弱恢复答案,避免使用常见的内置管理员名称,禁用 Portal PSA 和 Server IAA 账户,并运行 Security & Privacy Adviser。

对于渗透测试人员而言,这一点很重要,因为薄弱的账户恢复配置可能成为进入 ArcGIS Enterprise 的初始访问路径。如果评估发现某个内置管理账户存在弱恢复问题/答案,例如常见的 portaladmin 风格账户,其影响并不限于门户登录。管理访问权限可能导致发布或修改服务器端服务。恶意操作者或测试操作者随后可以发布类似本项目的 geoprocessing 服务,以演示认证后命令执行风险。

在授权评估中使用本项目来验证并传达该攻击链:

Weak built-in account recovery -> privileged ArcGIS access -> publish GP service -> server-side command execution

防御性要点:修补 Portal for ArcGIS,优先使用集中式身份提供程序,对管理账户强制启用 MFA,移除可预测的内置管理员账户名称,禁用未使用的特权内置账户,限制可发布 GP 服务的人员,并审计已发布的服务是否存在有风险的 Python/toolbox 行为。

下载工具