netop.inc

来自「漏洞扫描源码,可以扫描linux,windows,交换机路由器」· INC 代码 · 共 487 行

INC
487
字号
## This NASL script has been produced as a collaboration between:## - Martin O'Neal of Corsaire (http://www.corsaire.com)  # - Jakob Bohm of Danware (http://www.danware.dk)# # The original script produced by Martin O'Neal has been heavily modified # by Jakob Bohm to provide additional product detail, plus also to limit # any unnecessary information leakage caused by the scanning process itself. # Jakob has also rewritten the test set as a whole to use the minimum of # network traffic and make the process as efficient as possible. All together # a jolly good show.# # DISCLAIMER# The information contained within this script is supplied "as-is" with # no warranties or guarantees of fitness of use or otherwise. Neither Corsaire # or Danware accept any responsibility for any damage caused by the use or misuse # of this information.#  include("misc_func.inc");############## Meta-information recorded in the name of the KB entry ################local_var port;local_var addr;local_var proto_nam;############## HELO packets in NetOps native format ################local_var helo_pkt_udp;local_var helo_pkt_gen;local_var quit_pkt_stream;############## Received reply in NetOps native format ##################local_var banner_pkt; ############## General derived strings ##################local_var netop_kb_key;local_var netop_kb_val;local_var netop_svcidstr;local_var netop_prod_typ;local_var netop_prod_nam;local_var netop_prod_dsc;################### HELO packet for UDP only ##################helo_pkt_udp=	hex2raw(		s:'d6818106010000f70e5301044e657373'+		  '757301436f7273616972ff0100008701') + # 0-31	crap(length:32 , data: raw_string(0x20))      + # 32-63	crap(length:224, data: raw_string(0x00));       # 64-288################### Generic HELO packet ##################helo_pkt_gen=	hex2raw(		s:'d6818106010000f73e4e010400000000'+		  '000001436f7273616972ff0100008701') + # 0-31	crap(length:32 , data: raw_string(0x20))      + # 32-63	crap(length:224, data: raw_string(0x00));       # 64-288			################### QUIT packet for stream transports (tcp etc.)  ##################quit_pkt_stream=	hex2raw(		s:'d681810000f900f9eee3')             + # 0-9	crap(length:16, data: raw_string(0x00));        # 10-25			################### utility functions ##################function netop_zeropad(str, len){	local_var res;	res = crap(length: len, data: raw_string(0));	if (!isnull(str))	{		res = substr(str + res, 0, len - 1);	}	return res;}function netop_spacepad(str, len){	local_var res;	res = crap(length: len, data: ' ');	if (!isnull(str))	{		res = substr(str + res, 0, len - 1);	}	return res;}function ip_dot2raw(ip_dot){	# initialise variables	local_var int32;	local_var octet;	ip_dot=split(ip_dot,sep:".",keep:0);	int32 = '';	# step through octets	for(octet=0;octet<4;octet++)	{		int32=raw_string(int(ip_dot[octet]),int32);	}		return(int32);}# declare functionfunction ip_raw2dot(int32){	# initialise variables	local_var ip_dot;	ip_dot=int(ord(int32[3]))+"."+int(ord(int32[2]))+"."+int(ord(int32[1]))+"."+int(ord(int32[0]));		return(ip_dot);}################### extract info items from banner ###################function netop_banner_items(typ){	local_var res;	local_var i;	local_var v1;	res = '';	for (i = 64; i < 320; i += 32)	{		v1 = substr(netop_kb_val, i, i + 31);		if (typ == 0 && ord(v1) >= 32 ||		    typ != 0 && typ == ord(v1))		{			if (typ > 2)				v1 = substr(v1, 1, 31);			if (typ == 2)				v1 = ip_raw2dot(int32: substr(v1, 1, 4));			if (typ == 1)				v1 = hexstr(substr(v1, 1, 6));			if (res != '')				res += ', ';			res += '"' + chomp(v1) + '"';		}	}	return res;}################### derive product type from banner etc. ###################function netop_product_ident(){	local_var school_phrase1;	local_var school_stud_dsc;	local_var rc_also_host;	local_var rc_host_dsc;		school_phrase1 = 		'During the session, the Teacher' +		' has extensive control over the users computer,' +		' with very few restrictions, as is appropriate' +		' when the teacher can be assumed to be a higher' +		' authority than the student.';		school_stud_dsc =		'NetOp School Student (client) allows its user to' +		' participate in live online education or training' +		' sessions broadcast from a computer running NetOp' +		' School Teacher.\n\n' +		school_phrase1;		rc_also_host =		' is also a fully' +		' featured NetOp Remote Control Host, which allows' +		' its computer to be remotely controlled and/or' +		' managed from any NetOp Remote Control Guest' +		' subject to a seperate set of configurable' +		' security restrictions.';		rc_host_dsc =		'NetOp Remote Control Host is a service / agent,' +		' which allows the computer on which it is running' +		' to be remotely controlled and/or managed from any' +		' NetOp Remote Control Guest program, subject to a' +		' wide selection of configurable security and' +		' authentication restrictions.';			if (     (ord(netop_kb_val[63]) & 0x08) != 0  ||	         netop_banner_items(typ:17)     != '' )	{		netop_svcidstr = 'netop-sch';		netop_prod_typ = 'SSTD';		netop_prod_nam = 'NetOp School Student';		netop_prod_dsc = school_stud_dsc;	}	else if ((ord(netop_kb_val[63]) & 0x10) != 0  ||	         netop_banner_items(typ:8)      != '' )	{		netop_svcidstr = 'netop-teacher';		netop_prod_typ = 'STCH';		netop_prod_nam = 'NetOp School Teacher';		netop_prod_dsc =			'NetOp School Teacher (console) allows its user to' +			' conduct live online education or training' +			' sessions broadcast to computers running NetOp' +			' School Student.\n\n' +			school_phrase1;	}	else if ((ord(netop_kb_val[63]) & 0x04) != 0  ||	         netop_banner_items(typ:6)      != '' ||	         netop_banner_items(typ:7)      != '' )	{		netop_svcidstr = 'netop-guest';		netop_prod_typ = 'RGST';		netop_prod_nam = 'NetOp Remote Control Guest';		netop_prod_dsc =			'NetOp Remote Control Guest (client) allows its' +			' user to remotely control and/or manage any' +			' computer running NetOp Remote Control Host' +			' modules on a variety of operating systems,' +			' subject of cause to the security restrictions' +			' configured on that Host.';	}	else if ((ord(netop_kb_val[62]) & 0x01) != 0)	{		netop_svcidstr = 'netop-rc';		netop_prod_typ = 'RGWS';		netop_prod_nam = 'NetOp Remote Control Gateway';		netop_prod_dsc =			'NetOp Remote Control Gateway is an application' +			' layer proxy allowing programs from the NetOp' +			' Remote Control and NetOp School families to' +			' communicate across proxy-style firewalls,' +			' disjoint networks, dissimilar network protocols' +			' (e.g. modems, shared memory, TCP and UDP) etc.' +			' subject to configurable access restrictions.' +			'\n\n' +			netop_prod_nam + rc_also_host;	}	else if ((ord(netop_kb_val[62]) & 0x08) != 0)	{		netop_svcidstr = 'netop-rc';		netop_prod_typ = 'RNMS';		netop_prod_nam = 'NetOp Remote Control Name Server';		netop_prod_dsc =			'NetOp Name Server is a dynamic' +			' naming service allowing programs from the NetOp' +			' Remote Control and NetOp School families to' +			' locate each other even when general facilities' +			' such as dynamic DNS are not available to all' +			' participating computers, or when ports etc. need' +			' to be included in the naming information' +			' published.\n\n' +			netop_prod_nam + rc_also_host;	}	else if (netop_banner_items(typ:5)      != '' ||		 netop_banner_items(typ:14)     != '' )	{		netop_svcidstr = 'netop-rc';		netop_prod_typ = 'RSES';		netop_prod_nam = 'NetOp Remote Control Security Server';		netop_prod_dsc =			'NetOp Remote Control Security Server is a central' +			' authentication and authorization server allowing' +			' centralized login validation, permission' +			' management and security event logging for' +			' programs from the NetOp Remote Control family.' +			'\n\n' +			netop_prod_nam + rc_also_host;	}	else if ((ord(netop_kb_val[63]) & 0x02) != 0)	{		netop_svcidstr = 'netop-rc';		netop_prod_typ = 'RHST';		netop_prod_nam = 'NetOp Remote Control Host';		netop_prod_dsc = rc_host_dsc;	}	else if (port == 1971)	{		netop_svcidstr = 'netop-sch';		netop_prod_typ = 'SCH?';		netop_prod_nam = 'NetOp School Student or Teacher';		netop_prod_dsc = school_stud_dsc;	}	else	{		netop_svcidstr = 'netop-rc';		netop_prod_typ = 'NRC?';		netop_prod_nam = 'NetOp Remote Control Host or Guest';		netop_prod_dsc = rc_host_dsc;	}		netop_prod_dsc += '\n\nSee http://www.netop.com for more info.\n';}################ Log that a NetOp program has been detected ################function netop_log_detected(){	local_var msg;	local_var info_only;	info_only = 0;	msg = '\nDanware ' + netop_prod_nam +		' is listening on this port\n\n' +		netop_prod_dsc +		'\nSolution:  ';	if (netop_prod_typ == 'RGST')	{		info_only = 1;		msg += 'Make sure the user of this machine is' +			' authorized to remotely manage other computers' +			' or has been permitted to use this computer as' +			' a terminal to access other computers.\n\n' +			'Risk factor: Low\n';	}	else if (netop_prod_typ == 'STCH')	{		info_only = 1;		msg += 'Make sure the user of this machine is a teacher' +			' or is acting as a group leader for some' +			' teamwork\n\n' +			'Risk factor: Low\n';	}	else if (netop_prod_typ == 'SSTD' || netop_prod_typ == 'SCH?')	{		info_only = 1;		msg += 'Make sure the user of this machine is currently' +			' participating in online training using NetOp' +			' School, and that a teacher password has been' +			' set on the Student.\n\n' +			'Outside dedicated teaching environments, NetOp' +			' School should not be running when the user is' +			' not actively participating in a class\n\n' +			'Risk factor: Medium\n';	}	else if (netop_prod_typ == 'RHST' || netop_prod_typ == 'NRC?')	{		msg += 'If this program is required, make sure' +			' appropriate security settings are used (on the' +			' Options menu), including strong passwords on' +			' permitted accounts and an effective action on' +			' too many bad password attempts\n\n' +			'If this program is unused, disable load at' +			' system startup from the programs option menu or' +			' uninstall the software.\n\n' +			'Risk factor: Low\n';	}	else	{		msg += 'If this service is running deliberately, make' +			' sure it is configured with strong security' +			' settings on the options menu, including strong' +			' passwords on any enabled accounts and an' +			' effective action on too many failed logins\n\n' +			'If this service is not supposed to be running,' +			' uninstall it and investigate why and how it was' +			' installed.\n\n' +			'Risk factor: Medium\n';	}		security_warning(proto:proto_nam, port:port, data:msg);	}################ Extract information from KB value and key ################function netop_kb_derive(){	netop_kb_val = netop_zeropad(str: netop_kb_val, len: 320);	if (ord(netop_kb_val[0]) >  32 )	{		netop_kb_key = substr(netop_kb_val, 0, 31);	}	netop_kb_key = netop_zeropad(str: netop_kb_key, len: 32);	insstr(netop_kb_val, netop_kb_key, 0, 31);	proto_nam = chomp(substr(netop_kb_key, 0, 7));	port      = ord(netop_kb_key[9]) * 256 + ord(netop_kb_key[8]);	addr      = ip_raw2dot(int32: substr(netop_kb_key, 16, 31));		netop_product_ident();}########### Check if any NetOp programs found and fork for each ###########function netop_each_found(){	netop_kb_val = get_kb_item('NetOp/allbanners');	if (isnull(netop_kb_val))	{		return 0;	}	else	{		netop_kb_val = hex2raw(s:netop_kb_val);		netop_kb_derive();		return 1;	}}######### validate banner to see if it is from NetOp, then add to KB ########function netop_check_and_add_banner(){	local_var blen;	local_var s1;	local_var s2;	netop_kb_key = netop_spacepad(str: proto_nam, len: 8)	             + netop_zeropad( str:	                  raw_string((port & 255), ((port & 65280) >> 8)),	                  len: 8)	             + netop_zeropad( str: ip_dot2raw(ip_dot:addr), len: 16);	# check response contains correct contents	if (isnull(banner_pkt))	{		banner_pkt = '';	}	blen = strlen(banner_pkt);	if(blen > 23                    && 	   ord(banner_pkt[0])==0xd6     && 	   banner_pkt[1]==banner_pkt[2] &&	   ((ord(banner_pkt[7])==0xf8 &&	     blen >= 32 &&	     substr(banner_pkt, 11, 17) == 'Corsair') ||	    (ord(banner_pkt[7])==0xf9 && ord(banner_pkt[5])==0xf9)))	{		if (ord(banner_pkt[7])==0xf9 && blen > 27)		{			banner_pkt = substr(banner_pkt, 0, 26);		}						# Force packet size before adding to knowledge base		netop_kb_val =		   netop_zeropad(str: (netop_kb_key + banner_pkt), len: 320);		netop_kb_derive();		# update knowledge base		s2 = 'NetOp/' + hexstr(netop_kb_key) + '/banner';		set_kb_item(name:s2, value:hexstr(netop_kb_val));		set_kb_item(			name:'NetOp/allbanners',			value:hexstr(netop_kb_val));				s1 = proto_nam + '/';		if (s1 == 'tcp/') s1 ='';				s2 = 'Known/' + proto_nam + '/' + port;		set_kb_item(name:s2, value:netop_svcidstr);		s2 = 'Services/' + s1 + netop_svcidstr;		set_kb_item(name:s2, value:port);		s2 = 'Services/' + s1 + 'netop-any';		set_kb_item(name:s2, value:port);		netop_log_detected();	}	else	{		netop_kb_val = crap(length: 320, data: raw_string(0x00));	}}################### end of netop.inc ##################

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?