xss-lab靶场level1-level10

作者 : admin 本文共2365个字,预计阅读时间需要6分钟 发布时间: 2024-06-17 共1人阅读

level1:
无过滤形式
直接

level2:
htmlspecialchars函数将预定义的小于和大于号转换为html实体
    < (小于)成为 <
    > (大于)成为 >

源代码
 <?php 
ini_set(“display_errors”, 0);
$str = $_GET[“”];
echo “

没有找到和”.htmlspecialchars($str).”相关的结果.

“.’

‘;
?>

这一个只是在文字里设置了,但是input的value并没有
这是最后输出的格式:”<script>window.alert(111)</script>”
所以如果想绕过那么就想办法让程序识别不到小于号
但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号
所以
“> ” <"
前后各自加的内容是为了闭合前后的符号,让中间内容单独出现

$str = $_GET[“”> <""];

> <

htmlspecialchars(> <)

level3:
没有找到和<script>window.alert(11)</script>相关的结果.
“> “” <"
上一句之所以没有用,就是因为value里也被设置了编码所以这个要绕过的是value里的编码
但是只要是大于号都会被编码,所以我们应该去寻找其他注入代码
方法:onfocus代替,然后再利用js伪协议
这样就能取代大于小于号
原理:onfocus事件在元素获得焦点时触发,最常与 、 和 标签一起使用,以上面图片的html标签为例,标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
最后输入框代码变成了这样:

所以再输入之后再点击一下输入框即可注入成功

level4:

可见大于号是直接被去掉了
再看这个代码会发现value后面有双引号,而且双引号是不会被编码或者删掉,所以想法是第三关,但是要在前面加上双引号
”οnfοcus=javascript:alert()

level5:
<input name=keyword  value="alert(123)”>
输入注入代码,会发现第一个srcipt标签加上了下划线
而且
则会
<input name=keyword  value="”>
说明不管输入什么,它都会在第一个标签的中间位置加上下划线

于是我们查看了源代码
$str2=str_replace(“<"

level7:
f12查看页面源代码
<input name=keyword  value="alert(123)”>
发现script直接被替换
尝试双写绕过
“>window.alert(123)<"
查看源代码
$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);

level8:
alert(123)”>友情链接
发现友情链接的href参数被过滤了
script、src
但是href的unicode自动编码
所以想到可以编码绕过
并且使用伪协议
而且如果想要在超链接标签使用那么就用将地址放在href标签里,所以使用js伪协议
javascript:alert()

伪协议概念:
伪协议不同于因特网上所真实存在的协议,如http://,https://,ftp://,
而是为关联应用程序而使用的.如:tencent://(关联QQ),data:(用base64编码来在浏览器端输出二进制文件),还有就是javascript:
我们可以在浏览地址栏里输入”javascript:alert(‘JS!’);”,点转到后会发现,实际上是把javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。
相当于是一个地址或者网址

level9:
1.过滤
$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);

2.html实体编码

‘;
?>

3.判断是否为链接
strpos函数判断字符串中是否有,不论该字符串出现在哪个位置,只要有都为true
<?php
if(false===strpos($str7,’http://’))
{
  echo ‘
友情链接’;
        }
else
{
  echo ‘
友情链接’;
}

其实这个就是比第八关多了一个检查链接合法性的步骤
javascript:alert()/*http://*/

level10:
源代码有如下代码:
$str11 = $_GET[“t_sort”];
$str22=str_replace(“>”,””,$str11);
$str33=str_replace(“<","",$str22);

输入框被隐藏了,怎么办?
有没有什么办法可以显示
只有让type=”text”
οnfοcus=javascript:alert(11)
?t_sort=” οnfοcus=javascript:alert() type=”text’

本站无任何商业行为
个人在线分享 » xss-lab靶场level1-level10
E-->