利用Microsoft.XMLHTTP控件发送COOKIE
2024-05-04 11:02:52
供稿:网友
 
作者:czy <czy82@elong.com> 
出处:http://www.nsfocus.net 
日期:2003-09-03 
(注意由于论坛会对文章中的一些字符作处理,所以最好到 
http://www.chinansl.com/czy/xmlhttp.txt看文章 
http://www.chinansl.com/czy/aspsky5.htm测试代码) 
    跨站脚本攻击想必各位都已经是很熟悉了,但是得到COOKIE的时候一直有一个 
问题:总是要用WINDOW.OPEN弹一个窗体出来然后发送COOKIE,这样隐秘性 
就大打折扣了。以前我想了一个在网页中用insertAdjacentHTML方法来注入HTML语句 
的办法勉强可以作到发送COOKIE不出现IE窗口,但是在实际使用中有时会遇到IE出错。 
    没有更好的办法了吗?以前在研究VBS病毒自动升级的时候用到一个Microsoft.XMLHTTP 
控件(该控件是WIN98/2K上都默认自带的东东,并且它是IE认为safe的控件!),通过它我们 
可以在网页中给网站发送http请求,可以是POST也可以是GET. 
    好了思路已经到这儿来,下面我们可以实战一下,我以ASPSKY 5.0 0320为例子。 
我们知道<IMG SRC="XXXXXXX">在SRC中可以写入vbscript:这样的语句。。比如 
<img src="vbscript:a=(msgbox(now))">,但是我们只能执行一个语句,比如 
<img src="vbscript:a=(msgbox(now)):b=(msgbox(now))">这样都将是错误的! 
怎么办法呢?在VBS中我们可以用EXECUTE语句,在JS中我们可以使用EVAL语! 
比如:<img src="vbscript:execute("a=(msgbox(now)):b=(msgbox("czy""))")"> 
或是<img src="javascript:eval('alert(/'nsfocus/');alert(/'czy/')')"> 
   还没有晕吧?上面你可能会注意到用VBS的execute语句时双引号要换为"这是因为: 
在VBS中单引号要括起字符串,必须是两个单引号代表一个又引号,并且在双引号内! 
所以在execute语句中我们不能用单引号,而直接用"呢,在HTML进行引号匹配的时候 
会和src="后的引号匹配,所以我们只能用"代替了。 
   引号的问题解决了,在实际应用中ASPSKY还会对我们的代码进行处理: 
1:如果发现script字串,会在前面加上一个空格 
2:如果发现http字串会认为是一个URL,并在两边加上<A>元素 
3:如果发现空格会用 代替 
  解决问题: 
1:vbscript用vbsCript代替 
2:http用,""ht""+""tp...代替(vbs中引号括引号里面的应用多一对,+代表连接符) 
3:空格用 代替(注不是) 
   在最后就是发送COOKIE的问题: 
1:控件在本地可以GET,POST任意的网站,但是在网页中竟然只能 
GET,POST当前服务器。。。。要不然IE就会说拒绝仿问! 
2:cookie中不能有&等在URL中有特殊交意的字符 
  解决问题: