Cscms代码审计-PHP

前言:

事情是这样的,由于我 CNVD 还差一积分就能够兑换京东E卡了,所以找了这个 CMS 看看能不能挖到破绽,运气还是不错的挖到了两个,分别是 SSRF 与文件掩盖 GETSHELL,这才有这篇文章。该 CMS 版本是 4.2。以下破绽均被 CNVD 收录。

环境阐明:

PHP版本用 7.0.9 就好了。

SSRF:

依据功用点定向审计,在后台的工具栏有一个采集功用,依据经历这种功用普通存在 SSRF。
图片[1]-Cscms代码审计-PHP-孤勇者社区
图片[2]-Cscms代码审计-PHP-孤勇者社区
运用 python3 在本地开启简易的 http 效劳。
图片[3]-Cscms代码审计-PHP-孤勇者社区
点击下一步,果不其然存在 SSRF。
图片[4]-Cscms代码审计-PHP-孤勇者社区
停止破绽剖析。
依据 burpsuite 抓到的恳求包很容易定位到代码位置。
图片[5]-Cscms代码审计-PHP-孤勇者社区
在文件 upload/plugins/sys/admin/Collect.php#Collect->add,POST 的参数cjurl 未做平安处置被传入到 $this->caiji->str 办法。
图片[6]-Cscms代码审计-PHP-孤勇者社区
那么我们跟进到 $this->caiji->str 办法,但是 phpstorm 找不到定义该办法的位置。
图片[7]-Cscms代码审计-PHP-孤勇者社区
处理方法,我们能够连续按两下 Shift 键直接寻觅。
图片[8]-Cscms代码审计-PHP-孤勇者社区
跟进到 str 办法后,发现 url 参数被传入 htmlall 办法,继续跟进该办法。
图片[9]-Cscms代码审计-PHP-孤勇者社区
能够看到 htmlall 办法运用了 curl 恳求 url。
图片[10]-Cscms代码审计-PHP-孤勇者社区
根本上有调用 $this->caiji->str 办法的中央都存在 SSRF 破绽。

文件掩盖招致 GETSHELL:

经过敏感函数回溯参数过程的方式找到该破绽。
在 upload/cscms/app/helpers/common_helper.php#write_file 运用了文件写入的敏感函数,跟 SSRF 的 htmlall 是同一个文件。
图片[11]-Cscms代码审计-PHP-孤勇者社区
运用 Ctrl+Shift+F 查找哪些位置调用了 write_file,在 upload/plugins/sys/admin/Plugins.php#Plugins->_route_file 调用了 write_file函数,并且 $note[$key][‘name’] 和 $note[$key][‘url’] 的值是以字符串方式拼接到文件内容的,该内容是注释,我们能够运用换行绕过。
图片[12]-Cscms代码审计-PHP-孤勇者社区
查找哪些位置调用了 _route_file,跟踪 $note 的值能否可控,调用该函数的位置有很多,最终找到一处可应用。在 upload/plugins/sys/admin/Plugins.php#Plugins->setting_save 调用了 _route_file,由于该函数内容有点多,所以我将它拆分红两个界面,一些不重要的内容停止闭合。画红线的位置是调用到 _route_file 必需设置的,能够看到在标蓝色3的位置获取到了 $note 的值,剖析到这里能够开端复现了。
图片[13]-Cscms代码审计-PHP-孤勇者社区
运用 burpsuite 抓取恳求包。
图片[14]-Cscms代码审计-PHP-孤勇者社区
修正恳求包内容写入结构好的代码,能够看到我运用了 %0a 换行去绕过注释。
图片[15]-Cscms代码审计-PHP-孤勇者社区
在 upload/cscms/config/dance/rewrite.php 能够看到胜利写入。
图片[16]-Cscms代码审计-PHP-孤勇者社区
寻觅援用 rewrite.php 的位置,懒得去看代码了,经过点击各个页面,经过不懈努力终于在个人中心的音乐页面找到,所以你需求注册一个会员用户。
图片[17]-Cscms代码审计-PHP-孤勇者社区
重放 burpsuite 抓到的恳求包,胜利输出内容。
图片[18]-Cscms代码审计-PHP-孤勇者社区
到这里其实事情还没有完毕,当我尝试写入歹意内容发现被转义了。
图片[19]-Cscms代码审计-PHP-孤勇者社区
图片[20]-Cscms代码审计-PHP-孤勇者社区
试了 eval、shell_exec 等均被转义,但是 assert 没有被转义,思索到 assert 在PHP7版本之后的问题,我还是需求找一个更好的方法。懒得去看转义的代码了,我依据PHP的动态特性运用以下办法胜利 RCE。
图片[21]-Cscms代码审计-PHP-孤勇者社区

总结:

此次代码审计运用了通用代码审计思绪的两种,第一种:依据功用点定向审计、第二种:敏感函数回溯参数过程,没有用到的是通读全文代码。活用 phpstorm 能够让代码审计的效率大大增加。

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
    • 头像撒及0