对于与安全性、DNS 缓存中毒和 Kaminsky 攻击相关的家庭作业,我正在构建一个 Perl 脚本,该脚本使用Nemesis将数据包发送到本地 DNS 服务器(这一切都在一个封闭的、仅限主机的 VMWare 网络上完成)。我已经完成了所有事情,以使调用 nemesis 的过程自动化。
我专门使用 Perl 来选择随机 DNS 事务 ID,将它们添加到我之前制作的 DNS 有效负载中。现在,有效负载不是 DNS 答案,而只是一个查询,因此我可以完善制作有效负载的 ID 部分并使用 Perl 将其推送到克星的方法。
我的代码目前是...
#!/usr/bin/perl
use strict;
use warnings;
my $dnsId = int(rand(65535));
my $idString = sprintf("%x", $dnsId);
if(length($idString) == 1){$idString = "000".$idString}
elsif(length($idString) == 2){$idString = "00".$idString}
elsif(length($idString) == 3){$idString = "0".$idString}
my $payload = $idString."01000001000000000000037777770f646e737068697368696e676c61627303636f6d0000010001";
print(`echo "$payload" | nemesis udp -S10.1.3.1 -D10.1.3.100 -x53 -y33333 -P-`)
我遇到的问题是,nemesis 正在将数据作为字符串读取,这当然是 echo 所做的。所以我需要做的是将数据作为二进制数据而不是 ASCII 传递给克星。
我想我可以用pack()
写一个二进制文件然后使用“cat /foo/bar/file | nemesis -...”来执行有效载荷,但这不是一个最佳解决方案,因为我不想要额外的 IO在收到(假设的,它永远不会到达)真实响应之前,我可以尝试多少次恶意 DNS 响应。
我可以研究哪些方法可以让我以二进制格式将这些数据提供给克星?