01-跨站脚本攻击解析材料之一.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
01-跨站脚本攻击解析材料之一

跨站脚本攻击解析(一)form action=http://localhost/test.php method=post input name=name value=scriptalert(123456)/script type=hidden / input name=ss type=submit value=XSS提交测试 / /form 点击“XSS提交测试”按钮,你就又会看到浏览器弹出了可爱的对话框? 持久型XSS 持久型XSS(Persistent)又叫做存储XSS(Stored XSS),与非持久型XSS相反,它是指通过提交恶意数据到存储器(比如数据库、文本文件等),Web应用程序输出的时候是从存储器中读出恶意数据输出到页面的一类跨站脚本漏洞。 看个例子。 下图是某BBS程序没有处理发帖正文中的恶意代码就直接存储到数据库中: 然后读帖子的时候程序从数据库中读出数据,结果数据中含有的恶意代码在浏览器执行了(此处仅演示弹出对话框): 这个漏洞是由于程序会把UBB代码[IMG]javascript:alert(XSS)[/IMG]转换成HTML代码: img src=javascript:alert(XSS) / IE6会解析上面的HTML代码并执行img标签src属性中的JavaScript代码,导致XSS的发生。 持久型XSS多出现在Web邮箱、BBS、社区等从数据库读出数据的正常页面(比如BBS的某篇帖子中可能就含有恶意代码),由于不需要浏览器提交攻击参数,所以其危害往往大于非持久型XSS。 跨站脚本漏洞的出现场景 根据数据输出的不同,跨站脚本漏洞一般会出现在以下4个地方,了解了漏洞出现的场景,对我们认识和修复漏洞是有积极意义的。 输出在HTML页面 前面2.3节的PHP代码就是把数据输出到HTML页面的例子。这种情况比较简单,就是把传入的参数值直接显示在页面,主要就是传入的参数中带有“”和“”符号会被浏览器解析。 输出在HTML属性中 看这样一段代码: ?PHP echo a href=\.$_GET[name].\Enter/a; ? 这段PHP代码的意思就是把得到的name参数输出到一段HTML标记的A标签中,假设name的值是test,那么你将得到这样的页面: a href=testEnter/a 这时我们再武断地给name附上“testscriptalert(123456)/script”是不会造成XSS攻击的,因为脚本会被浏览器认为是href的值,这时候需要稍微动点脑子才行:http://localhost/test2521.php?name=testHi/ascriptalert(123456)/script!-- 得到这样的页面: a href=testHi/ascriptalert(123456)/script!—Enter/a 请注意,蓝色字体为PHP程序输出,而红色字体是我们提交的参数。哈哈,我们提交的“”和“/a”闭合了原来的A标签,然后跟上JavaScript代码,之后的A标签的后部分被--注释掉了。 以上就是传入数据输出到属性中的情况,关键点是我们提交的数据能够闭合属性标签。这个例子是双引号,其实属性也是可以用单引号甚至不用引号的(如果属性的值中没有空格的话就可以不需要引号),道理都是一样的,只要闭合它们就可以了。 输出在JavaScript代码中 JavaScript和HTML结合紧密,所以有时候程序员们就会把参数输出到JavaScript代码中: ?PHP echo script; echo var yourname = .$_GET[name].;; echo /script; ? 分析PHP代码输出的页面,我们很容易构造出XSS攻击测试URL:http://localhost/test2531.php?name=a;alert(123456);// 实际上是我们利用单引号闭合了JavaScript代码的变量赋值,然后再执行我们的alert函数(因为PHP5在默认情况下是会自动对传入的单引号转义的,这里只是为了演示,所以我们认为此处单引号不被转义。即假设PHP的magic_quote_gpc为Off)。 得到的返回页面是这样的: script var yourname = a;alert(123456);//; /script 然后你又看到那个显示123456表示脚本被执行的演示对

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档