Сканер портов на Php
Иногда любому хакеру бывает просто необходимо просканировать порты удаленного сервера на наличие уязвимых сервисов и просто их доступности. Для этого используются специальные программы под винду или известный никсовый сканер Nmap, но не всегда есть shell для установки Nmap, а если сканить прогами под винду, то светишь свой IP. Но есть простой выход это написание скрипта на PHP! Сейчас мы рассмотрим написание довольно простого сканера портов на PHP. Итак приступим.
Для начала необходимо создать некое подобие интерфейса для удобства использования сканера. Страницу с интерфейсом назовем к примеру scan.html ну или как вам будет угодно. Я не буду описывать процесс создания интерфейса, думаю все разбираются в html и с легкостью напишут нужный им интерфейс.
Код:
<form action="portscan.php" method="post" target="view">
<table align="center" cellpadding="0" cellspacing="0" style="border: #cccccc 1px solid" width="55%">
<tr>
<td align="center" style="background-color: #cccccc; font-family: Verdana; font-size: 8pt; font-weight: bold; height: 20px">
ПАРАМЕТРЫ СКАНИРОВАНИЯ
</td>
</tr>
<tr><td style="background-color: #cccccc; height: 1px"><spacer height="1" type="block"></td></tr>
<tr>
<td align="left" style="color: #aaaaaa; font-family: Verdana; font-size: 8pt; ">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="font-size: 8pt; height: 27">
Host: <input name="host" style="width: 90%" value="">
</td>
<td rowspan="10" style="background-color: #cccccc" width="1"><spacer type="block" width="1"></td>
<td width="120" rowspan="10">
<center><input style="border: 1px #cccccc solid;" type="submit" value="Start!"></center>
</td>
</tr>
<tr><td style="background-color: #cccccc; height: 1px"><spacer height="1" type="block"></td></tr>
<tr>
<td style="font-size: 8pt; height: 27">
Сканировать порты, номера от
<input maxlength="6" name="from" size="6" value="20"> до
<input maxlength="6" name="to" size="6" value="50">
</td>
</tr>
<tr><td style="background-color: #cccccc; height: 1px"><spacer height="1" type="block"></td></tr>
<tr>
<td style="font-size: 8pt; height: 27">
Время подключения к порту не более (сек.):
<input maxlength="2" name="timeout" size="2" value="2">
</td>
</tr>
</table>
</td>
</tr>
<tr><td style="background-color: #cccccc; height: 1px"><spacer height="1" type="block"></td></tr>
<tr>
<td align="center" style="background-color: #cccccc; font-family: Verdana; font-size: 8pt; font-weight: bold; height: 20px">
ПРОТОКОЛ СКАНИРОВАНИЯ
</td>
</tr>
<tr><td style="background-color: #cccccc; height: 1px"><spacer height="1" type="block"></td></tr>
<tr>
<td>
<iframe border="0" frameborder="no" height="180" marginwidth="0" marginheight="0" name="view" scrolling="auto" src="about:blank" width="100%">
Ваш браузер не поддерживает плавающие фреймы...
</iframe>
</td>
</tr>
<tr><td style="background-color: #cccccc; height: 1px"><spacer height="1" type="block"></td></tr>
<tr>
<td align="center" style="background-color: #efefef; font-family: Verdana; font-size: 8pt; font-weight: bold; height: 20px">
<a href="http://Xzone.org.ru"><font color=#FF5500>By Neo aka NeX [Antichat.ru]</font></a>
</td>
</tr>
</table>
</form>
Вот мы и написали наш интерфейс теперь нам надо написать сам скрипт, который и будет сканировать порты. Я тоже не стану расписывать ход написания скрипта, чтобы не раздувать статью и это незачем т.к. весь скрипт снабжен подробными комментариями, так что я думаю каждый при желании растереться. Назовем наш скрипт portscan.php
А вот его код:
PHP код:
<?php
// PortScan by Neo aka NeX [antichat.ru]
// Снятие ограничения на время выполнения скрипта
@set_time_limit (0);
// Определение POST-переменных формы
$host = $HTTP_POST_VARS ["host"];
$to_port = $HTTP_POST_VARS ["to"];
$from_port = $HTTP_POST_VARS ["from"];
$time_conn = $HTTP_POST_VARS ["timeout"];
// Время начала выполнения опроса портов
$tm = @split (" ", @microtime());
$started = $tm [0] + $tm [1];
// База данных служб и соответствующих им портов (стандарт) возможно дополнение
$port_database = array (
"21" => "FTP",
"22" => "SSH",
"23" => "TELNET",
"25" => "SMTP",
"38" => "RAP",
"43" => "WHOIS",
"80" => "HTTP",
"109" => "POP",
"110" => "POP3",
"115" => "Simple FTP",
"118" => "SQL Services",
"119" => "NNTP",
"143" => "IMAP",
"194" => "IRC",
"220" => "IMAP3",
"443" => "HTTPS / SLL",
"540" => "UUCP",
"585" => "IMAP4-SSL",
"591" => "HTTP-ALT",
"1112" => "mSQL — Mini-SQL Server",
"1433" => "msSQL-Server",
"1434" => "msSQL-Monitor",
"3128" => "Proxy",
"3197" => "Proxy",
"3306" => "MySQL",
"4000" => "ICQ",
"4333" => "MSQL - Mini SQL Server",
"5100" => "ICQ",
"5432" => "Postgres SQL",
"6669" => "IRC",
"8000" => "Stream Audio",
"8080" => "HTTP",
"9014" => "VOC Daemon",
"9200" => "WAP"
);
// Создание массива для хранения номеров существующих портов
$success_port = array ();
// Вывод информации для опознавания браузером
for ($i = 0; $i < 100; $i++) echo "<!---->";
flush ();
// Скидываем счетчики
$opened = 0;
$closed = 0;
// Сканирование порта
$total = $to_port - $from_port + 1;
for ($port = $from_port; $port <= $to_port; $port++) {
$connect = @fsockopen ($host, $port, $errno, $errstr, $time_conn);
echo "<li> Подключение к <b><i>$host</i></b>, порт <b><i>$port</i></b>... ";
if ($connect == TRUE) {
$service = "";
foreach ($port_database as $wp => $wd) {
if ($wp == $port) {
$service = "предположительно ". $wd;
break;
}
else if ($wp != $port) {
continue;
}
}
$opened++;
if (@empty ($service) == 1) $service = "тип не определен";
echo "<font color='#008800'>порт открыт, $service</font>";
}
else if ($connect == 0) {
$closed++;
echo "<font color='#FF5500'><b>[порт закрыт]</b></font>";
}
echo "<br>\n";
@flush ();
}
// Время начала выполнения опроса портов
$tm = @split (" ", @microtime());
$ended = $tm [0] + $tm [1];
$time = $ended - $started;
$dtime = @round ($time, 3);
// Вывод небольшой статистики
echo "<hr><tt>\n";
echo "Всего портов проверено: <b>" . $total . "</b><br>\n";
echo "Открытых портов: <b>" . $opened . "</b><br>\n";
echo "Закрытых портов: <b>" . $closed . "</b><br>\n";
echo "Время, затраченное на сканирование: <b>" . $dtime . " сек.</b>\n";
echo "</tt>\n";
?>
Я думаю с кодом все понятно, остается сказать лишь то, что теперь мы имеем полноценный сканер портов и он полностью готов к использованию в наших корыстных целях. Заливаем скрипт, на какой ни будь shell, думаю их у вас предостаточно, и используем по назначению. Свой IP мы скрыли и цель выполнили )).
С вами был NeX aka Neo [Xzone.org.ru].
Specially for [Antichat.ru]
|