⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asip-status.nasl

📁 漏洞扫描源码,可以扫描linux,windows,交换机路由器
💻 NASL
字号:
## NASL script to send a DSIGetStatus / FPGetSrvrInfo to an AppleShare IP# server & parse the reply## based off of http://www.jammed.com/~jwa/hacks/security/asip/asip-status##desc["english"] = "Synopsis :File sharing service is available.Description :The remote host is running an AppleShare IP file service.By sending DSIGetStatus request on tcp port 548, it waspossible to disclose information about the remote host.Risk factor :None / CVSS Base Score : 0 (AV:R/AC:L/Au:NR/C:N/A:N/I:N/B:N)";if (description){  	script_id(10666); 	script_version ("$Revision: 38 $");	script_name(english: "AppleShare IP Server status query");	script_description(english:desc["english"]);	script_summary(english: "connects to port 548/tcp, issues DSIGetStatus");	script_category(ACT_GATHER_INFO);	script_family(english: "Misc.", francais:"Divers");	script_copyright(english: "James W. Abendschan <jwa@jammed.com> (GPL)");	script_dependencie("find_service.nes");	script_require_ports(548);	exit(0);}include("misc_func.inc");function b2dw(a, b, c, d){	local_var a1, b2, c1, dword;	a1 = a * 256 * 256 * 256;	b1 = b * 256 * 256;	c1 = c * 256;	dword = a1 + b1 + c1 + d;	return(dword);}function b2w(low, high)	{	local_var word;	word = high * 256;	word = word + low;	return(word);}# return a pascal stringfunction pstring(offset, packet){	local_var plen, i, pstr;	plen = ord(packet[offset]);	#display("offset: ", offset, "  length: ", plen, "\n");	pstr = "";	# avoid interpreter warning	for (i=1;i<plen+1;i=i+1)	{		pstr = pstr + packet[offset+i];	}	return (pstr);}# pull out counted pstrings in packet starting at offsetfunction pluck_counted(offset, packet){	local_var count, str, plucked, count_offset, j;	count = ord(packet[offset]);	#display("plucking ", count, " items\n");	str = "";	plucked = "";	count_offset = offset + 1;	for (j=0;j<count;j=j+1)	{		str = pstring(offset:count_offset, packet:packet);		# offset + length of data + length byte		count_offset = count_offset + strlen(str) + 1;		plucked = plucked + str;		# lame coz there's no != ?		if (j < count-1)			plucked = plucked + "/";	}	return(plucked);}## parse FPGetSrvrInfo reply (starting at DSIGetRequest reply packet + 16)#function parse_FPGetSrvrInfo(packet){        machinetype_offset = b2w(low:ord(packet[17]), high:ord(packet[16])) + 16;	machinetype = pstring(offset:machinetype_offset, packet:packet);        afpversioncount_offset = b2w(low:ord(packet[19]), high:ord(packet[18])) + 16;	versions = pluck_counted(offset:afpversioncount_offset, packet:packet);	uamcount_offset = b2w(low:ord(packet[21]), high:ord(packet[20])) + 16;	uams = pluck_counted(offset:uamcount_offset, packet:packet);	servername = pstring(offset:26, packet:packet);	report = string("This host is running an AppleShare File Services over IP.\n","  Machine type: ", machinetype, "\n","  Server name: ", servername, "\n","  UAMs: ", uams, "\n","  AFP Versions: ", versions, "\n");if ("No User Authen" >< uams) {	report += '\nThis AppleShare File Server allows the "guest" user to connection';}	report = string (desc["english"],			"\n\nPlugin output :\n\n",			report);        security_note(port:548, data:report);	register_service(port:548, proto:"appleshare");}## parse ASIP reply packet#function parse_DSIGetStatus(packet){	flags = ord(packet[0]);	cmd = ord(packet[1]);	reqidL = ord(packet[2]);	reqidH = ord(packet[3]);	reqid = b2w(low:reqidL, high:reqidH);	if (!(reqid == 57005))	{	 exit(1);	}	# ignore error / data offset DO for now	edo = b2dw(a:ord(packet[4]), b:ord(packet[5]), c:ord(packet[6]), d:ord(packet[7]));	datalen = b2dw(a:ord(packet[8]), b:ord(packet[9]), c:ord(packet[10]), d:ord(packet[11]));	reserved = b2dw(a:ord(packet[12]), b:ord(packet[13]), c:ord(packet[14]), d:ord(packet[15]));	if (!(cmd == 3))	{		exit(1);	}	return (parse_FPGetSrvrInfo(packet:packet));}## send the DSIGetStatus packet#function send_DSIGetStatus(sock){	packet = raw_string		(		0x00,			# 0- request, 1-reply		0x03,			# 3- DSIGetStatus		0xad, 0xde, 0x00,	# request ID		0x00, 0x00, 0x00, 0x00,	# data field		0x00, 0x00, 0x00, 0x00,	# length of data stream header		0x00, 0x00, 0x00, 0x00	# reserved                );	send (socket:sock, data:packet);	buf = recv(socket:sock, length:8192, timeout:30);	if (strlen(buf) == 0)	{		exit(1);	}		return(buf);}## do it#function asip_status(port){	s = open_sock_tcp(port);	if (s)	{		packet = send_DSIGetStatus(sock:s);		if(strlen(packet) > 17)		{		parse_DSIGetStatus(packet:packet);		} 		close(s);	}}## main#if (get_port_state(548)){	asip_status(port:548);}

⌨️ 快捷键说明

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