2014-01-15 15 views
0

那麼我做了一個簡單的腳本來發送一個數據包,我需要讀取響應,如果響應是我在尋找然後打印出來是好的,如果不打印出來是壞的,現在如果ip is vuln,那麼腳本就可以工作並打印出它的陰影。現在,如果它不是惡作劇,那麼腳本就會掛起,並且發送HEX數據的有效載荷。在Perl中沒有關閉的套接字

use IO::Socket; 
use strict; 

print "Connecting..\n"; 
my $socket = IO::Socket::INET->new(
    PeerAddr => '23.113.161.164', # 38.124.108.67 <-- NON vuln ip for testing 
    PeerPort => 123,    # 23.113.161.164 <-- This IS a vuln ip! 
    Proto => 'udp', 
    Timeout => 1); 
die "Error With Sockets!: $!\n" unless $socket; 

print "Connected!\n"; 

my $payload = "\x97\x00\x00\x00\xAA\x00\x00\x00"; 
my $good = "\x97\x00\x00\x00"; 

$socket->send($payload) or die "Nothing got sent."; 

my $data; 
$socket->recv($data,4); 
my $response = substr($data,0,8); 
$response = reverse($response); 
print $response; 

if ($response == "\x97\x00\x00\x00") { 
print "IP IS VULN\n"; 
} else { 
print "IP IS NOT VULN\n"; 
exit; 
} 

例錯誤:

使用非vuln IP:

[email protected]:~# perl 2.pl 
Connecting.. 
Connected! 

(這就是在那裏它被卡住)

使用vuln IP:

[email protected]:~# perl 2.pl 
Connecting.. 
Connected! 
▒IP IS VULN 

(如你可以看到它確實很好)

這是腳本被卡住:

$socket->send($payload) or die "Nothing got sent."; 

任何幫助將不勝感激。

+4

總是使用'使用警告;'。你的代碼有一個主要的錯誤,這將發現。 – ikegami

回答

0

如果你真的檢查了它掛在哪裏,我相信你會發現它掛着試圖收到數據。

2
  • use warnings;
  • 使用eq字符串比較,==數值比較
  • 您的代碼掛在收到
  • recv()不,默認情況下,有一個超時。請致電setsockopt,詳情請參閱this thread
  • 最後,絕對不要在他人的實際知識產權問題上貼出你的問題。
+0

「最後,絕對不要在問題中發佈實際IP地址。」爲什麼不?如果OP不認爲它們是敏感的,那麼最好包含它們,這樣我們就可以運行他的代碼了! – ikegami

+0

假設他們不是他的IP。假設每個人和我的叔叔都運行這個代碼。假設機器在這些條件下行爲不當並且/或者從試圖獲得這些代碼的怪人那裏收到了大量的數據包。你能拼D-O-S嗎? –

+0

該節點每小時有16個視圖。你認爲有多少人會導致代碼被執行? – ikegami