易思ESPCMS(2014)敏感函数回溯参数的审计学习
主要是学习尹毅大佬那本审计学习的书的笔记
首先安装好CMS系统信息,如果需要该版本cms的,可以私信我。
Seay工具自动审计
选取一段可能存在漏洞的代码,进入该文件目录下,发现这段代码
function oncitylist() {$parentid = $this->fun->accept('parentid', 'R');$parentid = empty($parentid) ? 1 : $parentid;$verid = $this->fun->accept('verid', 'R');$verid = empty($verid) ? 0 : $verid;$db_table = db_prefix . 'city';$sql = "select * from $db_table where parentid=$parentid";$rs = $this->db->query($sql);
其中
$parentid = $this->fun->accept('parentid', 'R');
可以很清晰的看到变量传递的一个过程,定位一下accept函数
Public文件夹应该是公共函数,进去后可以看到
代码如下
function accept($k, $var = 'R', $htmlcode = true, $rehtml = false) {switch ($var) {case 'G':$var = &$_GET;break;case 'P':$var = &$_POST;break;case 'C':$var = &$_COOKIE;break;case 'R':$var = &$_GET;if (empty($var[$k])) {$var = &$_POST;}break;}$putvalue = isset($var[$k]) ? $this->daddslashes($var[$k], 0) : NULL;return $htmlcode ? ($rehtml ? $this->preg_htmldecode($putvalue) : $this->htmldecode($putvalue)) : $putvalue;}
获取GET、POST、COOKIE参数值后,会将k变量进行daddslashes函数过滤, daddslashes会把单引号(’)、双引号(")、反斜线(\)与 NUL(NULL 字符)进行转义。而在function oncitylist()中数据库查询的语句是这样的,并没有对$parentid进行引号闭合,所以可以构造数字型注入,payload不会被转义
$sql = "select * from $db_table where parentid=$parentid";
那怎么才能找到web页面parentid接口处的url值呢,如下图所示oncitylist函数在importan
类中,对该import类进行全局搜索
定位到important函数处
$archive = indexget('archive', 'R');
$archive = empty($archive) ? 'adminuser' : $archive;$action = indexget('action', 'R');
$action = empty($action) ? 'login' : $action;if (in_array($archive, array('acmessagemain', 'adminuser', 'advertmain', 'adverttypemain', 'albummain', 'article', 'bbsmain', 'bbstypemain', 'callmain','citylist', 'connected', 'createmain', 'createseomain', 'enquirymain', 'filemain', 'filemanage', 'formmain', 'formmessmain', 'language', 'languagepack','lib_menu', 'mailinvite', 'mailsendmain', 'mailtemplatemain', 'management', 'memattmanage', 'membermain', 'memclassmanage', 'modelmanage', 'ordermain','payplug', 'payreceipt', 'powergroup', 'printtemplatemain', 'recommanage', 'seomanage', 'shipplug', 'shipreceipt', 'sitemain', 'skinmain', 'sqlmanage', 'smstemplatemain','subjectmanage', 'templatemain', 'typemanage', 'mobliemain', 'smsmain'))) {if (!file_exists(admin_ROOT . adminfile . "/control/$archive.php")) {exit('Access error!');}include admin_ROOT . adminfile . "/control/$archive.php";$control = new important();$action = 'on' . $action;if (method_exists($control, $action)) {$control->$action();} else {exit('´íÎó£ºÏµÍ³·½·¨´íÎó£¡');}
主要还是这两句
$archive = indexget('archive', 'R');
$archive = empty($archive) ? 'adminuser' : $archive;$action = indexget('action', 'R');
$action = empty($action) ? 'login' : $action;
archive 可控,调用citylist文件里的citilist方法,citilist方法中调用parentid参数。所以构造的payload为
http://127.0.0.1/espcms/adminsoft/index.php?archive=citylist&action=citylist&parentid=1
然后按照常规注入就行
易思ESPCMS(2014)敏感函数回溯参数的审计学习相关推荐
- 布谷鸟哈希函数的参数_系统学习hash算法(哈希算法)
系统学习hash算法(哈希算法) 转载请说明出处. 前言: 关于本文<系统学习hash算法>的由来.在看到了<十一.从头到尾彻底解析Hash 表算法>这篇文章之后,原文中没有暴 ...
- Swift 烧脑体操(二) - 函数的参数
前言 \\ Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说 ...
- [C/C++基础知识] main函数的参数argc和argv
该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助. 一.main()函数参数 通常我们在写主函数时都是vo ...
- 数仓如何设置大小写不敏感函数
本文分享自华为云社区<GaussDB(DWS) 大小写不敏感函数>,作者: 积少成多 . 大小写不敏感函数是指入参忽略大小写的函数,此类函数的主要应用场景是字符串的查询.是否大小写敏感会影 ...
- Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)
文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...
- 函数的参数、返回、调用、递归
一.函数的参数 1.形式参数和实际参数 1.1形式参数 形参出现在被调函数当中,在整个函数体内都可以使用.形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元.调用结束内存单元被释放 ...
- php敏感函数,PHP中的敏感函数
跟安全有关的敏感函数 在代码安全审计中,快速定位敏感函数,有助于帮助我们更快发现漏洞.这里就通过实例方式说明一下敏感函数是如何运行的. 1.eval() 该函数把字符串当做php代码来计算,并且字符串 ...
- Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]
1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...
- python函数用法详解2(变量的作用域(全局变量、局部变量)、共享全局变量、函数返回值、函数的参数(位置参数、关键字参数、默认参数、不定长参数)、拆包、交换变量值、引用、可变和不可变类型)
1. 变量作⽤域 变量作⽤域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量. 局部变量 定义在函数体内部的变量,即只在函数体内部⽣效. def testA(): ...
最新文章
- 【C++】explicit 关键字
- Recurrent Neural Network系列2--利用Python,Theano实现RNN
- Spring.NET学习笔记10——方法的注入(基础篇) Level 200
- 将字符串中的空格用%20替换
- Python3bytes、hex、字符串之间相互转换
- 微信H5支付(基于Java实现微信H5支付)
- vue的v-html使用
- Java - PhantomJS + EChartsConvert实现ECharts图片保存到服务端
- 安卓APK文件结构解析 怎样去除内置广告 及修改图标和文字
- 正则表达式与有限自动机
- 常微分方程 $6 一阶微分方程解的存在唯一性
- 菜鸟的Android之路-02《eclipse新建android project》
- 信息化教学设计教案计算机,信息化教学设计模板
- magedu第一天学习(计算机基础部分)
- 工作后的5种放松方法
- 浅谈nodejs与php设计构思层面上的差异
- CRM系统是什么?它有什么作用?
- 2022届校招Java面试题汇总(含题解)
- 影子系统2008 出现:c0000174,错误位置在11.分区表错误
- WIFI渗透从入门到精通