远程检测客户机上的共享设置情况

来源:互联网 发布:机器视觉主流算法 编辑:程序博客网 时间:2024/05/29 03:41
本章接着讨论自我检测的问题,其实不是WannaCrypt 会利用共享漏洞,还有很隐患和早期的黑客攻击都会利用 $ICP 连接,而且Windows 在默认情况会把你所有的本地磁盘都创建隐藏的共享,以$ 为尾符的的隐藏共享,在内网你的弱密码情况下,轻易就能连上你的磁盘,尽管你没有专门设置过共享;
在没有封堵445 端口之外,也可以扫描一下自己的机器上的共享情况,微软Windows API 有提供一整套函数对共享进行操作,在知晓或已破解远程机器的用户名密码前提下,通过API 你可以直接在对方不知情下为之创建共享,这个不在今天的讨论范围内。


直接看代码,可以从MSDN 上抄段示例代码过来改装一下就能放在自己的程序中使用:


void testShare(CStringList*  shareList){PSHARE_INFO_502 BufPtr, p;NET_API_STATUS res;LPTSTR   lpszServer = NULL;DWORD er = 0, tr = 0, resume = 0, i;do {res = NetShareEnum(lpszServer, 502, (LPBYTE *)&BufPtr, MAX_PREFERRED_LENGTH, &er, &tr, &resume);if (res == ERROR_SUCCESS || res == ERROR_MORE_DATA){p = BufPtr;for (i = 1; i <= er; i++){//printf("%-20S%-30S%-8u", p->shi502_netname, p->shi502_path, p->shi502_current_uses);CString shi502_netname = p->shi502_netname;CString shi502_path = p->shi502_path;DWORD shi502_current_uses = p->shi502_current_uses;bool ValidSecurity;if (IsValidSecurityDescriptor(p->shi502_security_descriptor)){//printf("Yes\n");ValidSecurity = true;}else{//printf("No\n");ValidSecurity = false;}CString outS;outS.Format(L"%s,%s,%d,%d", shi502_netname, shi502_path, shi502_current_uses, ValidSecurity);shareList->AddTail(outS);p++;}NetApiBufferFree(BufPtr);}else{            //printf("Error: %ld\n", res);}}while (res == ERROR_MORE_DATA); return;}


/////////////////////////////////////////////////////////////////////////////////////////
调用方法:
CStringList*  shareList = new  CStringList();testShare(shareList);POSITION rPos;rPos = shareList->GetHeadPosition();int h = 0;while (rPos != NULL){CString tmps = shareList->GetNext( rPos );m_ListBox1.AddString(tmps);h++;}if (  h != 0 ){CString hStr;hStr.Format( L"发现共享 %d 处",h  );m_ListBox1.AddString(  hStr );}else{m_ListBox1.AddString( L"未发现共享"  );}


我封装过的函数参数是个CStringList 指针,可以得到一个集合,如果需要的话可能转成自己想使用类型,这里是为了方便在小窗口打印出来,直接显示;


后期就可以通过网络通讯把读到共享列表发给管理端,管理端就知道下面的客户机谁开了共享,共享了些什么...


 【 本系列会持续更新 请关注公众号 】



阅读全文
0 0
原创粉丝点击