0x00 前言

网太CMS PHP版 基于PHP+mysql的技术架构,php环境版本支持 php 5.3 到 php 7.3,建议用 php 7.1~7.3。

源码下载:
http://d.otcms.com/php/OTCMS_PHP_V7.16.zip

软件架构
非MVC架构
页面:smarty
数据库:Mysql

0x01 反射型XSS1

inc\classJS.php,发现该文件定义了一些用于js弹窗的方法。一些方法的可控字符串被AlertFilter()方法包裹了。

AlertFilter()方法将英文双引号替换成中文双引号,无法使用英文双引号就没法闭合alert(),那么使用了AlertFilter()是没有XSS的。

这里有一些弹窗方法没有使用AlertFilter(),例如HrefEnd(),找找使用的位置。

找到使用HrefEnd()的位置。

users_deal.php里backURL可控且没有做过滤。

构造Payload,为了防止document.location.href跳转,将它的值设置为#号即可。

测试触发XSS。
Payload:http://localhost/users_deal.php?backURL=%23%22%3balert(1);//#

0x02 反射型XSS2

inc\classAreaApp.php,发现了一处简单的XSS。

构造Payload测试触发反射型XSS。
Payload:http://localhost/wap/users/p.php?m=sendPhoneForm&dataID=7866&theme=1%22&_=1706170896361&type=%22%3E%3Cscript%3Ealert(1);%3C/script%3E

0x03 反射型XSS3

wap\users\read.php,有一处获取城市信息的功能。

跟进到inc\classProvCity.php#GetDeal(),可以看到获取了两个参数idName、prov。

继续跟进到inc\classProvCity.php#GetCityOptionJs(),idName被拼接之后返回给echo进行输出了。

构造Payload测试触发XSS。
Payload:http://localhost/wap/users/read.php?m=getCityData&idName=%3Cscript%3Ealert(1);%3C/script%3E

0x04 反射型XSS4

apiRun.php#AutoRun()看到可疑操作。

找到$mode变量是从$_GET获取且无过滤。

构造Payload,可以通过";前面的内容,然后使用//注释后续内容,中间则是XSS的内容。

构造Payload测试触发XSS。
Payload:http://localhost/apiRun.php?mode=%22;alert(1);//&mudi=autoRun

apiRun.php#AutoRunBig()有同样的问题。

0x05 SSRF1

用Xcheck找到一处SSRF,在inc\QrReader\QrReader.php#__construct()里。如果file_get_contents获取的内容不是图片,它的返回值在交给imagecreatefromstring处理时会引发报错,所以这里只能SSRF。

根据Xcheck路径跟踪表,QrReader对象在admin\readDeal.php#ReadQrCode()被创建,传入了可控参数img

可以利用回显的延迟来对内网进行探测。

0x06 SSRF2

用Xcheck找到第二处SSRF,在inc\classReqUrl.php#UseCurl()

根据Xcheck路径跟踪表,UseCurl()inc\classReqUrl.php#UseAuto()被使用。

接着按路径跟踪表,在admin\read.php#GetSignal()里调用了UseAuto(),可以看到获取了参数signalUrl

这里同样只能通过回显的延迟来对内网进行探测。

0x07 SSTI

在后台有模板管理功能,编辑首页index.html试一下。

{7*7}直接以字符串的方式显示。

重新看一下,看到{}内的开头内容要为otcms:,按照这个样式进行修改。

重新访问,可以看到表达式被执行了。

它使用的模板引擎是Smarty,可以使用{otcms:$smarty.version}查看一下Smarty的版本。

通过上述内容已经可以确认这里存在SSTI漏洞了,关于Smarty的SSTI漏洞,本人之前在先知发布过一篇Smarty 最新 SSTI 总结,针对这个版本我们可以使用CVE-2021-26119来RCE。
将构造好的Payload写入index.html。

测试触发RCE。

分析一下代码,通过抓包找到功能代码。

admin\template_deal.php#AddOrRevFile()很简单可以看到fileContent没做任何防范SSTI的操作,针对文件名倒是做了许多处理。


点击收藏 | 0 关注 | 1 打赏
  • 动动手指,沙发就是你的了!
登录 后跟帖