最近的学习速度挺快的,对于寒假的计划是对于各种知识点都了解大概并且基本懂得原理,在开学之后对相关书籍深入研究!
这里我就先总结下几个XSS应用的例子吧。
一.利用< >标记注射html / javascript
如果可以随心所欲引入< >标记,那么就可以通过script输入有javasript编写的恶意脚本代码。
eg:<script>alert("你妹的")</script>
所以说xss filter首当其冲要过滤转义的就是< >,<script>等字符
二.利用html标签属性值执行xss
很多html标签属性都支持javascript:[coed]伪协议的形式。关于这个伪协议做下说明:“真”协议用来在因特网上的计算机之间传输数据包,如HTTP协议(http://)、FTP协议(ftp://)等;而伪协议则是一种非标准化的协议,JavaScript:伪协议让我们通过一个链接来调用JavaScript函数。
eg:(用伪协议调用popUp函数)<a href = "javascript:popUp('http://www.example.com/');">Example</a>
ps:在支持javascript:伪协议的浏览器中能正常运行,如ie6。
这种方法由于不是所有的浏览器都支持伪协议所以就有了局限性,而且也不是所有的标记的属性值都能产生xss,通常只有引用文件的属性才能出发xss,如这些属性:href , lowsrc , bgsound , action , dynsrc.......
那么这里用户就可以利用部分html标记的属性值来进行XSS,下面是个例子:
<img src="javascript:alert("你妹的");">
<a href="javascript:alert("Web")">xss</a>
所以xss filter就也要过滤javascript,VBscript等关键字。
三.空格回车Tab
那么当xss filter把< >,javascript都过滤之后,用户仍然能够通过空格回车Tab键绕过限制。
eg:<img src="javas cript:alert("安全")"width=100>
那么为什么会这样呢??javascript语句通常以分号结尾,如果javascript引擎确定一个语句是完整的,而这一行的结尾是换行符,那么就可以省略分号。这里要注意引擎不会把换行符解释为语句的终止符,毕竟并不是一个完整的语句,引擎会继续处理发现的的内容,知道遇到分号或者发现语句完整。因此用户可以像下面这种例子一样构造代码绕过限制。eg:
<img src="javas
cript:
alert("还是") width=100>
这样用回车符就可以成功执行xss了.
四.对标签属性值转码
除了上述方法,对于html标记属性值的过滤用户还可以通过编码处理来绕过限制,因为html中属性值本身就支持ASCII码形式。
eg:
<img src="javascript:alert("挺难的");"> ps:上面替换成下面就ok了
<img src="javascriptt:alert("挺难的");">
五.产生自己的事件(在不能依靠属性值跨站的基础上)
由于javascript和html之间的交互是通过事件来实现的,事件就是用户或者浏览器自身执行的某个动作,比如click,mouseover(当鼠标指针移动到图像上时执行一段 JavaScript),load等,而响应事件的函数也就叫做事件处理函数。
eg:
<input type="button" value="click me" οnclick="alert("click me")"/>
这是一个html代码中的事件处理程序,运行代码,当点击click me之后会出发onclick事件,然后执行当中的javascript代码。
事件能说明用户何时做了某些事情或者页面何时加载完毕,事件有三个不同的类别:用户接口(鼠标,键盘),逻辑(处理的结果),变化(对文档进行修改)。既然事件能够让javascript运行,那么也就说明用户能够用它执行xss.
<img src="#" οnerrοr=alert("但是")> 这里的onerror是img标记的一个事件,只要页面中发生错误,就触发该事件
<div style="background-color:red" οnmοuseenter="alert("安全")">xss</div> onmouseenter当鼠标进入选区执行代码
-------=------------=----------------------------=-------------------------=----------------------------=------------------------------=------------------------------=-------------------------=----------------------=-
Shellcode的调用
shellcode(指利用一个漏洞时所执行的代码)
exploit(指完整编好的漏洞利用工具)
poc(一段证明漏洞存在的代码片段)
在传统xss运用之中,shellcode一般写进页面中直接执行,不过实际环境中会遇到很多阻挠,比如服务器端程序的过滤,输入字符有长度限制等。所以攻击者常常把shellcode写在远程服务器上,然后使用<script>标签对其进行调用。