返回首页
EN
H7 / SECURITY RESEARCH NOTES

如何调试 Sliver?

本页导航6 个章节

背景

  • 我最近开始研究 Sliver。为了加深对其功能和能力的理解,我计划通过调试并试验它的各项功能来进一步学习。

关键步骤

环境配置

  • Goland

  • Go v1.21 或更高版本

  • 安装 Delve

https://github.com/go-delve/delve/tree/master/Documentation/installation
  • Sliver 源代码

  • Kali Linux:用于运行 Sliver 服务端。

调试服务端

  • 如果调试期间需要频繁修改 Sliver 代码,建议每次都使用以下命令编译并运行代码:
dlv debug \
--build-flags="-tags osusergo,netgo,go_sqlite,server -ldflags='-X github.com/bishopfox/sliver/client/version.Version=1.1.2 -X github.com/bishopfox/sliver/client/version.CompiledAt=Never -X github.com/bishopfox/sliver/client/version.GithubReleasesURL=github.com -X github.com/bishopfox/sliver/client/version.GitCommit=aabbcc -X github.com/bishopfox/sliver/client/version.GitDirty=Dirty'" \
--headless \
--listen=:2345 \
--api-version=2 \
--log \
github.com/bishopfox/sliver/server

  • 如果不需要频繁修改 Sliver 代码,只需编译一次。此后每次都可以直接运行而无需重新编译,从而节省编译时间。
# compile
go build -tags osusergo,netgo,go_sqlite,server -ldflags='-X github.com/bishopfox/sliver/client/version.Version=1.1.2 -X github.com/bishopfox/sliver/client/version.CompiledAt=Never -X github.com/bishopfox/sliver/client/version.GithubReleasesURL=github.com -X github.com/bishopfox/sliver/client/version.GitCommit=aabbcc -X github.com/bishopfox/sliver/client/version.GitDirty=Dirty' -o sliver_server github.com/bishopfox/sliver/server

# run
dlv exec \
--headless \
--listen=:2345 \
--api-version=2 \
--log \
./sliver_server
  • 配置本地 Goland 的 Debug 选项,为调试做好准备。

  • 设置断点,开始调试 Sliver 服务端。

  • 接下来,需要确保本地(Goland)环境中的代码与虚拟机中的 Sliver 代码保持一致。

  • Goland 的 Tools → Development → Configuration 下有一个配置选项。通过设置目录映射,可以在本地 Goland 中修改代码并将其同步到虚拟机,从而高效地编译最新代码。

  • 然后可以使用“Sync with Deployed to…”按钮比较本地环境与虚拟机中的代码,并将本地所做的更改同步到虚拟机。

调试植入体

  • 调试 Sliver 植入体的方式略有不同。

  • 要调试植入体,首先确保在执行 ‘generate ‘ 命令构建植入体时传入了’—debug’参数。

generate --os windows --arch 64bit --format exe --http 192.168.233.128 --debug

  • 需要开启 HTTP listener,让植入体连接到 Sliver 服务端。我们可以将上述命令生成的 ‘EQUIVALENT_CHURN.exe’ 下载到目标机器,并使用 Delve 运行它。此外,在 /root/.sliver/slivers/windows/amd64/ 目录下可以看到名为 ‘EQUIVALENT_CHURN’ 的文件夹,其中包含对应的植入体源代码和可执行文件。还需要将此文件夹下载到本地机器。随后即可在 Goland 中打开源代码、设置断点并开始调试。

dlv exec --api-version 2 --headless --listen 127.0.0.1:2445 --log .\EQUIVALENT_CHURN.exe

参考链接

# Debugging Sliver in official doc
1.https://sliver.sh/docs?name=Debugging