18个版本 (破坏性更新)

0.13.1 2022年7月17日
0.12.1 2021年9月8日
0.11.0 2019年8月11日
0.10.1 2019年6月22日
0.3.0 2017年11月10日

#275 in 调试

Download history 53/week @ 2024-03-11 34/week @ 2024-03-18 36/week @ 2024-03-25 155/week @ 2024-04-01 35/week @ 2024-04-08 42/week @ 2024-04-15 78/week @ 2024-04-22 37/week @ 2024-04-29 45/week @ 2024-05-06 60/week @ 2024-05-13 42/week @ 2024-05-20 68/week @ 2024-05-27 77/week @ 2024-06-03 78/week @ 2024-06-10 61/week @ 2024-06-17 67/week @ 2024-06-24

每月291次下载
用于 6 个代码包

LGPL-3.0

91KB
2.5K SLoC

boxxy-rs 构建状态 crates.io docs.rs

"如果你实现了边界,但没有人去推动它们,它们甚至存在吗?" 你是否曾经想过你的沙箱内部看起来像什么?有没有想过测试你是否能从中逃脱,如果只是有一个shell来尝试一下呢?boxxy是一个库,可以链接到现有程序的调试构建中,并让你进入一个交互式shell。从那里,你可以逐步遍历沙箱的各个阶段,并验证它实际上包含™。

开发

cargo run --example boxxy

使用Rust进行链接

只需在你的Cargo.toml中添加dev-dependencies,并将examples/boxxy.rs复制到你的examples/文件夹。修改以包含你的沙箱。

[dev-dependencies]
boxxy = "0.*"

使用C进行链接

有一个示例程序,查看Makefile了解它是如何构建的。

make cboxxy

调用机器码

 [%]> # just RET to prompt
 [%]> jit ww==
 [%]> # print ohai and exit
 [%]> jit 6xpeuAEAAABIice6BQAAAA8FuDwAAABIMf8PBejh////b2hhaQo=

你可以使用objdump实用程序从汇编代码生成shellcode

make sc/ohai && cargo run --example objdump sc/ohai

从PHP调用

请参阅autoboxxy,了解从PHP加载boxxy的工具,即使shell_exec等已通过php.ini禁用。

静态二进制文件

您可能需要构建一个完全静态的二进制文件,这可以通过使用 x86_64-unknown-linux-musl 目标来实现。

cargo build --release --example boxxy --target x86_64-unknown-linux-musl
strip target/x86_64-unknown-linux-musl/release/examples/boxxy

调试systemd安全

有一个特殊的ipc二进制文件,它会自动将其stdio接口与Unix域套接字交换,因此可以用来调试systemd单元的安全设置。

准备 ipc-boxxy

cargo build --release --example ipc-boxxy
install -Dm755 target/release/examples/ipc-boxxy /usr/local/bin/ipc-boxxy

准备systemd单元

sudo tee /etc/systemd/system/[email protected] <<EOF
[Unit]
Description=ipc boxxy debugger

[Service]
User=root
ExecStart=/usr/local/bin/ipc-boxxy /run/boxxy-%i.sock

NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_UNIX
MemoryDenyWriteExecute=true
CapabilityBoundingSet=
InaccessiblePaths=-/etc/ssh

EOF

附加到shell

sudo target/debug/ipc-listener /run/boxxy-foo.sock 'systemctl start ipc-boxxy@foo'

您可以使用 exec 运行任意命令

exec bash -i

AWS lambda

示例文件夹包含了一个对lambdash的重实现,它将boxxy作为aws lambda部署,并允许您在上面执行命令。客户端支持跨账户访问,但需要一个预配置的角色,lambda将使用该角色。您需要首先构建一个 静态二进制文件

cargo run --features=aws --example lambdash -- \
    --assume-role arn:aws:iam::133713371337:role/AdminRole \
    --role arn:aws:iam::133337133337:role/lambda-test-role
    eu-west-1 boxxy

示例

存在易受攻击的沙箱(examples/vuln-*),作为挑战,可以使用boxxy shell进行利用(无需编译任何漏洞利用程序)。

不要发布剧透

例如,使用以下命令启动挑战:cargo run --example vuln-chroot

警告

shell是基本的人机输入界面,不要编写实际的脚本,这里可能有危险。

不要在生产构建中包含boxxy。

许可证

本项目是免费软件,根据LGPL3+许可证发布。

依赖关系

~7–23MB
~365K SLoC