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

📄 smb_nt.inc

📁 漏洞扫描源码,可以扫描linux,windows,交换机路由器
💻 INC
📖 第 1 页 / 共 5 页
字号:
# -*- Fundamental -*-## (C) Tenable Network Security## smb_nt.inc # $Revision: 1.84 $#include ('crypto_func.inc');global_var multiplex_id, g_mhi, g_mlo;multiplex_id = rand();g_mhi = multiplex_id / 256;g_mlo = multiplex_id % 256;function raw_byte (b){ return raw_string (b);}function raw_dword (d){ return raw_string ( (d)     & 255,                     (d>>8)  & 255,                     (d>>16) & 255,                     (d>>24) & 255 );}function get_dword (blob, pos){ if (pos > (strlen (blob) - 4))   return NULL; return ( ord(blob[pos]) +           (ord(blob[pos+1]) << 8) +          (ord(blob[pos+2]) << 16) +          (ord(blob[pos+3]) << 24) );}function kb_smb_name(){ return string(get_kb_item("SMB/name"));}function kb_smb_domain(){ return string(get_kb_item("SMB/domain"));}function kb_smb_login(){ return string(get_kb_item("SMB/login"));}function kb_smb_password(){ return string(get_kb_item("SMB/password"));}function kb_smb_transport(){ local_var r; r = get_kb_item("SMB/transport"); if ( r ) return int(r); else return 445;}#-----------------------------------------------------------------## Reads a SMB packet						  ##-----------------------------------------------------------------#function smb_recv(socket, length){   local_var header, len, trailer;   header = recv(socket:socket, length:4, min:4);   if (strlen(header) < 4)return(NULL);   len = 256 * ord(header[2]);   len += ord(header[3]);   if (len == 0)return(header);   trailer = recv(socket:socket, length:len, min:len);   if(strlen(trailer) < len )return(NULL);   return strcat(header, trailer);}#-----------------------------------------------------------------## Encode name and service to the netbios network format           ##-----------------------------------------------------------------#function netbios_encode(data,service){ local_var tmpdata, ret; ret = ""; tmpdata = data;  while (strlen(tmpdata) < 15) {   tmpdata += " "; } tmpdata += raw_string(service); for(i=0;i<16;i=i+1) {   o = ord(tmpdata[i]);   odiv = o/16;   odiv = odiv + ord("A");   omod = o%16;   omod = omod + ord("A");   c = raw_string(odiv, omod);   ret = ret+c; } return(ret); }#-----------------------------------------------------------------## Convert a netbios name to the netbios network format            ##-----------------------------------------------------------------#function netbios_name(orig){ return netbios_encode(data:orig, service:0x20); }#--------------------------------------------------------------## Returns the netbios name of a redirector                     ##--------------------------------------------------------------#function netbios_redirector_name(){ ret = crap(data:"CA", length:30); ret = ret+"AA"; return(ret); }#-------------------------------------------------------------## return a 28 + strlen(data) + (odd(data)?0:1) long string    ##-------------------------------------------------------------#function unicode(data){ len = strlen(data); ret = raw_string(ord(data[0]));  for(i=1;i<len;i=i+1) {  ret = string(ret, raw_string(0, ord(data[i]))); }   if(!(len & 1)){even = 1;} else even = 0;  for(i=0;i<7;i=i+1)  ret = ret + raw_string(0);     if(even) ret = ret + raw_string(0x00, 0x00);    return(ret);}#----------------------------------------------------------## Request a new SMB session                                ##----------------------------------------------------------#function smb_session_request(soc, remote, transport){ if ( transport )	trp = transport; else  	trp = kb_smb_transport(); # We don't need to request a session when talking on top of # port 445 if(trp == 445)  return(TRUE);   nb_remote = netbios_name(orig:remote); nb_local  = netbios_redirector_name();  session_request = raw_string(0x81, 0x00, 0x00, 0x44) + 		  raw_string(0x20) + 		  nb_remote +		  raw_string(0x00, 0x20)    + 		  nb_local  + 		  raw_string(0x00); send(socket:soc, data:session_request); r = smb_recv(socket:soc, length:4000); if(ord(r[0])==0x82)return(r); else return(FALSE);}#------------------------------------------------------------## Extract the UID from the result of smb_session_setup()     ##------------------------------------------------------------#function session_extract_uid(reply){ low = ord(reply[32]); high = ord(reply[33]); ret = high * 256; ret = ret + low; return(ret);}#-----------------------------------------------------------## Negociate (pseudo-negociate actually) the protocol        ## of the session                                            ##-----------------------------------------------------------#function smb_neg_prot_cleartext(soc){ neg_prot = raw_string   	(	 0x00,0x00,	 0x00, 0x89, 0xFF, 0x53, 0x4D, 0x42, 0x72, 0x00,	 0x00, 0x00, 0x00, 0x18, 0x01, 0x20, 0x00, 0x00,	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,	 g_mlo, g_mhi, 0x00, 0x66, 0x00, 0x02, 0x50, 0x43,	 0x20, 0x4E, 0x45, 0x54, 0x57, 0x4F, 0x52, 0x4B,	 0x20, 0x50, 0x52, 0x4F, 0x47, 0x52, 0x41, 0x4D,	 0x20, 0x31, 0x2E, 0x30, 0x00, 0x02, 0x4D, 0x49,	 0x43, 0x52, 0x4F, 0x53, 0x4F, 0x46, 0x54, 0x20,	 0x4E, 0x45, 0x54, 0x57, 0x4F, 0x52, 0x4B, 0x53,	 0x20, 0x31, 0x2E, 0x30, 0x33, 0x00, 0x02, 0x4D,	 0x49, 0x43, 0x52, 0x4F, 0x53, 0x4F, 0x46, 0x54,	 0x20, 0x4E, 0x45, 0x54, 0x57, 0x4F, 0x52, 0x4B,	 0x53, 0x20, 0x33, 0x2e, 0x30, 0x00, 0x02, 0x4c,	 0x41, 0x4e, 0x4d, 0x41, 0x4e, 0x31, 0x2e, 0x30,	 0x00, 0x02, 0x4c, 0x4d, 0x31, 0x2e, 0x32, 0x58,	 0x30, 0x30, 0x32, 0x00, 0x02, 0x53, 0x61, 0x6d,	 0x62, 0x61, 0x00	 );	  send(socket:soc, data:neg_prot); r = smb_recv(socket:soc, length:4000); if(strlen(r) < 10)return(FALSE); if(ord(r[9])==0)return(r); else return(FALSE);}function smb_neg_prot_NTLMv1(soc){ local_var neg_prot, r;  neg_prot = raw_string   	(	 0x00, 0x00, 0x00, 0xA4, 0xFF, 0x53,	 0x4D, 0x42, 0x72, 0x00, 0x00, 0x00, 0x00, 0x08,	 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	 0x4D, 0x0B, 0x00, 0x00, g_mlo, g_mhi, 0x00, 0x81,	 0x00, 0x02	 ) + "PC NETWORK PROGRAM 1.0" + raw_string(0x00, 0x02) +	 "MICROSOFT NETWORKS 1.03" + raw_string(0x00, 0x02) + 	 "MICROSOFT NETWORKS 3.0"  + raw_string(0x00, 0x02) + 	 "LANMAN1.0" + raw_string(0x00, 0x02) + 	 "LM1.2X002" + raw_string(0x00, 0x02) + 	 "Samba" +     raw_string(0x00, 0x02) +	 "NT LANMAN 1.0" + raw_string(0x00, 0x02) +	 "NT LM 0.12" + raw_string(0x00);	 	  send(socket:soc, data:neg_prot); r = smb_recv(socket:soc, length:4000); if(strlen(r) < 38)return(NULL); if(ord(r[9])==0)return(string(r)); else return(NULL);}function smb_neg_prot(soc){ if(defined_func("MD5"))   return smb_neg_prot_NTLMv1(soc:soc); else   return smb_neg_prot_cleartext(soc:soc);}function smb_neg_prot_value(prot){ return(ord(prot[37]));}function smb_neg_prot_cs(prot){ if(smb_neg_prot_value(prot:prot) < 7)  return NULL;   return substr(prot, 73, 73 + 7);} function smb_neg_prot_domain(prot){ local_var i, ret; ret = NULL; for(i=81;i<strlen(prot);i+=2) {  if(ord(prot[i]) == 0) break;  else ret += prot[i]; } return ret;}#------------------------------------------------------## Set up a session                                     ##------------------------------------------------------#function smb_session_setup_cleartext(soc, login, password, domain){  local_var extra, native_os, native_lanmanager, len, bcc;  local_var len_hi, len_lo, bcc_hi_n, bcc_lo;  local_var pass_len_hi, pass_len_lo;  extra = 0;  native_os = "Unix";  native_lanmanager = "Nessus";  if(!domain)domain = "MYGROUP";  if(domain) extra = 3+ strlen(domain) + strlen(native_os) + strlen(native_lanmanager);  else extra = strlen(native_os) + strlen(native_lanmanager) + 2;    len = strlen(login) + strlen(password) + 57 + extra;  bcc = 2 + strlen(login) + strlen(password) + extra;    len_hi = len / 256;  len_low = len % 256;    bcc_hi = bcc / 256;  bcc_lo = bcc % 256;    pass_len = strlen(password) + 1 ;  pass_len_hi = pass_len / 256;  pass_len_lo = pass_len % 256;  #if (typeof(login) == "int")    display("HORROR! login=",    login, "\n");  #if (typeof(password) == "int") display("HORROR! password=", password, "\n");  if (! login) login="";  if (! password) password="";    st = raw_string(0x00,0x00,    	  len_hi, len_low, 0xFF, 0x53, 0x4D, 0x42, 0x73, 0x00,	  0x00, 0x00, 0x00, 0x18, 0x01, 0x20, 0x00, 0x00,	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	  0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,	  0x00, 0x00, 0x0A, 0xFF, 0x00, 0x00, 0x00, 0x04,	  0x11, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	  0x00, pass_len_lo,  pass_len_hi, 0x00, 0x00, 0x00, 0x00, bcc_lo,	  bcc_hi) + password + raw_string(0) + login + raw_string(0x00);	    if(domain)  	st = st + domain + raw_string(0x00);		  st = st + native_os + raw_string(0x00) + native_lanmanager + raw_string(0x00);  	    send(socket:soc, data:st);  r = smb_recv(socket:soc, length:1024);   if(strlen(r) < 9)return(NULL);  if(ord(r[9])==0)return(r);  else return(NULL);}	   function smb_session_setup_NTLMvN(soc, login, password, domain, cs, version){  local_var extra, native_os, native_lanmanager, len, bcc;  local_var len_hi, len_lo, bcc_hi_n, bcc_lo;  local_var plen;    local_var response, pass, i, log, dom, ipass, spass;  pass = log = dom = NULL;  for (i=0;i < strlen(password);i++)    pass += password[i] + raw_string(0x00);  for (i=0;i < strlen(login);i++)    log += login[i] + raw_string(0x00);  for (i=0;i < strlen(domain);i++)    dom += domain[i] + raw_string(0x00);  ipass = spass = NULL;  if(version == 1)  {  	if(login && password)  	{  	 response = NTLM_Response (password:pass, challenge:cs);  	 if (!isnull(response))           ipass = response[0];        }  }  else   {    	if(login && password)	{         response = LMv2_Response (password:pass, login:log, domain:dom, challenge:cs);  	 if (!isnull(response))           ipass = response[0];	}  }      extra = 0;  native_os = "Unix";  native_lanmanager = "Nessus";  extra = 3 + strlen(domain) + strlen(native_os) + strlen(native_lanmanager);      len = strlen(login) + strlen(ipass) + strlen(spass) + 62 + extra;  bcc = 1 + strlen(login) + strlen(ipass) + strlen(spass) + extra;      len_hi = len / 256;  len_low = len % 256;    bcc_hi = bcc / 256;  bcc_lo = bcc % 256;      st = raw_string(0x00,0x00,    	  len_hi, len_low, 0xFF, 0x53,	  0x4D, 0x42, 0x73, 0x00, 0x00, 0x00, 0x00, 0x08,	  0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	  0x00, 0x28, 0x00, 0x00, g_mlo, g_mhi, 0x0D, 0xFF,	  0x00, 0x00, 0x00, 0x00, 0x44, 0x02, 0x00, 0xA0,	  0xF5, 0x00, 0x00, 0x00, 0x00, strlen(ipass) % 256, 0x00, strlen(spass) % 256,	  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	  0x00, bcc_lo, bcc_hi) + ipass + spass + login + 	  raw_string(0);	    st += domain + raw_string(0x00);		  st += native_os + raw_string(0x00) + native_lanmanager + raw_string(0x00);  	    send(socket:soc, data:st);  r = smb_recv(socket:soc, length:1024);   if(strlen(r) < 9)return(FALSE);  if(ord(r[9])==0)return(r);  else return(FALSE);}	   function smb_session_setup(soc, login, password, domain, prot){ local_var ct, ret, ntlmv1;  ct = get_kb_item("SMB/dont_send_in_cleartext"); ntlmv1 = get_kb_item("SMB/dont_send_ntlmv1");  if( smb_neg_prot_value(prot:prot) < 7 )  {  if(ct == "yes") return NULL;  else return smb_session_setup_cleartext(soc:soc, login:login, password:password, domain:domain);  } else  {  ret = smb_session_setup_NTLMvN(soc:soc, login:login, password:password, domain:domain, cs:smb_neg_prot_cs(prot:prot), version:2);

⌨️ 快捷键说明

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