首页 网络安全 安全学院 查看内容

vnc登陆口令猜解研究对次数与时间的限制

2009-6-29 11:05 1928 0

摘要:   formytest   vnc所有帐号登陆的时候(含(winvnc /ultravnc/realvnc)):   1.加入ip到一个列表(黑名单),并记录时间,在这个时间上+10s钟作为下一次...
关键词: current nbsp blocked QuadPart vncServer hostname next 时间 blacklist entry

  formytest   vnc所有帐号登陆的时候(含(winvnc /ultravnc/realvnc)):   1.加入ip到一个列表(黑名单),并记录时间,在这个时间上+10s钟作为下一次连接拒绝时间。   2.登陆次数限制,如果失败超过5次,则加入黑名党,再等10s后才能登陆。   请看下面代码:   void   vncServer::AddAuthHostsBlacklist(const char *machine) {   omni_mutex_lock l(m_clientsLock);   // -=- Is the specified host blacklisted?   vncServer::BlacklistEntry *current = m_blacklist;   // Get the current time as a 64-bit value   SYSTEMTIME      systime;   FILETIME      ftime;   LARGE_INTEGER     now;   GetSystemTime(&systime);   SystemTimeToFileTime(&systime, &ftime);   now.LowPart=ftime.dwLowDateTime;now.HighPart=ftime.dwHighDateTime;   now.QuadPart /= 10000000; // Convert it into seconds   while (current) {   // Is this the entry we're interested in?   if (_stricmp(current->_machineName, machine) == 0) {   // If the host is already blocked then ignore   if (current->_blocked)   return;   // Set the RefTime & failureCount   current->_lastRefTime.QuadPart = now.QuadPart + 10;   current->_failureCount++;   if (current->_failureCount > 5)   current->_blocked = TRUE;   判定函数代码:   while (current) {   // Has the blacklist entry timed out?   if ((now.QuadPart - current->_lastRefTime.QuadPart) > 0) {////当前时间超过隔离时间?即如果10s钟后   // Yes. Is it a "blocked" entry?   if (current->_blocked) {   // Yes, so unblock it & re-set the reference time   current->_blocked = FALSE;   ///超过10s,解除黑名单   current->_lastRefTime.QuadPart = now.QuadPart + 10;   } else {   // No, so remove it   if (previous)   previous->_next = current->_next;   else   m_blacklist = current->_next;   vncServer::BlacklistEntry *next = current->_next;   free(current->_machineName);   delete current;   current = next;   continue;   }   }   // Is this the entry we're interested in?   if ((_stricmp(current->_machineName, hostname) == 0) &&/////比较是否再黑名单里面   (current->_blocked)) {   // Machine is blocked, so just reject it   vnclog.Print(LL_CONNERR, VNCLOG("client %s rejected due to blacklist entry\n"), hostname);   return vncServer::aqrReject;   }   previous = current;   current = current->_next;   }   // Has a hostname been specified?   if (hostname == 0) {   vnclog.Print(LL_INTWARN, VNCLOG("verify failed - null hostname\n"));   return vncServer::aqrReject;   }   ==================   以上原因决定了vnc弱口令扫描的特点:   1.密码最多只能超过5次出错,然后就会被锁定,需要10s钟解锁。   2.出错超过5次后每猜解一个密码,都会被锁定,所以后面的密码猜解非常慢(每一个隔10s)。   最近在研究对:   msql/mysql/3389/vnc/oracle弱口令的集成扫描工具开发。   请及时关注我的blog:   http://hi.baidu.com/it_security
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部