当前位置: 首页 > news >正文

HongCMS 审计学习

概述:

刚入手学习代码审计、试着练习和读懂代码,慢慢的一点点的接触审计相关的知识,通过“国家信息安全漏洞库”或许部分漏洞标题和内容信息试着着手学习。

HongCMS是一套开源的轻量级内容管理系统(CMS)。

 

相关信息:

版本:HongCMS_v3.0.0

CNNVD链接地址:http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201806-1362

工具:notepad++ 、Seay源代码审计系统

 

0x01:

 

通过目录大致了解目录结构、其中相关功能:前台(controllers)、install(安装)、public(公共文件)、system(核心相关加载)、includes(功能)。

0x02:

入口文件: /index.php

跟进文件:/includes/core.php

 第8行:

@include(ROOT . 'config/config.php');  加载数据库配置文件

  

第11-17行:主要加载相关的模板文件

function __autoload($class){
	if($class{0} === "S"){
		$file = ROOT . "system/plugins/$class.class.php"; //自动加载系统扩展类
	}else{
		//自动加载模型, 模型类名: name, 文件名必须小写, 文件路径如: ./models/name.php
		$file ="./models/$class.php";
	}
	
	require_once($file);
}

  

第22-23行:

require(ROOT . 'config/settings.php');
require(ROOT . 'system/APP.php');     //加载核心文件

  

跟进文件:/system/APP.php

第134~170行:关键run方法部分

	public static function run(){
		$splitFlag = preg_quote(self::$splitFlag,"/");
		$path_array = array();

		$path = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
		if(!empty($path)){
			if($path[0]=="/") $path=strtolower(substr($path,1));
			$path_array = preg_split("/[$splitFlag\/]/",$path,-1);
		}

		$controller	= !empty($path_array[0]) ? $path_array[0] : self::$defaultController ;
		$action	= !empty($path_array[1]) ? $path_array[1] : self::$defaultAction ;

		$app_file = self::$appDir . "controllers/" . $controller . ".php";
		if(!is_file($app_file)){
			self::debug("file[$app_file] does not exists.", $controller);
			return false;
		}else{
			require_once(realpath($app_file));
		}

		$classname = 'c_' . $controller;
		if(!class_exists($classname, false)){
			self::debug("class[$classname] does not exists.", $controller);
			return false;
		}

		$path_array[0] = $controller;
		$path_array[1] = $action;
		$classInstance = new $classname($path_array);
		if(!method_exists($classInstance,$action)){
			self::debug("method[$action] does not exists in class[$classname].", $controller);
			return false;
		}

		return call_user_func(array(&$classInstance,$action),$path_array);
	}

  

其中加载的是前台公共、相关news、product 前台新闻文章展示。

 

0x03:

这套系统前台相关功能不存相关的利用漏洞、这里记录下自己阅读的过程。

$_GET['id'] 进入以后首先通过构造函数__construct 首先处理 -->ForceIntFrom()函数 跟进:

第178~187行:/includes/functions.global.php

function ForceIntFrom($VariableName, $DefaultValue = 0) {
	if (isset($_GET[$VariableName])) {
		return ForceInt($_GET[$VariableName], $DefaultValue);
	} elseif (isset($_POST[$VariableName])) {
		return ForceInt($_POST[$VariableName], $DefaultValue);
	} else {
		return $DefaultValue;
	}

}

  

该函数的主要用途是鉴别函数传进来是以$_GET、$_POST,继续跟进ForceInt。

第147~150行:

function ForceInt($InValue, $DefaultValue = 0) {
	$iReturn = intval($InValue);
	return ($iReturn == 0) ? $DefaultValue : $iReturn;
}

  

该函数主要作用是对$_GET、$_POST传进来的$InValue做一个intval整数值处理。

通过以上阅读和学习、前台仅有的相关功能文件只有唯一的$_GET['id']一个变量、而且做了数字型的相关处理,不存在漏洞(自己还是比较菜所有没有审计出其他问题)

转载于:https://www.cnblogs.com/xsr7yer/p/9293105.html

相关文章:

  • Mastering KVM Virtualization:第二章 KVM内部原理
  • .bat文件调用java类的main方法
  • docify文档服务器搭建
  • Shell中重定向lt;lt;EOF注意事项
  • C#笔记
  • 第三章 图像的几何变换
  • asp.net给文件分配自己主动编号,如【20140710-1】
  • Python入门经典 以解决计算问题为导向的Python编程 待完好
  • Linuxshell编程
  • 华硕笔记本BIOS设置详解
  • Apache Kafka源码剖析:第7篇 日志存储系列2-FileMessageSet
  • Linux常见命令总结
  • 作用域
  • 二 APPIUM Android自动化 环境搭建(转)
  • [20170713] 无法访问SQL Server
  • 2017前端实习生面试总结
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascript 原型链
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • mac修复ab及siege安装
  • mysql innodb 索引使用指南
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • October CMS - 快速入门 9 Images And Galleries
  • Python爬虫--- 1.3 BS4库的解析器
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Ruby 2.x 源代码分析:扩展 概述
  • Shadow DOM 内部构造及如何构建独立组件
  • ucore操作系统实验笔记 - 重新理解中断
  • vue的全局变量和全局拦截请求器
  • Xmanager 远程桌面 CentOS 7
  • 百度小程序遇到的问题
  • 多线程事务回滚
  • 给新手的新浪微博 SDK 集成教程【一】
  • 将回调地狱按在地上摩擦的Promise
  • 利用jquery编写加法运算验证码
  • 目录与文件属性:编写ls
  • 区块链将重新定义世界
  • 微信开放平台全网发布【失败】的几点排查方法
  • 问题之ssh中Host key verification failed的解决
  • 一个SAP顾问在美国的这些年
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #Java第九次作业--输入输出流和文件操作
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $(selector).each()和$.each()的区别
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)3D模板阴影原理
  • (转)mysql使用Navicat 导出和导入数据库
  • ***测试-HTTP方法
  • .NET delegate 委托 、 Event 事件
  • .NET MVC 验证码
  • .net refrector