使用 Ctrl+Shift+F 查找哪些位置调用了 write_file , 在 upload/plugins/sys/admin/Plugins.php#Plugins->_route_file 调用了 write_file函数 , 并且 note[key
[‘name’
和 note[key
[‘url’
的值是以字符串方式拼接到文件内容的 , 该内容是注释 , 我们可以使用换行绕过 。
查找哪些位置调用了 _route_file , 跟踪 $note 的值是否可控 , 调用该函数的位置有很多 , 最终找到一处可利用 。 在 upload/plugins/sys/admin/Plugins.php#Plugins->setting_save 调用了 _route_file , 由于该函数内容有点多 , 所以我将它拆分成两个界面 , 一些不重要的内容进行闭合 。 画红线的位置是调用到 _route_file 必须设置的 , 可以看到在标蓝色3的位置获取到了 $note 的值 , 分析到这里可以开始复现了 。
使用 burpsuite 抓取请求包 。
修改请求包内容写入构造好的代码 , 可以看到我使用了 %0a 换行去绕过注释 。
在 upload/cscms/config/dance/rewrite.php 可以看到成功写入 。
寻找引用 rewrite.php 的位置 , 懒得去看代码了 , 通过点击各个页面 , 经过不懈努力终于在个人中心的音乐页面找到 , 所以你需要注册一个会员用户 。
重放 burpsuite 抓到的请求包 , 成功输出内容 。
到这里其实事情还没有结束 , 当我尝试写入恶意内容发现被转义了 。
试了 eval、shell_exec 等均被转义 , 但是 assert 没有被转义 , 考虑到 assert 在PHP7版本之后的问题 , 我还是需要找一个更好的办法 。 懒得去看转义的代码了 , 我根据PHP的动态特性使用以下方法成功 RCE 。
总结:此次代码审计使用了通用代码审计思路的两种 , 第一种:根据功能点定向审计、第二种:敏感函数回溯参数过程 , 没有用到的是通读全文代码 。 活用 phpstorm 可以让代码审计的效率大大增加 。
相关经验推荐
- 网络安全|2022年桌面清单之外设篇,无线键鼠+双麦克风+2TB移动固态硬盘
- PHP|建站常用软件PhpStudy V8.1图文安装教程(Windows版)超详细
- 网络安全|反诈小知识,提防宵小 提升安全观念
- 网络安全|终于决定了,苹果彻底放弃屏下指纹,iOS15.4立下汗马功劳
- 网络安全|手机测试游戏《原神》又遇挑战!国产游戏手机全面超越iPhone成神
- 网络安全|直播的形式定位
- 网络安全|赶紧关掉手机这4个功能!一直在泄露隐私,千万要放心上了
- 网络安全|iPhone透明组件是什么 苹果透明组件设置方法
- 网络安全|全面屏+A15+5G3299元,性价比之王还看iPhoneSE3
- 网络安全|深度学习也能不玩大数据?小企业训练大模型有新解
