本章接着讨论自我检测的问题,其实不是WannaCrypt 会利用共享漏洞,还有很隐患和早期的黑客攻击都会利用 $ICP 连接,而且Windows 在默认情况会把你所有的本地磁盘都创建隐藏的共享,以$ 为尾符的的隐藏共享,在内网你的弱密码情况下,轻易就能连上你的磁盘,尽管你没有专门设置过共享;
在没有封堵445 端口之外,也可以扫描一下自己的机器上的共享情况,微软Windows API 有提供一整套函数对共享进行操作,在知晓或已破解远程机器的用户名密码前提下,通过API 你可以直接在对方不知情下为之创建共享,这个不在今天的讨论范围内。
直接看代码,可以从MSDN 上抄段示例代码过来改装一下就能放在自己的程序中使用:
/
调用方法:
我封装过的函数参数是个CStringList 指针,可以得到一个集合,如果需要的话可能转成自己想使用类型,这里是为了方便在小窗口打印出来,直接显示;
后期就可以通过网络通讯把读到共享列表发给管理端,管理端就知道下面的客户机谁开了共享,共享了些什么...
在没有封堵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 指针,可以得到一个集合,如果需要的话可能转成自己想使用类型,这里是为了方便在小窗口打印出来,直接显示;
后期就可以通过网络通讯把读到共享列表发给管理端,管理端就知道下面的客户机谁开了共享,共享了些什么...
【 本系列会持续更新 请关注公众号 】