某cms两处全站xss漏洞
2020-03-18 10:55:19 Author: xz.aliyun.com(查看原文) 阅读量:172 收藏

1. 前言

在cnvd上看到有人爆了 这款cms的几个sql注入,本想着下载下来复现一下,也算是学习下代码审计,然后下载最新版的发现基本已经被修复了,然后想着能不能找到新的漏洞,最后也就以两处惨淡的xss漏洞收场,大佬勿喷

2.前台反射型xss漏洞

首先给出payload

http://127.0.0.1:81/index.php?a=login&c=member&m=%3Cimg%20src=1%20onerror=alert(1)%3E


从输出形式上来看是没有找到该文件,错误回显导致的问题
首先定位到代码位置 /core/lib/application.class.php文件中的load_controller函数

看到ROUTE_C ROUTE_M 全局搜索,定位到/core/func/basic.fun.php,可以看到传进来的 $var["m"] = ROUTE_M; $var["c"] = ROUTE_C; $var["a"] = ROUTE_A

综上可以看出对通过url传进来的 $m和$filename进行了拼接然后然后去寻找是否存在该路径,并没有对输入的$m和$filename进行过滤直接输出了。

3.后台反射xss漏洞

和前台反射xss类似,只是换了一个调用的函数而已
定位到函数位置:/core/lib/YUNYECMSAdmin.class.php

可以看到是直接拼接了ROUTE_C,也就是url传进来的c参数,这个反射型的xss不论是前台还是后台都是由于直接拼接了url传进来的参数导致的xss

4.前台留言处xss漏洞

url: http://127.0.0.1:81/index.php?a=customform&catid=12

前台增加留言处

XSS payload  <marquee onstart=prompt(1)><marquee>
触发cookie   <input onfocus=prompt(document[`coo`+`kie`])>
此前一直想尝试在xss平台上获取cookie,但是由于过滤了//导致一直没有成功,附上一个不成功的payload,有大佬可以获取cookie,还请不吝赐教
<input onfocus=document.body.appendChild(document[`cr`+`eateElement`](`scr`+`ipt`)).src=http://127.0.0.1`>

首先抓包定位到函数位置为core\app\content\index.php中的formadd()函数,可以看到对传进来的参数都使用了usafestr()函数

在/core/func/core.fun.php定义了该函数 然后跟进到usafestr函数,然后看到过滤了一堆东西

在core\extend\classes\safestring.php中的过滤规则

然后可以看到过滤了很多东西,很高大上,结合模糊测试和白盒审计找到几个没有过滤的可以用来触发xss的,发现基本过滤了onerror alert onmouseover等危险字符,onfocus onstart 可以用

在搜集的xss payload里寻找,找到一个可用的payload

<marquee onstart=prompt(1)><marquee>

在后台可以看下payload形式,是绕过了xss过滤的

触发点在点击删除的时候的确认提醒处

然后在F12查看源代码

5.后台xss漏洞

后台的可触发XSS比较鸡肋,但是如果只是拥有了一个低权限的账户,同时具有写留言的功能,能获取到高权限的cookie,这样就不显的那么鸡肋了
还是以后台的留言处为例

url:http://127.0.0.1:81/admin.php?c=content&a=customform_add&usv_ixIW=egksuBNTW6

跟进到\core\admin\content.php函数中的customform_add() 函数,只对传入进来的catid进行了usafestr过滤,并没有对其他进行过滤,然后payload可以随便写


文章来源: http://xz.aliyun.com/t/7381
如有侵权请联系:admin#unsafe.sh