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

📄 misc_func.inc

📁 漏洞扫描源码,可以扫描linux,windows,交换机路由器
💻 INC
字号:
# -*- Fundamental -*-## (C) 2002 Michel Arboi <arboi@alussinan.org># $Revision: 1.53 $function replace_or_set_kb_item(name, value){ if (defined_func("replace_kb_item"))  replace_kb_item(name: name, value: value); else  set_kb_item(name: name, value: value);}function register_service(port, proto, ipproto){  local_var	k;  if (! ipproto) ipproto = "tcp";  if (! service_is_unknown(port:port, ipproto: ipproto))  {    if (debug_level) display(get_host_ip(), ": service is already known on port ", ipproto, ":", port, "\n");    #return(0);  }     if ( ipproto != "unknown" )  {   k = strcat("Known/", ipproto, "/", port);   replace_or_set_kb_item(name: k, value: proto);   if (ipproto == "tcp") k = strcat("Services/", proto);   else k = strcat("Services/", ipproto, "/", proto);   set_kb_item(name: k, value: port);  }   if (debug_level) display(get_host_ip(), ": register_service: port=", port, ", proto=", proto, "\n");}# This function may fork!function known_service(port, ipproto){  local_var	k, p;  if (! ipproto) ipproto = "tcp";  k = strcat("Known/", ipproto, "/", port);  p = get_kb_item(k);  #if (p) { display("Known service on port ", port, "\n"); }  #else { display("Unknown service on port ", port, "\n"); }  return p;}# This function does not fork!function service_is_unknown(port, ipproto){  local_var	k, p;  if (! ipproto) ipproto = "tcp";  k = strcat("Known/", ipproto, "/", port);  p = get_kb_list(k);  if (isnull(p)) return TRUE;  foreach k (p)    if (k != "unknown")	# fool proof      return FALSE;  return TRUE;}function verify_service(port, ipproto, proto){  local_var	k, p;  # Remember: no KB yet in command line mode!  if (! ipproto) ipproto = "tcp";  k = strcat("Known/", ipproto, "/", port);  p = get_kb_list(k);  foreach k (p)    if (k == proto)      return TRUE;  return FALSE;}# This function may forkfunction get_port_for_service(default, ipproto, proto){  local_var	k, p;  # Remember: no KB yet in command line mode!  if (! ipproto) ipproto = "tcp";  if (ipproto == "tcp") k = strcat("Services/", proto);  else k = strcat("Services/", ipproto, "/", proto);  p = get_kb_item(k);  if (p) return p;  k = strcat("Known/", ipproto, "/", default);  p = get_kb_item(k);  if (p == proto) return default;  exit(0);}function set_mysql_version(port, version){  local_var	sb;  sb = string("mysql/version/", port);  set_kb_item(name: sb, value: version);}function get_mysql_version(port){  local_var sb;  sb = string("mysql/version/", port);  return  get_kb_item(sb);}function get_unknown_banner(port, ipproto, dontfetch){  local_var	sb, sbH, banner, soc, req, tcp, p, bannerHex;  if (! ipproto) ipproto = "tcp";  if ( ipproto == "tcp" )	tcp = 1;  else	tcp = 0;  if (tcp)  {   sb  = strcat("unknown/banner/", port);   sbH = strcat("unknown/bannerHex/", port);  }  else  {   sb  = strcat("unknown/banner/", ipproto, "/", port);   sbH = strcat("unknown/bannerHex/", ipproto, "/", port);  }  banner = get_kb_item(sbH);  if (banner) return hex2raw(s: banner);  banner = get_kb_item(banner);  if (banner) return banner;  banner = get_kb_item("BannerHex/"+port);  if (banner) return(hex2raw(s: banner));  banner = get_kb_item("Banner/"+port);  if (banner) return(banner);                                                                                  banner = get_kb_item("Amap/"+ipproto+"/"+port+"/FullBanner");  if (banner) return(banner);  foreach p (make_list("spontaneous", "get_http", "help"))  {    banner = get_kb_item("FindService/"+ipproto+"/"+port+"/"+p);    bannerHex = get_kb_item("FindService/"+ipproto+"/"+port+"/"+p+"Hex");    if ( banner && bannerHex )      {    if (strlen(bannerHex) > 2 * strlen(banner))     return hex2raw(s: bannerHex);    else     return(banner);    }  }  if (dontfetch) return(NULL);  if (! get_port_state(port)) return (NULL);  if (! tcp) return (NULL);  soc = open_sock_tcp(port);  if(!soc) return (NULL);  # I don't think that it makes sense to send an HTTP request  #req = http_head(item:"/", port:port);  #send(socket:soc, data:req);  banner = recv(socket:soc, length:2048);  close(soc);  if (banner)  {    replace_or_set_kb_item(name: sb, value: banner);    if ('\0' >< sb)     replace_or_set_kb_item(name: sbH, value: hexstr(banner));  }  return(banner);}function set_unknown_banner(port, banner, ipproto){  local_var	sb;  if (! ipproto || ipproto == 'tcp')    sb = string("unknown/banner/", port);  else    sb = strcat('unknown/banner/', ipproto, '/', port);  set_kb_item(name: sb, value: banner);  if ('\0' >< banner)  {    if (! ipproto || ipproto == 'tcp')      sb = string("unknown/bannerHex/", port);    else      sb = strcat('unknown/bannerHex/', ipproto, '/', port);    set_kb_item(name: sb, value: hexstr(banner));  }}## Get the banner for a given service# You must also specify a default port, in case this is not in the kb#function get_service_banner_line(service, port, ipproto){  local_var	banner, soc, key, gport, tcp;  tcp = !ipproto || ipproto == 'tcp';  if (tcp)   gport = get_kb_item(strcat("Services/", service));  else   gport = get_kb_item(strcat("Services/", ipproto, "/", service));  if(!gport) gport = port;  if (tcp)    key = strcat(service, "/banner/", gport);  else   key = strcat(service, "/banner/", ipproto, "/", gport);  banner = get_kb_item(key);    if(!banner)  {    if (! tcp) return;    if(get_port_state(gport))    {      soc = open_sock_tcp(gport);      if(soc)      { 	banner = recv_line(socket:soc, length:2048);	close(soc);      }    }#   if (banner) set_kb_item(name: key, value: banner);  }    return(banner);}## Fast replacement for getrpcport() which uses the libc#function get_rpc_port(program, protocol, portmap){  local_var	broken, req, soc, r, port; local_var	a, b, c, d, p_a, p_b, p_c, p_d, pt_a, pt_b, pt_c, pt_d;   a = rand() % 255; b = rand() % 255; c = rand() % 255; d = rand() % 255;  p_a = program / 16777216; 	p_a = p_a % 256; p_b = program / 65356; 	p_b = p_b % 256; p_c = program / 256;   	p_c = p_c % 256; p_d = program % 256; pt_a = protocol / 16777216; pt_a = pt_a % 256; pt_b = protocol / 65535   ; pt_b = pt_b % 256; pt_c = protocol / 256;    ; pt_c = pt_c % 256; pt_d = protocol % 256;   req = raw_string(a, 	b, 	c, 	d, 	# XID 		  0x00, 0x00, 0x00, 0x00,	# Msg type: call		  0x00, 0x00, 0x00, 0x02,	# RPC Version		  0x00, 0x01, 0x86, 0xA0,	# Program		  0x00, 0x00, 0x00, 0x02,	# Program version		  0x00, 0x00, 0x00, 0x03,	# Procedure		  0x00, 0x00, 0x00, 0x00,	# Credentials - flavor		  0x00, 0x00, 0x00, 0x00, 	# Credentials - length		  0x00, 0x00, 0x00, 0x00,	# Verifier - Flavor		  0x00, 0x00, 0x00, 0x00,	# Verifier - Length		  		  p_a,  p_b,  p_c,  p_d,	# Program		  0xFF, 0xFF, 0xFF, 0xFF,	# Version (any)		  pt_a, pt_b, pt_c, pt_d,	# Proto (udp)		  0x00, 0x00, 0x00, 0x00	# Port 		  );		   if(isnull(portmap)){   port = int(get_kb_item("rpc/portmap"));   if(port == 0)port = 111;   } else port = portmap; 	  	   broken = get_kb_item(string("/tmp/rpc/noportmap/", port)); if(broken)return(0);  	   soc = open_sock_udp(port); send(socket:soc, data:req); r = recv(socket:soc, length:1024);  close(soc); if(!r) {  set_kb_item(name:string("/tmp/rpc/noportmap/", port), value:TRUE);  return(0); }  if(strlen(r) < 28)  return(0); else  {   p_d = ord(r[27]);   p_c = ord(r[26]);   p_b = ord(r[25]);   p_a = ord(r[24]);   port = p_a;   port = port * 256;   port = port +p_b;    port = port * 256;   port = port + p_c;    port = port * 256;   port = port + p_d;   return(port);  }}#function rand_str(length, charset){  local_var	l, i, s, n;  if (! charset)    charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";  if (isnull(length))    length = 8;  l = strlen(charset);  s = "";  for (i = 0; i < length; i ++)  {    n = rand() % l;    s += charset[n];  }  return s;}function add_port_in_list(list, port){ local_var l;   if(!get_port_state(port)) {  if(isnull(list))return make_list();  else return list; }  if(isnull(list))return make_list(port);  foreach l (list) {   if(l == port)   return list; } return make_list(list, port);}# hex2raw was written by Renaud?function hex2raw(s){ local_var i, j, ret, l; s = chomp(s);	# remove trailing blanks, CR, LF... l = strlen(s); if (l % 2) {	display("hex2raw: odd string: ", s, "\n");	l --;	} s = tolower(s); for(i=0;i<l;i+=2) {  if(ord(s[i]) >= ord("0") && ord(s[i]) <= ord("9"))        j = int(s[i]);  else        j = int((ord(s[i]) - ord("a")) + 10);  j *= 16;  if(ord(s[i+1]) >= ord("0") && ord(s[i+1]) <= ord("9"))        j += int(s[i+1]);  else        j += int((ord(s[i+1]) - ord("a")) + 10);  ret += raw_string(j); } return ret;}function report_service(port, svc, banner){ local_var	k, name, a; svc = tolower(svc); if (! isnull(banner)) {  k = strcat(svc, "/banner/", port);  set_kb_item(name: k, value: banner); } register_service(port: port, proto: svc); if (svc == 'www') name = 'web server'; else if (svc == 'proxy') name = 'web proxy'; else if (svc == 'hylafax-ftp' || svc == 'hylafax') name = 'HylaFAX server'; else if (svc == 'agobot.fo') name = 'Agobot.fo backdoor'; else if (svc == 'unknown_irc_bot') name = 'IRC bot'; else if (svc == 'auth') name = 'identd'; else name = toupper(svc) +' server'; a = tolower(name[0]); if (a == 'a' || a == 'e' || a == 'i' || a == 'o') a = 'An '; else a = 'A '; security_note(port: port, data: a + name + ' is running on this port');}function base64_decode(str){ local_var len, i, j, k, ret, base64, b64, a,b,c,o; len = strlen(str); ret = ""; base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; for (i = 0; i < 256; i++)   b64[i] = 0; for (i = 0; i < strlen(base64); i++)   b64[ord(base64[i])] = i; for(j=0;j<len;j+=4) {   for (i = 0; i < 4; i++)   {    c = ord(str[j+i]);    a[i] = c;    b[i] = b64[c];   }    o[0] = (b[0] << 2) | (b[1] >> 4);   o[1] = (b[1] << 4) | (b[2] >> 2);   o[2] = (b[2] << 6) | b[3];   if (a[2] == ord('='))     i = 1;   else if (a[3] == ord('='))     i = 2;   else     i = 3;   for(k=0;k<i;k++)      ret += raw_string(int(o[k]) & 255);      if (i < 3)      break; } return ret;}__base64_code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function base64_code(c){ return(__base64_code[c]);}function pow2(x){ local_var __ret; __ret = 1; while(x)  {  __ret = __ret * 2;  x = x  - 1;  } return(__ret);}function base64(str){ local_var len, i, ret, char_count, _bits, val, cnt, mul; len = strlen(str); i = 0; ret = ""; char_count = 0; _bits = 0; while(i < len) {  _bits = _bits + ord(str[i]);  char_count = char_count + 1;  if(char_count == 3)  {    val = _bits / 262144;    ret = string(ret, base64_code(c:val));    val = _bits / 4096;    val = val & 0x3F;    ret = string(ret, base64_code(c:val));    val = _bits / 64;    val = val & 0x3F;    ret = string(ret, base64_code(c:val));    val = _bits & 0x3F;    ret = string(ret, base64_code(c:val));    char_count = 0;    _bits = 0; } else {       _bits = _bits * 256;       } i = i + 1; } if(!(char_count == 0)) {  cnt = char_count * 8;  mul = 16;  mul = mul - cnt;  mul = pow2(x:mul);  _bits = _bits * mul;  val = _bits / 262144;  ret = string(ret, base64_code(c:val));  val = _bits / 4096;  val = val & 0x3F;  ret = string(ret, base64_code(c:val)); if(char_count == 1) {   ret = string(ret, "=="); } else {   val = _bits / 64;   val = val & 0x3F;   ret = string(ret, base64_code(c:val), "=");  } } return(ret);}# This function converts a string representing a decimal number to # to hexadecimal; eg, dec2hex(1098757090) == "417db3e2".## Args:#   o num, decimal number.## Return:#   hex number represented as a raw string.## updated: 16-Nov-2004, George A. Theall#function dec2hex(num) {  local_var digits, hex, rem;  hex = "";  num = int(num);  while (num > 0) {    rem = num % 256;    hex = raw_string(rem, hex);    num = num / 256;    if (num > 0 && num < 255) {      hex = raw_string(num, hex);      num = 0;    }  }  if (!hex) hex = raw_string(0x00);  return hex;}# Convert a Date CVS field to Unix time # Michel Arboifunction cvsdate2unixtime(date){  local_var v, u;  if (! defined_func("mktime")) return NULL;	# We could write it in NASL...  v = eregmatch(string: date, pattern: ".Date: ([0-9]+)/([01][0-9])/([0-3][0-9]) ([0-2][0-9]):([0-6][0-9]):([0-6][0-9]) \$");  if (isnull(v)) return;  u = mktime(year: v[1], mon: v[2], mday: v[3], hour: v[3], min: v[5], sec: v[6]);  return u;}

⌨️ 快捷键说明

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