前言
在看这篇文章之前,你需要对Js有一定的了解。如果不了解的话,建议先去学Js脚本。本文可以绕过
JavaScript能做什么?
- 嵌入动态文本于HTML页面。
- 对浏览器事件做出响应。
- 读写HTML元素。
- 在数据被提交到服务器之前验证数据。
- 检测访客的浏览器信息。
- 控制cookies,包括创建和修改等。
- 基于Node.js技术进行服务器端编程。
通俗来说就是js可以获取和控制cookie。
XSS攻击
所谓的XSS就是利用搜索、评论、留言等手段尝试在html页面中插入js以达到我们的js脚本能在页面内成功运行,至于插入成功后能干嘛,请看上面科普。
常见的xss攻击类型
这里小编写了一个php演示小程序
模拟留言
我们尝试提交留言内容:test 并点击提交 ,可以看到输出内容。
我们查看源代码。
可以看到我们输出后的内容在这个<br>标签后面 那如果我们提交 <script>alert(‘xss’)</script>
在没有过滤的情况下,上图中的test 即变为 <script>alert(‘xss’)</script>
在Hmtl中,这行代码是成立的,也就是我们的Js弹窗脚本能成功运行
这就是最简单的留言板或者评论插入XSS的原理,这个时候基本上就可以确定存在xss漏洞。
利用输出的环境来构造代码
下面是代码的页面
这段代码的作用是把第一个输入框的字符串,输出到第二个输入框。我们输入1,那么第二个input里的value值就是1,下面是页面的截图和源代码的截图(这里我输入下面的代码来测试)
<script>alert(‘xss’)</script>
明显的可以看到,并没有弹出对话框,大家可能会疑惑为什么没有弹窗呢,我们来看看源代码
我们看到我们输入的字符串被输出到第15行input标签里的value属性里面,被当成value里的值来显现出来,所以并没有弹窗,这时候我们该怎么办呢?聪明的人已经发现了可以在
<script>alert('xss')</script>
前面加个”>来闭合input标签。所以应该得到的结果为
成功弹窗了,我们在看看这时的页面
看到后面有第二个input输入框后面跟有”>字符串,为什么会这样呢,我们来看看源代码
这时可以看到我们构造的代码里面有两个”>,第一个”>是为了闭合input标签,所以第二个”>就被抛弃了,因为html的容错性高,所以并没有像php那样出现错误,而是直接把多余的字符串来输出了,有的人是个完美主义者,不喜欢有多余的字符串被输出,这时该怎么办呢?
这里我问大家一个问题,我之前说的xss代码里,为什么全是带有标签的。难道就不能不带标签么?!答:当然可以。既然可以不用标签,那我们就用标签里的属性来构造XSS,这样的话,xss代码又少,又不会有多余的字符串被输出来。
还是这个环境,但是不能使用标签,你应该怎么做。想想input里有什么属性可以调用js,html学的好的人,应该知道了,on事件,对的。我们可以用on事件来进行弹窗,比如这个xss代码 我们可以写成
” onclick=”alert('xss')
这时,我们在来试试,页面会发生什么样的变化吧。
没有看到弹窗啊,失败了么?答案当然是错误的,因为onclick是鼠标点击事件,也就是说当你的鼠标点击第二个input输入框的时候,就会触发onclick事件,然后执行alert('xss')代码。我们来试试看
当我点击后,就出现了弹窗,这时我们来看看源代码吧
第15行,value值为空,当鼠标点击时,就会弹出对话框。这里可能就会有人问了,如果要点击才会触发,那不是很麻烦么,成功率不就又下降了么。我来帮你解答这个问题,on事件不止onclick这一个,还有很多,如果你想不需要用户完成什么动作就可以触发的话,i可以把onclick改成
Onmousemove 当鼠标移动就触发
Onload 当页面加载完成后触发
还有很多,我这里就不一一说明了,有兴趣的朋友可以自行查询下。
别以为就这样结束了,还有一类环境不能用上述的方法,
那就是如果在[ textarea ]标签里呢?!或者其他优先级比script高的呢?
就下面这样
这时我们该怎么办呢?既然前面都说了闭合属性和闭合标签了,那能不能闭合完整的标签呢,答案是肯定的。我们可以输入下面的代码就可以实现弹窗了。
</textarea><script>alert(‘xss’)</script>
0×04 过滤的解决办法
只要能运行我们的js就OK,比如用img标签或者a标签。我们可以这样写
<img scr=1 onerror=alert(‘xss’)>当找不到图片名为1的文件时,执行alert(‘xss’)
<a href=javascrip:alert(‘xss’)>s</a> 点击s时运行alert(‘xss’)
<iframe src=javascript:alert(‘xss’);height=0 width=0 /><iframe>利用iframe的scr来弹窗
<img src=“1” onerror=eval(“x61x6cx65x72x74x28x27x78x73x73x27x29”)></img>过滤了alert来执行弹窗
思路无止尽.总结一句话:xss就是在页面执行你想要的js
评论留言