9.0、介绍
到目前为止,在本书中,我们已经确定并利用了一些漏洞,这些漏洞是比较容易利用的,也就是说,在利用这些漏洞时,我们并没有被任何预防机制所拦截,比如说防火墙。
在实际渗透测试中,开发人员在努力的构建一个强壮且安全的应用程序,以至于漏洞不是很容易被发现的。要么该应用程序不存在漏洞,要么很难发现漏洞。在这种情况下,我们需要找到相关工具来攻破这种复杂的情况,并且能够识别和利用开发人员认为他们已经防止了的漏洞,可能不是以最优的方式来防护的。
在本章中,我们将讨论集中绕过防护和安全机制的方法,这些机制不会减少漏洞,而是试图隐藏它们或使他们的利用程度更加复杂化,当然这并不是解决安全问题的理想方法。
9.1、如何绕过xss输入验证
开发人员针对xss会进行输入验证,最常见的方法就是设置黑名单,过滤敏感字符。而这种验证方法可能会遗漏掉一些能攻击的字符,所以存在绕过方法。
下面的教程就讲述一些绕过黑名单验证的一些方法。
实战演练
我们将使用dvwa作为实验靶机,并设置安全类型为中。接着设置好burp代理:
1、首先,我们查看一下敏感字符如何被过滤的。如下截图所示,当尝试xss时,html标签会被移除。
2、我们将该请求发送到repeter模块中,进行重放:
3、我们有很多方法绕过这种限制,比如通过改变大小写的方式,将script改为sCriPt即可绕过:
4、根据repeater的回包可以判断xss成功执行:
原理剖析
在这节教程中,我们通过一个简单的方法绕过了脆弱的输入验证,因为大多数编程语言比较字符串都区分大小写,所以这个简单的黑名单无法挡住xss攻击。
另请参阅
使用大小写、各种编码、许多不同的html标签和事件触发xss的方法有很多,所以几乎不可能创建一个全面的黑名单。我们还可以这样绕过:
1、使用不同的html标签,比如<img>,<video>, 和 <div>,或将代码放入src参数或使用事件触发,比如onload、onerror、onmouseover等。
2、嵌套多个标签,比如<scr<script>ipt>,在这个payload中<script>若被删除,前后会重新拼合成一个script标签
3、在payload中尝试不同的编码也可绕过,比如我们将<script>进行url编码,编码后为%3c%73%63%72%69%70%74%3e