XSS的挖掘与剖析


二.XSS的挖掘


1.发掘反射型的XSS
1)数据交互的地方最容易产生跨站脚本。因此我们可以着重对网站的输入框、url参数进行测试。
实例:
我们在输入框中输入:xss‘“,但是发现测试代码xss并没有被显示出来?这是为什么?有两种情况:
第一:测试代码被过滤了
第二:程序接收了代码,但是没有显示出来。只能通过查看源文件才能看到。
因此我们测试一下第二种情况,我们查看源文件搜索,我们看到被完整的写入了页面中。那么为什么我们写的代码会被插入到页面中呢?
因为在html语言中,<>表示html标记,不会被浏览器直接显示出来,只有通过查看相应的源文件才能看到。
在页面中我们找到了xss,由此得出此网站没有过滤<>等关键字符,因此我们可以完整的注入一个<script>标签。从而产生一个xss。
重新回到页面我们添加<script>alert(“xss”)<script>,单击搜索按钮,弹出xss对话框。
综上所述,此页面存在xss漏洞。
具体的漏洞成因我们查看一下源文件search.asp可以看出,代码只过滤了一些字符,并没有过滤掉<>
2.发掘持久型的xss
1)对于持久型的xss一般会出现在留言板、博客日志当中,因此我们找到相应网站在留言板中留下<script>alert(“xss”)<script>
,然后我们登陆管理员后台,进去之后发现并没有如期弹框,为什么?一如既往我们查看源文件,我们发现不仅没有被过滤,而且已经插入到了页面当中了,之所以没有被执行,原因是代码被插入到了<textarea>标签当中,然后被浏览器显示出来了,因此我们在构造xss代码的时候应该注意闭合<textarea>标签,所以正确的代码为</textarea><script>alert(“xss”)<script>
以上就是一个完整的xss持久型,并且这个xss只有在管理员查看留言的时候才能触发。因为他攻击的是后台管理员,所以攻击者能够利用此种xss劫持管理员会话而执行任意操作,比如修改密码、添加新闻、备份数据库等。
在这里强调一点就是,对于一些常见的过滤我们可以在网上搜索《XSS过滤绕过速查表》来进行绕过过滤。

**

三、xss构造剖析

**

前言:

我们在这里讲一下xss Expliot的构造,例如如何绕过服务端的xss过滤系统、如何构建健壮的xss利用代码 。通常情况下,为了防御跨站脚本攻击,我们会在web应用程序中设计一个xxs Filter,即跨站脚本过滤器。用于分析用户提交的输入、并消除潜在的跨站脚本攻击、恶意的html或者简单的html格式错误等。
下面我们从攻击者的角度分析一下跨站脚本攻击:
1.1)我们可以利用<>标记注射html/javascript
用户可以随心所欲的引入<>标记,那么他就能操作一个html标签,然后通过<script>标签就能任意的插入由JavaScript编写的恶意脚本代码。
比如:
<script>alert(“xss”)<script>
由此看来我们在写代码的时候就是要过滤掉<>、<script>等字符
2)利用html标签属性值执行xss
很多html标记中的属性都支持:Javascript:[code]为协议的形式,这个特殊的协议类型声明了url主体是任意的Javascript代码,由JavaScript的解释器执行。
所以用户可以利用部分html的部分属性值进行xss:
<table background=“javascript:alert(/xss/)”></table>
<img scr=“javascript:alert(“xss”);”>
但是你要注意:1)并不是所有的浏览器都支持JavaScript伪协议。
2)而且并不是所有的标记属性值都可以产生xss,通常只有引用文件的的属性才能够触发跨站脚本
比如:
herf=
lowsrc=
bgsound=
background=
value=
action=
dynsc=
3)空格回车Tab
前提xss fileter如果把敏感的输入字符插入到黑名单处理,例如对敏感字符:javascript而言,用户可以利用空格、回车、Tab键绕过限制
比如:
<img src=“java script:alert(/xss/)” width=100>
注意Java与script之间的不是空格而是tab键添加的。当然这种技巧不仅局限于tab键,还有回车 空格。
那么为何会出现这种情况?
因为JavaScript语句通常是以分号结尾的,如果Javascript引擎确定一个语句是完整的,而且这一行的结尾有换行符,那么就可以省略分号:
var a=turn
var b=“this is a ture”
如果一行中出现多条语句就必须要用分号。
除了在引号中或者强制结束语句之外,额外的空白无论以何种方式添加都无所谓,比如:
var a=
turn;
引擎没有把换行符解释为语句的结束符,而是接着发现内容,知道遇到分号或者遇到分号为止。
因此,用户可以构造一下代码,
<img scr=java
script:
alert(/xss/)" with=100>

猜你喜欢

转载自blog.csdn.net/weixin_43803070/article/details/89677218
xss