_ _______________________ _ -*2*- `^°*;:,.> Scanner de port php <.,:;*°^` _____________________________/¯¯¯¯¯¯¯By tobozo¯¯¯¯¯¯¯\___________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸ Il n'est pas tres au point mais il a le merite de marcher a 100% en local (sauf sur windoze hehehe). Etant donné qu'un scanner peut etre un probleme autant qu'une solution sur un reseau on va fournir deux problemes et deux solutions. La premiere partie est offerte par Hertz@webmails.com (document original : portsentry 06-07-2000) Pourquoi détecter les scans de ports ------------------------------------ Un scan de ports est un des premiers pas qu'un attaquant fait juste avant de pénétrer un réseau. C'est un moyen pour lui d'obtenir des informations telles que: les hôtes présents dans le réseau; les services (http, ftp, ssh...) ouverts; le système d'exploitation. Un scan n'est pas une attaque en soi, mais il en constitue une étape possible et courante. Types de scans détectés Portsentry peut détecter de nombreux types de scans, tels que les scans de type "connect()", et mi-ouverts "half-scan". Il peut détecter les scans "Xmas tree", "Syn scan", "NULL scan". Pour plus d'informations, vous pouvez consulter la page de manuel française de nmap . Configuration et Options Portsentry se configure grâce à un simple fichier du type Apache. Ce fichier est par défaut /usr/local/psionic/portsentry/portsentry.conf Il est possible de prendre plusieurs type de mesures face à des scan: bloquer l'hôte grâce à tcp-wrapper (/etc/hosts.deny); lancer une commande (ex: scanner l'hôte en retour, exécuter un traceroute jusqu'à celui-ci...) Toutefois, il est fortement déconseillé d'entreprendre une action face à un scan, car celui-ci ne prouve rien. En effet, il est tout à fait possible qu'un attaquant souhaitant nuire forge des paquets avec une adresse de la Société Générale pour IP source et celle de la Caisse d'Épargne pour IP destination. Cela aurait pour résultat de faire croire à la Caisse d'Épargne qu'elle est en train de se faire scanner par la Société Générale, alors que l'attaquant se trouve à Moscou. Imaginez par ailleurs que quelqu'un vous scanne avec l'adresse IP source de votre propre serveur de mail. Si par excès de précaution vous avez placé une option d'ajout dynamique de l'IP source dans le hosts.deny, alors, il est vrai que cette personne n'aura pas la réponse à ses scans, mais elle parviendra néanmoins à vous empêcher de dialoguer avec votre serveur de mail. Les options d'exécution suivantes sont disponibles : portsentry -tcp (basic port-bound TCP mode) portsentry -udp (basic port-bound UDP mode) portsentry -stcp (Stealth TCP scan detection) portsentry -atcp (Advanced TCP stealth scan detection) portsentry -sudp ("Stealth" UDP scan detection) portsentry -audp (Advanced "Stealth" UDP scan detection) Conclusion Pour plus d'informations, se reporter aux fichiers README.install et README.methods qui se trouvent dans l'archive du programme. Une suite logique après l'installation de Portsentry serait l'installation d'un produit d'analyse de logs tel que logcheck. Consultez le site de psionic : http://www.psionic.com/abacus/portsentry/ La deuxieme partie est un code php, pour le faire fonctionner il faudra avoir acces en upload sur un serveur qui supporte ce langage a partir de la version 3.0.9. Enjoy * * Permission d'utliser et de modifier ce logiciel ainsi que sa * documentation pour tout usage non commercial est accordee * sans autre charge supplementaire du moment que l'auteur est * prévenu...Meme chose pour la copie et la distribution, * du moment que cette notice de permission y figure. * Ce code est fourni "tel quel" sans aucune garantie de ce * qu'il pourrait produire ou ne pas produire. * * L'auteur n'est pas responsable de ce que vous faites avec * ce script, n'en abusez pas * * Note : ce script ne fonctionne pas sur les hosts qui * utilisent auto_append ou auto_prepend pour inserer du * code de banniere (il genere du javascript) * */ error_reporting(0); $starttime=time(); $portlimit=100; $incr=10; $portdesc[0] = "Reserved"; $portdesc[1] = "TCP Port Service Multiplexer"; $portdesc[2] = "Management Utility"; $portdesc[3] = "Compression Process"; $portdesc[4] = "Unassigned"; $portdesc[5] = "Remote Job Entry"; $portdesc[6] = "Unassigned"; $portdesc[7] = "Echo"; $portdesc[8] = "Unassigned"; $portdesc[9] = "Discard"; $portdesc[10] = "Unassigned"; $portdesc[11] = "Active Users"; $portdesc[12] = "Unassigned"; $portdesc[13] = "Daytime"; $portdesc[14] = "Unassigned"; $portdesc[15] = "Unassigned"; $portdesc[16] = "Unassigned"; $portdesc[17] = "Quote of the Day"; $portdesc[18] = "Message Send Protocol"; $portdesc[19] = "Character Generator"; $portdesc[20] = "File Transfer [Default Data]"; $portdesc[21] = "File Transfer [Control]"; $portdesc[22] = "Unassigned"; $portdesc[23] = "Telnet"; $portdesc[24] = "any private mail system"; $portdesc[25] = "Simple Mail Transfer"; $portdesc[26] = "Unassigned"; $portdesc[27] = "NSW User System FE"; $portdesc[28] = "Unassigned"; $portdesc[29] = "MSG ICP"; $portdesc[30] = "Unassigned"; $portdesc[31] = "MSG Authentication"; $portdesc[32] = "Unassigned"; $portdesc[33] = "Display Support Protocol"; $portdesc[34] = "Unassigned"; $portdesc[35] = "any private printer server"; $portdesc[36] = "Unassigned"; $portdesc[37] = "Time"; $portdesc[38] = "Route Access Protocol"; $portdesc[39] = "Resource Location Protocol"; $portdesc[40] = "Unassigned"; $portdesc[41] = "Graphics"; $portdesc[42] = "Host Name Server"; $portdesc[43] = "Who Is"; $portdesc[44] = "Who Is"; $portdesc[45] = "Message Processing Module [recv]"; $portdesc[46] = "MPM [default send]"; $portdesc[47] = "NI FTP"; $portdesc[48] = "Digital Audit Daemon"; $portdesc[49] = "Login Host Protocol"; $portdesc[50] = "Remote Mail Checking Protocol"; $portdesc[51] = "IMP Logical Address Maintenance"; $portdesc[52] = "XNS Time Protocol"; $portdesc[53] = "Domain Name Server"; $portdesc[54] = "XNS Clearinghouse"; $portdesc[55] = "ISI Graphics Language"; $portdesc[56] = "XNS Authentication"; $portdesc[57] = "any private terminal access"; $portdesc[58] = "XNS Mail"; $portdesc[59] = "any private file service"; $portdesc[66] = "Oracle SQL*NET"; $portdesc[67] = "Bootstrap Protocol Server"; $portdesc[68] = "Bootstrap Protocol Client"; $portdesc[69] = "Trivial File Transfer"; $portdesc[70] = "Gopher"; $portdesc[71] = "Remote Job Service"; $portdesc[76] = "Distributed External Object Store"; $portdesc[78] = "vettcp"; $portdesc[79] = "Finger"; $portdesc[80] = "World Wide Web HTTP"; $portdesc[88] = "Kerberos"; $portdesc[92] = "Network Printing Protocol"; $portdesc[107] = "Remote Telnet Service"; $portdesc[110] = "Post Office Protocol - Version 3"; $portdesc[113] = "Authentication Service"; $portdesc[115] = "Simple File Transfer Protocol"; $portdesc[119] = "Network News Transfer Protocol"; $portdesc[137] = "NETBIOS Name Service"; $portdesc[138] = "NETBIOS Datagram Service"; $portdesc[139] = "NETBIOS Session Service"; /* REGISTRED PORTS */ $portdesc[1024] = "Reserved"; $portdesc[1025] = "network blackjack"; $portdesc[1356] = "CuillaMartin Company"; $portdesc[1361] = "LinX"; $portdesc[1366] = "Novell NetWare Comm Service Platform"; $portdesc[1376] = "IBM Person to Person Software"; $portdesc[1387] = "Computer Aided Design Software Inc LM"; $portdesc[1416] = "Novell LU6.2"; $portdesc[1428] = "Informatik License Manager"; $portdesc[1433] = "Microsoft-SQL-Monitor"; $portdesc[1434] = "Microsoft-SQL-Monitor"; $portdesc[1465] = "Pipes Platform"; $portdesc[1477] = "ms-sna-server"; $portdesc[1478] = "ms-sna-base"; /* TROJAN PORTS */ $trojports=array ( "31", "80", "121", "456", "555", "555", "555", "666", "1001", "1001", "1010", "1011", "1015", "1033", "1042", "1080", "1170", "1243", "1245", "1269", "1492", "1509", "1600", "1807", "1981", "1999", "2001", "2023", "2140", "2283", "2565", "2583", "2801", "3791", "4567", "4950", "4950", "5011", "5031", "5321", "5400", "5400", "5521", "5550", "5569", "5742", "6400", "6669", "6670", "6883", "6939", "6969", "7306", "7789", "9400", "9872", "9875", "9989", "9989", "10607", "11000", "11223", "12076", "12223", "12346", "12701", "16969", "17300", "20000", "20034", "20203", "20331", "21554", "21554", "22222", "23456", "23456", "29891", "30029", "30100", "30303", "30999", "31337", "31339", "31787", "34324", "34324", "40412", "50766", "53001", "54321", "61466", "65000", "65535"); $trojnames=array ( "Master_Paradise", "Apache", "BO_jammerkillahV", "Hackers_Paradise", "Stealth_Spy", "Phase0", "NeTadmin", "Attack_FTP", "Silencer", "WebEx", "Doly_trojan_v1.35", "Doly_Trojan", "Doly_trojan_v1.5", "Netspy", "Bla1.1", "Wingate", "Streaming_Audio_Trojan", "SubSeven", "Vodoo", "Mavericks_Matrix", "FTP99CMP", "Psyber_Streaming_Server", "Shiva_Burka", "SpySender", "ShockRave", "Backdoor", "TrojanCow", "Pass_Ripper", "The_Invasor", "HVL_Rat5", "Striker", "Wincrash2", "Phineas", "Total_Eclypse_1.0", "FileNail", "IcqTrojen", "IcqTrojan", "OOTLT_Cart", "NetMetro_1.0", "Firehotcker", "BladeRunner", "BackConstruction1.2", "Illusion_Mailer", "Xtcp", "RoboHack", "Wincrash", "The_tHing", "Vampire", "Deep_Throath_1,2,3.x", "DeltaSource", "Indoctrination", "Gatecrasher", "NetMonitor", "ICQKiller", "InCommand_1.0", "PortalOfDoom", "Portal_of_Doom", "InIkiller", "iNi-Killer", "Coma", "Senna_Spy_Trojans", "ProgenicTrojan", "Gjamer", "Hack99_KeyLogger", "NetBus_1.x", "Eclipse_2000", "Priotrity", "Kuang2_theVirus", "Millenium", "NetBus_Pro", "Logged!", "Bla", "GirlFriend", "Schwindler_1.82", "Prosiak_0.47", "WhackJob", "UglyFtp", "The_Unexplained", "AOLTrojan1.1", "NetSphere", "Socket23", "Kuang", "Back_Orifice", "NetSpy_DK", "Hack_a_tack", "Tiny_Telnet_Server", "BigGluck_aka_TN", "TheSpy", "Fore_Schwindler", "RemoteWindowsShutdown", "Schoolbus_1.6", "Telecommando", "Devil_1.03", "ShitHeep"); // maximum de ports a scanner par portion de code function reload() { global $from, $to; echo "document.write('$from _ $to : ');\n"; relay(); } function relay() { global $index; echo "document.write('$index
');\n"; } function checkport($port) { global $host; $status = 0; $socket = fsockopen($host, $port, &$errno, &$errstr); if ($socket) { $status = 1; set_socket_blocking($socket, 0); $count = 0; $portOutput = ""; while ($count < $timeout) { if ($readString = fread($socket, 1)) { $readString = htmlspecialchars($readString); $portOutput .= $readString; } $count++; } fclose($socket); if ($portOutput != "") { $index="Output:
$portOutput
"; relay(); } } else { /* print ""; */ } return $status; } function scanner($from, $to) { global $starttime, $portdesc, $trojports, $trojnames; for($port=$from; $port<=$to; $port++) { $now=time(); if (checkport($port)) { $index.="-$port " $index.=" : ".$portdesc[$port]. $i=0; while($i$now) { // okay } else { // timeout !! reload(); exit; } } else { if($starttime+8>$now) { // } else { // timeout !! $index.="[$from _ $to]"; reload(); exit; } } } return $index; } if($index) { reload(); exit; } if((!$recursive) && (!$host)) { echo $REMOTE_ADDR; echo "
".gethostbyaddr($REMOTE_ADDR); ?>
*  Php network security scanner 
* 
* (c)free 2000 by: tobozo & ThD  
Host to scan
Number of ports to scan
Ports :
from : to :
$portlimit) { while($from<$to) { $tempto=$from+$portlimit; if($reload=="1") { $index=scanner($from, $from+$portlimit); reload(); } else echo "\n"; $from=$tempto; if($from>$to) $from=$to; } } else { if($reload=="1") { $index=scanner($from, $to); reload(); } else echo "\n"; } ?>