文章首发于:
火线Zone社区(https://zone.huoxian.cn/)
phpems后台登录存在默认用户与密码:peadmin:peadmin。
代码执行漏洞
查看到phpems/xxx/xxx/xxxx/xx.cls.php文件中有eval函数,代码如下,可以看到当blocktype为4的时候执行elseif语句中的代码,html_entity_decode是HTML 实体转换为字符。
全局搜索stripSlashes函数,在phpems/xxx/ev.cls.php文件中,可以看到该函数的作用是去除转义字符。
查看数据库发现block表中存在blocktype字段。
在phpems/xxx/xx/xx/block.cls.php中发现sql语句执行block表。
在phpems/xxx/xx/xx/blocks.master.php文件中发现调用block.cls.php的getBlockById函数和en.cls.php的get函数和stripSlashes函数,在第4步可以看出getBlockById函数是根据id值进行查询。
在phpems/xx/ev.cls.php文件中可以看到过滤函数,在initData函数中使用addSlashes函数进行sql函数过滤,使用htmlspecialchars函数进行xss过滤。get函数是以get传参和stripSlashes函数去掉转义字符。
在phpems/xx/xx/xx/blocks.master.php的change函数,修改blocktype的值。
漏洞:post传参会先使用htmlspecialchars函数把>和<进行HTML实体编码,在利用html_entity_decode进行HTML实体解码,故造成了代码执行漏洞。
xss存储型漏洞
1、当模式为模板模式时存在存储型xss漏洞
漏洞原理:post传参会先使用htmlspecialchars函数把>和<进行HTML实体编码,在利用html_entity_decode进行HTML实体解码,并使用?>和<?php对其进行闭合,造成存储型xss漏洞。
2、当模式为SQL模式时也存在xss漏洞。
在phpemsxxxxxx xx.cls.php文件中可以看到当$block[‘blocktype’] == 3也就是模式为sql模式时执行如下语句。其中$block[‘blockcontent’][‘sql’]的值为0时进入else语句之中,查看到eval函数中执行$tp,而$tp是由$block[‘blockcontent’][‘template’]的值经过HTML实体解码之后得到的。
漏洞原理:post传参会先使用htmlspecialchars函数把>和<进行HTML实体编码,在利用html_entity_decode进行HTML实体解码,并使用?>和<?php对其进行闭合,造成存储型xss漏洞。
【白帽技术交流群】
进群可以与技术大佬互相交流
进群有机会免费领取节假日礼品
进群可以免费观看技术分享直播
识别二维码回复【交流群】进群
【火线zone社区周激励】
2022.2.7 ~ 2022.2.13公告
【相关精选文章】
火线Zone是[火线安全平台]运营的封闭式实战安全攻防社区,研究讨论实战攻防技术,平台向顶尖的白帽子提供安全测试的云端基础设施,目前火线的高级白帽子数量已经近万人,欢迎具备分享和探索精神的白帽子加入火线Zone社区,共建一个有技术氛围的优质社区!
如需转载火线Zone公众号内的文章请联系火线小助手:hxanquan(微信)
微信号
huoxian_zone
点击阅读原文,加入社区,共建一个有技术氛围的优质社区!
原文始发于微信公众号(火线Zone):phpems代码审计