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

📄 ssh_func.inc

📁 漏洞扫描源码,可以扫描linux,windows,交换机路由器
💻 INC
📖 第 1 页 / 共 4 页
字号:
#------------------------------------------------------------------------------## (C) Nicolas Pouvesle# This script is released under the version 2 to the Gnu General Public Licence####global_var session_id, enc_keys, seqn_w, seqn_r;global_var local_channel, remote_channel;global_var l_window_size, received_size;global_var r_window_size, r_packet_size;global_var dh_pub, dh_priv;global_var _ssh_banner;global_var _ssh_server_version;global_var _ssh_supported_authentication;global_var _ssh_cmd_error;global_var _ssh_error;global_var _reuse_connection;global_var bugged_sshd, bugged_first, bugged_channels, bugged_rws, bugged_rps;# ssh_hex2raw() copied from misc_func.inc as we don't want to taint ssh_func.inc with# a third-party includefunction ssh_hex2raw(s){ local_var i, j, ret, l; s = chomp(s);  # remove trailing blanks, CR, LF... l = strlen(s); if (l % 2) display("ssh_hex2raw: odd string: ", s, "\n"); 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 register_int_in_kb(int, name){ if ( ! defined_func("replace_kb_item") || !_reuse_connection ) return 0; replace_kb_item(name:name, value:int);}function load_int_from_kb(name){ if ( ! defined_func("get_kb_fresh_item") || !_reuse_connection ) return NULL; return get_kb_fresh_item(name);}function register_data_in_kb(data, name){ local_var n, item; n = 0; if ( ! defined_func("replace_kb_item") || !_reuse_connection ) return 0; replace_kb_item(name:name, value:hexstr(data));}function load_data_from_kb(name){ local_var item; if ( ! defined_func("get_kb_fresh_item") || !_reuse_connection ) return NULL; item =  get_kb_fresh_item(name); if ( isnull(item) ) return NULL; return ssh_hex2raw(s:item);}function register_array_in_kb(array, name){ local_var i, item; if ( ! defined_func("replace_kb_item") || !_reuse_connection ) return 0; for ( i = 0 ; i < max_index(array); i ++ ) {  replace_kb_item(name:name + "_" + i, value:hexstr(array[i])); }}function register_intarray_in_kb(array, name){ local_var i, item; if ( ! defined_func("replace_kb_item") || !_reuse_connection ) return 0; for ( i = 0 ; i < max_index(array); i ++ ) {  replace_kb_item(name:name + "_" + i, value:string(array[i])); }}function load_array_from_kb(name){ local_var array, n, item; if ( ! defined_func("get_kb_fresh_item") || !_reuse_connection ) return NULL; n = 0; array = make_list(); while ( TRUE ) {  item = get_kb_fresh_item(name + "_" + n );  if ( isnull(item) ) break;  array[n] = ssh_hex2raw(s:item);  n ++; } return array;}function load_intarray_from_kb(name){ local_var array, n, item; if ( ! defined_func("get_kb_fresh_item") || !_reuse_connection ) return NULL; n = 0; array = make_list(); while ( TRUE ) {  item = get_kb_fresh_item(name + "_" + n );  if ( isnull(item) ) break;  array[n] = int(item);  n ++; } return array;}function kb_ssh_login(){ return string(get_kb_item("Secret/SSH/login"));}function kb_ssh_password(){ return string(get_kb_item("Secret/SSH/password"));}function kb_ssh_privatekey(){ return string(get_kb_item("Secret/SSH/privatekey"));}function kb_ssh_publickey(){ return string(get_kb_item("Secret/SSH/publickey"));}function kb_ssh_passphrase(){ return string(get_kb_item("Secret/SSH/passphrase"));}function kb_ssh_transport(){ local_var r; r = get_kb_item("Services/ssh"); if ( r ) return int(r); else return 22;}#-----------------------------------------------------------------## Set SSH debugging error msg                                     ##-----------------------------------------------------------------#function set_ssh_error(msg){ _ssh_error = msg;}#-----------------------------------------------------------------## Get SSH debugging error msg                                     ##-----------------------------------------------------------------#function get_ssh_error(){ return _ssh_error;}#-----------------------------------------------------------------## Get SSH server's version                                        ##-----------------------------------------------------------------#function get_ssh_supported_authentication(){ return _ssh_supported_authentication;}#-----------------------------------------------------------------## Get SSH server's version                                        ##-----------------------------------------------------------------#function get_ssh_server_version(){ return _ssh_server_version;}#-----------------------------------------------------------------## Get SSH banner                                                  ##-----------------------------------------------------------------#function get_ssh_banner(){ return _ssh_banner;}#-----------------------------------------------------------------## Convert network long (buffer) to long                           ##-----------------------------------------------------------------#function ntol(buffer,begin){ local_var len; len = 16777216*ord(buffer[begin]) +       ord(buffer[begin+1])*65536 +       ord(buffer[begin+2])*256 +       ord(buffer[begin+3]); return len;}#-----------------------------------------------------------------## Convert int to network long (raw_string)                        ##-----------------------------------------------------------------#function raw_int32(i){ local_var buf; buf = raw_string (		 (i>>24) & 255,        (i>>16) & 255,        (i>>8) & 255,        (i) & 255		 ); return buf;}#-----------------------------------------------------------------## Convert char to network char (raw_string)                       ##-----------------------------------------------------------------#function raw_int8(i){ local_var buf; buf = raw_string (        (i) & 255		 ); return buf;}#-----------------------------------------------------------------## Init packet sequence number and channel number                  ##-----------------------------------------------------------------#function init(){ # sequence packet = 0 seqn_w = seqn_r = 0; local_channel = 0; _ssh_banner = ""; _ssh_server_version = ""; _ssh_supported_authentication = ""; _ssh_cmd_error = ""; _ssh_error = ""; bugged_sshd = 0; bugged_first = 1; register_int_in_kb (int:bugged_sshd, name:"Secret/SSH/bugged_sshd"); #register_int_in_kb (int:bugged_first, name:"Secret/SSH/bugged_first");}#-----------------------------------------------------------------## Decode base64 string - ported from public domain code           ##-----------------------------------------------------------------#function base64decode(str){ local_var len, i, j, k, ret, base64, b64; 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_int8(i:o[k]);      if (i < 3)      break; } return ret;}#-----------------------------------------------------------------## Reads a SSH packet (comes from smb_nt.inc)                      ##-----------------------------------------------------------------#function ssh_recv(socket, length){  local_var header, len, trailer, cmpt, payload, ret;  header = recv(socket:socket, length:4, min:4);  if (strlen(header) < 4)return(NULL);  len = ntol (buffer:header, begin:0);  if ((len == 0) || (len > 32768)) return(header);  trailer = recv(socket:socket, length:len, min:len);  if(strlen(trailer) < len )return(NULL);   seqn_r++;  register_int_in_kb(name:"Secret/SSH/seqn_r", int:seqn_r);  # SSH servers can send IGNORE (code 2) or BANNER (code 53) msg  ret = ord(trailer[1]);  if ((ret == 2) || (ret == 53))  {    if (ret == 53)      _ssh_banner += getstring (buffer:trailer, pos:2);    return ssh_recv(socket:socket, length:length);  }  return strcat(header, trailer);}#-----------------------------------------------------------------## Detect if remote ssh server is known to be bugged (SunSSH1.0)   ##-----------------------------------------------------------------#function is_sshd_bugged(banner){ if (ereg(string:banner, pattern:"^SSH-2\.0-Sun_SSH_1\.0"))   return 1; return 0;}#-----------------------------------------------------------------## Waits for the server identification string, and sends our own   ## identification string.                                          ##-----------------------------------------------------------------#function ssh_exchange_identification(socket){ local_var buf, sshversion, num, prot; buf = recv_line(socket:socket, length:1024); if (!buf) {   set_ssh_error(msg: "OpenVAS did not receive server's version");   return 0; } # server ident : SSH-%d.%d-servername # if (!ereg(string:buf, pattern:"^SSH-*[0-9]\.*[0-9]-*[^\n]")) {   set_ssh_error(msg: "Remote service is not a valid SSH service");   return 0; } sshversion = split(buf, sep:"-", keep:0); num = split(sshversion[1], sep:".", keep:0); # version supported = 2 & 1.99 if ((num[0] != 2) && !((num[0] == 1) && (num[1] == 99))) {   set_ssh_error(msg: "OpenVAS only supports SSHv2");   return 0; } # We use 2.0 protocol prot = "SSH-2.0-OpenVAS"+raw_string(0x0a); send(socket:socket, data:prot); if ( '\r\n' >< buf ) buf = buf - '\r\n';   else buf = buf - '\n'; if (is_sshd_bugged(banner:buf)) {   bugged_sshd = 1;   register_int_in_kb (int:bugged_sshd, name:"Secret/SSH/bugged_sshd"); } # all is correct return buf;}#-----------------------------------------------------------------## check pattern in buffer                                         ## return next len in buffer or -1                                 ##-----------------------------------------------------------------#function check_pattern(buffer,pattern,length){ local_var alglen, len, alg; alglen = ntol (buffer:buffer, begin:length); len = length+4+alglen; alg = substr(buffer,length+4,len-1); if (!ereg(string:alg, pattern:pattern))  return -1; return len;}#-----------------------------------------------------------------## Create key exchange packet                                      ##-----------------------------------------------------------------#function kex_packet(payload,code){ local_var len, padding_len, full_len, kex; len =    # padding length     1 +     # msg code     1 +     # payload length     strlen(payload);   #padding (mod 8) = 8 - ( (len+packet_len(4) ) % 8 )  padding_len = 8 - ((len + 4) % 8); # if padding len is less than 4 add block size if (padding_len < 4)   padding_len += 8;  full_len = len + padding_len; kex =    # packet length    raw_int32 (i:full_len) +    # padding length    raw_int8 (i:padding_len) +    #msg code (32 = Diffie-Hellman GEX Init)    code +    # Payload (Pub key)    payload +    # Padding    crap(data:raw_string(0),length:padding_len); return kex;}#-----------------------------------------------------------------## mac compute                                                     ##-----------------------------------------------------------------#function mac_compute(data, type){ local_var to_hash; # we only support sha1! enc_keys[5] == mac_out key if (!type) {  to_hash = raw_int32(i:seqn_w) + data;  hash = HMAC_SHA1(data:to_hash, key:enc_keys[4]); } else {  to_hash = raw_int32(i:seqn_r) + data;  hash = HMAC_SHA1(data:to_hash, key:enc_keys[5]); } return hash;}#-----------------------------------------------------------------## crypt data                                                      ##-----------------------------------------------------------------#function crypt(data){ local_var crypted; crypted = bf_cbc_encrypt(data:data, key:enc_keys[2], iv:enc_keys[0]); enc_keys[0] = crypted[1]; register_array_in_kb(array:enc_keys, name:"Secret/SSH/enc_keys");  return crypted[0];}

⌨️ 快捷键说明

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