使用Perl进行基本网络黑客技术

最近我一直在阅读Douglas Berdeaux所著的《使用Perl进行渗透测试》。这本书是在去年年底发布的,虽然Dave Cross给出了相当严厉的评论,但我迄今为止觉得它很有趣。我一边阅读一边在我的GitHub 仓库中编写和重构书中的脚本。以下是我学到的一些东西。
活动主机检测
如果你连接到了一个网络,知道同一网络中所有其他主机的IP地址很有帮助。这个脚本首先检测网络设备名称(或接受它作为参数),然后初始化一个数据包捕获对象
use strict;
use warnings;
use feature 'say';
use Net::ARP;
use Net::Address::IP::Local;
use Net::Frame::Device;
use Net::Frame::Dump::Online;
use Net::Frame::Simple;
use Net::Netmask;
use Net::Pcap ();
my $network_device_name = $ARGV[0] if @ARGV;
unless ($network_device_name)
{
$network_device_name = Net::Pcap::pcap_lookupdev(\my $error_msg);
die "pcap device lookup failed " . ($error_msg || '')
if $error_msg || not defined $network_device_name;
}
my $device = Net::Frame::Device->new(dev => $network_device_name);
my $pcap = Net::Frame::Dump::Online->new(
dev => $network_device_name,
filter => 'arp and dst host ' . $device->ip,
promisc => 0,
unlinkOnStop => 1,
timeoutOnNext => 10
);
然后它检测网关IP(网络控制器的IP地址)并向子网中的每个IP地址发送广播数据包。数据包捕获对象 $pcap
将检测任何响应。然后它打印出响应者的IP和MAC地址。
printf "Gateway IP: %s\nStarting scan\n", $device->gatewayIp;
$pcap->start;
for my $ip_address (Net::Netmask->new($device->subnet)->enumerate)
{
Net::ARP::send_packet(
$network_device_name,
$device->ip,
$ip_address,
$device->mac,
"ff:ff:ff:ff:ff:ff", # broadcast
"request",
);
}
until ($pcap->timeout)
{
if (my $next = $pcap->next)
{
my $frame = Net::Frame::Simple->newFromDump($next);
my $local_ip = Net::Address::IP::Local->public;
my $frame_ip = $frame->ref->{ARP}->srcIp;
my $frame_mac = $frame->ref->{ARP}->src;
say "$frame_ip $frame_mac". ($local_ip eq $frame_ip ? ' (this machine)' : '');
}
}
END { say "Exiting."; $pcap->stop }
如果我在我的家庭网络上运行这个脚本,我会得到以下输出
$ sudo $(which perl) livehost_scanner
Gateway IP: 192.168.1.1
Starting scan
Gateway IP: 192.168.1.1
Starting scan
192.168.1.1 10:0d:7f:81:31:c2
192.168.1.2 5c:c5:d4:47:0a:13 (this machine)
192.168.1.3 68:09:27:03:d0:35
Exiting.
从这个输出中,我可以推断出除了在192.168.1.1
处的路由器外,还有一台机器连接到该网络,地址为192.168.1.4
。
指纹识别
现在我已识别出我网络上两个主机的地址,如果我是攻击者,我就会想尝试识别这些主机类型,以便确定针对它们使用哪种类型的攻击。
指纹识别主机的一种方式是使用它们的MAC地址。地址的前半部分是组织唯一标识符(OUI)。IEEE提供了一份文件,列出了所有授权的OUI及其制造商。因此,为了识别主机的网络设备的制造商,我们只需要在该文件中查找它们的OUI。这个脚本就能做到这一点
use strict;
use warnings;
my $target_mac = shift or die "Usage\n\t./id_target \n";
printf "Address: %s, MAC Manufacturer: %s\n",
$target_mac, oui_lookup($target_mac);
sub oui_lookup
{
my $mac_address = shift;
$mac_address =~ s/:/-/g;
my $oui = substr $mac_address, 0, 8;
open (my $oui_file, '<', 'data/oui.txt') or die $!;
while (my $line = <$oui_file>)
{
if($line =~ /$oui/i)
{
my ($address, $manufacturer_name) = split /\t+/, $line;
return "$manufacturer_name";
last;
}
}
return "Unknown";
}
如果我在网关MAC地址上运行这个脚本,我可以识别出接入点的制造商
$ ./id_target 10:0d:7f:81:31:c2
Address: 10:0d:7f:81:31:c2, MAC Manufacturer: NETGEAR INC.,
Aha!所以接入点是由Netgear制造的。在我的网络上还检测到了一个地址为192.168.1.3
的另一个主机。我也可以尝试对他们进行指纹识别
$ ./id_target 68:09:27:03:d0:35
Address: 68:09:27:03:d0:35, MAC Manufacturer: Apple
这是一台苹果机器。有了这些数据,我既可以尝试进一步指纹识别主机,也可以开始使用端口扫描或已知漏洞测试它们的弱点。一个很好的漏洞来源是exploit-db.com。
这篇文章最初发表在PerlTricks.com上。
标签
反馈
这篇文章有什么问题吗?请通过在GitHub上打开问题或拉取请求来帮助我们。
- More commenting... maybe?
github.polettix.it - Perl Weekly Challenge 121: Invert Bit
blogs.perl.org - Web nostalgia: MojoX::Mechanize
github.polettix.it - On the eve of CPAN Testers
blogs.perl.org - PWC121 - The Travelling Salesman
github.polettix.it - PWC121 - Invert Bit
github.polettix.it - Floyd-Warshall algorithm implementations
github.polettix.it - Perl Weekly Challenge 120: Swap Odd/Even Bits and Clock Angle
blogs.perl.org - How I Uploaded a CPAN Module
blogs.perl.org - App::Easer released on CPAN
github.polettix.it