前言
上一篇讲了XSS漏洞的原理分类及危害等基础内容,今天来剖析下如何构造代码进行攻击。
一. 利用<>标记注射HTML/JavaScript
因为目标网站对用户输入的不过滤,导致用户可以直接引用<>等标记创建新的HTML标签。任意输入JavaScript或VbScript编写的恶意代码。
例:<script>alert("test")</script>
二.利用HTML标签属性值执行XSS
有时目标网站会禁止用户创建新的HTML标记,但是用户可以利用已有的HTML标记,添加或修改属性进行xss注入。如下:
<table backgroup="javascript:alert(/XSS/)"></table> <img src="javascript:alert("XSS"); ">
注:因为不是所有的浏览器都会识别JavaScript所以这个方法有一定局限性,也不是所有属性都支持XSS注入。
一些支持xss注入的属性:
href=lowsrc=bgsound=background=value=action=dynsrc=<a href="javascript:alert("XSS") "> XSS </a><bgsound src="javascript:alert("XSS"); ">
三.空格回车TAB
一些稍大的网站会使用XSS Filter进行防御,但是有时仅会转义敏感字符或把敏感字符加入黑名单中,这类型的网站攻击者可以通过使用空格、回车或TAB键绕过。
<img src="javas cript:alert(/XSS/)" width=100>
注:javas和script之间的间隔不是空格键,而是用TAB键添加的。
使用关键字拆分的技巧,用户就能突破过滤器的限制,当然这种技巧不局限在TAB键,还可以使用回车键、空格之类的其他键。
JavaScript语句通常以分号结尾,如果JavaScript引擎确定一个语句是完整的,而这一行的结尾有换行符,那么就可以省略分号:
var a=true
var b="andrew"
如果同一行中有多个语句,那么每个语句就必须使用分号来结束:
var a=true;var b="andrew";
除了在引号中分隔单词或强制结束语句之外,额外的空白无论以何种方式添加都无所谓。
var a="hello world";
alert(a);
浏览器不会吧换行符等视为结束。所以JavaScript会继续处理发现的内容,直到遇到一个分号或发现语句完整为止。
攻击者可以构造下面的代码形式绕过系统对JavaScript等关键字的过滤:
<img src="javas cript: alert(/XSS/) width=100">
使用以回车符分割关键字(拆分关键字)的技巧,成功执行了跨站脚本代码。
四.对标签属性值转码
ASCII,即美国信息交互标准代码,是目前计算机最常用的编码标准。因为计算机只能接受数字信息,ASCII码将字符作为数字来表述,以便计算机能够接受和处理。
可以把XSS转换成ASCII代码:
<img src="javascript:alert(/xss/);">
替换为:
<img src="javascript:alert(/xss/);">
五.产生自己的事件
JavaScript与HTML之间的交互是通过事件来实现的,事件就是用户或浏览器自身执行的某个动作,比如click、mouseover、load等,而响应事件的函数也就叫做事件处理函数。
我们把事件分为3个不同的类别:
1)用户接口(鼠标、键盘)
2)逻辑(处理的结果)
3)变化(对文档进行修改)
事件可以出发对JavaScript代码的执行,如
<img src="#" οnerrοr=alert(/XSS/)>
事件类型有:
onresume
onreverse
onrowdelete
onrowinserted
onseek
onsynchrestored
六.利用CSS跨站
使用CSS样式表执行JavaScript具有隐蔽、灵活多变等特点,缺点为各浏览器之间不能通用,甚至可能同一浏览器不同版本之间都不能通用。
使用CSS直接执行JavaScript代码的示例如下:
<div style="background-image:url(javascript:alert('xss'))"> <style> body{background-image:url("javascript:alert('xss')");} </style>
IE5及以后版本支持在CSS中使用expression,使用expression同样可以触发XSS漏洞。
<div style="width:expression(alert('xss'));"> <img src="#" style="xss:expression(alert(/xss/));"> <style> body{background-image:expression(alert("xss"));} </style>
本文来源于:渗透测试之XSS(2)-变化吧门户
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧门户观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论